@om_patel_26/chat-widget 1.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 (203) hide show
  1. package/README.md +276 -0
  2. package/dist/_virtual/_plugin-vue_export-helper.cjs.js +2 -0
  3. package/dist/_virtual/_plugin-vue_export-helper.cjs.js.map +1 -0
  4. package/dist/_virtual/_plugin-vue_export-helper.esm.js +11 -0
  5. package/dist/_virtual/_plugin-vue_export-helper.esm.js.map +1 -0
  6. package/dist/adapters/vue/index.d.ts +7 -0
  7. package/dist/adapters/vue/index.d.ts.map +1 -0
  8. package/dist/adapters/vue/useChatMode.d.ts +21 -0
  9. package/dist/adapters/vue/useChatMode.d.ts.map +1 -0
  10. package/dist/components/ChatWidget.d.ts +43 -0
  11. package/dist/components/ChatWidget.d.ts.map +1 -0
  12. package/dist/components/ChatWidget.vue.cjs.js +2 -0
  13. package/dist/components/ChatWidget.vue.cjs.js.map +1 -0
  14. package/dist/components/ChatWidget.vue.cjs2.js +2 -0
  15. package/dist/components/ChatWidget.vue.cjs2.js.map +1 -0
  16. package/dist/components/ChatWidget.vue.esm.js +8 -0
  17. package/dist/components/ChatWidget.vue.esm.js.map +1 -0
  18. package/dist/components/ChatWidget.vue.esm2.js +331 -0
  19. package/dist/components/ChatWidget.vue.esm2.js.map +1 -0
  20. package/dist/composables/useChatWidget.cjs.js +2 -0
  21. package/dist/composables/useChatWidget.cjs.js.map +1 -0
  22. package/dist/composables/useChatWidget.d.ts +34 -0
  23. package/dist/composables/useChatWidget.d.ts.map +1 -0
  24. package/dist/composables/useChatWidget.esm.js +72 -0
  25. package/dist/composables/useChatWidget.esm.js.map +1 -0
  26. package/dist/core/stateManager.cjs.js +2 -0
  27. package/dist/core/stateManager.cjs.js.map +1 -0
  28. package/dist/core/stateManager.d.ts +136 -0
  29. package/dist/core/stateManager.d.ts.map +1 -0
  30. package/dist/core/stateManager.esm.js +907 -0
  31. package/dist/core/stateManager.esm.js.map +1 -0
  32. package/dist/core/types.d.ts +66 -0
  33. package/dist/core/types.d.ts.map +1 -0
  34. package/dist/entry/next.d.ts +9 -0
  35. package/dist/entry/next.d.ts.map +1 -0
  36. package/dist/entry/nuxt.d.ts +10 -0
  37. package/dist/entry/nuxt.d.ts.map +1 -0
  38. package/dist/entry/react.d.ts +10 -0
  39. package/dist/entry/react.d.ts.map +1 -0
  40. package/dist/entry/vanilla.d.ts +33 -0
  41. package/dist/entry/vanilla.d.ts.map +1 -0
  42. package/dist/entry/vite.d.ts +11 -0
  43. package/dist/entry/vite.d.ts.map +1 -0
  44. package/dist/entry/vue.d.ts +11 -0
  45. package/dist/entry/vue.d.ts.map +1 -0
  46. package/dist/hooks/useChatMode.d.ts +17 -0
  47. package/dist/hooks/useChatMode.d.ts.map +1 -0
  48. package/dist/index.cjs.js +2 -0
  49. package/dist/index.cjs.js.map +1 -0
  50. package/dist/index.d.ts +14 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.esm.js +25 -0
  53. package/dist/index.esm.js.map +1 -0
  54. package/dist/node_modules/jose/dist/browser/jws/compact/sign.cjs.js +2 -0
  55. package/dist/node_modules/jose/dist/browser/jws/compact/sign.cjs.js.map +1 -0
  56. package/dist/node_modules/jose/dist/browser/jws/compact/sign.esm.js +21 -0
  57. package/dist/node_modules/jose/dist/browser/jws/compact/sign.esm.js.map +1 -0
  58. package/dist/node_modules/jose/dist/browser/jws/flattened/sign.cjs.js +2 -0
  59. package/dist/node_modules/jose/dist/browser/jws/flattened/sign.cjs.js.map +1 -0
  60. package/dist/node_modules/jose/dist/browser/jws/flattened/sign.esm.js +84 -0
  61. package/dist/node_modules/jose/dist/browser/jws/flattened/sign.esm.js.map +1 -0
  62. package/dist/node_modules/jose/dist/browser/jwt/produce.cjs.js +2 -0
  63. package/dist/node_modules/jose/dist/browser/jwt/produce.cjs.js.map +1 -0
  64. package/dist/node_modules/jose/dist/browser/jwt/produce.esm.js +72 -0
  65. package/dist/node_modules/jose/dist/browser/jwt/produce.esm.js.map +1 -0
  66. package/dist/node_modules/jose/dist/browser/jwt/sign.cjs.js +2 -0
  67. package/dist/node_modules/jose/dist/browser/jwt/sign.cjs.js.map +1 -0
  68. package/dist/node_modules/jose/dist/browser/jwt/sign.esm.js +22 -0
  69. package/dist/node_modules/jose/dist/browser/jwt/sign.esm.js.map +1 -0
  70. package/dist/node_modules/jose/dist/browser/key/import.cjs.js +2 -0
  71. package/dist/node_modules/jose/dist/browser/key/import.cjs.js.map +1 -0
  72. package/dist/node_modules/jose/dist/browser/key/import.esm.js +11 -0
  73. package/dist/node_modules/jose/dist/browser/key/import.esm.js.map +1 -0
  74. package/dist/node_modules/jose/dist/browser/lib/buffer_utils.cjs.js +2 -0
  75. package/dist/node_modules/jose/dist/browser/lib/buffer_utils.cjs.js.map +1 -0
  76. package/dist/node_modules/jose/dist/browser/lib/buffer_utils.esm.js +18 -0
  77. package/dist/node_modules/jose/dist/browser/lib/buffer_utils.esm.js.map +1 -0
  78. package/dist/node_modules/jose/dist/browser/lib/check_key_type.cjs.js +2 -0
  79. package/dist/node_modules/jose/dist/browser/lib/check_key_type.cjs.js.map +1 -0
  80. package/dist/node_modules/jose/dist/browser/lib/check_key_type.esm.js +77 -0
  81. package/dist/node_modules/jose/dist/browser/lib/check_key_type.esm.js.map +1 -0
  82. package/dist/node_modules/jose/dist/browser/lib/crypto_key.cjs.js +2 -0
  83. package/dist/node_modules/jose/dist/browser/lib/crypto_key.cjs.js.map +1 -0
  84. package/dist/node_modules/jose/dist/browser/lib/crypto_key.esm.js +101 -0
  85. package/dist/node_modules/jose/dist/browser/lib/crypto_key.esm.js.map +1 -0
  86. package/dist/node_modules/jose/dist/browser/lib/epoch.cjs.js +2 -0
  87. package/dist/node_modules/jose/dist/browser/lib/epoch.cjs.js.map +1 -0
  88. package/dist/node_modules/jose/dist/browser/lib/epoch.esm.js +5 -0
  89. package/dist/node_modules/jose/dist/browser/lib/epoch.esm.js.map +1 -0
  90. package/dist/node_modules/jose/dist/browser/lib/invalid_key_input.cjs.js +2 -0
  91. package/dist/node_modules/jose/dist/browser/lib/invalid_key_input.cjs.js.map +1 -0
  92. package/dist/node_modules/jose/dist/browser/lib/invalid_key_input.esm.js +32 -0
  93. package/dist/node_modules/jose/dist/browser/lib/invalid_key_input.esm.js.map +1 -0
  94. package/dist/node_modules/jose/dist/browser/lib/is_disjoint.cjs.js +2 -0
  95. package/dist/node_modules/jose/dist/browser/lib/is_disjoint.cjs.js.map +1 -0
  96. package/dist/node_modules/jose/dist/browser/lib/is_disjoint.esm.js +25 -0
  97. package/dist/node_modules/jose/dist/browser/lib/is_disjoint.esm.js.map +1 -0
  98. package/dist/node_modules/jose/dist/browser/lib/is_jwk.cjs.js +2 -0
  99. package/dist/node_modules/jose/dist/browser/lib/is_jwk.cjs.js.map +1 -0
  100. package/dist/node_modules/jose/dist/browser/lib/is_jwk.esm.js +20 -0
  101. package/dist/node_modules/jose/dist/browser/lib/is_jwk.esm.js.map +1 -0
  102. package/dist/node_modules/jose/dist/browser/lib/is_object.cjs.js +2 -0
  103. package/dist/node_modules/jose/dist/browser/lib/is_object.cjs.js.map +1 -0
  104. package/dist/node_modules/jose/dist/browser/lib/is_object.esm.js +20 -0
  105. package/dist/node_modules/jose/dist/browser/lib/is_object.esm.js.map +1 -0
  106. package/dist/node_modules/jose/dist/browser/lib/secs.cjs.js +2 -0
  107. package/dist/node_modules/jose/dist/browser/lib/secs.cjs.js.map +1 -0
  108. package/dist/node_modules/jose/dist/browser/lib/secs.esm.js +59 -0
  109. package/dist/node_modules/jose/dist/browser/lib/secs.esm.js.map +1 -0
  110. package/dist/node_modules/jose/dist/browser/lib/validate_crit.cjs.js +2 -0
  111. package/dist/node_modules/jose/dist/browser/lib/validate_crit.cjs.js.map +1 -0
  112. package/dist/node_modules/jose/dist/browser/lib/validate_crit.esm.js +34 -0
  113. package/dist/node_modules/jose/dist/browser/lib/validate_crit.esm.js.map +1 -0
  114. package/dist/node_modules/jose/dist/browser/runtime/asn1.cjs.js +2 -0
  115. package/dist/node_modules/jose/dist/browser/runtime/asn1.cjs.js.map +1 -0
  116. package/dist/node_modules/jose/dist/browser/runtime/asn1.esm.js +103 -0
  117. package/dist/node_modules/jose/dist/browser/runtime/asn1.esm.js.map +1 -0
  118. package/dist/node_modules/jose/dist/browser/runtime/base64url.cjs.js +2 -0
  119. package/dist/node_modules/jose/dist/browser/runtime/base64url.cjs.js.map +1 -0
  120. package/dist/node_modules/jose/dist/browser/runtime/base64url.esm.js +43 -0
  121. package/dist/node_modules/jose/dist/browser/runtime/base64url.esm.js.map +1 -0
  122. package/dist/node_modules/jose/dist/browser/runtime/check_key_length.cjs.js +2 -0
  123. package/dist/node_modules/jose/dist/browser/runtime/check_key_length.cjs.js.map +1 -0
  124. package/dist/node_modules/jose/dist/browser/runtime/check_key_length.esm.js +12 -0
  125. package/dist/node_modules/jose/dist/browser/runtime/check_key_length.esm.js.map +1 -0
  126. package/dist/node_modules/jose/dist/browser/runtime/get_sign_verify_key.cjs.js +2 -0
  127. package/dist/node_modules/jose/dist/browser/runtime/get_sign_verify_key.cjs.js.map +1 -0
  128. package/dist/node_modules/jose/dist/browser/runtime/get_sign_verify_key.esm.js +25 -0
  129. package/dist/node_modules/jose/dist/browser/runtime/get_sign_verify_key.esm.js.map +1 -0
  130. package/dist/node_modules/jose/dist/browser/runtime/is_key_like.cjs.js +2 -0
  131. package/dist/node_modules/jose/dist/browser/runtime/is_key_like.cjs.js.map +1 -0
  132. package/dist/node_modules/jose/dist/browser/runtime/is_key_like.esm.js +13 -0
  133. package/dist/node_modules/jose/dist/browser/runtime/is_key_like.esm.js.map +1 -0
  134. package/dist/node_modules/jose/dist/browser/runtime/jwk_to_key.cjs.js +2 -0
  135. package/dist/node_modules/jose/dist/browser/runtime/jwk_to_key.cjs.js.map +1 -0
  136. package/dist/node_modules/jose/dist/browser/runtime/jwk_to_key.esm.js +107 -0
  137. package/dist/node_modules/jose/dist/browser/runtime/jwk_to_key.esm.js.map +1 -0
  138. package/dist/node_modules/jose/dist/browser/runtime/normalize_key.cjs.js +2 -0
  139. package/dist/node_modules/jose/dist/browser/runtime/normalize_key.cjs.js.map +1 -0
  140. package/dist/node_modules/jose/dist/browser/runtime/normalize_key.esm.js +71 -0
  141. package/dist/node_modules/jose/dist/browser/runtime/normalize_key.esm.js.map +1 -0
  142. package/dist/node_modules/jose/dist/browser/runtime/sign.cjs.js +2 -0
  143. package/dist/node_modules/jose/dist/browser/runtime/sign.cjs.js.map +1 -0
  144. package/dist/node_modules/jose/dist/browser/runtime/sign.esm.js +14 -0
  145. package/dist/node_modules/jose/dist/browser/runtime/sign.esm.js.map +1 -0
  146. package/dist/node_modules/jose/dist/browser/runtime/subtle_dsa.cjs.js +2 -0
  147. package/dist/node_modules/jose/dist/browser/runtime/subtle_dsa.cjs.js.map +1 -0
  148. package/dist/node_modules/jose/dist/browser/runtime/subtle_dsa.esm.js +32 -0
  149. package/dist/node_modules/jose/dist/browser/runtime/subtle_dsa.esm.js.map +1 -0
  150. package/dist/node_modules/jose/dist/browser/runtime/webcrypto.cjs.js +2 -0
  151. package/dist/node_modules/jose/dist/browser/runtime/webcrypto.cjs.js.map +1 -0
  152. package/dist/node_modules/jose/dist/browser/runtime/webcrypto.esm.js +7 -0
  153. package/dist/node_modules/jose/dist/browser/runtime/webcrypto.esm.js.map +1 -0
  154. package/dist/node_modules/jose/dist/browser/util/errors.cjs.js +2 -0
  155. package/dist/node_modules/jose/dist/browser/util/errors.cjs.js.map +1 -0
  156. package/dist/node_modules/jose/dist/browser/util/errors.esm.js +131 -0
  157. package/dist/node_modules/jose/dist/browser/util/errors.esm.js.map +1 -0
  158. package/dist/nuxt.cjs.js +2 -0
  159. package/dist/nuxt.cjs.js.map +1 -0
  160. package/dist/nuxt.esm.js +8 -0
  161. package/dist/nuxt.esm.js.map +1 -0
  162. package/dist/services/chatService.cjs.js +2 -0
  163. package/dist/services/chatService.cjs.js.map +1 -0
  164. package/dist/services/chatService.d.ts +144 -0
  165. package/dist/services/chatService.d.ts.map +1 -0
  166. package/dist/services/chatService.esm.js +482 -0
  167. package/dist/services/chatService.esm.js.map +1 -0
  168. package/dist/services/dialogflowClient.cjs.js +2 -0
  169. package/dist/services/dialogflowClient.cjs.js.map +1 -0
  170. package/dist/services/dialogflowClient.d.ts +36 -0
  171. package/dist/services/dialogflowClient.d.ts.map +1 -0
  172. package/dist/services/dialogflowClient.esm.js +282 -0
  173. package/dist/services/dialogflowClient.esm.js.map +1 -0
  174. package/dist/services/sessionManager.cjs.js +2 -0
  175. package/dist/services/sessionManager.cjs.js.map +1 -0
  176. package/dist/services/sessionManager.d.ts +13 -0
  177. package/dist/services/sessionManager.d.ts.map +1 -0
  178. package/dist/services/sessionManager.esm.js +48 -0
  179. package/dist/services/sessionManager.esm.js.map +1 -0
  180. package/dist/styles.css +0 -0
  181. package/dist/types.d.ts +5 -0
  182. package/dist/types.d.ts.map +1 -0
  183. package/dist/utils/dialogflowHandler.d.ts +31 -0
  184. package/dist/utils/dialogflowHandler.d.ts.map +1 -0
  185. package/dist/utils/frameworkDetector.d.ts +17 -0
  186. package/dist/utils/frameworkDetector.d.ts.map +1 -0
  187. package/dist/utils/sanitize.cjs.js +2 -0
  188. package/dist/utils/sanitize.cjs.js.map +1 -0
  189. package/dist/utils/sanitize.d.ts +25 -0
  190. package/dist/utils/sanitize.d.ts.map +1 -0
  191. package/dist/utils/sanitize.esm.js +57 -0
  192. package/dist/utils/sanitize.esm.js.map +1 -0
  193. package/dist/utils/ssr.cjs.js +2 -0
  194. package/dist/utils/ssr.cjs.js.map +1 -0
  195. package/dist/utils/ssr.d.ts +35 -0
  196. package/dist/utils/ssr.d.ts.map +1 -0
  197. package/dist/utils/ssr.esm.js +48 -0
  198. package/dist/utils/ssr.esm.js.map +1 -0
  199. package/dist/vue.cjs.js +2 -0
  200. package/dist/vue.cjs.js.map +1 -0
  201. package/dist/vue.esm.js +10 -0
  202. package/dist/vue.esm.js.map +1 -0
  203. package/package.json +145 -0
