@redmix/auth 0.0.1

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.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -0
  3. package/dist/AuthContext.d.ts +69 -0
  4. package/dist/AuthContext.d.ts.map +1 -0
  5. package/dist/AuthContext.js +7 -0
  6. package/dist/AuthImplementation.d.ts +49 -0
  7. package/dist/AuthImplementation.d.ts.map +1 -0
  8. package/dist/AuthImplementation.js +0 -0
  9. package/dist/AuthProvider/AuthProvider.d.ts +12 -0
  10. package/dist/AuthProvider/AuthProvider.d.ts.map +1 -0
  11. package/dist/AuthProvider/AuthProvider.js +83 -0
  12. package/dist/AuthProvider/AuthProviderState.d.ts +13 -0
  13. package/dist/AuthProvider/AuthProviderState.d.ts.map +1 -0
  14. package/dist/AuthProvider/AuthProviderState.js +18 -0
  15. package/dist/AuthProvider/ServerAuthProvider.d.ts +23 -0
  16. package/dist/AuthProvider/ServerAuthProvider.d.ts.map +1 -0
  17. package/dist/AuthProvider/ServerAuthProvider.js +43 -0
  18. package/dist/AuthProvider/useCurrentUser.d.ts +3 -0
  19. package/dist/AuthProvider/useCurrentUser.d.ts.map +1 -0
  20. package/dist/AuthProvider/useCurrentUser.js +31 -0
  21. package/dist/AuthProvider/useForgotPassword.d.ts +3 -0
  22. package/dist/AuthProvider/useForgotPassword.d.ts.map +1 -0
  23. package/dist/AuthProvider/useForgotPassword.js +18 -0
  24. package/dist/AuthProvider/useHasRole.d.ts +3 -0
  25. package/dist/AuthProvider/useHasRole.d.ts.map +1 -0
  26. package/dist/AuthProvider/useHasRole.js +34 -0
  27. package/dist/AuthProvider/useLogIn.d.ts +5 -0
  28. package/dist/AuthProvider/useLogIn.d.ts.map +1 -0
  29. package/dist/AuthProvider/useLogIn.js +22 -0
  30. package/dist/AuthProvider/useLogOut.d.ts +4 -0
  31. package/dist/AuthProvider/useLogOut.d.ts.map +1 -0
  32. package/dist/AuthProvider/useLogOut.js +21 -0
  33. package/dist/AuthProvider/useReauthenticate.d.ts +5 -0
  34. package/dist/AuthProvider/useReauthenticate.d.ts.map +1 -0
  35. package/dist/AuthProvider/useReauthenticate.js +57 -0
  36. package/dist/AuthProvider/useResetPassword.d.ts +3 -0
  37. package/dist/AuthProvider/useResetPassword.d.ts.map +1 -0
  38. package/dist/AuthProvider/useResetPassword.js +18 -0
  39. package/dist/AuthProvider/useSignUp.d.ts +5 -0
  40. package/dist/AuthProvider/useSignUp.d.ts.map +1 -0
  41. package/dist/AuthProvider/useSignUp.js +20 -0
  42. package/dist/AuthProvider/useToken.d.ts +3 -0
  43. package/dist/AuthProvider/useToken.d.ts.map +1 -0
  44. package/dist/AuthProvider/useToken.js +15 -0
  45. package/dist/AuthProvider/useValidateResetToken.d.ts +3 -0
  46. package/dist/AuthProvider/useValidateResetToken.d.ts.map +1 -0
  47. package/dist/AuthProvider/useValidateResetToken.js +18 -0
  48. package/dist/authFactory.d.ts +15 -0
  49. package/dist/authFactory.d.ts.map +1 -0
  50. package/dist/authFactory.js +16 -0
  51. package/dist/cjs/AuthContext.d.ts +69 -0
  52. package/dist/cjs/AuthContext.d.ts.map +1 -0
  53. package/dist/cjs/AuthContext.js +41 -0
  54. package/dist/cjs/AuthImplementation.d.ts +49 -0
  55. package/dist/cjs/AuthImplementation.d.ts.map +1 -0
  56. package/dist/cjs/AuthImplementation.js +16 -0
  57. package/dist/cjs/AuthProvider/AuthProvider.d.ts +12 -0
  58. package/dist/cjs/AuthProvider/AuthProvider.d.ts.map +1 -0
  59. package/dist/cjs/AuthProvider/AuthProvider.js +117 -0
  60. package/dist/cjs/AuthProvider/AuthProviderState.d.ts +13 -0
  61. package/dist/cjs/AuthProvider/AuthProviderState.d.ts.map +1 -0
  62. package/dist/cjs/AuthProvider/AuthProviderState.js +43 -0
  63. package/dist/cjs/AuthProvider/ServerAuthProvider.d.ts +23 -0
  64. package/dist/cjs/AuthProvider/ServerAuthProvider.d.ts.map +1 -0
  65. package/dist/cjs/AuthProvider/ServerAuthProvider.js +78 -0
  66. package/dist/cjs/AuthProvider/useCurrentUser.d.ts +3 -0
  67. package/dist/cjs/AuthProvider/useCurrentUser.d.ts.map +1 -0
  68. package/dist/cjs/AuthProvider/useCurrentUser.js +55 -0
  69. package/dist/cjs/AuthProvider/useForgotPassword.d.ts +3 -0
  70. package/dist/cjs/AuthProvider/useForgotPassword.d.ts.map +1 -0
  71. package/dist/cjs/AuthProvider/useForgotPassword.js +42 -0
  72. package/dist/cjs/AuthProvider/useHasRole.d.ts +3 -0
  73. package/dist/cjs/AuthProvider/useHasRole.d.ts.map +1 -0
  74. package/dist/cjs/AuthProvider/useHasRole.js +58 -0
  75. package/dist/cjs/AuthProvider/useLogIn.d.ts +5 -0
  76. package/dist/cjs/AuthProvider/useLogIn.d.ts.map +1 -0
  77. package/dist/cjs/AuthProvider/useLogIn.js +46 -0
  78. package/dist/cjs/AuthProvider/useLogOut.d.ts +4 -0
  79. package/dist/cjs/AuthProvider/useLogOut.d.ts.map +1 -0
  80. package/dist/cjs/AuthProvider/useLogOut.js +45 -0
  81. package/dist/cjs/AuthProvider/useReauthenticate.d.ts +5 -0
  82. package/dist/cjs/AuthProvider/useReauthenticate.d.ts.map +1 -0
  83. package/dist/cjs/AuthProvider/useReauthenticate.js +81 -0
  84. package/dist/cjs/AuthProvider/useResetPassword.d.ts +3 -0
  85. package/dist/cjs/AuthProvider/useResetPassword.d.ts.map +1 -0
  86. package/dist/cjs/AuthProvider/useResetPassword.js +42 -0
  87. package/dist/cjs/AuthProvider/useSignUp.d.ts +5 -0
  88. package/dist/cjs/AuthProvider/useSignUp.d.ts.map +1 -0
  89. package/dist/cjs/AuthProvider/useSignUp.js +44 -0
  90. package/dist/cjs/AuthProvider/useToken.d.ts +3 -0
  91. package/dist/cjs/AuthProvider/useToken.d.ts.map +1 -0
  92. package/dist/cjs/AuthProvider/useToken.js +39 -0
  93. package/dist/cjs/AuthProvider/useValidateResetToken.d.ts +3 -0
  94. package/dist/cjs/AuthProvider/useValidateResetToken.d.ts.map +1 -0
  95. package/dist/cjs/AuthProvider/useValidateResetToken.js +42 -0
  96. package/dist/cjs/authFactory.d.ts +15 -0
  97. package/dist/cjs/authFactory.d.ts.map +1 -0
  98. package/dist/cjs/authFactory.js +40 -0
  99. package/dist/cjs/getCurrentUserFromMiddleware.d.ts +2 -0
  100. package/dist/cjs/getCurrentUserFromMiddleware.d.ts.map +1 -0
  101. package/dist/cjs/getCurrentUserFromMiddleware.js +47 -0
  102. package/dist/cjs/index.d.ts +11 -0
  103. package/dist/cjs/index.d.ts.map +1 -0
  104. package/dist/cjs/index.js +39 -0
  105. package/dist/cjs/package.json +1 -0
  106. package/dist/cjs/useAuth.d.ts +6 -0
  107. package/dist/cjs/useAuth.d.ts.map +1 -0
  108. package/dist/cjs/useAuth.js +78 -0
  109. package/dist/getCurrentUserFromMiddleware.d.ts +2 -0
  110. package/dist/getCurrentUserFromMiddleware.d.ts.map +1 -0
  111. package/dist/getCurrentUserFromMiddleware.js +23 -0
  112. package/dist/index.d.ts +11 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +14 -0
  115. package/dist/package.json +1 -0
  116. package/dist/useAuth.d.ts +6 -0
  117. package/dist/useAuth.d.ts.map +1 -0
  118. package/dist/useAuth.js +43 -0
  119. package/package.json +110 -0
