@warlock.js/auth 1.0.0

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 (145) hide show
  1. package/cjs/commands/index.d.ts +2 -0
  2. package/cjs/commands/index.d.ts.map +1 -0
  3. package/cjs/commands/index.js +3 -0
  4. package/cjs/commands/index.js.map +1 -0
  5. package/cjs/contracts/auth-contract.d.ts +23 -0
  6. package/cjs/contracts/auth-contract.d.ts.map +1 -0
  7. package/cjs/contracts/index.d.ts +3 -0
  8. package/cjs/contracts/index.d.ts.map +1 -0
  9. package/cjs/contracts/types.d.ts +23 -0
  10. package/cjs/contracts/types.d.ts.map +1 -0
  11. package/cjs/controllers/guest-login.d.ts +3 -0
  12. package/cjs/controllers/guest-login.d.ts.map +1 -0
  13. package/cjs/controllers/guest-login.js +5 -0
  14. package/cjs/controllers/guest-login.js.map +1 -0
  15. package/cjs/controllers/index.d.ts +2 -0
  16. package/cjs/controllers/index.d.ts.map +1 -0
  17. package/cjs/index.d.ts +7 -0
  18. package/cjs/index.d.ts.map +1 -0
  19. package/cjs/index.js +1 -0
  20. package/cjs/index.js.map +1 -0
  21. package/cjs/middleware/auth-middleware.d.ts +2 -0
  22. package/cjs/middleware/auth-middleware.d.ts.map +1 -0
  23. package/cjs/middleware/auth-middleware.js +79 -0
  24. package/cjs/middleware/auth-middleware.js.map +1 -0
  25. package/cjs/middleware/index.d.ts +2 -0
  26. package/cjs/middleware/index.d.ts.map +1 -0
  27. package/cjs/models/access-token/access-token.d.ts +9 -0
  28. package/cjs/models/access-token/access-token.d.ts.map +1 -0
  29. package/cjs/models/access-token/access-token.js +7 -0
  30. package/cjs/models/access-token/access-token.js.map +1 -0
  31. package/cjs/models/access-token/index.d.ts +3 -0
  32. package/cjs/models/access-token/index.d.ts.map +1 -0
  33. package/cjs/models/access-token/migration.d.ts +6 -0
  34. package/cjs/models/access-token/migration.d.ts.map +1 -0
  35. package/cjs/models/access-token/migration.js +7 -0
  36. package/cjs/models/access-token/migration.js.map +1 -0
  37. package/cjs/models/auth.d.ts +25 -0
  38. package/cjs/models/auth.d.ts.map +1 -0
  39. package/cjs/models/auth.js +57 -0
  40. package/cjs/models/auth.js.map +1 -0
  41. package/cjs/models/casts/cast-password.d.ts +7 -0
  42. package/cjs/models/casts/cast-password.d.ts.map +1 -0
  43. package/cjs/models/casts/cast-password.js +9 -0
  44. package/cjs/models/casts/cast-password.js.map +1 -0
  45. package/cjs/models/casts/index.d.ts +2 -0
  46. package/cjs/models/casts/index.d.ts.map +1 -0
  47. package/cjs/models/guest/guest.d.ts +26 -0
  48. package/cjs/models/guest/guest.d.ts.map +1 -0
  49. package/cjs/models/guest/guest.js +39 -0
  50. package/cjs/models/guest/guest.js.map +1 -0
  51. package/cjs/models/guest/index.d.ts +3 -0
  52. package/cjs/models/guest/index.d.ts.map +1 -0
  53. package/cjs/models/guest/migration.d.ts +7 -0
  54. package/cjs/models/guest/migration.d.ts.map +1 -0
  55. package/cjs/models/guest/migration.js +8 -0
  56. package/cjs/models/guest/migration.js.map +1 -0
  57. package/cjs/models/index.d.ts +5 -0
  58. package/cjs/models/index.d.ts.map +1 -0
  59. package/cjs/services/generate-guest-token.d.ts +2 -0
  60. package/cjs/services/generate-guest-token.d.ts.map +1 -0
  61. package/cjs/services/generate-guest-token.js +11 -0
  62. package/cjs/services/generate-guest-token.js.map +1 -0
  63. package/cjs/services/generate-jwt-secret.d.ts +2 -0
  64. package/cjs/services/generate-jwt-secret.d.ts.map +1 -0
  65. package/cjs/services/generate-jwt-secret.js +26 -0
  66. package/cjs/services/generate-jwt-secret.js.map +1 -0
  67. package/cjs/services/index.d.ts +4 -0
  68. package/cjs/services/index.d.ts.map +1 -0
  69. package/cjs/services/jwt.d.ts +23 -0
  70. package/cjs/services/jwt.d.ts.map +1 -0
  71. package/cjs/services/jwt.js +39 -0
  72. package/cjs/services/jwt.js.map +1 -0
  73. package/esm/commands/index.d.ts +2 -0
  74. package/esm/commands/index.d.ts.map +1 -0
  75. package/esm/commands/index.js +3 -0
  76. package/esm/commands/index.js.map +1 -0
  77. package/esm/contracts/auth-contract.d.ts +23 -0
  78. package/esm/contracts/auth-contract.d.ts.map +1 -0
  79. package/esm/contracts/index.d.ts +3 -0
  80. package/esm/contracts/index.d.ts.map +1 -0
  81. package/esm/contracts/types.d.ts +23 -0
  82. package/esm/contracts/types.d.ts.map +1 -0
  83. package/esm/controllers/guest-login.d.ts +3 -0
  84. package/esm/controllers/guest-login.d.ts.map +1 -0
  85. package/esm/controllers/guest-login.js +5 -0
  86. package/esm/controllers/guest-login.js.map +1 -0
  87. package/esm/controllers/index.d.ts +2 -0
  88. package/esm/controllers/index.d.ts.map +1 -0
  89. package/esm/index.d.ts +7 -0
  90. package/esm/index.d.ts.map +1 -0
  91. package/esm/index.js +1 -0
  92. package/esm/index.js.map +1 -0
  93. package/esm/middleware/auth-middleware.d.ts +2 -0
  94. package/esm/middleware/auth-middleware.d.ts.map +1 -0
  95. package/esm/middleware/auth-middleware.js +79 -0
  96. package/esm/middleware/auth-middleware.js.map +1 -0
  97. package/esm/middleware/index.d.ts +2 -0
  98. package/esm/middleware/index.d.ts.map +1 -0
  99. package/esm/models/access-token/access-token.d.ts +9 -0
  100. package/esm/models/access-token/access-token.d.ts.map +1 -0
  101. package/esm/models/access-token/access-token.js +7 -0
  102. package/esm/models/access-token/access-token.js.map +1 -0
  103. package/esm/models/access-token/index.d.ts +3 -0
  104. package/esm/models/access-token/index.d.ts.map +1 -0
  105. package/esm/models/access-token/migration.d.ts +6 -0
  106. package/esm/models/access-token/migration.d.ts.map +1 -0
  107. package/esm/models/access-token/migration.js +7 -0
  108. package/esm/models/access-token/migration.js.map +1 -0
  109. package/esm/models/auth.d.ts +25 -0
  110. package/esm/models/auth.d.ts.map +1 -0
  111. package/esm/models/auth.js +57 -0
  112. package/esm/models/auth.js.map +1 -0
  113. package/esm/models/casts/cast-password.d.ts +7 -0
  114. package/esm/models/casts/cast-password.d.ts.map +1 -0
  115. package/esm/models/casts/cast-password.js +9 -0
  116. package/esm/models/casts/cast-password.js.map +1 -0
  117. package/esm/models/casts/index.d.ts +2 -0
  118. package/esm/models/casts/index.d.ts.map +1 -0
  119. package/esm/models/guest/guest.d.ts +26 -0
  120. package/esm/models/guest/guest.d.ts.map +1 -0
  121. package/esm/models/guest/guest.js +39 -0
  122. package/esm/models/guest/guest.js.map +1 -0
  123. package/esm/models/guest/index.d.ts +3 -0
  124. package/esm/models/guest/index.d.ts.map +1 -0
  125. package/esm/models/guest/migration.d.ts +7 -0
  126. package/esm/models/guest/migration.d.ts.map +1 -0
  127. package/esm/models/guest/migration.js +8 -0
  128. package/esm/models/guest/migration.js.map +1 -0
  129. package/esm/models/index.d.ts +5 -0
  130. package/esm/models/index.d.ts.map +1 -0
  131. package/esm/services/generate-guest-token.d.ts +2 -0
  132. package/esm/services/generate-guest-token.d.ts.map +1 -0
  133. package/esm/services/generate-guest-token.js +11 -0
  134. package/esm/services/generate-guest-token.js.map +1 -0
  135. package/esm/services/generate-jwt-secret.d.ts +2 -0
  136. package/esm/services/generate-jwt-secret.d.ts.map +1 -0
  137. package/esm/services/generate-jwt-secret.js +26 -0
  138. package/esm/services/generate-jwt-secret.js.map +1 -0
  139. package/esm/services/index.d.ts +4 -0
  140. package/esm/services/index.d.ts.map +1 -0
  141. package/esm/services/jwt.d.ts +23 -0
  142. package/esm/services/jwt.d.ts.map +1 -0
  143. package/esm/services/jwt.js +39 -0
  144. package/esm/services/jwt.js.map +1 -0
  145. package/package.json +33 -0