@@ -0,0 +1,107 @@
1
+ import crypto from "./webcrypto.esm.js";
2
+ import { JOSENotSupported } from "../util/errors.esm.js";
3
+ function subtleMapping(jwk) {
4
+ let algorithm;
5
+ let keyUsages;
6
+ switch (jwk.kty) {
7
+ case "RSA": {
8
+ switch (jwk.alg) {
9
+ case "PS256":
10
+ case "PS384":
11
+ case "PS512":
12
+ algorithm = { name: "RSA-PSS", hash: `SHA-${jwk.alg.slice(-3)}` };
13
+ keyUsages = jwk.d ? ["sign"] : ["verify"];
14
+ break;
15
+ case "RS256":
16
+ case "RS384":
17
+ case "RS512":
18
+ algorithm = { name: "RSASSA-PKCS1-v1_5", hash: `SHA-${jwk.alg.slice(-3)}` };
19
+ keyUsages = jwk.d ? ["sign"] : ["verify"];
20
+ break;
21
+ case "RSA-OAEP":
22
+ case "RSA-OAEP-256":
23
+ case "RSA-OAEP-384":
24
+ case "RSA-OAEP-512":
25
+ algorithm = {
26
+ name: "RSA-OAEP",
27
+ hash: `SHA-${parseInt(jwk.alg.slice(-3), 10) || 1}`
28
+ };
29
+ keyUsages = jwk.d ? ["decrypt", "unwrapKey"] : ["encrypt", "wrapKey"];
30
+ break;
31
+ default:
32
+ throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
33
+ }
34
+ break;
35
+ }
36
+ case "EC": {
37
+ switch (jwk.alg) {
38
+ case "ES256":
39
+ algorithm = { name: "ECDSA", namedCurve: "P-256" };
40
+ keyUsages = jwk.d ? ["sign"] : ["verify"];
41
+ break;
42
+ case "ES384":
43
+ algorithm = { name: "ECDSA", namedCurve: "P-384" };
44
+ keyUsages = jwk.d ? ["sign"] : ["verify"];
45
+ break;
46
+ case "ES512":
47
+ algorithm = { name: "ECDSA", namedCurve: "P-521" };
48
+ keyUsages = jwk.d ? ["sign"] : ["verify"];
49
+ break;
50
+ case "ECDH-ES":
51
+ case "ECDH-ES+A128KW":
52
+ case "ECDH-ES+A192KW":
53
+ case "ECDH-ES+A256KW":
54
+ algorithm = { name: "ECDH", namedCurve: jwk.crv };
55
+ keyUsages = jwk.d ? ["deriveBits"] : [];
56
+ break;
57
+ default:
58
+ throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
59
+ }
60
+ break;
61
+ }
62
+ case "OKP": {
63
+ switch (jwk.alg) {
64
+ case "Ed25519":
65
+ algorithm = { name: "Ed25519" };
66
+ keyUsages = jwk.d ? ["sign"] : ["verify"];
67
+ break;
68
+ case "EdDSA":
69
+ algorithm = { name: jwk.crv };
70
+ keyUsages = jwk.d ? ["sign"] : ["verify"];
71
+ break;
72
+ case "ECDH-ES":
73
+ case "ECDH-ES+A128KW":
74
+ case "ECDH-ES+A192KW":
75
+ case "ECDH-ES+A256KW":
76
+ algorithm = { name: jwk.crv };
77
+ keyUsages = jwk.d ? ["deriveBits"] : [];
78
+ break;
79
+ default:
80
+ throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
81
+ }
82
+ break;
83
+ }
84
+ default:
85
+ throw new JOSENotSupported('Invalid or unsupported JWK "kty" (Key Type) Parameter value');
86
+ }
87
+ return { algorithm, keyUsages };
88
+ }
89
+ const parse = async (jwk) => {
90
+ if (!jwk.alg) {
91
+ throw new TypeError('"alg" argument is required when "jwk.alg" is not present');
92
+ }
93
+ const { algorithm, keyUsages } = subtleMapping(jwk);
94
+ const rest = [
95
+ algorithm,
96
+ jwk.ext ?? false,
97
+ jwk.key_ops ?? keyUsages
98
+ ];
99
+ const keyData = { ...jwk };
100
+ delete keyData.alg;
101
+ delete keyData.use;
102
+ return crypto.subtle.importKey("jwk", keyData, ...rest);
103
+ };
104
+ export {
105
+ parse as default
106
+ };
107
+ //# sourceMappingURL=jwk_to_key.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwk_to_key.esm.js","sources":["../../../../../../node_modules/jose/dist/browser/runtime/jwk_to_key.js"],"sourcesContent":["import crypto from './webcrypto.js';\nimport { JOSENotSupported } from '../util/errors.js';\nfunction subtleMapping(jwk) {\n let algorithm;\n let keyUsages;\n switch (jwk.kty) {\n case 'RSA': {\n switch (jwk.alg) {\n case 'PS256':\n case 'PS384':\n case 'PS512':\n algorithm = { name: 'RSA-PSS', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'RS256':\n case 'RS384':\n case 'RS512':\n algorithm = { name: 'RSASSA-PKCS1-v1_5', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n algorithm = {\n name: 'RSA-OAEP',\n hash: `SHA-${parseInt(jwk.alg.slice(-3), 10) || 1}`,\n };\n keyUsages = jwk.d ? ['decrypt', 'unwrapKey'] : ['encrypt', 'wrapKey'];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n break;\n }\n case 'EC': {\n switch (jwk.alg) {\n case 'ES256':\n algorithm = { name: 'ECDSA', namedCurve: 'P-256' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ES384':\n algorithm = { name: 'ECDSA', namedCurve: 'P-384' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ES512':\n algorithm = { name: 'ECDSA', namedCurve: 'P-521' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: 'ECDH', namedCurve: jwk.crv };\n keyUsages = jwk.d ? ['deriveBits'] : [];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n break;\n }\n case 'OKP': {\n switch (jwk.alg) {\n case 'Ed25519':\n algorithm = { name: 'Ed25519' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'EdDSA':\n algorithm = { name: jwk.crv };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: jwk.crv };\n keyUsages = jwk.d ? ['deriveBits'] : [];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n break;\n }\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"kty\" (Key Type) Parameter value');\n }\n return { algorithm, keyUsages };\n}\nconst parse = async (jwk) => {\n if (!jwk.alg) {\n throw new TypeError('\"alg\" argument is required when \"jwk.alg\" is not present');\n }\n const { algorithm, keyUsages } = subtleMapping(jwk);\n const rest = [\n algorithm,\n jwk.ext ?? false,\n jwk.key_ops ?? keyUsages,\n ];\n const keyData = { ...jwk };\n delete keyData.alg;\n delete keyData.use;\n return crypto.subtle.importKey('jwk', keyData, ...rest);\n};\nexport default parse;\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../lib/is_jwk.cjs.js"),t=require("./base64url.cjs.js"),r=require("./jwk_to_key.cjs.js"),i=e=>t.decode(e);let a,l;const n=e=>"KeyObject"===e?.[Symbol.toStringTag],o=async(e,t,i,a,l=!1)=>{let n=e.get(t);if(n?.[a])return n[a];const o=await r.default({...i,alg:a});return l&&Object.freeze(t),n?n[a]=o:e.set(t,{[a]:o}),o},u={normalizePublicKey:(r,a)=>{if(n(r)){let e=r.export({format:"jwk"});return delete e.d,delete e.dp,delete e.dq,delete e.p,delete e.q,delete e.qi,e.k?i(e.k):(l||(l=new WeakMap),o(l,r,e,a))}if(e.isJWK(r)){if(r.k)return t.decode(r.k);l||(l=new WeakMap);return o(l,r,r,a,!0)}return r},normalizePrivateKey:(r,l)=>{if(n(r)){let e=r.export({format:"jwk"});return e.k?i(e.k):(a||(a=new WeakMap),o(a,r,e,l))}if(e.isJWK(r)){if(r.k)return t.decode(r.k);a||(a=new WeakMap);return o(a,r,r,l,!0)}return r}};exports.default=u;
2
+ //# sourceMappingURL=normalize_key.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize_key.cjs.js","sources":["../../../../../../node_modules/jose/dist/browser/runtime/normalize_key.js"],"sourcesContent":["import { isJWK } from '../lib/is_jwk.js';\nimport { decode } from './base64url.js';\nimport importJWK from './jwk_to_key.js';\nconst exportKeyValue = (k) => decode(k);\nlet privCache;\nlet pubCache;\nconst isKeyObject = (key) => {\n return key?.[Symbol.toStringTag] === 'KeyObject';\n};\nconst importAndCache = async (cache, key, jwk, alg, freeze = false) => {\n let cached = cache.get(key);\n if (cached?.[alg]) {\n return cached[alg];\n }\n const cryptoKey = await importJWK({ ...jwk, alg });\n if (freeze)\n Object.freeze(key);\n if (!cached) {\n cache.set(key, { [alg]: cryptoKey });\n }\n else {\n cached[alg] = cryptoKey;\n }\n return cryptoKey;\n};\nconst normalizePublicKey = (key, alg) => {\n if (isKeyObject(key)) {\n let jwk = key.export({ format: 'jwk' });\n delete jwk.d;\n delete jwk.dp;\n delete jwk.dq;\n delete jwk.p;\n delete jwk.q;\n delete jwk.qi;\n if (jwk.k) {\n return exportKeyValue(jwk.k);\n }\n pubCache || (pubCache = new WeakMap());\n return importAndCache(pubCache, key, jwk, alg);\n }\n if (isJWK(key)) {\n if (key.k)\n return decode(key.k);\n pubCache || (pubCache = new WeakMap());\n const cryptoKey = importAndCache(pubCache, key, key, alg, true);\n return cryptoKey;\n }\n return key;\n};\nconst normalizePrivateKey = (key, alg) => {\n if (isKeyObject(key)) {\n let jwk = key.export({ format: 'jwk' });\n if (jwk.k) {\n return exportKeyValue(jwk.k);\n }\n privCache || (privCache = new WeakMap());\n return importAndCache(privCache, key, jwk, alg);\n }\n if (isJWK(key)) {\n if (key.k)\n return decode(key.k);\n privCache || (privCache = new WeakMap());\n const cryptoKey = importAndCache(privCache, key, key, alg, true);\n return cryptoKey;\n }\n return key;\n};\nexport default { normalizePublicKey, normalizePrivateKey };\n"],"names":["exportKeyValue","k","decode","privCache","pubCache","isKeyObject","key","Symbol","toStringTag","importAndCache","async","cache","jwk","alg","freeze","cached","get","cryptoKey","importJWK","Object","set","normalize","normalizePublicKey","export","format","d","dp","dq","p","q","qi","WeakMap","isJWK","normalizePrivateKey"],"mappings":"qNAGMA,EAAkBC,GAAMC,EAAAA,OAAOD,GACrC,IAAIE,EACAC,EACJ,MAAMC,EAAeC,GACoB,cAA9BA,IAAMC,OAAOC,aAElBC,EAAiBC,MAAOC,EAAOL,EAAKM,EAAKC,EAAKC,GAAS,KACzD,IAAIC,EAASJ,EAAMK,IAAIV,GACvB,GAAIS,IAASF,GACT,OAAOE,EAAOF,GAElB,MAAMI,QAAkBC,EAAAA,QAAU,IAAKN,EAAKC,QAS5C,OARIC,GACAK,OAAOL,OAAOR,GACbS,EAIDA,EAAOF,GAAOI,EAHdN,EAAMS,IAAId,EAAK,CAAEO,CAACA,GAAMI,IAKrBA,GA4CXI,EAAe,CAAEC,mBA1CU,CAAChB,EAAKO,KAC7B,GAAIR,EAAYC,GAAM,CAClB,IAAIM,EAAMN,EAAIiB,OAAO,CAAEC,OAAQ,QAO/B,cANOZ,EAAIa,SACJb,EAAIc,UACJd,EAAIe,UACJf,EAAIgB,SACJhB,EAAIiB,SACJjB,EAAIkB,GACPlB,EAAIX,EACGD,EAAeY,EAAIX,IAE9BG,IAAaA,MAAe2B,SACrBtB,EAAeL,EAAUE,EAAKM,EAAKC,GAC9C,CACA,GAAImB,EAAAA,MAAM1B,GAAM,CACZ,GAAIA,EAAIL,EACJ,OAAOC,EAAAA,OAAOI,EAAIL,GACtBG,IAAaA,MAAe2B,SAE5B,OADkBtB,EAAeL,EAAUE,EAAKA,EAAKO,GAAK,EAE9D,CACA,OAAOP,GAoB0B2B,oBAlBT,CAAC3B,EAAKO,KAC9B,GAAIR,EAAYC,GAAM,CAClB,IAAIM,EAAMN,EAAIiB,OAAO,CAAEC,OAAQ,QAC/B,OAAIZ,EAAIX,EACGD,EAAeY,EAAIX,IAE9BE,IAAcA,MAAgB4B,SACvBtB,EAAeN,EAAWG,EAAKM,EAAKC,GAC/C,CACA,GAAImB,EAAAA,MAAM1B,GAAM,CACZ,GAAIA,EAAIL,EACJ,OAAOC,EAAAA,OAAOI,EAAIL,GACtBE,IAAcA,MAAgB4B,SAE9B,OADkBtB,EAAeN,EAAWG,EAAKA,EAAKO,GAAK,EAE/D,CACA,OAAOP","x_google_ignoreList":[0]}
@@ -0,0 +1,71 @@
1
+ import { isJWK } from "../lib/is_jwk.esm.js";
2
+ import { decode } from "./base64url.esm.js";
3
+ import parse from "./jwk_to_key.esm.js";
4
+ const exportKeyValue = (k) => decode(k);
5
+ let privCache;
6
+ let pubCache;
7
+ const isKeyObject = (key) => {
8
+ return key?.[Symbol.toStringTag] === "KeyObject";
9
+ };
10
+ const importAndCache = async (cache, key, jwk, alg, freeze = false) => {
11
+ let cached = cache.get(key);
12
+ if (cached?.[alg]) {
13
+ return cached[alg];
14
+ }
15
+ const cryptoKey = await parse({ ...jwk, alg });
16
+ if (freeze)
17
+ Object.freeze(key);
18
+ if (!cached) {
19
+ cache.set(key, { [alg]: cryptoKey });
20
+ } else {
21
+ cached[alg] = cryptoKey;
22
+ }
23
+ return cryptoKey;
24
+ };
25
+ const normalizePublicKey = (key, alg) => {
26
+ if (isKeyObject(key)) {
27
+ let jwk = key.export({ format: "jwk" });
28
+ delete jwk.d;
29
+ delete jwk.dp;
30
+ delete jwk.dq;
31
+ delete jwk.p;
32
+ delete jwk.q;
33
+ delete jwk.qi;
34
+ if (jwk.k) {
35
+ return exportKeyValue(jwk.k);
36
+ }
37
+ pubCache || (pubCache = /* @__PURE__ */ new WeakMap());
38
+ return importAndCache(pubCache, key, jwk, alg);
39
+ }
40
+ if (isJWK(key)) {
41
+ if (key.k)
42
+ return decode(key.k);
43
+ pubCache || (pubCache = /* @__PURE__ */ new WeakMap());
44
+ const cryptoKey = importAndCache(pubCache, key, key, alg, true);
45
+ return cryptoKey;
46
+ }
47
+ return key;
48
+ };
49
+ const normalizePrivateKey = (key, alg) => {
50
+ if (isKeyObject(key)) {
51
+ let jwk = key.export({ format: "jwk" });
52
+ if (jwk.k) {
53
+ return exportKeyValue(jwk.k);
54
+ }
55
+ privCache || (privCache = /* @__PURE__ */ new WeakMap());
56
+ return importAndCache(privCache, key, jwk, alg);
57
+ }
58
+ if (isJWK(key)) {
59
+ if (key.k)
60
+ return decode(key.k);
61
+ privCache || (privCache = /* @__PURE__ */ new WeakMap());
62
+ const cryptoKey = importAndCache(privCache, key, key, alg, true);
63
+ return cryptoKey;
64
+ }
65
+ return key;
66
+ };
67
+ const normalize = { normalizePublicKey, normalizePrivateKey };
68
+ export {
69
+ normalize as default
70
+ };
71
+ //# sourceMappingURL=normalize_key.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize_key.esm.js","sources":["../../../../../../node_modules/jose/dist/browser/runtime/normalize_key.js"],"sourcesContent":["import { isJWK } from '../lib/is_jwk.js';\nimport { decode } from './base64url.js';\nimport importJWK from './jwk_to_key.js';\nconst exportKeyValue = (k) => decode(k);\nlet privCache;\nlet pubCache;\nconst isKeyObject = (key) => {\n return key?.[Symbol.toStringTag] === 'KeyObject';\n};\nconst importAndCache = async (cache, key, jwk, alg, freeze = false) => {\n let cached = cache.get(key);\n if (cached?.[alg]) {\n return cached[alg];\n }\n const cryptoKey = await importJWK({ ...jwk, alg });\n if (freeze)\n Object.freeze(key);\n if (!cached) {\n cache.set(key, { [alg]: cryptoKey });\n }\n else {\n cached[alg] = cryptoKey;\n }\n return cryptoKey;\n};\nconst normalizePublicKey = (key, alg) => {\n if (isKeyObject(key)) {\n let jwk = key.export({ format: 'jwk' });\n delete jwk.d;\n delete jwk.dp;\n delete jwk.dq;\n delete jwk.p;\n delete jwk.q;\n delete jwk.qi;\n if (jwk.k) {\n return exportKeyValue(jwk.k);\n }\n pubCache || (pubCache = new WeakMap());\n return importAndCache(pubCache, key, jwk, alg);\n }\n if (isJWK(key)) {\n if (key.k)\n return decode(key.k);\n pubCache || (pubCache = new WeakMap());\n const cryptoKey = importAndCache(pubCache, key, key, alg, true);\n return cryptoKey;\n }\n return key;\n};\nconst normalizePrivateKey = (key, alg) => {\n if (isKeyObject(key)) {\n let jwk = key.export({ format: 'jwk' });\n if (jwk.k) {\n return exportKeyValue(jwk.k);\n }\n privCache || (privCache = new WeakMap());\n return importAndCache(privCache, key, jwk, alg);\n }\n if (isJWK(key)) {\n if (key.k)\n return decode(key.k);\n privCache || (privCache = new WeakMap());\n const cryptoKey = importAndCache(privCache, key, key, alg, true);\n return cryptoKey;\n }\n return key;\n};\nexport default { normalizePublicKey, normalizePrivateKey };\n"],"names":["importJWK"],"mappings":";;;AAGA,MAAM,iBAAiB,CAAC,MAAM,OAAO,CAAC;AACtC,IAAI;AACJ,IAAI;AACJ,MAAM,cAAc,CAAC,QAAQ;AACzB,SAAO,MAAM,OAAO,WAAW,MAAM;AACzC;AACA,MAAM,iBAAiB,OAAO,OAAO,KAAK,KAAK,KAAK,SAAS,UAAU;AACnE,MAAI,SAAS,MAAM,IAAI,GAAG;AAC1B,MAAI,SAAS,GAAG,GAAG;AACf,WAAO,OAAO,GAAG;AAAA,EACrB;AACA,QAAM,YAAY,MAAMA,MAAU,EAAE,GAAG,KAAK,IAAG,CAAE;AACjD,MAAI;AACA,WAAO,OAAO,GAAG;AACrB,MAAI,CAAC,QAAQ;AACT,UAAM,IAAI,KAAK,EAAE,CAAC,GAAG,GAAG,UAAS,CAAE;AAAA,EACvC,OACK;AACD,WAAO,GAAG,IAAI;AAAA,EAClB;AACA,SAAO;AACX;AACA,MAAM,qBAAqB,CAAC,KAAK,QAAQ;AACrC,MAAI,YAAY,GAAG,GAAG;AAClB,QAAI,MAAM,IAAI,OAAO,EAAE,QAAQ,MAAK,CAAE;AACtC,WAAO,IAAI;AACX,WAAO,IAAI;AACX,WAAO,IAAI;AACX,WAAO,IAAI;AACX,WAAO,IAAI;AACX,WAAO,IAAI;AACX,QAAI,IAAI,GAAG;AACP,aAAO,eAAe,IAAI,CAAC;AAAA,IAC/B;AACA,iBAAa,WAAW,oBAAI;AAC5B,WAAO,eAAe,UAAU,KAAK,KAAK,GAAG;AAAA,EACjD;AACA,MAAI,MAAM,GAAG,GAAG;AACZ,QAAI,IAAI;AACJ,aAAO,OAAO,IAAI,CAAC;AACvB,iBAAa,WAAW,oBAAI;AAC5B,UAAM,YAAY,eAAe,UAAU,KAAK,KAAK,KAAK,IAAI;AAC9D,WAAO;AAAA,EACX;AACA,SAAO;AACX;AACA,MAAM,sBAAsB,CAAC,KAAK,QAAQ;AACtC,MAAI,YAAY,GAAG,GAAG;AAClB,QAAI,MAAM,IAAI,OAAO,EAAE,QAAQ,MAAK,CAAE;AACtC,QAAI,IAAI,GAAG;AACP,aAAO,eAAe,IAAI,CAAC;AAAA,IAC/B;AACA,kBAAc,YAAY,oBAAI;AAC9B,WAAO,eAAe,WAAW,KAAK,KAAK,GAAG;AAAA,EAClD;AACA,MAAI,MAAM,GAAG,GAAG;AACZ,QAAI,IAAI;AACJ,aAAO,OAAO,IAAI,CAAC;AACvB,kBAAc,YAAY,oBAAI;AAC9B,UAAM,YAAY,eAAe,WAAW,KAAK,KAAK,KAAK,IAAI;AAC/D,WAAO;AAAA,EACX;AACA,SAAO;AACX;AACA,MAAA,YAAe,EAAE,oBAAoB,oBAAmB;","x_google_ignoreList":[0]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./subtle_dsa.cjs.js"),t=require("./webcrypto.cjs.js"),s=require("./check_key_length.cjs.js"),r=require("./get_sign_verify_key.cjs.js");exports.default=async(u,a,i)=>{const l=await r.default(u,a,"sign");s.default(u,l);const c=await t.default.subtle.sign(e.default(u,l.algorithm),l,i);return new Uint8Array(c)};
2
+ //# sourceMappingURL=sign.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.cjs.js","sources":["../../../../../../node_modules/jose/dist/browser/runtime/sign.js"],"sourcesContent":["import subtleAlgorithm from './subtle_dsa.js';\nimport crypto from './webcrypto.js';\nimport checkKeyLength from './check_key_length.js';\nimport getSignKey from './get_sign_verify_key.js';\nconst sign = async (alg, key, data) => {\n const cryptoKey = await getSignKey(alg, key, 'sign');\n checkKeyLength(alg, cryptoKey);\n const signature = await crypto.subtle.sign(subtleAlgorithm(alg, cryptoKey.algorithm), cryptoKey, data);\n return new Uint8Array(signature);\n};\nexport default sign;\n"],"names":["async","alg","key","data","cryptoKey","getSignKey","checkKeyLength","signature","crypto","subtle","sign","subtleAlgorithm","algorithm","Uint8Array"],"mappings":"oRAIaA,MAAOC,EAAKC,EAAKC,KAC1B,MAAMC,QAAkBC,EAAAA,QAAWJ,EAAKC,EAAK,QAC7CI,EAAAA,QAAeL,EAAKG,GACpB,MAAMG,QAAkBC,UAAOC,OAAOC,KAAKC,EAAAA,QAAgBV,EAAKG,EAAUQ,WAAYR,EAAWD,GACjG,OAAO,IAAIU,WAAWN","x_google_ignoreList":[0]}
@@ -0,0 +1,14 @@
1
+ import subtleDsa from "./subtle_dsa.esm.js";
2
+ import crypto from "./webcrypto.esm.js";
3
+ import checkKeyLength from "./check_key_length.esm.js";
4
+ import getCryptoKey from "./get_sign_verify_key.esm.js";
5
+ const sign = async (alg, key, data) => {
6
+ const cryptoKey = await getCryptoKey(alg, key, "sign");
7
+ checkKeyLength(alg, cryptoKey);
8
+ const signature = await crypto.subtle.sign(subtleDsa(alg, cryptoKey.algorithm), cryptoKey, data);
9
+ return new Uint8Array(signature);
10
+ };
11
+ export {
12
+ sign as default
13
+ };
14
+ //# sourceMappingURL=sign.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.esm.js","sources":["../../../../../../node_modules/jose/dist/browser/runtime/sign.js"],"sourcesContent":["import subtleAlgorithm from './subtle_dsa.js';\nimport crypto from './webcrypto.js';\nimport checkKeyLength from './check_key_length.js';\nimport getSignKey from './get_sign_verify_key.js';\nconst sign = async (alg, key, data) => {\n const cryptoKey = await getSignKey(alg, key, 'sign');\n checkKeyLength(alg, cryptoKey);\n const signature = await crypto.subtle.sign(subtleAlgorithm(alg, cryptoKey.algorithm), cryptoKey, data);\n return new Uint8Array(signature);\n};\nexport default sign;\n"],"names":["getSignKey","subtleAlgorithm"],"mappings":";;;;AAIK,MAAC,OAAO,OAAO,KAAK,KAAK,SAAS;AACnC,QAAM,YAAY,MAAMA,aAAW,KAAK,KAAK,MAAM;AACnD,iBAAe,KAAK,SAAS;AAC7B,QAAM,YAAY,MAAM,OAAO,OAAO,KAAKC,UAAgB,KAAK,UAAU,SAAS,GAAG,WAAW,IAAI;AACrG,SAAO,IAAI,WAAW,SAAS;AACnC;","x_google_ignoreList":[0]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../util/errors.cjs.js");exports.default=function(a,s){const r=`SHA-${a.slice(-3)}`;switch(a){case"HS256":case"HS384":case"HS512":return{hash:r,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:r,name:"RSA-PSS",saltLength:a.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:r,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:r,name:"ECDSA",namedCurve:s.namedCurve};case"Ed25519":return{name:"Ed25519"};case"EdDSA":return{name:s.name};default:throw new e.JOSENotSupported(`alg ${a} is not supported either by JOSE or your javascript runtime`)}};
2
+ //# sourceMappingURL=subtle_dsa.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subtle_dsa.cjs.js","sources":["../../../../../../node_modules/jose/dist/browser/runtime/subtle_dsa.js"],"sourcesContent":["import { JOSENotSupported } from '../util/errors.js';\nexport default function subtleDsa(alg, algorithm) {\n const hash = `SHA-${alg.slice(-3)}`;\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512':\n return { hash, name: 'HMAC' };\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return { hash, name: 'RSA-PSS', saltLength: alg.slice(-3) >> 3 };\n case 'RS256':\n case 'RS384':\n case 'RS512':\n return { hash, name: 'RSASSA-PKCS1-v1_5' };\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return { hash, name: 'ECDSA', namedCurve: algorithm.namedCurve };\n case 'Ed25519':\n return { name: 'Ed25519' };\n case 'EdDSA':\n return { name: algorithm.name };\n default:\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n }\n}\n"],"names":["alg","algorithm","hash","slice","name","saltLength","namedCurve","JOSENotSupported"],"mappings":"qKACe,SAAmBA,EAAKC,GACnC,MAAMC,EAAO,OAAOF,EAAIG,YACxB,OAAQH,GACJ,IAAK,QACL,IAAK,QACL,IAAK,QACD,MAAO,CAAEE,OAAME,KAAM,QACzB,IAAK,QACL,IAAK,QACL,IAAK,QACD,MAAO,CAAEF,OAAME,KAAM,UAAWC,WAAYL,EAAIG,OAAM,IAAO,GACjE,IAAK,QACL,IAAK,QACL,IAAK,QACD,MAAO,CAAED,OAAME,KAAM,qBACzB,IAAK,QACL,IAAK,QACL,IAAK,QACD,MAAO,CAAEF,OAAME,KAAM,QAASE,WAAYL,EAAUK,YACxD,IAAK,UACD,MAAO,CAAEF,KAAM,WACnB,IAAK,QACD,MAAO,CAAEA,KAAMH,EAAUG,MAC7B,QACI,MAAM,IAAIG,EAAAA,iBAAiB,OAAOP,gEAE9C","x_google_ignoreList":[0]}
@@ -0,0 +1,32 @@
1
+ import { JOSENotSupported } from "../util/errors.esm.js";
2
+ function subtleDsa(alg, algorithm) {
3
+ const hash = `SHA-${alg.slice(-3)}`;
4
+ switch (alg) {
5
+ case "HS256":
6
+ case "HS384":
7
+ case "HS512":
8
+ return { hash, name: "HMAC" };
9
+ case "PS256":
10
+ case "PS384":
11
+ case "PS512":
12
+ return { hash, name: "RSA-PSS", saltLength: alg.slice(-3) >> 3 };
13
+ case "RS256":
14
+ case "RS384":
15
+ case "RS512":
16
+ return { hash, name: "RSASSA-PKCS1-v1_5" };
17
+ case "ES256":
18
+ case "ES384":
19
+ case "ES512":
20
+ return { hash, name: "ECDSA", namedCurve: algorithm.namedCurve };
21
+ case "Ed25519":
22
+ return { name: "Ed25519" };
23
+ case "EdDSA":
24
+ return { name: algorithm.name };
25
+ default:
26
+ throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
27
+ }
28
+ }
29
+ export {
30
+ subtleDsa as default
31
+ };
32
+ //# sourceMappingURL=subtle_dsa.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subtle_dsa.esm.js","sources":["../../../../../../node_modules/jose/dist/browser/runtime/subtle_dsa.js"],"sourcesContent":["import { JOSENotSupported } from '../util/errors.js';\nexport default function subtleDsa(alg, algorithm) {\n const hash = `SHA-${alg.slice(-3)}`;\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512':\n return { hash, name: 'HMAC' };\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return { hash, name: 'RSA-PSS', saltLength: alg.slice(-3) >> 3 };\n case 'RS256':\n case 'RS384':\n case 'RS512':\n return { hash, name: 'RSASSA-PKCS1-v1_5' };\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return { hash, name: 'ECDSA', namedCurve: algorithm.namedCurve };\n case 'Ed25519':\n return { name: 'Ed25519' };\n case 'EdDSA':\n return { name: algorithm.name };\n default:\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n }\n}\n"],"names":[],"mappings":";AACe,SAAS,UAAU,KAAK,WAAW;AAC9C,QAAM,OAAO,OAAO,IAAI,MAAM,EAAE,CAAC;AACjC,UAAQ,KAAG;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACD,aAAO,EAAE,MAAM,MAAM,OAAM;AAAA,IAC/B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACD,aAAO,EAAE,MAAM,MAAM,WAAW,YAAY,IAAI,MAAM,EAAE,KAAK,EAAC;AAAA,IAClE,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACD,aAAO,EAAE,MAAM,MAAM,oBAAmB;AAAA,IAC5C,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACD,aAAO,EAAE,MAAM,MAAM,SAAS,YAAY,UAAU,WAAU;AAAA,IAClE,KAAK;AACD,aAAO,EAAE,MAAM,UAAS;AAAA,IAC5B,KAAK;AACD,aAAO,EAAE,MAAM,UAAU,KAAI;AAAA,IACjC;AACI,YAAM,IAAI,iBAAiB,OAAO,GAAG,6DAA6D;AAAA,EAC9G;AACA;","x_google_ignoreList":[0]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=crypto;exports.default=e,exports.isCryptoKey=e=>e instanceof CryptoKey;
2
+ //# sourceMappingURL=webcrypto.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webcrypto.cjs.js","sources":["../../../../../../node_modules/jose/dist/browser/runtime/webcrypto.js"],"sourcesContent":["export default crypto;\nexport const isCryptoKey = (key) => key instanceof CryptoKey;\n"],"names":["crypto$1","crypto","key","CryptoKey"],"mappings":"4GAAA,MAAAA,EAAeC,6CACaC,GAAQA,aAAeC","x_google_ignoreList":[0]}
@@ -0,0 +1,7 @@
1
+ const crypto$1 = crypto;
2
+ const isCryptoKey = (key) => key instanceof CryptoKey;
3
+ export {
4
+ crypto$1 as default,
5
+ isCryptoKey
6
+ };
7
+ //# sourceMappingURL=webcrypto.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webcrypto.esm.js","sources":["../../../../../../node_modules/jose/dist/browser/runtime/webcrypto.js"],"sourcesContent":["export default crypto;\nexport const isCryptoKey = (key) => key instanceof CryptoKey;\n"],"names":[],"mappings":"AAAA,MAAA,WAAe;AACH,MAAC,cAAc,CAAC,QAAQ,eAAe;","x_google_ignoreList":[0]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class e extends Error{constructor(e,s){super(e,s),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,Error.captureStackTrace?.(this,this.constructor)}}e.code="ERR_JOSE_GENERIC";class s extends e{constructor(e,s,t="unspecified",o="unspecified"){super(e,{cause:{claim:t,reason:o,payload:s}}),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=t,this.reason=o,this.payload=s}}s.code="ERR_JWT_CLAIM_VALIDATION_FAILED";class t extends e{constructor(e,s,t="unspecified",o="unspecified"){super(e,{cause:{claim:t,reason:o,payload:s}}),this.code="ERR_JWT_EXPIRED",this.claim=t,this.reason=o,this.payload=s}}t.code="ERR_JWT_EXPIRED";class o extends e{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}}o.code="ERR_JOSE_ALG_NOT_ALLOWED";class c extends e{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}}c.code="ERR_JOSE_NOT_SUPPORTED";class r extends e{constructor(e="decryption operation failed",s){super(e,s),this.code="ERR_JWE_DECRYPTION_FAILED"}}r.code="ERR_JWE_DECRYPTION_FAILED";class _ extends e{constructor(){super(...arguments),this.code="ERR_JWE_INVALID"}}_.code="ERR_JWE_INVALID";class E extends e{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}}E.code="ERR_JWS_INVALID";class i extends e{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}}i.code="ERR_JWT_INVALID";class d extends e{constructor(){super(...arguments),this.code="ERR_JWK_INVALID"}}d.code="ERR_JWK_INVALID";class R extends e{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}}R.code="ERR_JWKS_INVALID";class n extends e{constructor(e="no applicable key found in the JSON Web Key Set",s){super(e,s),this.code="ERR_JWKS_NO_MATCHING_KEY"}}n.code="ERR_JWKS_NO_MATCHING_KEY";class a extends e{constructor(e="multiple matching keys found in the JSON Web Key Set",s){super(e,s),this.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS"}}a.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS";class I extends e{constructor(e="request timed out",s){super(e,s),this.code="ERR_JWKS_TIMEOUT"}}I.code="ERR_JWKS_TIMEOUT";class u extends e{constructor(e="signature verification failed",s){super(e,s),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}}u.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",exports.JOSEAlgNotAllowed=o,exports.JOSEError=e,exports.JOSENotSupported=c,exports.JWEDecryptionFailed=r,exports.JWEInvalid=_,exports.JWKInvalid=d,exports.JWKSInvalid=R,exports.JWKSMultipleMatchingKeys=a,exports.JWKSNoMatchingKey=n,exports.JWKSTimeout=I,exports.JWSInvalid=E,exports.JWSSignatureVerificationFailed=u,exports.JWTClaimValidationFailed=s,exports.JWTExpired=t,exports.JWTInvalid=i;
2
+ //# sourceMappingURL=errors.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.cjs.js","sources":["../../../../../../node_modules/jose/dist/browser/util/errors.js"],"sourcesContent":["export class JOSEError extends Error {\n constructor(message, options) {\n super(message, options);\n this.code = 'ERR_JOSE_GENERIC';\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nJOSEError.code = 'ERR_JOSE_GENERIC';\nexport class JWTClaimValidationFailed extends JOSEError {\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nJWTClaimValidationFailed.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\nexport class JWTExpired extends JOSEError {\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.code = 'ERR_JWT_EXPIRED';\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nJWTExpired.code = 'ERR_JWT_EXPIRED';\nexport class JOSEAlgNotAllowed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n }\n}\nJOSEAlgNotAllowed.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\nexport class JOSENotSupported extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_NOT_SUPPORTED';\n }\n}\nJOSENotSupported.code = 'ERR_JOSE_NOT_SUPPORTED';\nexport class JWEDecryptionFailed extends JOSEError {\n constructor(message = 'decryption operation failed', options) {\n super(message, options);\n this.code = 'ERR_JWE_DECRYPTION_FAILED';\n }\n}\nJWEDecryptionFailed.code = 'ERR_JWE_DECRYPTION_FAILED';\nexport class JWEInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWE_INVALID';\n }\n}\nJWEInvalid.code = 'ERR_JWE_INVALID';\nexport class JWSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWS_INVALID';\n }\n}\nJWSInvalid.code = 'ERR_JWS_INVALID';\nexport class JWTInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWT_INVALID';\n }\n}\nJWTInvalid.code = 'ERR_JWT_INVALID';\nexport class JWKInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWK_INVALID';\n }\n}\nJWKInvalid.code = 'ERR_JWK_INVALID';\nexport class JWKSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_INVALID';\n }\n}\nJWKSInvalid.code = 'ERR_JWKS_INVALID';\nexport class JWKSNoMatchingKey extends JOSEError {\n constructor(message = 'no applicable key found in the JSON Web Key Set', options) {\n super(message, options);\n this.code = 'ERR_JWKS_NO_MATCHING_KEY';\n }\n}\nJWKSNoMatchingKey.code = 'ERR_JWKS_NO_MATCHING_KEY';\nexport class JWKSMultipleMatchingKeys extends JOSEError {\n constructor(message = 'multiple matching keys found in the JSON Web Key Set', options) {\n super(message, options);\n this.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n }\n}\nSymbol.asyncIterator;\nJWKSMultipleMatchingKeys.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\nexport class JWKSTimeout extends JOSEError {\n constructor(message = 'request timed out', options) {\n super(message, options);\n this.code = 'ERR_JWKS_TIMEOUT';\n }\n}\nJWKSTimeout.code = 'ERR_JWKS_TIMEOUT';\nexport class JWSSignatureVerificationFailed extends JOSEError {\n constructor(message = 'signature verification failed', options) {\n super(message, options);\n this.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n }\n}\nJWSSignatureVerificationFailed.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n"],"names":["JOSEError","Error","constructor","message","options","super","this","code","name","captureStackTrace","JWTClaimValidationFailed","payload","claim","reason","cause","JWTExpired","JOSEAlgNotAllowed","arguments","JOSENotSupported","JWEDecryptionFailed","JWEInvalid","JWSInvalid","JWTInvalid","JWKInvalid","JWKSInvalid","JWKSNoMatchingKey","JWKSMultipleMatchingKeys","JWKSTimeout","JWSSignatureVerificationFailed"],"mappings":"gFAAO,MAAMA,UAAkBC,MAC3B,WAAAC,CAAYC,EAASC,GACjBC,MAAMF,EAASC,GACfE,KAAKC,KAAO,mBACZD,KAAKE,KAAOF,KAAKJ,YAAYM,KAC7BP,MAAMQ,oBAAoBH,KAAMA,KAAKJ,YACzC,EAEJF,EAAUO,KAAO,mBACV,MAAMG,UAAiCV,EAC1C,WAAAE,CAAYC,EAASQ,EAASC,EAAQ,cAAeC,EAAS,eAC1DR,MAAMF,EAAS,CAAEW,MAAO,CAAEF,QAAOC,SAAQF,aACzCL,KAAKC,KAAO,kCACZD,KAAKM,MAAQA,EACbN,KAAKO,OAASA,EACdP,KAAKK,QAAUA,CACnB,EAEJD,EAAyBH,KAAO,kCACzB,MAAMQ,UAAmBf,EAC5B,WAAAE,CAAYC,EAASQ,EAASC,EAAQ,cAAeC,EAAS,eAC1DR,MAAMF,EAAS,CAAEW,MAAO,CAAEF,QAAOC,SAAQF,aACzCL,KAAKC,KAAO,kBACZD,KAAKM,MAAQA,EACbN,KAAKO,OAASA,EACdP,KAAKK,QAAUA,CACnB,EAEJI,EAAWR,KAAO,kBACX,MAAMS,UAA0BhB,EACnC,WAAAE,GACIG,SAASY,WACTX,KAAKC,KAAO,0BAChB,EAEJS,EAAkBT,KAAO,2BAClB,MAAMW,UAAyBlB,EAClC,WAAAE,GACIG,SAASY,WACTX,KAAKC,KAAO,wBAChB,EAEJW,EAAiBX,KAAO,yBACjB,MAAMY,UAA4BnB,EACrC,WAAAE,CAAYC,EAAU,8BAA+BC,GACjDC,MAAMF,EAASC,GACfE,KAAKC,KAAO,2BAChB,EAEJY,EAAoBZ,KAAO,4BACpB,MAAMa,UAAmBpB,EAC5B,WAAAE,GACIG,SAASY,WACTX,KAAKC,KAAO,iBAChB,EAEJa,EAAWb,KAAO,kBACX,MAAMc,UAAmBrB,EAC5B,WAAAE,GACIG,SAASY,WACTX,KAAKC,KAAO,iBAChB,EAEJc,EAAWd,KAAO,kBACX,MAAMe,UAAmBtB,EAC5B,WAAAE,GACIG,SAASY,WACTX,KAAKC,KAAO,iBAChB,EAEJe,EAAWf,KAAO,kBACX,MAAMgB,UAAmBvB,EAC5B,WAAAE,GACIG,SAASY,WACTX,KAAKC,KAAO,iBAChB,EAEJgB,EAAWhB,KAAO,kBACX,MAAMiB,UAAoBxB,EAC7B,WAAAE,GACIG,SAASY,WACTX,KAAKC,KAAO,kBAChB,EAEJiB,EAAYjB,KAAO,mBACZ,MAAMkB,UAA0BzB,EACnC,WAAAE,CAAYC,EAAU,kDAAmDC,GACrEC,MAAMF,EAASC,GACfE,KAAKC,KAAO,0BAChB,EAEJkB,EAAkBlB,KAAO,2BAClB,MAAMmB,UAAiC1B,EAC1C,WAAAE,CAAYC,EAAU,uDAAwDC,GAC1EC,MAAMF,EAASC,GACfE,KAAKC,KAAO,iCAChB,EAGJmB,EAAyBnB,KAAO,kCACzB,MAAMoB,UAAoB3B,EAC7B,WAAAE,CAAYC,EAAU,oBAAqBC,GACvCC,MAAMF,EAASC,GACfE,KAAKC,KAAO,kBAChB,EAEJoB,EAAYpB,KAAO,mBACZ,MAAMqB,UAAuC5B,EAChD,WAAAE,CAAYC,EAAU,gCAAiCC,GACnDC,MAAMF,EAASC,GACfE,KAAKC,KAAO,uCAChB,EAEJqB,EAA+BrB,KAAO","x_google_ignoreList":[0]}
@@ -0,0 +1,131 @@
1
+ class JOSEError extends Error {
2
+ constructor(message, options) {
3
+ super(message, options);
4
+ this.code = "ERR_JOSE_GENERIC";
5
+ this.name = this.constructor.name;
6
+ Error.captureStackTrace?.(this, this.constructor);
7
+ }
8
+ }
9
+ JOSEError.code = "ERR_JOSE_GENERIC";
10
+ class JWTClaimValidationFailed extends JOSEError {
11
+ constructor(message, payload, claim = "unspecified", reason = "unspecified") {
12
+ super(message, { cause: { claim, reason, payload } });
13
+ this.code = "ERR_JWT_CLAIM_VALIDATION_FAILED";
14
+ this.claim = claim;
15
+ this.reason = reason;
16
+ this.payload = payload;
17
+ }
18
+ }
19
+ JWTClaimValidationFailed.code = "ERR_JWT_CLAIM_VALIDATION_FAILED";
20
+ class JWTExpired extends JOSEError {
21
+ constructor(message, payload, claim = "unspecified", reason = "unspecified") {
22
+ super(message, { cause: { claim, reason, payload } });
23
+ this.code = "ERR_JWT_EXPIRED";
24
+ this.claim = claim;
25
+ this.reason = reason;
26
+ this.payload = payload;
27
+ }
28
+ }
29
+ JWTExpired.code = "ERR_JWT_EXPIRED";
30
+ class JOSEAlgNotAllowed extends JOSEError {
31
+ constructor() {
32
+ super(...arguments);
33
+ this.code = "ERR_JOSE_ALG_NOT_ALLOWED";
34
+ }
35
+ }
36
+ JOSEAlgNotAllowed.code = "ERR_JOSE_ALG_NOT_ALLOWED";
37
+ class JOSENotSupported extends JOSEError {
38
+ constructor() {
39
+ super(...arguments);
40
+ this.code = "ERR_JOSE_NOT_SUPPORTED";
41
+ }
42
+ }
43
+ JOSENotSupported.code = "ERR_JOSE_NOT_SUPPORTED";
44
+ class JWEDecryptionFailed extends JOSEError {
45
+ constructor(message = "decryption operation failed", options) {
46
+ super(message, options);
47
+ this.code = "ERR_JWE_DECRYPTION_FAILED";
48
+ }
49
+ }
50
+ JWEDecryptionFailed.code = "ERR_JWE_DECRYPTION_FAILED";
51
+ class JWEInvalid extends JOSEError {
52
+ constructor() {
53
+ super(...arguments);
54
+ this.code = "ERR_JWE_INVALID";
55
+ }
56
+ }
57
+ JWEInvalid.code = "ERR_JWE_INVALID";
58
+ class JWSInvalid extends JOSEError {
59
+ constructor() {
60
+ super(...arguments);
61
+ this.code = "ERR_JWS_INVALID";
62
+ }
63
+ }
64
+ JWSInvalid.code = "ERR_JWS_INVALID";
65
+ class JWTInvalid extends JOSEError {
66
+ constructor() {
67
+ super(...arguments);
68
+ this.code = "ERR_JWT_INVALID";
69
+ }
70
+ }
71
+ JWTInvalid.code = "ERR_JWT_INVALID";
72
+ class JWKInvalid extends JOSEError {
73
+ constructor() {
74
+ super(...arguments);
75
+ this.code = "ERR_JWK_INVALID";
76
+ }
77
+ }
78
+ JWKInvalid.code = "ERR_JWK_INVALID";
79
+ class JWKSInvalid extends JOSEError {
80
+ constructor() {
81
+ super(...arguments);
82
+ this.code = "ERR_JWKS_INVALID";
83
+ }
84
+ }
85
+ JWKSInvalid.code = "ERR_JWKS_INVALID";
86
+ class JWKSNoMatchingKey extends JOSEError {
87
+ constructor(message = "no applicable key found in the JSON Web Key Set", options) {
88
+ super(message, options);
89
+ this.code = "ERR_JWKS_NO_MATCHING_KEY";
90
+ }
91
+ }
92
+ JWKSNoMatchingKey.code = "ERR_JWKS_NO_MATCHING_KEY";
93
+ class JWKSMultipleMatchingKeys extends JOSEError {
94
+ constructor(message = "multiple matching keys found in the JSON Web Key Set", options) {
95
+ super(message, options);
96
+ this.code = "ERR_JWKS_MULTIPLE_MATCHING_KEYS";
97
+ }
98
+ }
99
+ JWKSMultipleMatchingKeys.code = "ERR_JWKS_MULTIPLE_MATCHING_KEYS";
100
+ class JWKSTimeout extends JOSEError {
101
+ constructor(message = "request timed out", options) {
102
+ super(message, options);
103
+ this.code = "ERR_JWKS_TIMEOUT";
104
+ }
105
+ }
106
+ JWKSTimeout.code = "ERR_JWKS_TIMEOUT";
107
+ class JWSSignatureVerificationFailed extends JOSEError {
108
+ constructor(message = "signature verification failed", options) {
109
+ super(message, options);
110
+ this.code = "ERR_JWS_SIGNATURE_VERIFICATION_FAILED";
111
+ }
112
+ }
113
+ JWSSignatureVerificationFailed.code = "ERR_JWS_SIGNATURE_VERIFICATION_FAILED";
114
+ export {
115
+ JOSEAlgNotAllowed,
116
+ JOSEError,
117
+ JOSENotSupported,
118
+ JWEDecryptionFailed,
119
+ JWEInvalid,
120
+ JWKInvalid,
121
+ JWKSInvalid,
122
+ JWKSMultipleMatchingKeys,
123
+ JWKSNoMatchingKey,
124
+ JWKSTimeout,
125
+ JWSInvalid,
126
+ JWSSignatureVerificationFailed,
127
+ JWTClaimValidationFailed,
128
+ JWTExpired,
129
+ JWTInvalid
130
+ };
131
+ //# sourceMappingURL=errors.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.esm.js","sources":["../../../../../../node_modules/jose/dist/browser/util/errors.js"],"sourcesContent":["export class JOSEError extends Error {\n constructor(message, options) {\n super(message, options);\n this.code = 'ERR_JOSE_GENERIC';\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nJOSEError.code = 'ERR_JOSE_GENERIC';\nexport class JWTClaimValidationFailed extends JOSEError {\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nJWTClaimValidationFailed.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\nexport class JWTExpired extends JOSEError {\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.code = 'ERR_JWT_EXPIRED';\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nJWTExpired.code = 'ERR_JWT_EXPIRED';\nexport class JOSEAlgNotAllowed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n }\n}\nJOSEAlgNotAllowed.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\nexport class JOSENotSupported extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_NOT_SUPPORTED';\n }\n}\nJOSENotSupported.code = 'ERR_JOSE_NOT_SUPPORTED';\nexport class JWEDecryptionFailed extends JOSEError {\n constructor(message = 'decryption operation failed', options) {\n super(message, options);\n this.code = 'ERR_JWE_DECRYPTION_FAILED';\n }\n}\nJWEDecryptionFailed.code = 'ERR_JWE_DECRYPTION_FAILED';\nexport class JWEInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWE_INVALID';\n }\n}\nJWEInvalid.code = 'ERR_JWE_INVALID';\nexport class JWSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWS_INVALID';\n }\n}\nJWSInvalid.code = 'ERR_JWS_INVALID';\nexport class JWTInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWT_INVALID';\n }\n}\nJWTInvalid.code = 'ERR_JWT_INVALID';\nexport class JWKInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWK_INVALID';\n }\n}\nJWKInvalid.code = 'ERR_JWK_INVALID';\nexport class JWKSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_INVALID';\n }\n}\nJWKSInvalid.code = 'ERR_JWKS_INVALID';\nexport class JWKSNoMatchingKey extends JOSEError {\n constructor(message = 'no applicable key found in the JSON Web Key Set', options) {\n super(message, options);\n this.code = 'ERR_JWKS_NO_MATCHING_KEY';\n }\n}\nJWKSNoMatchingKey.code = 'ERR_JWKS_NO_MATCHING_KEY';\nexport class JWKSMultipleMatchingKeys extends JOSEError {\n constructor(message = 'multiple matching keys found in the JSON Web Key Set', options) {\n super(message, options);\n this.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n }\n}\nSymbol.asyncIterator;\nJWKSMultipleMatchingKeys.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\nexport class JWKSTimeout extends JOSEError {\n constructor(message = 'request timed out', options) {\n super(message, options);\n this.code = 'ERR_JWKS_TIMEOUT';\n }\n}\nJWKSTimeout.code = 'ERR_JWKS_TIMEOUT';\nexport class JWSSignatureVerificationFailed extends JOSEError {\n constructor(message = 'signature verification failed', options) {\n super(message, options);\n this.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n }\n}\nJWSSignatureVerificationFailed.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n"],"names":[],"mappings":"AAAO,MAAM,kBAAkB,MAAM;AAAA,EACjC,YAAY,SAAS,SAAS;AAC1B,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AACZ,SAAK,OAAO,KAAK,YAAY;AAC7B,UAAM,oBAAoB,MAAM,KAAK,WAAW;AAAA,EACpD;AACJ;AACA,UAAU,OAAO;AACV,MAAM,iCAAiC,UAAU;AAAA,EACpD,YAAY,SAAS,SAAS,QAAQ,eAAe,SAAS,eAAe;AACzE,UAAM,SAAS,EAAE,OAAO,EAAE,OAAO,QAAQ,QAAO,GAAI;AACpD,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EACnB;AACJ;AACA,yBAAyB,OAAO;AACzB,MAAM,mBAAmB,UAAU;AAAA,EACtC,YAAY,SAAS,SAAS,QAAQ,eAAe,SAAS,eAAe;AACzE,UAAM,SAAS,EAAE,OAAO,EAAE,OAAO,QAAQ,QAAO,GAAI;AACpD,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EACnB;AACJ;AACA,WAAW,OAAO;AACX,MAAM,0BAA0B,UAAU;AAAA,EAC7C,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,OAAO;AAAA,EAChB;AACJ;AACA,kBAAkB,OAAO;AAClB,MAAM,yBAAyB,UAAU;AAAA,EAC5C,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,OAAO;AAAA,EAChB;AACJ;AACA,iBAAiB,OAAO;AACjB,MAAM,4BAA4B,UAAU;AAAA,EAC/C,YAAY,UAAU,+BAA+B,SAAS;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EAChB;AACJ;AACA,oBAAoB,OAAO;AACpB,MAAM,mBAAmB,UAAU;AAAA,EACtC,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,OAAO;AAAA,EAChB;AACJ;AACA,WAAW,OAAO;AACX,MAAM,mBAAmB,UAAU;AAAA,EACtC,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,OAAO;AAAA,EAChB;AACJ;AACA,WAAW,OAAO;AACX,MAAM,mBAAmB,UAAU;AAAA,EACtC,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,OAAO;AAAA,EAChB;AACJ;AACA,WAAW,OAAO;AACX,MAAM,mBAAmB,UAAU;AAAA,EACtC,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,OAAO;AAAA,EAChB;AACJ;AACA,WAAW,OAAO;AACX,MAAM,oBAAoB,UAAU;AAAA,EACvC,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,OAAO;AAAA,EAChB;AACJ;AACA,YAAY,OAAO;AACZ,MAAM,0BAA0B,UAAU;AAAA,EAC7C,YAAY,UAAU,mDAAmD,SAAS;AAC9E,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EAChB;AACJ;AACA,kBAAkB,OAAO;AAClB,MAAM,iCAAiC,UAAU;AAAA,EACpD,YAAY,UAAU,wDAAwD,SAAS;AACnF,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EAChB;AACJ;AAEA,yBAAyB,OAAO;AACzB,MAAM,oBAAoB,UAAU;AAAA,EACvC,YAAY,UAAU,qBAAqB,SAAS;AAChD,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EAChB;AACJ;AACA,YAAY,OAAO;AACZ,MAAM,uCAAuC,UAAU;AAAA,EAC1D,YAAY,UAAU,iCAAiC,SAAS;AAC5D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EAChB;AACJ;AACA,+BAA+B,OAAO;","x_google_ignoreList":[0]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./components/ChatWidget.vue.cjs.js"),t=require("./composables/useChatWidget.cjs.js");exports.ChatWidget=e.default,exports.default=e.default,exports.useChatWidget=t.useChatWidget;
2
+ //# sourceMappingURL=nuxt.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nuxt.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { default as default2, default as default3 } from "./components/ChatWidget.vue.esm.js";
2
+ import { useChatWidget } from "./composables/useChatWidget.esm.js";
3
+ export {
4
+ default2 as ChatWidget,
5
+ default3 as default,
6
+ useChatWidget
7
+ };
8
+ //# sourceMappingURL=nuxt.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nuxt.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./sessionManager.cjs.js");class s extends Error{constructor(t="chat_resolved"){super(t),this.reason="chat_resolved",this.name="ChatResolvedError"}}const e="undefined"!=typeof process&&process.env?.REACT_APP_BACKEND_BASE_URL,n="undefined"!=typeof process&&process.env?.REACT_APP_BACKEND_WS_URL;class i{constructor(s={}){this.ws=null,this.wsReconnectAttempts=0,this.maxReconnectAttempts=5,this.reconnectTimeout=null,this.pingInterval=null,this.currentChatId=null,this.currentSessionId=null,this.messageHandlers=new Set,this.connectionHandlers=new Set,this.baseUrl=s.baseUrl||e,this.wsUrl=s.wsUrl||n,this.debug=s.debug||!1,this.sessionManager=t.getSessionManager()}async startSupportChat(t,s,e,n){try{const i={"Content-Type":"application/json",...this.sessionManager.getSessionHeader()};t&&(i["X-Session-ID"]=t);const o={};s&&(o.name=s),e&&(o.email=e),n&&(o.mobile=n);const a=await fetch(`${this.baseUrl}/api/support/chat/start`,{method:"POST",headers:i,body:JSON.stringify(o)});if(!a.ok){const t=await a.json().catch(()=>({}));throw new Error(t.message||`HTTP error! status: ${a.status}`)}const r=await a.json();if(this.sessionManager.updateSessionFromResponse(r),r.status&&r.data)return{chat_id:r.data.chat_id,session_id:r.data.session_id};if(r.chat_id&&r.session_id)return{chat_id:r.chat_id,session_id:r.session_id};throw new Error("Invalid response format from chat start endpoint")}catch(i){throw new Error(i.message||"Failed to start support chat session")}}async requestHandoff(t,s,e,n,i,o,a){if(!t||"undefined"===t||"null"===t)throw new Error("Invalid chat_id. Chat must be initialized first.");try{const r={"Content-Type":"application/json",...this.sessionManager.getSessionHeader()};s?r["X-Session-ID"]=s:n&&(r["X-Session-ID"]=n);const c={};e&&(c.reason=e),i&&(c.name=i),o&&(c.email=o),a&&(c.mobile=a);const h=await fetch(`${this.baseUrl}/api/support/chat/${t}/handoff`,{method:"POST",headers:r,body:JSON.stringify(c)});if(400===h.status||404===h.status){const t=await h.json().catch(()=>({}));throw new Error(t.message||"Invalid chat_id. Chat may have expired.")}if(!h.ok){const t=await h.json().catch(()=>({}));throw new Error(t.message||`HTTP error! status: ${h.status}`)}const d=await h.json();return this.sessionManager.updateSessionFromResponse(d),d.status?{success:!0,message:d.message||d.data?.message}:{success:!0,message:d.message}}catch(r){throw r}}async sendMessageToAgent(t,e,n){try{const i={"Content-Type":"application/json",...this.sessionManager.getSessionHeader()};e&&(i["X-Session-ID"]=e);const o=await fetch(`${this.baseUrl}/api/support/chat/${t}/message`,{method:"POST",headers:i,body:JSON.stringify({content:n})});if(401===o.status||404===o.status){const t=await o.json().catch(()=>({}));throw new Error(t.message||"Chat not found or unauthorized")}if(!o.ok){const t=await o.json().catch(()=>({}));throw new Error(t.message||`HTTP error! status: ${o.status}`)}const a=await o.json();if(this.sessionManager.updateSessionFromResponse(a),!0===a?.ignored&&"chat_resolved"===a?.reason)throw new s;return{id:a.id,sender_type:"customer",content:n,timestamp:a.timestamp||(new Date).toISOString()}}catch(i){if(i instanceof s||"ChatResolvedError"===i?.name)throw i;throw new Error(i.message||"Failed to send message to agent")}}async ensureChatInitialized(t,s,e,n,i,o){return t&&"undefined"!==t&&"null"!==t&&s?{chat_id:t,session_id:s}:await this.startSupportChat(e||null,n||null,i||null,o||null)}async loadMessageHistory(t,s){try{const e={...this.sessionManager.getSessionHeader()};s&&(e["X-Session-ID"]=s);const n=await fetch(`${this.baseUrl}/api/support/chat/${t}/messages`,{method:"GET",headers:e});if(401===n.status||404===n.status){const t=await n.json().catch(()=>({}));throw new Error(t.message||"Chat not found or unauthorized")}if(!n.ok){const t=await n.json().catch(()=>({}));throw new Error(t.message||`HTTP error! status: ${n.status}`)}const i=await n.json();return this.sessionManager.updateSessionFromResponse(i),i.messages||[]}catch(e){throw new Error(e.message||"Failed to load message history")}}connectWebSocket(t,s,e,n,i){if(this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.ws&&this.ws.readyState===WebSocket.OPEN)return void this.debug;this.currentChatId=t,this.currentSessionId=s,e&&this.messageHandlers.add(e),n&&this.connectionHandlers.add(n);const o=s||this.sessionManager.getSessionId()||"",a=`${this.wsUrl}/ws/support/${t}?X-Session-ID=${encodeURIComponent(o)}`;try{this.ws=new WebSocket(a),this.ws.onopen=()=>{this.debug,this.wsReconnectAttempts=0,this.connectionHandlers.forEach(t=>t(!0)),this.startPingInterval()},this.ws.onmessage=t=>{try{const s=JSON.parse(t.data);if(this.debug,s.session_id&&this.sessionManager.updateSessionFromResponse({session_id:s.session_id}),"agent_accepted"===s.type||"chat_resolved"===s.type||s.type,"pong"===s.type)return;this.debug&&s.type,this.messageHandlers.forEach(t=>t(s))}catch(s){this.debug}},this.ws.onerror=t=>{this.connectionHandlers.forEach(t=>t(!1))},this.ws.onclose=t=>{if(this.debug,this.stopPingInterval(),this.connectionHandlers.forEach(t=>t(!1)),this.ws=null,i?.(t),4e3===t.code)return this.wsReconnectAttempts=this.maxReconnectAttempts,this.currentChatId=null,void(this.currentSessionId=null);if(this.wsReconnectAttempts<this.maxReconnectAttempts&&this.currentChatId&&this.currentSessionId){this.wsReconnectAttempts++;const t=Math.min(1e3*Math.pow(2,this.wsReconnectAttempts),3e4);this.debug,this.reconnectTimeout=setTimeout(()=>{this.currentChatId&&this.currentSessionId&&this.connectWebSocket(this.currentChatId,this.currentSessionId,e,n,i)},t)}else this.debug}}catch(r){this.connectionHandlers.forEach(t=>t(!1))}}sendMessageViaWebSocket(t){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return!1;try{return this.ws.send(JSON.stringify({type:"message",content:t})),!0}catch(s){return!1}}sendTypingIndicator(t){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return!1;try{return this.ws.send(JSON.stringify({type:t})),!0}catch(s){return!1}}startPingInterval(){this.stopPingInterval(),this.pingInterval=setInterval(()=>{if(this.ws&&this.ws.readyState===WebSocket.OPEN)try{this.ws.send(JSON.stringify({type:"ping"}))}catch(t){}},3e4)}stopPingInterval(){this.pingInterval&&(clearInterval(this.pingInterval),this.pingInterval=null)}disconnectWebSocket(){this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.stopPingInterval(),this.ws&&(this.ws.close(),this.ws=null),this.messageHandlers.clear(),this.connectionHandlers.clear(),this.wsReconnectAttempts=0,this.currentChatId=null,this.currentSessionId=null}isWebSocketConnected(){return null!==this.ws&&this.ws.readyState===WebSocket.OPEN}removeMessageHandler(t){this.messageHandlers.delete(t)}removeConnectionHandler(t){this.connectionHandlers.delete(t)}}exports.ChatResolvedError=s,exports.createChatService=function(t){return new i(t)};
2
+ //# sourceMappingURL=chatService.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatService.cjs.js","sources":["../../src/services/chatService.ts"],"sourcesContent":["// services/chatService.ts\n\nimport { getSessionManager } from './sessionManager';\n\nexport interface SupportChatSession {\n chat_id: string;\n session_id: string;\n}\n\nexport interface SupportMessage {\n id?: string;\n sender_type: \"customer\" | \"agent\";\n content: string;\n timestamp: string;\n}\n\nexport interface ChatInfo {\n status: \"waiting\" | \"active\";\n agent_id?: string;\n}\n\nexport interface WebSocketMessage {\n type: \"message\" | \"chat_info\" | \"error\" | \"typing_start\" | \"typing_stop\" | \"agent_changed\" | \"agent_accepted\" | \"chat_resolved\" | \"chat_ended\" | \"ping\" | \"pong\";\n id?: string;\n chat_id?: string;\n sender_type?: \"customer\" | \"agent\";\n sender_id?: string;\n content?: string;\n timestamp?: string;\n status?: \"waiting\" | \"active\" | \"resolved\" | \"ended\";\n agent_id?: string;\n error?: string;\n from_agent?: string;\n to_agent?: string;\n to_agent_id?: string;\n reason?: string;\n message?: string;\n}\n\nexport class ChatResolvedError extends Error {\n reason = \"chat_resolved\" as const;\n constructor(message = \"chat_resolved\") {\n super(message);\n this.name = \"ChatResolvedError\";\n }\n}\n\nexport interface ChatServiceConfig {\n baseUrl?: string;\n wsUrl?: string;\n debug?: boolean;\n}\n\nexport interface StartSupportChatOptions {\n dialogflowSessionId?: string | null;\n customerName?: string | null;\n customerEmail?: string | null;\n customerMobile?: string | null;\n}\n\n// Get default URLs from environment variables or use fallbacks\n// Environment variables are injected at build time via webpack DefinePlugin\nconst DEFAULT_BASE_URL = \n (typeof process !== 'undefined' && (process as any).env?.REACT_APP_BACKEND_BASE_URL)\n \nconst DEFAULT_WS_URL = \n (typeof process !== 'undefined' && (process as any).env?.REACT_APP_BACKEND_WS_URL)\n\nclass ChatService {\n private baseUrl: string;\n private wsUrl: string;\n private debug: boolean;\n private ws: WebSocket | null = null;\n private wsReconnectAttempts = 0;\n private maxReconnectAttempts = 5;\n private reconnectTimeout: NodeJS.Timeout | null = null;\n private pingInterval: NodeJS.Timeout | null = null;\n private currentChatId: string | null = null;\n private currentSessionId: string | null = null;\n private messageHandlers: Set<(message: WebSocketMessage) => void> = new Set();\n private connectionHandlers: Set<(connected: boolean) => void> = new Set();\n private sessionManager: ReturnType<typeof getSessionManager>;\n\n constructor(config: ChatServiceConfig = {}) {\n this.baseUrl = config.baseUrl || DEFAULT_BASE_URL;\n this.wsUrl = config.wsUrl || DEFAULT_WS_URL;\n this.debug = config.debug || false;\n this.sessionManager = getSessionManager();\n }\n\n /**\n * Start a new support chat session\n * @param dialogflowSessionId - Optional: Dialogflow session ID\n * @param customerName - Optional: Customer name\n * @param customerEmail - Optional: Customer email\n * @param customerMobile - Optional: Customer mobile number\n */\n async startSupportChat(\n dialogflowSessionId?: string | null,\n customerName?: string | null,\n customerEmail?: string | null,\n customerMobile?: string | null\n ): Promise<SupportChatSession> {\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...this.sessionManager.getSessionHeader(),\n };\n\n if (dialogflowSessionId) {\n headers[\"X-Session-ID\"] = dialogflowSessionId;\n }\n\n const body: Record<string, any> = {};\n if (customerName) body.name = customerName;\n if (customerEmail) body.email = customerEmail;\n if (customerMobile) body.mobile = customerMobile;\n\n const response = await fetch(`${this.baseUrl}/api/support/chat/start`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(\n error.message || `HTTP error! status: ${response.status}`\n );\n }\n\n const data = await response.json();\n this.sessionManager.updateSessionFromResponse(data);\n\n if (data.status && data.data) {\n return {\n chat_id: data.data.chat_id,\n session_id: data.data.session_id,\n };\n }\n\n if (data.chat_id && data.session_id) {\n return {\n chat_id: data.chat_id,\n session_id: data.session_id,\n };\n }\n\n throw new Error(\"Invalid response format from chat start endpoint\");\n } catch (error: any) {\n console.error(\"Error starting support chat:\", error);\n throw new Error(\n error.message || \"Failed to start support chat session\"\n );\n }\n }\n\n /**\n * Request handoff to human agent\n * @param chatId - Chat ID (must be valid, not undefined)\n * @param sessionId - Session ID\n * @param reason - Optional: Reason for handoff\n * @param dialogflowSessionId - Optional: Dialogflow session ID\n * @param customerName - Optional: Customer name\n * @param customerEmail - Optional: Customer email\n * @param customerMobile - Optional: Customer mobile number\n */\n async requestHandoff(\n chatId: string,\n sessionId: string,\n reason?: string,\n dialogflowSessionId?: string | null,\n customerName?: string | null,\n customerEmail?: string | null,\n customerMobile?: string | null\n ): Promise<{ success: boolean; message?: string }> {\n if (!chatId || chatId === \"undefined\" || chatId === \"null\") {\n throw new Error(\"Invalid chat_id. Chat must be initialized first.\");\n }\n\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...this.sessionManager.getSessionHeader(),\n };\n\n if (sessionId) {\n headers[\"X-Session-ID\"] = sessionId;\n } else if (dialogflowSessionId) {\n headers[\"X-Session-ID\"] = dialogflowSessionId;\n }\n\n const body: Record<string, any> = {};\n if (reason) body.reason = reason;\n if (customerName) body.name = customerName;\n if (customerEmail) body.email = customerEmail;\n if (customerMobile) body.mobile = customerMobile;\n\n const response = await fetch(\n `${this.baseUrl}/api/support/chat/${chatId}/handoff`,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n }\n );\n\n if (response.status === 400 || response.status === 404) {\n const error = await response.json().catch(() => ({}));\n throw new Error(\n error.message || \"Invalid chat_id. Chat may have expired.\"\n );\n }\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(\n error.message || `HTTP error! status: ${response.status}`\n );\n }\n\n const data = await response.json();\n this.sessionManager.updateSessionFromResponse(data);\n\n if (data.status) {\n return {\n success: true,\n message: data.message || data.data?.message,\n };\n }\n\n return {\n success: true,\n message: data.message,\n };\n } catch (error: any) {\n console.error(\"Error requesting handoff:\", error);\n throw error;\n }\n }\n\n /**\n * Send message to agent via REST API\n */\n async sendMessageToAgent(\n chatId: string,\n sessionId: string,\n message: string\n ): Promise<SupportMessage> {\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...this.sessionManager.getSessionHeader(),\n };\n\n if (sessionId) {\n headers[\"X-Session-ID\"] = sessionId;\n }\n\n const response = await fetch(\n `${this.baseUrl}/api/support/chat/${chatId}/message`,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n content: message,\n }),\n }\n );\n\n if (response.status === 401 || response.status === 404) {\n const error = await response.json().catch(() => ({}));\n throw new Error(\n error.message || \"Chat not found or unauthorized\"\n );\n }\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(\n error.message || `HTTP error! status: ${response.status}`\n );\n }\n\n const data = await response.json();\n this.sessionManager.updateSessionFromResponse(data);\n\n // Surface this explicitly so the UI can enter the terminal \"resolved\" state and avoid retries.\n if ((data as any)?.ignored === true && (data as any)?.reason === \"chat_resolved\") {\n throw new ChatResolvedError();\n }\n\n return {\n id: data.id,\n sender_type: \"customer\",\n content: message,\n timestamp: data.timestamp || new Date().toISOString(),\n };\n } catch (error: any) {\n // chat_resolved is a normal terminal condition, not an error.\n if (error instanceof ChatResolvedError || error?.name === \"ChatResolvedError\") {\n throw error;\n }\n console.error(\"Error sending message to agent:\", error);\n throw new Error(error.message || \"Failed to send message to agent\");\n }\n }\n\n /**\n * Ensure chat is initialized - helper method\n * Returns existing chat_id if valid, otherwise initializes new chat\n * @param existingChatId - Existing chat ID to validate\n * @param existingSessionId - Existing session ID\n * @param dialogflowSessionId - Optional: Dialogflow session ID\n * @param customerName - Optional: Customer name\n * @param customerEmail - Optional: Customer email\n * @param customerMobile - Optional: Customer mobile number\n * @returns Promise with chat_id and session_id\n */\n async ensureChatInitialized(\n existingChatId?: string | null,\n existingSessionId?: string | null,\n dialogflowSessionId?: string | null,\n customerName?: string | null,\n customerEmail?: string | null,\n customerMobile?: string | null\n ): Promise<SupportChatSession> {\n // Validate existing chat_id\n if (existingChatId && \n existingChatId !== \"undefined\" && \n existingChatId !== \"null\" &&\n existingSessionId) {\n return {\n chat_id: existingChatId,\n session_id: existingSessionId,\n };\n }\n\n // Initialize new chat\n return await this.startSupportChat(\n dialogflowSessionId || null,\n customerName || null,\n customerEmail || null,\n customerMobile || null\n );\n }\n\n /**\n * Load message history\n */\n async loadMessageHistory(\n chatId: string,\n sessionId: string\n ): Promise<SupportMessage[]> {\n try {\n const headers: Record<string, string> = {\n ...this.sessionManager.getSessionHeader(),\n };\n\n if (sessionId) {\n headers[\"X-Session-ID\"] = sessionId;\n }\n\n const response = await fetch(\n `${this.baseUrl}/api/support/chat/${chatId}/messages`,\n {\n method: \"GET\",\n headers,\n }\n );\n\n if (response.status === 401 || response.status === 404) {\n const error = await response.json().catch(() => ({}));\n throw new Error(\n error.message || \"Chat not found or unauthorized\"\n );\n }\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(\n error.message || `HTTP error! status: ${response.status}`\n );\n }\n\n const data = await response.json();\n this.sessionManager.updateSessionFromResponse(data);\n\n return data.messages || [];\n } catch (error: any) {\n console.error(\"Error loading message history:\", error);\n throw new Error(error.message || \"Failed to load message history\");\n }\n }\n\n /**\n * Connect to WebSocket\n */\n connectWebSocket(\n chatId: string,\n sessionId: string,\n onMessage?: (message: WebSocketMessage) => void,\n onConnectionChange?: (connected: boolean) => void,\n onClose?: (event: CloseEvent) => void\n ): void {\n // Clear any existing reconnection timeout\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n\n if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n if (this.debug) {\n console.log(\"WebSocket already connected\");\n }\n return;\n }\n\n // Store chatId and sessionId for reconnection\n this.currentChatId = chatId;\n this.currentSessionId = sessionId;\n\n // Add handlers\n if (onMessage) {\n this.messageHandlers.add(onMessage);\n }\n if (onConnectionChange) {\n this.connectionHandlers.add(onConnectionChange);\n }\n\n // CRITICAL: Get session_id from session manager (persisted from previous requests)\n // Use provided sessionId, or fallback to stored session, or empty string\n const sessionIdToUse = sessionId || this.sessionManager.getSessionId() || '';\n const wsUrl = `${this.wsUrl}/ws/support/${chatId}?X-Session-ID=${encodeURIComponent(sessionIdToUse)}`;\n\n try {\n this.ws = new WebSocket(wsUrl);\n\n this.ws.onopen = () => {\n if (this.debug) {\n console.log(\"WebSocket connected to:\", wsUrl);\n }\n console.log(\"✅ Customer WebSocket connected:\", { chatId, sessionId, wsUrl });\n this.wsReconnectAttempts = 0;\n this.connectionHandlers.forEach((handler) => handler(true));\n this.startPingInterval();\n };\n\n this.ws.onmessage = (event) => {\n try {\n const message: WebSocketMessage = JSON.parse(event.data);\n \n if (this.debug) {\n console.log(\"WebSocket raw message received:\", event.data);\n console.log(\"WebSocket parsed message:\", message);\n }\n \n // Update session_id from WebSocket messages if provided\n if ((message as any).session_id) {\n this.sessionManager.updateSessionFromResponse({ session_id: (message as any).session_id });\n }\n \n // Always log agent_accepted and chat_resolved messages for debugging\n if (message.type === \"agent_accepted\" || message.type === \"chat_resolved\" || message.type === \"chat_ended\") {\n console.log(\"🔔 Received notification message:\", {\n type: message.type,\n chat_id: message.chat_id,\n timestamp: message.timestamp,\n to_agent: (message as any).to_agent,\n to_agent_id: (message as any).to_agent_id\n });\n }\n \n // Handle pong messages silently (keep-alive response)\n if (message.type === \"pong\") {\n return;\n }\n \n // Log message type and sender info\n if (this.debug && message.type === \"message\") {\n console.log(\"Processing message type:\", {\n type: message.type,\n sender_type: message.sender_type,\n content: message.content?.substring(0, 50) + \"...\",\n id: message.id\n });\n }\n \n this.messageHandlers.forEach((handler) => handler(message));\n } catch (error) {\n console.error(\"Error parsing WebSocket message:\", error);\n if (this.debug) {\n console.error(\"Raw message data:\", event.data);\n }\n }\n };\n\n this.ws.onerror = (error) => {\n console.error(\"❌ WebSocket error:\", error);\n this.connectionHandlers.forEach((handler) => handler(false));\n };\n\n this.ws.onclose = (event) => {\n if (this.debug) {\n console.log(\"WebSocket closed:\", event.code, event.reason);\n }\n console.log(\"🔌 Customer WebSocket closed:\", { code: event.code, reason: event.reason, chatId });\n this.stopPingInterval();\n this.connectionHandlers.forEach((handler) => handler(false));\n this.ws = null;\n onClose?.(event);\n\n // Terminal close: backend uses 4000 to indicate chat was resolved.\n // Do NOT attempt to reconnect in this case.\n if (event.code === 4000) {\n this.wsReconnectAttempts = this.maxReconnectAttempts;\n this.currentChatId = null;\n this.currentSessionId = null;\n return;\n }\n\n // Attempt to reconnect with exponential backoff\n if (this.wsReconnectAttempts < this.maxReconnectAttempts && this.currentChatId && this.currentSessionId) {\n this.wsReconnectAttempts++;\n const delay = Math.min(1000 * Math.pow(2, this.wsReconnectAttempts), 30000);\n if (this.debug) {\n console.log(`Reconnecting in ${delay}ms (attempt ${this.wsReconnectAttempts}/${this.maxReconnectAttempts})`);\n }\n \n this.reconnectTimeout = setTimeout(() => {\n if (this.currentChatId && this.currentSessionId) {\n this.connectWebSocket(this.currentChatId, this.currentSessionId, onMessage, onConnectionChange, onClose);\n }\n }, delay);\n } else if (this.debug) {\n console.error(\"Max reconnection attempts reached\");\n }\n };\n } catch (error) {\n console.error(\"Error creating WebSocket connection:\", error);\n this.connectionHandlers.forEach((handler) => handler(false));\n }\n }\n\n /**\n * Send message via WebSocket\n */\n sendMessageViaWebSocket(message: string): boolean {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n return false;\n }\n\n try {\n this.ws.send(\n JSON.stringify({\n type: \"message\",\n content: message,\n })\n );\n return true;\n } catch (error) {\n console.error(\"Error sending message via WebSocket:\", error);\n return false;\n }\n }\n\n /**\n * Send typing indicator via WebSocket\n */\n sendTypingIndicator(type: \"typing_start\" | \"typing_stop\"): boolean {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n return false;\n }\n\n try {\n this.ws.send(\n JSON.stringify({\n type: type,\n })\n );\n return true;\n } catch (error) {\n console.error(`Error sending ${type} via WebSocket:`, error);\n return false;\n }\n }\n\n /**\n * Start ping interval to keep connection alive\n */\n private startPingInterval(): void {\n this.stopPingInterval(); // Clear any existing interval\n this.pingInterval = setInterval(() => {\n if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n try {\n this.ws.send(JSON.stringify({ type: \"ping\" }));\n } catch (error) {\n console.error(\"Error sending ping:\", error);\n }\n }\n }, 30000); // Every 30 seconds\n }\n\n /**\n * Stop ping interval\n */\n private stopPingInterval(): void {\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = null;\n }\n }\n\n /**\n * Disconnect WebSocket\n */\n disconnectWebSocket(): void {\n // Clear reconnection timeout\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n \n // Stop ping interval\n this.stopPingInterval();\n \n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n this.messageHandlers.clear();\n this.connectionHandlers.clear();\n this.wsReconnectAttempts = 0;\n this.currentChatId = null;\n this.currentSessionId = null;\n }\n\n /**\n * Check if WebSocket is connected\n */\n isWebSocketConnected(): boolean {\n return this.ws !== null && this.ws.readyState === WebSocket.OPEN;\n }\n\n /**\n * Remove message handler\n */\n removeMessageHandler(handler: (message: WebSocketMessage) => void): void {\n this.messageHandlers.delete(handler);\n }\n\n /**\n * Remove connection handler\n */\n removeConnectionHandler(handler: (connected: boolean) => void): void {\n this.connectionHandlers.delete(handler);\n }\n}\n\n// Export singleton instance\nlet chatServiceInstance: ChatService | null = null;\n\nexport function getChatService(config?: ChatServiceConfig): ChatService {\n if (!chatServiceInstance) {\n chatServiceInstance = new ChatService(config);\n }\n return chatServiceInstance;\n}\n\nexport function createChatService(config: ChatServiceConfig): ChatService {\n return new ChatService(config);\n}\n\n"],"names":["ChatResolvedError","Error","constructor","message","super","this","reason","name","DEFAULT_BASE_URL","process","env","REACT_APP_BACKEND_BASE_URL","DEFAULT_WS_URL","REACT_APP_BACKEND_WS_URL","ChatService","config","ws","wsReconnectAttempts","maxReconnectAttempts","reconnectTimeout","pingInterval","currentChatId","currentSessionId","messageHandlers","Set","connectionHandlers","baseUrl","wsUrl","debug","sessionManager","getSessionManager","startSupportChat","dialogflowSessionId","customerName","customerEmail","customerMobile","headers","getSessionHeader","body","email","mobile","response","fetch","method","JSON","stringify","ok","error","json","catch","status","data","updateSessionFromResponse","chat_id","session_id","requestHandoff","chatId","sessionId","success","sendMessageToAgent","content","ignored","id","sender_type","timestamp","Date","toISOString","ensureChatInitialized","existingChatId","existingSessionId","loadMessageHistory","messages","connectWebSocket","onMessage","onConnectionChange","onClose","clearTimeout","readyState","WebSocket","OPEN","add","sessionIdToUse","getSessionId","encodeURIComponent","onopen","forEach","handler","startPingInterval","onmessage","event","parse","type","onerror","onclose","stopPingInterval","code","delay","Math","min","pow","setTimeout","sendMessageViaWebSocket","send","sendTypingIndicator","setInterval","clearInterval","disconnectWebSocket","close","clear","isWebSocketConnected","removeMessageHandler","delete","removeConnectionHandler"],"mappings":"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"}