@@ -0,0 +1,3 @@
1
+ import type { AuthImplementation } from '../AuthImplementation.js';
2
+ export declare const useToken: (authImplementation: AuthImplementation) => () => Promise<string | null>;
3
+ //# sourceMappingURL=useToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToken.d.ts","sourceRoot":"","sources":["../../../src/AuthProvider/useToken.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAElE,eAAO,MAAM,QAAQ,uBAAwB,kBAAkB,iCAgB9D,CAAA"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var useToken_exports = {};
20
+ __export(useToken_exports, {
21
+ useToken: () => useToken
22
+ });
23
+ module.exports = __toCommonJS(useToken_exports);
24
+ var import_react = require("react");
25
+ const useToken = (authImplementation) => {
26
+ return (0, import_react.useCallback)(async () => {
27
+ try {
28
+ const token = await authImplementation.getToken();
29
+ return token;
30
+ } catch (e) {
31
+ console.error("Caught internal:", e);
32
+ return null;
33
+ }
34
+ }, [authImplementation]);
35
+ };
36
+ // Annotate the CommonJS export names for ESM import in node:
37
+ 0 && (module.exports = {
38
+ useToken
39
+ });
@@ -0,0 +1,3 @@
1
+ import type { AuthImplementation } from '../AuthImplementation.js';
2
+ export declare const useValidateResetToken: <TUser, TRestoreAuth, TLogInOptions, TLogIn, TLogOutOptions, TLogOut, TSignUpOptions, TSignUp, TForgotPassword, TResetPasswordOptions, TResetPassword, TValidateResetToken, TClient>(authImplementation: AuthImplementation<TUser, TRestoreAuth, TLogInOptions, TLogIn, TLogOutOptions, TLogOut, TSignUpOptions, TSignUp, TForgotPassword, TResetPasswordOptions, TResetPassword, TValidateResetToken, TClient>) => (resetToken: string | null) => Promise<TValidateResetToken>;
3
+ //# sourceMappingURL=useValidateResetToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useValidateResetToken.d.ts","sourceRoot":"","sources":["../../../src/AuthProvider/useValidateResetToken.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAElE,eAAO,MAAM,qBAAqB,GAChC,KAAK,EACL,YAAY,EACZ,aAAa,EACb,MAAM,EACN,cAAc,EACd,OAAO,EACP,cAAc,EACd,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,OAAO,sBAEa,kBAAkB,CACpC,KAAK,EACL,YAAY,EACZ,aAAa,EACb,MAAM,EACN,cAAc,EACd,OAAO,EACP,cAAc,EACd,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,OAAO,CACR,kBAGoB,MAAM,GAAG,IAAI,iCAWnC,CAAA"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var useValidateResetToken_exports = {};
20
+ __export(useValidateResetToken_exports, {
21
+ useValidateResetToken: () => useValidateResetToken
22
+ });
23
+ module.exports = __toCommonJS(useValidateResetToken_exports);
24
+ var import_react = require("react");
25
+ const useValidateResetToken = (authImplementation) => {
26
+ return (0, import_react.useCallback)(
27
+ async (resetToken) => {
28
+ if (authImplementation.validateResetToken) {
29
+ return await authImplementation.validateResetToken(resetToken);
30
+ } else {
31
+ throw new Error(
32
+ `Auth client ${authImplementation.type} does not implement this function`
33
+ );
34
+ }
35
+ },
36
+ [authImplementation]
37
+ );
38
+ };
39
+ // Annotate the CommonJS export names for ESM import in node:
40
+ 0 && (module.exports = {
41
+ useValidateResetToken
42
+ });
@@ -0,0 +1,15 @@
1
+ import type { CurrentUser } from './AuthContext.js';
2
+ import type { AuthImplementation } from './AuthImplementation.js';
3
+ export type CustomProviderHooks = {
4
+ useCurrentUser?: () => Promise<CurrentUser>;
5
+ useHasRole?: (currentUser: CurrentUser | null) => (rolesToCheck: string | string[]) => boolean;
6
+ };
7
+ export declare function createAuthentication<TUser, TRestoreAuth, TLogInOptions, TLogIn, TLogOutOptions, TLogOut, TSignUpOptions, TSignUp, TForgotPassword, TResetPasswordOptions, TResetPassword, TValidateResetToken, TClient>(authImplementation: AuthImplementation<TUser, TRestoreAuth, TLogInOptions, TLogIn, TLogOutOptions, TLogOut, TSignUpOptions, TSignUp, TForgotPassword, TResetPasswordOptions, TResetPassword, TValidateResetToken, TClient>, customProviderHooks?: {
8
+ useCurrentUser?: () => Promise<CurrentUser>;
9
+ useHasRole?: (currentUser: CurrentUser | null) => (rolesToCheck: string | string[]) => boolean;
10
+ }): {
11
+ AuthContext: import("react").Context<import("./AuthContext.js").AuthContextInterface<TUser, TLogInOptions, TLogIn, TLogOutOptions, TLogOut, TSignUpOptions, TSignUp, TForgotPassword, TResetPasswordOptions, TResetPassword, TValidateResetToken, TClient> | undefined>;
12
+ AuthProvider: ({ children }: import("./AuthProvider/AuthProvider.js").AuthProviderProps) => import("react").JSX.Element;
13
+ useAuth: () => import("./AuthContext.js").AuthContextInterface<TUser, TLogInOptions, TLogIn, TLogOutOptions, TLogOut, TSignUpOptions, TSignUp, TForgotPassword, TResetPasswordOptions, TResetPassword, TValidateResetToken, TClient>;
14
+ };
15
+ //# sourceMappingURL=authFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authFactory.d.ts","sourceRoot":"","sources":["../../src/authFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAIjE,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IAC3C,UAAU,CAAC,EAAE,CACX,WAAW,EAAE,WAAW,GAAG,IAAI,KAC5B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,OAAO,CAAA;CAClD,CAAA;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EACL,YAAY,EACZ,aAAa,EACb,MAAM,EACN,cAAc,EACd,OAAO,EACP,cAAc,EACd,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,OAAO,EAEP,kBAAkB,EAAE,kBAAkB,CACpC,KAAK,EACL,YAAY,EACZ,aAAa,EACb,MAAM,EACN,cAAc,EACd,OAAO,EACP,cAAc,EACd,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,OAAO,CACR,EACD,mBAAmB,CAAC,EAAE;IACpB,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IAC3C,UAAU,CAAC,EAAE,CACX,WAAW,EAAE,WAAW,GAAG,IAAI,KAC5B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,OAAO,CAAA;CAClD;;;;EAwBF"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var authFactory_exports = {};
20
+ __export(authFactory_exports, {
21
+ createAuthentication: () => createAuthentication
22
+ });
23
+ module.exports = __toCommonJS(authFactory_exports);
24
+ var import_AuthContext = require("./AuthContext.js");
25
+ var import_AuthProvider = require("./AuthProvider/AuthProvider.js");
26
+ var import_useAuth = require("./useAuth.js");
27
+ function createAuthentication(authImplementation, customProviderHooks) {
28
+ const AuthContext = (0, import_AuthContext.createAuthContext)();
29
+ const useAuth = (0, import_useAuth.createUseAuth)(AuthContext);
30
+ const AuthProvider = (0, import_AuthProvider.createAuthProvider)(
31
+ AuthContext,
32
+ authImplementation,
33
+ customProviderHooks
34
+ );
35
+ return { AuthContext, AuthProvider, useAuth };
36
+ }
37
+ // Annotate the CommonJS export names for ESM import in node:
38
+ 0 && (module.exports = {
39
+ createAuthentication
40
+ });
@@ -0,0 +1,2 @@
1
+ export declare const getCurrentUserFromMiddleware: <TCurrentUser = Record<string, unknown>>(authUrl: string) => Promise<TCurrentUser>;
2
+ //# sourceMappingURL=getCurrentUserFromMiddleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCurrentUserFromMiddleware.d.ts","sourceRoot":"","sources":["../../src/getCurrentUserFromMiddleware.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,4BAA4B,GACvC,YAAY,qCAEH,MAAM,KACd,OAAO,CAAC,YAAY,CAoBtB,CAAA"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var getCurrentUserFromMiddleware_exports = {};
20
+ __export(getCurrentUserFromMiddleware_exports, {
21
+ getCurrentUserFromMiddleware: () => getCurrentUserFromMiddleware
22
+ });
23
+ module.exports = __toCommonJS(getCurrentUserFromMiddleware_exports);
24
+ const getCurrentUserFromMiddleware = async (authUrl) => {
25
+ const response = await globalThis.fetch(`${authUrl}/currentUser`, {
26
+ method: "GET",
27
+ credentials: "include",
28
+ headers: {
29
+ "content-type": "application/json"
30
+ }
31
+ });
32
+ if (response.ok) {
33
+ const { currentUser } = await response.json();
34
+ if (!currentUser) {
35
+ throw new Error("No current user found");
36
+ }
37
+ return currentUser;
38
+ } else {
39
+ throw new Error(
40
+ `Could not fetch current user: ${response.statusText} (${response.status})`
41
+ );
42
+ }
43
+ };
44
+ // Annotate the CommonJS export names for ESM import in node:
45
+ 0 && (module.exports = {
46
+ getCurrentUserFromMiddleware
47
+ });
@@ -0,0 +1,11 @@
1
+ export type { AuthContextInterface, CurrentUser } from './AuthContext.js';
2
+ export type { AuthProviderProps } from './AuthProvider/AuthProvider.js';
3
+ export { useNoAuth } from './useAuth.js';
4
+ export type { UseAuth } from './useAuth.js';
5
+ export { createAuthentication } from './authFactory.js';
6
+ export type { CustomProviderHooks } from './authFactory.js';
7
+ export type { AuthImplementation } from './AuthImplementation.js';
8
+ export { spaDefaultAuthProviderState, middlewareDefaultAuthProviderState, } from './AuthProvider/AuthProviderState.js';
9
+ export type { AuthProviderState } from './AuthProvider/AuthProviderState.js';
10
+ export { getCurrentUserFromMiddleware } from './getCurrentUserFromMiddleware.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACzE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAEjE,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,qCAAqC,CAAA;AAC5C,YAAY,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAE5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAA"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var index_exports = {};
20
+ __export(index_exports, {
21
+ createAuthentication: () => import_authFactory.createAuthentication,
22
+ getCurrentUserFromMiddleware: () => import_getCurrentUserFromMiddleware.getCurrentUserFromMiddleware,
23
+ middlewareDefaultAuthProviderState: () => import_AuthProviderState.middlewareDefaultAuthProviderState,
24
+ spaDefaultAuthProviderState: () => import_AuthProviderState.spaDefaultAuthProviderState,
25
+ useNoAuth: () => import_useAuth.useNoAuth
26
+ });
27
+ module.exports = __toCommonJS(index_exports);
28
+ var import_useAuth = require("./useAuth.js");
29
+ var import_authFactory = require("./authFactory.js");
30
+ var import_AuthProviderState = require("./AuthProvider/AuthProviderState.js");
31
+ var import_getCurrentUserFromMiddleware = require("./getCurrentUserFromMiddleware.js");
32
+ // Annotate the CommonJS export names for ESM import in node:
33
+ 0 && (module.exports = {
34
+ createAuthentication,
35
+ getCurrentUserFromMiddleware,
36
+ middlewareDefaultAuthProviderState,
37
+ spaDefaultAuthProviderState,
38
+ useNoAuth
39
+ });
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { AuthContextInterface } from './AuthContext.js';
3
+ export declare function createUseAuth<TUser, TLogInOptions, TLogIn, TLogOutOptions, TLogOut, TSignUpOptions, TSignUp, TForgotPassword, TResetPasswordOptions, TResetPassword, TValidateResetToken, TClient>(AuthContext: React.Context<AuthContextInterface<TUser, TLogInOptions, TLogIn, TLogOutOptions, TLogOut, TSignUpOptions, TSignUp, TForgotPassword, TResetPasswordOptions, TResetPassword, TValidateResetToken, TClient> | undefined>): () => AuthContextInterface<TUser, TLogInOptions, TLogIn, TLogOutOptions, TLogOut, TSignUpOptions, TSignUp, TForgotPassword, TResetPasswordOptions, TResetPassword, TValidateResetToken, TClient>;
4
+ export declare function useNoAuth(): AuthContextInterface<null, void, void, void, void, void, void, void, void, void, void, undefined>;
5
+ export type UseAuth = () => AuthContextInterface<unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown>;
6
+ //# sourceMappingURL=useAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../src/useAuth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,wBAAgB,aAAa,CAC3B,KAAK,EACL,aAAa,EACb,MAAM,EACN,cAAc,EACd,OAAO,EACP,cAAc,EACd,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,OAAO,EAEP,WAAW,EAAE,KAAK,CAAC,OAAO,CACtB,oBAAoB,CAClB,KAAK,EACL,aAAa,EACb,MAAM,EACN,cAAc,EACd,OAAO,EACP,cAAc,EACd,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,OAAO,CACR,GACD,SAAS,CACZ,SAEmB,oBAAoB,CACtC,KAAK,EACL,aAAa,EACb,MAAM,EACN,cAAc,EACd,OAAO,EACP,cAAc,EACd,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,OAAO,CACR,CAWF;AAED,wBAAgB,SAAS,IAAI,oBAAoB,CAC/C,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,SAAS,CACV,CAoBA;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAC9C,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,CACR,CAAA"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var useAuth_exports = {};
30
+ __export(useAuth_exports, {
31
+ createUseAuth: () => createUseAuth,
32
+ useNoAuth: () => useNoAuth
33
+ });
34
+ module.exports = __toCommonJS(useAuth_exports);
35
+ var import_react = __toESM(require("react"), 1);
36
+ function createUseAuth(AuthContext) {
37
+ const useAuth = () => {
38
+ const context = import_react.default.useContext(AuthContext);
39
+ if (!context) {
40
+ throw new Error("useAuth must be used within an AuthProvider");
41
+ }
42
+ return context;
43
+ };
44
+ return useAuth;
45
+ }
46
+ function useNoAuth() {
47
+ return {
48
+ loading: false,
49
+ isAuthenticated: false,
50
+ logIn: async () => {
51
+ },
52
+ logOut: async () => {
53
+ },
54
+ signUp: async () => {
55
+ },
56
+ currentUser: null,
57
+ userMetadata: null,
58
+ getToken: async () => null,
59
+ getCurrentUser: async () => null,
60
+ hasRole: () => false,
61
+ reauthenticate: async () => {
62
+ },
63
+ forgotPassword: async () => {
64
+ },
65
+ resetPassword: async () => {
66
+ },
67
+ validateResetToken: async () => {
68
+ },
69
+ type: "default",
70
+ client: void 0,
71
+ hasError: false
72
+ };
73
+ }
74
+ // Annotate the CommonJS export names for ESM import in node:
75
+ 0 && (module.exports = {
76
+ createUseAuth,
77
+ useNoAuth
78
+ });
@@ -0,0 +1,2 @@
1
+ export declare const getCurrentUserFromMiddleware: <TCurrentUser = Record<string, unknown>>(authUrl: string) => Promise<TCurrentUser>;
2
+ //# sourceMappingURL=getCurrentUserFromMiddleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCurrentUserFromMiddleware.d.ts","sourceRoot":"","sources":["../src/getCurrentUserFromMiddleware.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,4BAA4B,GACvC,YAAY,qCAEH,MAAM,KACd,OAAO,CAAC,YAAY,CAoBtB,CAAA"}
@@ -0,0 +1,23 @@
1
+ const getCurrentUserFromMiddleware = async (authUrl) => {
2
+ const response = await globalThis.fetch(`${authUrl}/currentUser`, {
3
+ method: "GET",
4
+ credentials: "include",
5
+ headers: {
6
+ "content-type": "application/json"
7
+ }
8
+ });
9
+ if (response.ok) {
10
+ const { currentUser } = await response.json();
11
+ if (!currentUser) {
12
+ throw new Error("No current user found");
13
+ }
14
+ return currentUser;
15
+ } else {
16
+ throw new Error(
17
+ `Could not fetch current user: ${response.statusText} (${response.status})`
18
+ );
19
+ }
20
+ };
21
+ export {
22
+ getCurrentUserFromMiddleware
23
+ };
@@ -0,0 +1,11 @@
1
+ export type { AuthContextInterface, CurrentUser } from './AuthContext.js';
2
+ export type { AuthProviderProps } from './AuthProvider/AuthProvider.js';
3
+ export { useNoAuth } from './useAuth.js';
4
+ export type { UseAuth } from './useAuth.js';
5
+ export { createAuthentication } from './authFactory.js';
6
+ export type { CustomProviderHooks } from './authFactory.js';
7
+ export type { AuthImplementation } from './AuthImplementation.js';
8
+ export { spaDefaultAuthProviderState, middlewareDefaultAuthProviderState, } from './AuthProvider/AuthProviderState.js';
9
+ export type { AuthProviderState } from './AuthProvider/AuthProviderState.js';
10
+ export { getCurrentUserFromMiddleware } from './getCurrentUserFromMiddleware.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACzE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAEjE,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,qCAAqC,CAAA;AAC5C,YAAY,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAE5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ import { useNoAuth } from "./useAuth.js";
2
+ import { createAuthentication } from "./authFactory.js";
3
+ import {
4
+ spaDefaultAuthProviderState,
5
+ middlewareDefaultAuthProviderState
6
+ } from "./AuthProvider/AuthProviderState.js";
7
+ import { getCurrentUserFromMiddleware } from "./getCurrentUserFromMiddleware.js";
8
+ export {
9
+ createAuthentication,
10
+ getCurrentUserFromMiddleware,
11
+ middlewareDefaultAuthProviderState,
12
+ spaDefaultAuthProviderState,
13
+ useNoAuth
14
+ };
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { AuthContextInterface } from './AuthContext.js';
3
+ export declare function createUseAuth<TUser, TLogInOptions, TLogIn, TLogOutOptions, TLogOut, TSignUpOptions, TSignUp, TForgotPassword, TResetPasswordOptions, TResetPassword, TValidateResetToken, TClient>(AuthContext: React.Context<AuthContextInterface<TUser, TLogInOptions, TLogIn, TLogOutOptions, TLogOut, TSignUpOptions, TSignUp, TForgotPassword, TResetPasswordOptions, TResetPassword, TValidateResetToken, TClient> | undefined>): () => AuthContextInterface<TUser, TLogInOptions, TLogIn, TLogOutOptions, TLogOut, TSignUpOptions, TSignUp, TForgotPassword, TResetPasswordOptions, TResetPassword, TValidateResetToken, TClient>;
4
+ export declare function useNoAuth(): AuthContextInterface<null, void, void, void, void, void, void, void, void, void, void, undefined>;
5
+ export type UseAuth = () => AuthContextInterface<unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown>;
6
+ //# sourceMappingURL=useAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../src/useAuth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,wBAAgB,aAAa,CAC3B,KAAK,EACL,aAAa,EACb,MAAM,EACN,cAAc,EACd,OAAO,EACP,cAAc,EACd,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,OAAO,EAEP,WAAW,EAAE,KAAK,CAAC,OAAO,CACtB,oBAAoB,CAClB,KAAK,EACL,aAAa,EACb,MAAM,EACN,cAAc,EACd,OAAO,EACP,cAAc,EACd,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,OAAO,CACR,GACD,SAAS,CACZ,SAEmB,oBAAoB,CACtC,KAAK,EACL,aAAa,EACb,MAAM,EACN,cAAc,EACd,OAAO,EACP,cAAc,EACd,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,OAAO,CACR,CAWF;AAED,wBAAgB,SAAS,IAAI,oBAAoB,CAC/C,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,SAAS,CACV,CAoBA;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAC9C,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,CACR,CAAA"}
@@ -0,0 +1,43 @@
1
+ import React from "react";
2
+ function createUseAuth(AuthContext) {
3
+ const useAuth = () => {
4
+ const context = React.useContext(AuthContext);
5
+ if (!context) {
6
+ throw new Error("useAuth must be used within an AuthProvider");
7
+ }
8
+ return context;
9
+ };
10
+ return useAuth;
11
+ }
12
+ function useNoAuth() {
13
+ return {
14
+ loading: false,
15
+ isAuthenticated: false,
16
+ logIn: async () => {
17
+ },
18
+ logOut: async () => {
19
+ },
20
+ signUp: async () => {
21
+ },
22
+ currentUser: null,
23
+ userMetadata: null,
24
+ getToken: async () => null,
25
+ getCurrentUser: async () => null,
26
+ hasRole: () => false,
27
+ reauthenticate: async () => {
28
+ },
29
+ forgotPassword: async () => {
30
+ },
31
+ resetPassword: async () => {
32
+ },
33
+ validateResetToken: async () => {
34
+ },
35
+ type: "default",
36
+ client: void 0,
37
+ hasError: false
38
+ };
39
+ }
40
+ export {
41
+ createUseAuth,
42
+ useNoAuth
43
+ };
package/package.json ADDED
@@ -0,0 +1,110 @@
1
+ {
2
+ "name": "@redmix/auth",
3
+ "version": "0.0.1",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "git+https://github.com/redmix-run/redmix.git",
7
+ "directory": "packages/auth"
8
+ },
9
+ "license": "MIT",
10
+ "type": "module",
11
+ "exports": {
12
+ ".": {
13
+ "import": {
14
+ "types": "./dist/index.d.ts",
15
+ "default": "./dist/index.js"
16
+ },
17
+ "require": {
18
+ "types": "./dist/cjs/index.d.ts",
19
+ "default": "./dist/cjs/index.js"
20
+ }
21
+ },
22
+ "./AuthProviderState": {
23
+ "import": {
24
+ "types": "./dist/AuthProvider/AuthProviderState.d.ts",
25
+ "default": "./dist/AuthProvider/AuthProviderState.js"
26
+ },
27
+ "require": {
28
+ "types": "./dist/cjs/AuthProvider/AuthProviderState.d.ts",
29
+ "default": "./dist/cjs/AuthProvider/AuthProviderState.js"
30
+ }
31
+ },
32
+ "./dist/AuthProvider/AuthProviderState.js": {
33
+ "import": {
34
+ "types": "./dist/AuthProvider/AuthProviderState.d.ts",
35
+ "default": "./dist/AuthProvider/AuthProviderState.js"
36
+ },
37
+ "require": {
38
+ "types": "./dist/cjs/AuthProvider/AuthProviderState.d.ts",
39
+ "default": "./dist/cjs/AuthProvider/AuthProviderState.js"
40
+ }
41
+ },
42
+ "./ServerAuthProvider": {
43
+ "import": {
44
+ "types": "./dist/AuthProvider/ServerAuthProvider.d.ts",
45
+ "default": "./dist/AuthProvider/ServerAuthProvider.js"
46
+ },
47
+ "require": {
48
+ "types": "./dist/cjs/AuthProvider/ServerAuthProvider.d.ts",
49
+ "default": "./dist/cjs/AuthProvider/ServerAuthProvider.js"
50
+ }
51
+ },
52
+ "./dist/AuthProvider/ServerAuthProvider": {
53
+ "import": {
54
+ "types": "./dist/AuthProvider/ServerAuthProvider.d.ts",
55
+ "default": "./dist/AuthProvider/ServerAuthProvider.js"
56
+ },
57
+ "require": {
58
+ "types": "./dist/cjs/AuthProvider/ServerAuthProvider.d.ts",
59
+ "default": "./dist/cjs/AuthProvider/ServerAuthProvider.js"
60
+ }
61
+ },
62
+ "./dist/AuthProvider/ServerAuthProvider.js": {
63
+ "import": {
64
+ "types": "./dist/AuthProvider/ServerAuthProvider.d.ts",
65
+ "default": "./dist/AuthProvider/ServerAuthProvider.js"
66
+ },
67
+ "require": {
68
+ "types": "./dist/cjs/AuthProvider/ServerAuthProvider.d.ts",
69
+ "default": "./dist/cjs/AuthProvider/ServerAuthProvider.js"
70
+ }
71
+ }
72
+ },
73
+ "types": "./dist/index.d.ts",
74
+ "files": [
75
+ "dist"
76
+ ],
77
+ "scripts": {
78
+ "build": "tsx ./build.ts && yarn build:types",
79
+ "build:pack": "yarn pack -o redmix-auth.tgz",
80
+ "build:types": "tsc --build --verbose tsconfig.build.json",
81
+ "build:types-cjs": "tsc --build --verbose tsconfig.cjs.json",
82
+ "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx\" --ignore dist --exec \"yarn build\"",
83
+ "check:attw": "tsx ./attw.ts",
84
+ "check:package": "concurrently npm:check:attw yarn:publint",
85
+ "prepublishOnly": "NODE_ENV=production yarn build",
86
+ "test": "vitest run",
87
+ "test:watch": "vitest watch"
88
+ },
89
+ "dependencies": {
90
+ "core-js": "3.38.1",
91
+ "react": "19.0.0-rc-f2df5694-20240916"
92
+ },
93
+ "devDependencies": {
94
+ "@arethetypeswrong/cli": "0.16.4",
95
+ "@redmix/framework-tools": "0.0.1",
96
+ "@testing-library/jest-dom": "6.5.0",
97
+ "@testing-library/react": "14.3.1",
98
+ "concurrently": "8.2.2",
99
+ "msw": "1.3.4",
100
+ "publint": "0.3.11",
101
+ "tsx": "4.19.3",
102
+ "type-fest": "4.26.1",
103
+ "typescript": "5.6.2",
104
+ "vitest": "2.1.9"
105
+ },
106
+ "publishConfig": {
107
+ "access": "public"
108
+ },
109
+ "gitHead": "688027c97502c500ebbede9cdc7cc51545a8dcf3"
110
+ }