@@ -0,0 +1,2 @@
1
+ export declare function generateGuestToken(): Promise<any>;
2
+ //# sourceMappingURL=generate-guest-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-guest-token.d.ts","sourceRoot":"","sources":["../../src/services/generate-guest-token.ts"],"names":[],"mappings":"AAGA,wBAAsB,kBAAkB,iBAYvC"}
@@ -0,0 +1,11 @@
1
+ import config from'@mongez/config';import {Guest}from'../models/guest/guest.js';async function generateGuestToken() {
2
+ const GuestModel = config.get(`auth.userType.guest`) || Guest;
3
+ const guest = await GuestModel.create({
4
+ userType: "guest",
5
+ });
6
+ return {
7
+ // use our own jwt generator to generate a token for the guest
8
+ accessToken: await guest.generateAccessToken(),
9
+ ...(await guest.toJSON()),
10
+ };
11
+ }export{generateGuestToken};//# sourceMappingURL=generate-guest-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-guest-token.js","sources":["../../src/services/generate-guest-token.ts"],"sourcesContent":[null],"names":[],"mappings":"gFAGO,eAAe,kBAAkB,GAAA;IACtC,MAAM,UAAU,GAAiB,MAAM,CAAC,GAAG,CAAC,CAAqB,mBAAA,CAAA,CAAC,IAAI,KAAK,CAAC;AAE5E,IAAA,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC;AACpC,QAAA,QAAQ,EAAE,OAAO;AAClB,KAAA,CAAC,CAAC;IAEH,OAAO;;AAEL,QAAA,WAAW,EAAE,MAAM,KAAK,CAAC,mBAAmB,EAAE;AAC9C,QAAA,IAAI,MAAM,KAAK,CAAC,MAAM,EAAE;KACzB,CAAC;AACJ"}
@@ -0,0 +1,2 @@
1
+ export declare function generateJWTSecret(): Promise<void>;
2
+ //# sourceMappingURL=generate-jwt-secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-jwt-secret.d.ts","sourceRoot":"","sources":["../../src/services/generate-jwt-secret.ts"],"names":[],"mappings":"AAKA,wBAAsB,iBAAiB,kBAwCtC"}
@@ -0,0 +1,26 @@
1
+ import {fileExists,getFile,putFile}from'@mongez/fs';import {Random}from'@mongez/reinforcements';import {rootPath,environment}from'@warlock.js/core';import {log}from'@warlock.js/logger';async function generateJWTSecret() {
2
+ let envFile = rootPath(".env");
3
+ log.info("jwt", "generating", "Generating jwt secret");
4
+ const environmentMode = environment();
5
+ if (!fileExists(envFile)) {
6
+ const envFileType = environmentMode === "production" ? ".env.production" : ".env.development";
7
+ envFile = rootPath(envFileType);
8
+ }
9
+ if (!fileExists(envFile)) {
10
+ log.error("jwt", "error", ".env file not found");
11
+ return;
12
+ }
13
+ let contents = getFile(envFile);
14
+ if (contents.includes("JWT_SECRET")) {
15
+ log.warn("jwt", "exists", "JWT secret already exists in the .env file.");
16
+ return;
17
+ }
18
+ const key = Random.string(32);
19
+ contents += `
20
+
21
+ # JWT Secret
22
+ JWT_SECRET=${key}
23
+ `;
24
+ putFile(envFile, contents);
25
+ log.success("jwt", "generated", `JWT secret key generated and added to the .env file.`);
26
+ }export{generateJWTSecret};//# sourceMappingURL=generate-jwt-secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-jwt-secret.js","sources":["../../src/services/generate-jwt-secret.ts"],"sourcesContent":[null],"names":[],"mappings":"yLAKO,eAAe,iBAAiB,GAAA;AACrC,IAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE/B,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,uBAAuB,CAAC,CAAC;AAEvD,IAAA,MAAM,eAAe,GAAG,WAAW,EAAE,CAAC;AAEtC,IAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AACxB,QAAA,MAAM,WAAW,GACf,eAAe,KAAK,YAAY,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAC5E,QAAA,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;AACjC,KAAA;AAED,IAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QACxB,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACjD,OAAO;AACR,KAAA;AAED,IAAA,IAAI,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,IAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;QACnC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,6CAA6C,CAAC,CAAC;QACzE,OAAO;AACR,KAAA;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE9B,IAAA,QAAQ,IAAI,CAAA;;;aAGD,GAAG,CAAA;CACf,CAAC;AAEA,IAAA,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE3B,GAAG,CAAC,OAAO,CACT,KAAK,EACL,WAAW,EACX,CAAsD,oDAAA,CAAA,CACvD,CAAC;AACJ"}
@@ -0,0 +1,4 @@
1
+ export * from "./generate-guest-token";
2
+ export * from "./generate-jwt-secret";
3
+ export * from "./jwt";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,OAAO,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type SignerOptions, type VerifierOptions } from "fast-jwt";
2
+ export declare const jwt: {
3
+ /**
4
+ * Generate a new JWT token for the user.
5
+ * @param payload The payload to encode in the JWT token.
6
+ */
7
+ generate(payload: any, { key, algorithm, ...options }?: any): Promise<string>;
8
+ /**
9
+ * Verify the given token.
10
+ * @param token The JWT token to verify.
11
+ * @returns The decoded token payload if verification is successful.
12
+ */
13
+ verify(token: string, { key, algorithms, ...options }?: any): Promise<any>;
14
+ /**
15
+ * Generate a new refresh token for the user.
16
+ */
17
+ generateRefreshToken(payload: any, { key, expiresIn, algorithm, ...options }?: any): Promise<string>;
18
+ /**
19
+ * Verify the given refresh token.
20
+ */
21
+ verifyRefreshToken(token: string, { key, algorithms, ...options }?: any): Promise<any>;
22
+ };
23
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/services/jwt.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAWlB,eAAO,MAAM,GAAG;IACd;;;OAGG;sBAEQ,GAAG,yCAMX,QAAQ,MAAM,CAAC;IAOlB;;;;OAIG;kBAEM,MAAM;IAYf;;OAEG;kCAEQ,GAAG,oDAOX,QAAQ,MAAM,CAAC;IAKlB;;OAEG;8BAEM,MAAM;CAUhB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import config from'@mongez/config';import {createSigner,createVerifier}from'fast-jwt';const getSecretKey = () => config.get("auth.jwt.secret");
2
+ const getAlgorithm = () => config.get("auth.jwt.algorithm");
3
+ const getRefreshSecretKey = () => config.get("auth.jwt.refresh.secret");
4
+ // Assuming there's a separate config for refresh token validity, for example, '7d' for 7 days
5
+ const getRefreshTokenValidity = () => config.get("auth.jwt.refresh.expiresIn");
6
+ const jwt = {
7
+ /**
8
+ * Generate a new JWT token for the user.
9
+ * @param payload The payload to encode in the JWT token.
10
+ */
11
+ async generate(payload, { key = getSecretKey(), algorithm = getAlgorithm(), ...options } = {}) {
12
+ // Create a signer function with predefined options
13
+ const sign = createSigner({ key, ...options, algorithm });
14
+ return sign({ ...payload });
15
+ },
16
+ /**
17
+ * Verify the given token.
18
+ * @param token The JWT token to verify.
19
+ * @returns The decoded token payload if verification is successful.
20
+ */
21
+ async verify(token, { key = getSecretKey(), algorithms = getAlgorithm() ? [getAlgorithm()] : undefined, ...options } = {}) {
22
+ const verify = createVerifier({ key, ...options, algorithms });
23
+ return await verify(token);
24
+ },
25
+ /**
26
+ * Generate a new refresh token for the user.
27
+ */
28
+ async generateRefreshToken(payload, { key = getRefreshSecretKey(), expiresIn = getRefreshTokenValidity(), algorithm = getAlgorithm(), ...options } = {}) {
29
+ const sign = createSigner({ key, expiresIn, algorithm, ...options });
30
+ return sign({ ...payload });
31
+ },
32
+ /**
33
+ * Verify the given refresh token.
34
+ */
35
+ async verifyRefreshToken(token, { key = getRefreshSecretKey(), algorithms = [getAlgorithm()], ...options } = {}) {
36
+ const verify = createVerifier({ key, algorithms, ...options });
37
+ return await verify(token);
38
+ },
39
+ };export{jwt};//# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","sources":["../../src/services/jwt.ts"],"sourcesContent":[null],"names":[],"mappings":"sFASA,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAW,CAAC;AACnE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAc,CAAC;AAEzE,MAAM,mBAAmB,GAAG,MAC1B,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAW,CAAC;AAClD;AACA,MAAM,uBAAuB,GAAG,MAC9B,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAoB,CAAC;AAEjD,MAAA,GAAG,GAAG;AACjB;;;AAGG;AACH,IAAA,MAAM,QAAQ,CACZ,OAAY,EACZ,EACE,GAAG,GAAG,YAAY,EAAE,EACpB,SAAS,GAAG,YAAY,EAAE,EAC1B,GAAG,OAAO,KAC0B,EAAE,EAAA;;AAGxC,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAE1D,QAAA,OAAO,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;KAC7B;AAED;;;;AAIG;AACH,IAAA,MAAM,MAAM,CACV,KAAa,EACb,EACE,GAAG,GAAG,YAAY,EAAE,EACpB,UAAU,GAAG,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,SAAS,EAC1D,GAAG,OAAO,KAC4B,EAAE,EAAA;AAE1C,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;AAE/D,QAAA,OAAO,MAAM,MAAM,CAAC,KAAe,CAAC,CAAC;KACtC;AAED;;AAEG;IACH,MAAM,oBAAoB,CACxB,OAAY,EACZ,EACE,GAAG,GAAG,mBAAmB,EAAE,EAC3B,SAAS,GAAG,uBAAuB,EAAE,EACrC,SAAS,GAAG,YAAY,EAAE,EAC1B,GAAG,OAAO,EAAA,GAC0B,EAAE,EAAA;AAExC,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACrE,QAAA,OAAO,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;KAC7B;AAED;;AAEG;IACH,MAAM,kBAAkB,CACtB,KAAa,EACb,EACE,GAAG,GAAG,mBAAmB,EAAE,EAC3B,UAAU,GAAG,CAAC,YAAY,EAAE,CAAC,EAC7B,GAAG,OAAO,EAAA,GAC4B,EAAE,EAAA;AAE1C,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAC/D,QAAA,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;KAC5B;"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@warlock.js/auth",
3
+ "version": "1.0.0",
4
+ "description": "Authentication system for Warlock.js applications",
5
+ "main": "./cjs/index.js",
6
+ "dependencies": {
7
+ "@mongez/password": "^1.0.2",
8
+ "fast-jwt": "^4.0.1"
9
+ },
10
+ "peerDependencies": {
11
+ "@mongez/fs": "^3.0.4",
12
+ "@warlock.js/cascade": "^1.0.0",
13
+ "@warlock.js/logger": "^1.0.0",
14
+ "@mongez/reinforcements": "^2.3.9",
15
+ "@mongez/supportive-is": "^2.0.3"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/warlockjs/auth"
20
+ },
21
+ "keywords": [
22
+ "nodejs",
23
+ "auth",
24
+ "auth.js",
25
+ "authentication",
26
+ "authorization",
27
+ "jwt"
28
+ ],
29
+ "author": "hassanzohdy",
30
+ "license": "MIT",
31
+ "module": "./esm/index.js",
32
+ "typings": "./cjs/index.d.ts"
33
+ }