@harkenapp/sdk-react-native 0.0.1-alpha.1 → 0.0.1-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/README.md +44 -7
  2. package/app.plugin.cjs +12 -17
  3. package/dist/__mocks__/async-storage.d.ts +16 -0
  4. package/dist/__mocks__/async-storage.d.ts.map +1 -0
  5. package/dist/__mocks__/async-storage.js +39 -0
  6. package/dist/__mocks__/async-storage.js.map +1 -0
  7. package/dist/__mocks__/expo-document-picker.d.ts +26 -0
  8. package/dist/__mocks__/expo-document-picker.d.ts.map +1 -0
  9. package/dist/__mocks__/expo-document-picker.js +25 -0
  10. package/dist/__mocks__/expo-document-picker.js.map +1 -0
  11. package/dist/__mocks__/expo-file-system.d.ts +42 -0
  12. package/dist/__mocks__/expo-file-system.d.ts.map +1 -0
  13. package/dist/__mocks__/expo-file-system.js +37 -0
  14. package/dist/__mocks__/expo-file-system.js.map +1 -0
  15. package/dist/__mocks__/expo-image-picker.d.ts +30 -0
  16. package/dist/__mocks__/expo-image-picker.d.ts.map +1 -0
  17. package/dist/__mocks__/expo-image-picker.js +30 -0
  18. package/dist/__mocks__/expo-image-picker.js.map +1 -0
  19. package/dist/__mocks__/expo-secure-store.d.ts +15 -0
  20. package/dist/__mocks__/expo-secure-store.d.ts.map +1 -0
  21. package/dist/__mocks__/expo-secure-store.js +30 -0
  22. package/dist/__mocks__/expo-secure-store.js.map +1 -0
  23. package/dist/__mocks__/react-native.d.ts +73 -0
  24. package/dist/__mocks__/react-native.d.ts.map +1 -0
  25. package/dist/__mocks__/react-native.js +45 -0
  26. package/dist/__mocks__/react-native.js.map +1 -0
  27. package/dist/api/client.d.ts +8 -8
  28. package/dist/api/client.d.ts.map +1 -1
  29. package/dist/api/client.js +17 -19
  30. package/dist/api/client.js.map +1 -1
  31. package/dist/api/client.test.d.ts +2 -0
  32. package/dist/api/client.test.d.ts.map +1 -0
  33. package/dist/api/client.test.js +417 -0
  34. package/dist/api/client.test.js.map +1 -0
  35. package/dist/api/errors.d.ts +3 -3
  36. package/dist/api/errors.d.ts.map +1 -1
  37. package/dist/api/errors.js +3 -3
  38. package/dist/api/errors.js.map +1 -1
  39. package/dist/api/errors.test.d.ts +2 -0
  40. package/dist/api/errors.test.d.ts.map +1 -0
  41. package/dist/api/errors.test.js +155 -0
  42. package/dist/api/errors.test.js.map +1 -0
  43. package/dist/api/index.d.ts +6 -6
  44. package/dist/api/index.d.ts.map +1 -1
  45. package/dist/api/index.js.map +1 -1
  46. package/dist/api/retry.d.ts +1 -1
  47. package/dist/api/retry.d.ts.map +1 -1
  48. package/dist/api/retry.js.map +1 -1
  49. package/dist/api/retry.test.d.ts +2 -0
  50. package/dist/api/retry.test.d.ts.map +1 -0
  51. package/dist/api/retry.test.js +193 -0
  52. package/dist/api/retry.test.js.map +1 -0
  53. package/dist/attachments/FeedbackSheet.d.ts +36 -13
  54. package/dist/attachments/FeedbackSheet.d.ts.map +1 -1
  55. package/dist/attachments/FeedbackSheet.js +50 -30
  56. package/dist/attachments/FeedbackSheet.js.map +1 -1
  57. package/dist/attachments/index.d.ts +2 -2
  58. package/dist/components/AttachmentGrid.d.ts +12 -4
  59. package/dist/components/AttachmentGrid.d.ts.map +1 -1
  60. package/dist/components/AttachmentGrid.js +44 -34
  61. package/dist/components/AttachmentGrid.js.map +1 -1
  62. package/dist/components/AttachmentPicker.d.ts +3 -3
  63. package/dist/components/AttachmentPicker.d.ts.map +1 -1
  64. package/dist/components/AttachmentPicker.js +34 -36
  65. package/dist/components/AttachmentPicker.js.map +1 -1
  66. package/dist/components/AttachmentPreview.d.ts +10 -4
  67. package/dist/components/AttachmentPreview.d.ts.map +1 -1
  68. package/dist/components/AttachmentPreview.js +48 -34
  69. package/dist/components/AttachmentPreview.js.map +1 -1
  70. package/dist/components/CategorySelector.d.ts +3 -3
  71. package/dist/components/CategorySelector.d.ts.map +1 -1
  72. package/dist/components/CategorySelector.js +21 -27
  73. package/dist/components/CategorySelector.js.map +1 -1
  74. package/dist/components/FeedbackForm.d.ts +3 -3
  75. package/dist/components/FeedbackForm.d.ts.map +1 -1
  76. package/dist/components/FeedbackForm.js +7 -8
  77. package/dist/components/FeedbackForm.js.map +1 -1
  78. package/dist/components/FeedbackSheet.d.ts +34 -11
  79. package/dist/components/FeedbackSheet.d.ts.map +1 -1
  80. package/dist/components/FeedbackSheet.js +46 -28
  81. package/dist/components/FeedbackSheet.js.map +1 -1
  82. package/dist/components/ThemedButton.d.ts +16 -5
  83. package/dist/components/ThemedButton.d.ts.map +1 -1
  84. package/dist/components/ThemedButton.js +38 -29
  85. package/dist/components/ThemedButton.js.map +1 -1
  86. package/dist/components/ThemedText.d.ts +3 -3
  87. package/dist/components/ThemedText.d.ts.map +1 -1
  88. package/dist/components/ThemedText.js +1 -1
  89. package/dist/components/ThemedText.js.map +1 -1
  90. package/dist/components/ThemedTextInput.d.ts +11 -2
  91. package/dist/components/ThemedTextInput.d.ts.map +1 -1
  92. package/dist/components/ThemedTextInput.js +19 -9
  93. package/dist/components/ThemedTextInput.js.map +1 -1
  94. package/dist/components/UploadStatusOverlay.d.ts +11 -3
  95. package/dist/components/UploadStatusOverlay.d.ts.map +1 -1
  96. package/dist/components/UploadStatusOverlay.js +59 -76
  97. package/dist/components/UploadStatusOverlay.js.map +1 -1
  98. package/dist/components/index.d.ts +18 -18
  99. package/dist/components/index.d.ts.map +1 -1
  100. package/dist/components/index.js.map +1 -1
  101. package/dist/context/HarkenContext.d.ts +20 -15
  102. package/dist/context/HarkenContext.d.ts.map +1 -1
  103. package/dist/context/HarkenContext.js +20 -17
  104. package/dist/context/HarkenContext.js.map +1 -1
  105. package/dist/context/index.d.ts +2 -2
  106. package/dist/domain/index.d.ts +2 -2
  107. package/dist/domain/index.d.ts.map +1 -1
  108. package/dist/domain/index.js.map +1 -1
  109. package/dist/hooks/index.d.ts +5 -5
  110. package/dist/hooks/useAnonymousId.js +1 -1
  111. package/dist/hooks/useAnonymousId.test.d.ts +2 -0
  112. package/dist/hooks/useAnonymousId.test.d.ts.map +1 -0
  113. package/dist/hooks/useAnonymousId.test.js +154 -0
  114. package/dist/hooks/useAnonymousId.test.js.map +1 -0
  115. package/dist/hooks/useAttachmentPicker.d.ts +3 -3
  116. package/dist/hooks/useAttachmentPicker.js +7 -7
  117. package/dist/hooks/useAttachmentStatus.d.ts +1 -1
  118. package/dist/hooks/useAttachmentStatus.d.ts.map +1 -1
  119. package/dist/hooks/useAttachmentStatus.js.map +1 -1
  120. package/dist/hooks/useAttachmentUpload.d.ts +2 -2
  121. package/dist/hooks/useAttachmentUpload.d.ts.map +1 -1
  122. package/dist/hooks/useAttachmentUpload.js +5 -5
  123. package/dist/hooks/useAttachmentUpload.js.map +1 -1
  124. package/dist/hooks/useAttachmentUpload.test.d.ts +2 -0
  125. package/dist/hooks/useAttachmentUpload.test.d.ts.map +1 -0
  126. package/dist/hooks/useAttachmentUpload.test.js +542 -0
  127. package/dist/hooks/useAttachmentUpload.test.js.map +1 -0
  128. package/dist/hooks/useFeedback.d.ts +4 -4
  129. package/dist/hooks/useFeedback.d.ts.map +1 -1
  130. package/dist/hooks/useFeedback.js +3 -5
  131. package/dist/hooks/useFeedback.js.map +1 -1
  132. package/dist/hooks/useFeedback.test.d.ts +2 -0
  133. package/dist/hooks/useFeedback.test.d.ts.map +1 -0
  134. package/dist/hooks/useFeedback.test.js +299 -0
  135. package/dist/hooks/useFeedback.test.js.map +1 -0
  136. package/dist/hooks/useHarkenContext.d.ts +1 -1
  137. package/dist/hooks/useHarkenContext.js +1 -1
  138. package/dist/hooks/useHarkenTheme.d.ts +27 -3
  139. package/dist/hooks/useHarkenTheme.d.ts.map +1 -1
  140. package/dist/hooks/useHarkenTheme.js +26 -2
  141. package/dist/hooks/useHarkenTheme.js.map +1 -1
  142. package/dist/index.d.ts +28 -28
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js.map +1 -1
  145. package/dist/services/index.d.ts +3 -3
  146. package/dist/services/index.d.ts.map +1 -1
  147. package/dist/services/index.js.map +1 -1
  148. package/dist/services/uploadQueueService.d.ts +2 -2
  149. package/dist/services/uploadQueueService.d.ts.map +1 -1
  150. package/dist/services/uploadQueueService.js +16 -17
  151. package/dist/services/uploadQueueService.js.map +1 -1
  152. package/dist/services/uploadQueueService.test.d.ts +2 -0
  153. package/dist/services/uploadQueueService.test.d.ts.map +1 -0
  154. package/dist/services/uploadQueueService.test.js +426 -0
  155. package/dist/services/uploadQueueService.test.js.map +1 -0
  156. package/dist/services/uploadQueueStorage.d.ts +1 -1
  157. package/dist/services/uploadQueueStorage.d.ts.map +1 -1
  158. package/dist/services/uploadQueueStorage.js +4 -4
  159. package/dist/services/uploadQueueStorage.js.map +1 -1
  160. package/dist/services/uploadQueueStorage.test.d.ts +2 -0
  161. package/dist/services/uploadQueueStorage.test.d.ts.map +1 -0
  162. package/dist/services/uploadQueueStorage.test.js +200 -0
  163. package/dist/services/uploadQueueStorage.test.js.map +1 -0
  164. package/dist/storage/IdentityStore.d.ts +1 -1
  165. package/dist/storage/IdentityStore.d.ts.map +1 -1
  166. package/dist/storage/IdentityStore.js.map +1 -1
  167. package/dist/storage/IdentityStore.test.d.ts +2 -0
  168. package/dist/storage/IdentityStore.test.d.ts.map +1 -0
  169. package/dist/storage/IdentityStore.test.js +176 -0
  170. package/dist/storage/IdentityStore.test.js.map +1 -0
  171. package/dist/storage/SecureStoreAdapter.d.ts +1 -1
  172. package/dist/storage/SecureStoreAdapter.test.d.ts +2 -0
  173. package/dist/storage/SecureStoreAdapter.test.d.ts.map +1 -0
  174. package/dist/storage/SecureStoreAdapter.test.js +114 -0
  175. package/dist/storage/SecureStoreAdapter.test.js.map +1 -0
  176. package/dist/storage/defaultStorage.d.ts +1 -1
  177. package/dist/storage/defaultStorage.js +4 -4
  178. package/dist/storage/defaultStorage.test.d.ts +2 -0
  179. package/dist/storage/defaultStorage.test.d.ts.map +1 -0
  180. package/dist/storage/defaultStorage.test.js +159 -0
  181. package/dist/storage/defaultStorage.test.js.map +1 -0
  182. package/dist/storage/index.d.ts +5 -5
  183. package/dist/storage/types.js +1 -1
  184. package/dist/theme/defaults.d.ts +14 -3
  185. package/dist/theme/defaults.d.ts.map +1 -1
  186. package/dist/theme/defaults.js +58 -43
  187. package/dist/theme/defaults.js.map +1 -1
  188. package/dist/theme/index.d.ts +3 -2
  189. package/dist/theme/index.d.ts.map +1 -1
  190. package/dist/theme/index.js +4 -1
  191. package/dist/theme/index.js.map +1 -1
  192. package/dist/theme/resolver.d.ts +16 -0
  193. package/dist/theme/resolver.d.ts.map +1 -0
  194. package/dist/theme/resolver.js +375 -0
  195. package/dist/theme/resolver.js.map +1 -0
  196. package/dist/theme/resolver.test.d.ts +2 -0
  197. package/dist/theme/resolver.test.d.ts.map +1 -0
  198. package/dist/theme/resolver.test.js +344 -0
  199. package/dist/theme/resolver.test.js.map +1 -0
  200. package/dist/theme/types.d.ts +378 -5
  201. package/dist/theme/types.d.ts.map +1 -1
  202. package/dist/types/config.d.ts +4 -4
  203. package/dist/types/index.d.ts +2 -2
  204. package/dist/utils/index.d.ts +1 -1
  205. package/dist/utils/uuid.d.ts.map +1 -1
  206. package/dist/utils/uuid.js +4 -5
  207. package/dist/utils/uuid.js.map +1 -1
  208. package/dist/utils/uuid.test.d.ts +2 -0
  209. package/dist/utils/uuid.test.d.ts.map +1 -0
  210. package/dist/utils/uuid.test.js +78 -0
  211. package/dist/utils/uuid.test.js.map +1 -0
  212. package/package.json +21 -13
  213. package/src/@types/expo-file-system-legacy.d.ts +3 -3
  214. package/src/__mocks__/async-storage.ts +46 -0
  215. package/src/__mocks__/expo-document-picker.ts +41 -0
  216. package/src/__mocks__/expo-file-system.ts +62 -0
  217. package/src/__mocks__/expo-image-picker.ts +48 -0
  218. package/src/__mocks__/expo-secure-store.ts +29 -0
  219. package/src/__mocks__/react-native.ts +46 -0
  220. package/src/api/client.test.ts +515 -0
  221. package/src/api/client.ts +45 -64
  222. package/src/api/errors.test.ts +193 -0
  223. package/src/api/errors.ts +7 -11
  224. package/src/api/index.ts +6 -10
  225. package/src/api/retry.test.ts +251 -0
  226. package/src/api/retry.ts +3 -6
  227. package/src/attachments/FeedbackSheet.tsx +100 -80
  228. package/src/attachments/index.ts +2 -2
  229. package/src/components/AttachmentGrid.tsx +54 -45
  230. package/src/components/AttachmentPicker.tsx +43 -54
  231. package/src/components/AttachmentPreview.tsx +51 -47
  232. package/src/components/CategorySelector.tsx +29 -35
  233. package/src/components/FeedbackForm.tsx +23 -35
  234. package/src/components/FeedbackSheet.tsx +89 -68
  235. package/src/components/ThemedButton.tsx +49 -47
  236. package/src/components/ThemedText.tsx +7 -10
  237. package/src/components/ThemedTextInput.tsx +23 -13
  238. package/src/components/UploadStatusOverlay.tsx +66 -89
  239. package/src/components/index.ts +18 -21
  240. package/src/context/HarkenContext.tsx +29 -28
  241. package/src/context/index.ts +2 -2
  242. package/src/domain/index.ts +2 -5
  243. package/src/domain/upload-queue.ts +5 -5
  244. package/src/hooks/index.ts +5 -5
  245. package/src/hooks/useAnonymousId.test.ts +189 -0
  246. package/src/hooks/useAnonymousId.ts +3 -3
  247. package/src/hooks/useAttachmentPicker.ts +12 -12
  248. package/src/hooks/useAttachmentStatus.ts +12 -16
  249. package/src/hooks/useAttachmentUpload.test.ts +632 -0
  250. package/src/hooks/useAttachmentUpload.ts +45 -54
  251. package/src/hooks/useFeedback.test.ts +376 -0
  252. package/src/hooks/useFeedback.ts +12 -14
  253. package/src/hooks/useHarkenContext.ts +4 -4
  254. package/src/hooks/useHarkenTheme.ts +30 -6
  255. package/src/index.ts +28 -52
  256. package/src/services/index.ts +3 -9
  257. package/src/services/uploadQueueService.test.ts +489 -0
  258. package/src/services/uploadQueueService.ts +40 -56
  259. package/src/services/uploadQueueStorage.test.ts +243 -0
  260. package/src/services/uploadQueueStorage.ts +7 -9
  261. package/src/storage/IdentityStore.test.ts +173 -0
  262. package/src/storage/IdentityStore.ts +4 -5
  263. package/src/storage/SecureStoreAdapter.test.ts +147 -0
  264. package/src/storage/SecureStoreAdapter.ts +1 -1
  265. package/src/storage/defaultStorage.test.ts +159 -0
  266. package/src/storage/defaultStorage.ts +6 -6
  267. package/src/storage/index.ts +5 -5
  268. package/src/storage/types.ts +1 -1
  269. package/src/theme/defaults.ts +75 -46
  270. package/src/theme/index.ts +15 -2
  271. package/src/theme/resolver.test.ts +411 -0
  272. package/src/theme/resolver.ts +446 -0
  273. package/src/theme/types.ts +453 -15
  274. package/src/types/config.ts +4 -4
  275. package/src/types/index.ts +2 -2
  276. package/src/utils/index.ts +1 -1
  277. package/src/utils/uuid.test.ts +85 -0
  278. package/src/utils/uuid.ts +4 -7
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":";;;AAKA;;GAEG;AACH,MAAa,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AALD,kCAKC;AAED;;GAEG;AACH,MAAa,cAAe,SAAQ,WAAW;IAC7C,uBAAuB;IACd,MAAM,CAAS;IACxB,kCAAkC;IACzB,IAAI,CAAS;IACtB,4CAA4C;IACnC,OAAO,CAAiB;IACjC,wDAAwD;IAC/C,UAAU,CAAU;IAE7B,YACE,MAAc,EACd,QAAuB,EACvB,OAAiC;QAEjC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACxC,CAAC;IAED,+CAA+C;IAC/C,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC;IAC7B,CAAC;IAED,0CAA0C;IAC1C,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC;IAC7B,CAAC;IAED,+CAA+C;IAC/C,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC;IAC7B,CAAC;IAED,2CAA2C;IAC3C,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;IAC5B,CAAC;IAED,sCAAsC;IACtC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC;IAClD,CAAC;CACF;AA/CD,wCA+CC;AAED;;GAEG;AACH,MAAa,kBAAmB,SAAQ,WAAW;IACxC,KAAK,CAAS;IAEvB,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,0CAA0C;IAC1C,IAAI,WAAW;QACb,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAbD,gDAaC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":";;;AAKA;;GAEG;AACH,MAAa,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AALD,kCAKC;AAED;;GAEG;AACH,MAAa,cAAe,SAAQ,WAAW;IAC7C,uBAAuB;IACd,MAAM,CAAS;IACxB,kCAAkC;IACzB,IAAI,CAAS;IACtB,4CAA4C;IACnC,OAAO,CAAiB;IACjC,wDAAwD;IAC/C,UAAU,CAAU;IAE7B,YAAY,MAAc,EAAE,QAAuB,EAAE,OAAiC;QACpF,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACxC,CAAC;IAED,+CAA+C;IAC/C,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC;IAC7B,CAAC;IAED,0CAA0C;IAC1C,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC;IAC7B,CAAC;IAED,+CAA+C;IAC/C,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC;IAC7B,CAAC;IAED,2CAA2C;IAC3C,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;IAC5B,CAAC;IAED,sCAAsC;IACtC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC;IAClD,CAAC;CACF;AA3CD,wCA2CC;AAED;;GAEG;AACH,MAAa,kBAAmB,SAAQ,WAAW;IACxC,KAAK,CAAS;IAEvB,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,0CAA0C;IAC1C,IAAI,WAAW;QACb,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAbD,gDAaC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=errors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../src/api/errors.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const errors_1 = require("./errors");
5
+ (0, vitest_1.describe)("HarkenError", () => {
6
+ (0, vitest_1.it)("creates error with message", () => {
7
+ const error = new errors_1.HarkenError("Something went wrong");
8
+ (0, vitest_1.expect)(error.message).toBe("Something went wrong");
9
+ });
10
+ });
11
+ (0, vitest_1.describe)("HarkenApiError", () => {
12
+ (0, vitest_1.it)("creates error with status, code, and message", () => {
13
+ const error = new errors_1.HarkenApiError(400, {
14
+ error: {
15
+ code: "validation_error",
16
+ message: "Invalid input",
17
+ },
18
+ });
19
+ (0, vitest_1.expect)(error.status).toBe(400);
20
+ (0, vitest_1.expect)(error.code).toBe("validation_error");
21
+ (0, vitest_1.expect)(error.message).toBe("Invalid input");
22
+ });
23
+ (0, vitest_1.it)("includes error details when provided", () => {
24
+ const error = new errors_1.HarkenApiError(400, {
25
+ error: {
26
+ code: "validation_error",
27
+ message: "Invalid input",
28
+ details: [
29
+ { field: "message", message: "Required field" },
30
+ { field: "category", message: "Invalid value" },
31
+ ],
32
+ },
33
+ });
34
+ (0, vitest_1.expect)(error.details).toHaveLength(2);
35
+ (0, vitest_1.expect)(error.details?.[0]).toEqual({
36
+ field: "message",
37
+ message: "Required field",
38
+ });
39
+ });
40
+ (0, vitest_1.it)("stores retryAfter when provided", () => {
41
+ const error = new errors_1.HarkenApiError(429, { error: { code: "rate_limited", message: "Too many requests" } }, { retryAfter: 60 });
42
+ (0, vitest_1.expect)(error.retryAfter).toBe(60);
43
+ });
44
+ (0, vitest_1.describe)("isValidationError", () => {
45
+ (0, vitest_1.it)("returns true for 400 status", () => {
46
+ const error = new errors_1.HarkenApiError(400, {
47
+ error: { code: "validation_error", message: "Invalid" },
48
+ });
49
+ (0, vitest_1.expect)(error.isValidationError).toBe(true);
50
+ });
51
+ (0, vitest_1.it)("returns false for other statuses", () => {
52
+ const error = new errors_1.HarkenApiError(401, {
53
+ error: { code: "unauthorized", message: "Unauthorized" },
54
+ });
55
+ (0, vitest_1.expect)(error.isValidationError).toBe(false);
56
+ });
57
+ });
58
+ (0, vitest_1.describe)("isUnauthorized", () => {
59
+ (0, vitest_1.it)("returns true for 401 status", () => {
60
+ const error = new errors_1.HarkenApiError(401, {
61
+ error: { code: "unauthorized", message: "Unauthorized" },
62
+ });
63
+ (0, vitest_1.expect)(error.isUnauthorized).toBe(true);
64
+ });
65
+ (0, vitest_1.it)("returns false for other statuses", () => {
66
+ const error = new errors_1.HarkenApiError(403, {
67
+ error: { code: "forbidden", message: "Forbidden" },
68
+ });
69
+ (0, vitest_1.expect)(error.isUnauthorized).toBe(false);
70
+ });
71
+ });
72
+ (0, vitest_1.describe)("isRateLimited", () => {
73
+ (0, vitest_1.it)("returns true for 429 status", () => {
74
+ const error = new errors_1.HarkenApiError(429, {
75
+ error: { code: "rate_limited", message: "Too many requests" },
76
+ });
77
+ (0, vitest_1.expect)(error.isRateLimited).toBe(true);
78
+ });
79
+ (0, vitest_1.it)("returns false for other statuses", () => {
80
+ const error = new errors_1.HarkenApiError(400, {
81
+ error: { code: "validation_error", message: "Invalid" },
82
+ });
83
+ (0, vitest_1.expect)(error.isRateLimited).toBe(false);
84
+ });
85
+ });
86
+ (0, vitest_1.describe)("isServerError", () => {
87
+ (0, vitest_1.it)("returns true for 5xx statuses", () => {
88
+ (0, vitest_1.expect)(new errors_1.HarkenApiError(500, {
89
+ error: { code: "internal_error", message: "Server error" },
90
+ }).isServerError).toBe(true);
91
+ (0, vitest_1.expect)(new errors_1.HarkenApiError(502, {
92
+ error: { code: "bad_gateway", message: "Bad gateway" },
93
+ }).isServerError).toBe(true);
94
+ (0, vitest_1.expect)(new errors_1.HarkenApiError(503, {
95
+ error: { code: "service_unavailable", message: "Service unavailable" },
96
+ }).isServerError).toBe(true);
97
+ });
98
+ (0, vitest_1.it)("returns false for 4xx statuses", () => {
99
+ (0, vitest_1.expect)(new errors_1.HarkenApiError(400, {
100
+ error: { code: "validation_error", message: "Invalid" },
101
+ }).isServerError).toBe(false);
102
+ (0, vitest_1.expect)(new errors_1.HarkenApiError(429, {
103
+ error: { code: "rate_limited", message: "Rate limited" },
104
+ }).isServerError).toBe(false);
105
+ });
106
+ });
107
+ (0, vitest_1.describe)("isRetryable", () => {
108
+ (0, vitest_1.it)("returns true for 429 (rate limited)", () => {
109
+ const error = new errors_1.HarkenApiError(429, {
110
+ error: { code: "rate_limited", message: "Too many requests" },
111
+ });
112
+ (0, vitest_1.expect)(error.isRetryable).toBe(true);
113
+ });
114
+ (0, vitest_1.it)("returns true for 5xx (server errors)", () => {
115
+ const error500 = new errors_1.HarkenApiError(500, {
116
+ error: { code: "internal_error", message: "Server error" },
117
+ });
118
+ const error503 = new errors_1.HarkenApiError(503, {
119
+ error: { code: "service_unavailable", message: "Unavailable" },
120
+ });
121
+ (0, vitest_1.expect)(error500.isRetryable).toBe(true);
122
+ (0, vitest_1.expect)(error503.isRetryable).toBe(true);
123
+ });
124
+ (0, vitest_1.it)("returns false for 4xx (client errors except 429)", () => {
125
+ const error400 = new errors_1.HarkenApiError(400, {
126
+ error: { code: "validation_error", message: "Invalid" },
127
+ });
128
+ const error401 = new errors_1.HarkenApiError(401, {
129
+ error: { code: "unauthorized", message: "Unauthorized" },
130
+ });
131
+ const error404 = new errors_1.HarkenApiError(404, {
132
+ error: { code: "not_found", message: "Not found" },
133
+ });
134
+ (0, vitest_1.expect)(error400.isRetryable).toBe(false);
135
+ (0, vitest_1.expect)(error401.isRetryable).toBe(false);
136
+ (0, vitest_1.expect)(error404.isRetryable).toBe(false);
137
+ });
138
+ });
139
+ });
140
+ (0, vitest_1.describe)("HarkenNetworkError", () => {
141
+ (0, vitest_1.it)("creates error with message", () => {
142
+ const error = new errors_1.HarkenNetworkError("Network request failed");
143
+ (0, vitest_1.expect)(error.message).toBe("Network request failed");
144
+ });
145
+ (0, vitest_1.it)("stores cause when provided", () => {
146
+ const cause = new TypeError("Failed to fetch");
147
+ const error = new errors_1.HarkenNetworkError("Network request failed", cause);
148
+ (0, vitest_1.expect)(error.cause).toBe(cause);
149
+ });
150
+ (0, vitest_1.it)("isRetryable always returns true", () => {
151
+ const error = new errors_1.HarkenNetworkError("Network failed");
152
+ (0, vitest_1.expect)(error.isRetryable).toBe(true);
153
+ });
154
+ });
155
+ //# sourceMappingURL=errors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/api/errors.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,qCAA2E;AAE3E,IAAA,iBAAQ,EAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAA,WAAE,EAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,KAAK,GAAG,IAAI,oBAAW,CAAC,sBAAsB,CAAC,CAAC;QACtD,IAAA,eAAM,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,KAAK,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;YACpC,KAAK,EAAE;gBACL,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,eAAe;aACzB;SACF,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAA,eAAM,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5C,IAAA,eAAM,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,KAAK,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;YACpC,KAAK,EAAE;gBACL,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE;oBAC/C,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE;iBAChD;aACF;SACF,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,IAAA,eAAM,EAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACjC,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,KAAK,GAAG,IAAI,uBAAc,CAC9B,GAAG,EACH,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EACjE,EAAE,UAAU,EAAE,EAAE,EAAE,CACnB,CAAC;QAEF,IAAA,eAAM,EAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,KAAK,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACpC,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE;aACxD,CAAC,CAAC;YACH,IAAA,eAAM,EAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,KAAK,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACpC,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE;aACzD,CAAC,CAAC;YACH,IAAA,eAAM,EAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,KAAK,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACpC,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE;aACzD,CAAC,CAAC;YACH,IAAA,eAAM,EAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,KAAK,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACpC,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;aACnD,CAAC,CAAC;YACH,IAAA,eAAM,EAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,KAAK,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACpC,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE;aAC9D,CAAC,CAAC;YACH,IAAA,eAAM,EAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,KAAK,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACpC,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE;aACxD,CAAC,CAAC;YACH,IAAA,eAAM,EAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,IAAA,eAAM,EACJ,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACtB,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE;aAC3D,CAAC,CAAC,aAAa,CACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,IAAA,eAAM,EACJ,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACtB,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE;aACvD,CAAC,CAAC,aAAa,CACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,IAAA,eAAM,EACJ,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACtB,KAAK,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,EAAE;aACvE,CAAC,CAAC,aAAa,CACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,IAAA,eAAM,EACJ,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACtB,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE;aACxD,CAAC,CAAC,aAAa,CACjB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEd,IAAA,eAAM,EACJ,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACtB,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE;aACzD,CAAC,CAAC,aAAa,CACjB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,IAAA,WAAE,EAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,KAAK,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACpC,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE;aAC9D,CAAC,CAAC;YACH,IAAA,eAAM,EAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACvC,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE;aAC3D,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACvC,KAAK,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,aAAa,EAAE;aAC/D,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,IAAA,eAAM,EAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,QAAQ,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACvC,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE;aACxD,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACvC,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE;aACzD,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,uBAAc,CAAC,GAAG,EAAE;gBACvC,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;aACnD,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,IAAA,eAAM,EAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,IAAA,eAAM,EAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAA,WAAE,EAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,KAAK,GAAG,IAAI,2BAAkB,CAAC,wBAAwB,CAAC,CAAC;QAC/D,IAAA,eAAM,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,2BAAkB,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAEtE,IAAA,eAAM,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,KAAK,GAAG,IAAI,2BAAkB,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAA,eAAM,EAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
- export { HarkenClient, createHarkenClient } from './client';
2
- export type { HarkenClientConfig } from './client';
3
- export { HarkenError, HarkenApiError, HarkenNetworkError, } from './errors';
4
- export { withRetry, calculateRetryDelay, isRetryableError } from './retry';
5
- export type { RetryConfig } from './retry';
6
- export { DEFAULT_RETRY_CONFIG } from './retry';
1
+ export { HarkenClient, createHarkenClient } from "./client";
2
+ export type { HarkenClientConfig } from "./client";
3
+ export { HarkenError, HarkenApiError, HarkenNetworkError } from "./errors";
4
+ export { withRetry, calculateRetryDelay, isRetryableError } from "./retry";
5
+ export type { RetryConfig } from "./retry";
6
+ export { DEFAULT_RETRY_CONFIG } from "./retry";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD,OAAO,EACL,WAAW,EACX,cAAc,EACd,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3E,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAG3E,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3E,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;AAAA,SAAS;AACT,mCAA4D;AAAnD,sGAAA,YAAY,OAAA;AAAE,4GAAA,kBAAkB,OAAA;AAGzC,SAAS;AACT,mCAIkB;AAHhB,qGAAA,WAAW,OAAA;AACX,wGAAA,cAAc,OAAA;AACd,4GAAA,kBAAkB,OAAA;AAGpB,kBAAkB;AAClB,iCAA2E;AAAlE,kGAAA,SAAS,OAAA;AAAE,4GAAA,mBAAmB,OAAA;AAAE,yGAAA,gBAAgB,OAAA;AAEzD,iCAA+C;AAAtC,6GAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;AAAA,SAAS;AACT,mCAA4D;AAAnD,sGAAA,YAAY,OAAA;AAAE,4GAAA,kBAAkB,OAAA;AAGzC,SAAS;AACT,mCAA2E;AAAlE,qGAAA,WAAW,OAAA;AAAE,wGAAA,cAAc,OAAA;AAAE,4GAAA,kBAAkB,OAAA;AAExD,kBAAkB;AAClB,iCAA2E;AAAlE,kGAAA,SAAS,OAAA;AAAE,4GAAA,mBAAmB,OAAA;AAAE,yGAAA,gBAAgB,OAAA;AAEzD,iCAA+C;AAAtC,6GAAA,oBAAoB,OAAA"}
@@ -1,4 +1,4 @@
1
- import { HarkenApiError, HarkenNetworkError } from './errors';
1
+ import { HarkenApiError, HarkenNetworkError } from "./errors";
2
2
  export interface RetryConfig {
3
3
  /** Maximum number of retry attempts (default: 3) */
4
4
  maxRetries: number;
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/api/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,oBAAoB,EAAE,WAKlC,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,cAAc,GAAG,kBAAkB,CAQ9C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAChC,OAAO,CAAC,CAAC,CAAC,CA0BZ"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/api/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,oBAAoB,EAAE,WAKlC,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,GAAG,kBAAkB,CAQ7F;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAChC,OAAO,CAAC,CAAC,CAAC,CAyBZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/api/retry.ts"],"names":[],"mappings":";;;AAuBA,kDAmBC;AAKD,4CAUC;AAKD,sBAEC;AAKD,8BA6BC;AAlGD,qCAA8D;AAajD,QAAA,oBAAoB,GAAgB;IAC/C,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF;;GAEG;AACH,SAAgB,mBAAmB,CACjC,OAAe,EACf,MAAmB,EACnB,UAAmB;IAEnB,8CAA8C;IAC9C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,6CAA6C;IAC7C,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEhE,aAAa;IACb,MAAM,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;IAEvD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,KAAc;IAEd,IAAI,KAAK,YAAY,uBAAc,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC,WAAW,CAAC;IAC3B,CAAC;IACD,IAAI,KAAK,YAAY,2BAAkB,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC,WAAW,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAgB,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,SAA+B,EAAE;IAEjC,MAAM,UAAU,GAAG,EAAE,GAAG,4BAAoB,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1D,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QAClE,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAElB,mEAAmE;YACnE,IAAI,OAAO,IAAI,UAAU,CAAC,UAAU,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjE,MAAM,KAAK,CAAC;YACd,CAAC;YAED,4DAA4D;YAC5D,MAAM,UAAU,GACd,KAAK,YAAY,uBAAc,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YAEjE,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,SAAS,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/api/retry.ts"],"names":[],"mappings":";;;AAuBA,kDAmBC;AAKD,4CAQC;AAKD,sBAEC;AAKD,8BA4BC;AA/FD,qCAA8D;AAajD,QAAA,oBAAoB,GAAgB;IAC/C,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF;;GAEG;AACH,SAAgB,mBAAmB,CACjC,OAAe,EACf,MAAmB,EACnB,UAAmB;IAEnB,8CAA8C;IAC9C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,6CAA6C;IAC7C,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEhE,aAAa;IACb,MAAM,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;IAEvD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,uBAAc,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC,WAAW,CAAC;IAC3B,CAAC;IACD,IAAI,KAAK,YAAY,2BAAkB,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC,WAAW,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAgB,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,SAA+B,EAAE;IAEjC,MAAM,UAAU,GAAG,EAAE,GAAG,4BAAoB,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1D,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QAClE,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAElB,mEAAmE;YACnE,IAAI,OAAO,IAAI,UAAU,CAAC,UAAU,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjE,MAAM,KAAK,CAAC;YACd,CAAC;YAED,4DAA4D;YAC5D,MAAM,UAAU,GAAG,KAAK,YAAY,uBAAc,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YAElF,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,SAAS,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=retry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.test.d.ts","sourceRoot":"","sources":["../../src/api/retry.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const retry_1 = require("./retry");
5
+ const errors_1 = require("./errors");
6
+ (0, vitest_1.describe)("calculateRetryDelay", () => {
7
+ (0, vitest_1.beforeEach)(() => {
8
+ // Mock Math.random for predictable jitter
9
+ vitest_1.vi.spyOn(Math, "random").mockReturnValue(0.5);
10
+ });
11
+ (0, vitest_1.afterEach)(() => {
12
+ vitest_1.vi.restoreAllMocks();
13
+ });
14
+ (0, vitest_1.it)("calculates exponential backoff correctly", () => {
15
+ const config = { ...retry_1.DEFAULT_RETRY_CONFIG, jitter: 0 };
16
+ (0, vitest_1.expect)((0, retry_1.calculateRetryDelay)(0, config)).toBe(1000); // 1000 * 2^0 = 1000
17
+ (0, vitest_1.expect)((0, retry_1.calculateRetryDelay)(1, config)).toBe(2000); // 1000 * 2^1 = 2000
18
+ (0, vitest_1.expect)((0, retry_1.calculateRetryDelay)(2, config)).toBe(4000); // 1000 * 2^2 = 4000
19
+ (0, vitest_1.expect)((0, retry_1.calculateRetryDelay)(3, config)).toBe(8000); // 1000 * 2^3 = 8000
20
+ });
21
+ (0, vitest_1.it)("caps delay at maxDelay", () => {
22
+ const config = { ...retry_1.DEFAULT_RETRY_CONFIG, jitter: 0, maxDelay: 5000 };
23
+ (0, vitest_1.expect)((0, retry_1.calculateRetryDelay)(0, config)).toBe(1000);
24
+ (0, vitest_1.expect)((0, retry_1.calculateRetryDelay)(3, config)).toBe(5000); // capped
25
+ (0, vitest_1.expect)((0, retry_1.calculateRetryDelay)(10, config)).toBe(5000); // capped
26
+ });
27
+ (0, vitest_1.it)("adds jitter within expected range", () => {
28
+ const config = { ...retry_1.DEFAULT_RETRY_CONFIG, jitter: 0.1 };
29
+ // With random = 0.5, jitter should be 0 (centered)
30
+ // For attempt 0: base = 1000, jitterRange = 100, jitter = 0
31
+ const delay = (0, retry_1.calculateRetryDelay)(0, config);
32
+ (0, vitest_1.expect)(delay).toBe(1000);
33
+ });
34
+ (0, vitest_1.it)("respects Retry-After header when provided", () => {
35
+ const config = retry_1.DEFAULT_RETRY_CONFIG;
36
+ // 5 seconds should be 5000ms
37
+ (0, vitest_1.expect)((0, retry_1.calculateRetryDelay)(0, config, 5)).toBe(5000);
38
+ (0, vitest_1.expect)((0, retry_1.calculateRetryDelay)(2, config, 10)).toBe(10000);
39
+ });
40
+ (0, vitest_1.it)("caps Retry-After at maxDelay", () => {
41
+ const config = { ...retry_1.DEFAULT_RETRY_CONFIG, maxDelay: 5000 };
42
+ // 60 seconds should be capped to 5000ms
43
+ (0, vitest_1.expect)((0, retry_1.calculateRetryDelay)(0, config, 60)).toBe(5000);
44
+ });
45
+ (0, vitest_1.it)("ignores zero or negative Retry-After", () => {
46
+ const config = { ...retry_1.DEFAULT_RETRY_CONFIG, jitter: 0 };
47
+ // Should fall back to exponential backoff
48
+ (0, vitest_1.expect)((0, retry_1.calculateRetryDelay)(0, config, 0)).toBe(1000);
49
+ (0, vitest_1.expect)((0, retry_1.calculateRetryDelay)(0, config, -5)).toBe(1000);
50
+ });
51
+ });
52
+ (0, vitest_1.describe)("isRetryableError", () => {
53
+ (0, vitest_1.it)("returns true for HarkenNetworkError", () => {
54
+ const error = new errors_1.HarkenNetworkError("Network failed");
55
+ (0, vitest_1.expect)((0, retry_1.isRetryableError)(error)).toBe(true);
56
+ });
57
+ (0, vitest_1.it)("returns true for HarkenApiError with 429 status", () => {
58
+ const error = new errors_1.HarkenApiError(429, {
59
+ error: { code: "rate_limited", message: "Too many requests" },
60
+ });
61
+ (0, vitest_1.expect)((0, retry_1.isRetryableError)(error)).toBe(true);
62
+ });
63
+ (0, vitest_1.it)("returns true for HarkenApiError with 5xx status", () => {
64
+ const error500 = new errors_1.HarkenApiError(500, {
65
+ error: { code: "internal_error", message: "Server error" },
66
+ });
67
+ const error503 = new errors_1.HarkenApiError(503, {
68
+ error: { code: "service_unavailable", message: "Service unavailable" },
69
+ });
70
+ (0, vitest_1.expect)((0, retry_1.isRetryableError)(error500)).toBe(true);
71
+ (0, vitest_1.expect)((0, retry_1.isRetryableError)(error503)).toBe(true);
72
+ });
73
+ (0, vitest_1.it)("returns false for HarkenApiError with 4xx status (except 429)", () => {
74
+ const error400 = new errors_1.HarkenApiError(400, {
75
+ error: { code: "validation_error", message: "Invalid input" },
76
+ });
77
+ const error401 = new errors_1.HarkenApiError(401, {
78
+ error: { code: "unauthorized", message: "Unauthorized" },
79
+ });
80
+ const error404 = new errors_1.HarkenApiError(404, {
81
+ error: { code: "not_found", message: "Not found" },
82
+ });
83
+ (0, vitest_1.expect)((0, retry_1.isRetryableError)(error400)).toBe(false);
84
+ (0, vitest_1.expect)((0, retry_1.isRetryableError)(error401)).toBe(false);
85
+ (0, vitest_1.expect)((0, retry_1.isRetryableError)(error404)).toBe(false);
86
+ });
87
+ (0, vitest_1.it)("returns false for generic Error", () => {
88
+ (0, vitest_1.expect)((0, retry_1.isRetryableError)(new Error("Generic error"))).toBe(false);
89
+ });
90
+ (0, vitest_1.it)("returns false for non-Error values", () => {
91
+ (0, vitest_1.expect)((0, retry_1.isRetryableError)(null)).toBe(false);
92
+ (0, vitest_1.expect)((0, retry_1.isRetryableError)(undefined)).toBe(false);
93
+ (0, vitest_1.expect)((0, retry_1.isRetryableError)("error string")).toBe(false);
94
+ (0, vitest_1.expect)((0, retry_1.isRetryableError)({ code: "error" })).toBe(false);
95
+ });
96
+ });
97
+ (0, vitest_1.describe)("sleep", () => {
98
+ (0, vitest_1.beforeEach)(() => {
99
+ vitest_1.vi.useFakeTimers();
100
+ });
101
+ (0, vitest_1.afterEach)(() => {
102
+ vitest_1.vi.useRealTimers();
103
+ });
104
+ (0, vitest_1.it)("resolves after specified delay", async () => {
105
+ const promise = (0, retry_1.sleep)(1000);
106
+ vitest_1.vi.advanceTimersByTime(1000);
107
+ await (0, vitest_1.expect)(promise).resolves.toBeUndefined();
108
+ });
109
+ });
110
+ (0, vitest_1.describe)("withRetry", () => {
111
+ (0, vitest_1.beforeEach)(() => {
112
+ vitest_1.vi.useFakeTimers();
113
+ vitest_1.vi.spyOn(Math, "random").mockReturnValue(0.5);
114
+ });
115
+ (0, vitest_1.afterEach)(() => {
116
+ vitest_1.vi.useRealTimers();
117
+ vitest_1.vi.restoreAllMocks();
118
+ });
119
+ (0, vitest_1.it)("returns result on first successful attempt", async () => {
120
+ const fn = vitest_1.vi.fn().mockResolvedValue("success");
121
+ const result = await (0, retry_1.withRetry)(fn);
122
+ (0, vitest_1.expect)(result).toBe("success");
123
+ (0, vitest_1.expect)(fn).toHaveBeenCalledTimes(1);
124
+ });
125
+ (0, vitest_1.it)("retries on retryable error and succeeds", async () => {
126
+ const fn = vitest_1.vi
127
+ .fn()
128
+ .mockRejectedValueOnce(new errors_1.HarkenNetworkError("Network failed"))
129
+ .mockResolvedValue("success");
130
+ const promise = (0, retry_1.withRetry)(fn, { maxRetries: 3 });
131
+ // First call fails immediately
132
+ await vitest_1.vi.advanceTimersByTimeAsync(0);
133
+ // Wait for retry delay (1000ms for attempt 0)
134
+ await vitest_1.vi.advanceTimersByTimeAsync(1000);
135
+ const result = await promise;
136
+ (0, vitest_1.expect)(result).toBe("success");
137
+ (0, vitest_1.expect)(fn).toHaveBeenCalledTimes(2);
138
+ });
139
+ (0, vitest_1.it)("throws after max retries exceeded", async () => {
140
+ const networkError = new errors_1.HarkenNetworkError("Network failed");
141
+ const fn = vitest_1.vi.fn().mockRejectedValue(networkError);
142
+ // Attach rejection handler immediately to avoid unhandled rejection warning
143
+ let caughtError;
144
+ const promise = (0, retry_1.withRetry)(fn, { maxRetries: 2, jitter: 0 }).catch((e) => {
145
+ caughtError = e;
146
+ });
147
+ // Initial attempt + retries with delays
148
+ await vitest_1.vi.advanceTimersByTimeAsync(0);
149
+ await vitest_1.vi.advanceTimersByTimeAsync(1000);
150
+ await vitest_1.vi.advanceTimersByTimeAsync(2000);
151
+ await promise;
152
+ (0, vitest_1.expect)(caughtError).toBe(networkError);
153
+ (0, vitest_1.expect)(fn).toHaveBeenCalledTimes(3); // 1 initial + 2 retries
154
+ });
155
+ (0, vitest_1.it)("does not retry non-retryable errors", async () => {
156
+ const validationError = new errors_1.HarkenApiError(400, {
157
+ error: { code: "validation_error", message: "Invalid input" },
158
+ });
159
+ const fn = vitest_1.vi.fn().mockRejectedValue(validationError);
160
+ await (0, vitest_1.expect)((0, retry_1.withRetry)(fn, { maxRetries: 3 })).rejects.toThrow(validationError);
161
+ (0, vitest_1.expect)(fn).toHaveBeenCalledTimes(1);
162
+ });
163
+ (0, vitest_1.it)("uses default config when none provided", async () => {
164
+ const fn = vitest_1.vi.fn().mockResolvedValue("success");
165
+ const result = await (0, retry_1.withRetry)(fn);
166
+ (0, vitest_1.expect)(result).toBe("success");
167
+ (0, vitest_1.expect)(fn).toHaveBeenCalledTimes(1);
168
+ });
169
+ (0, vitest_1.it)("merges partial config with defaults", async () => {
170
+ const fn = vitest_1.vi
171
+ .fn()
172
+ .mockRejectedValueOnce(new errors_1.HarkenNetworkError("Network failed"))
173
+ .mockResolvedValue("success");
174
+ const promise = (0, retry_1.withRetry)(fn, { baseDelay: 500 });
175
+ await vitest_1.vi.advanceTimersByTimeAsync(0);
176
+ // Should use custom baseDelay of 500ms
177
+ await vitest_1.vi.advanceTimersByTimeAsync(500);
178
+ const result = await promise;
179
+ (0, vitest_1.expect)(result).toBe("success");
180
+ });
181
+ (0, vitest_1.it)("respects Retry-After from HarkenApiError", async () => {
182
+ const rateLimitError = new errors_1.HarkenApiError(429, { error: { code: "rate_limited", message: "Too many requests" } }, { retryAfter: 5 });
183
+ const fn = vitest_1.vi.fn().mockRejectedValueOnce(rateLimitError).mockResolvedValue("success");
184
+ const promise = (0, retry_1.withRetry)(fn, { maxRetries: 3, jitter: 0 });
185
+ await vitest_1.vi.advanceTimersByTimeAsync(0);
186
+ // Should wait 5000ms (Retry-After: 5 seconds)
187
+ await vitest_1.vi.advanceTimersByTimeAsync(5000);
188
+ const result = await promise;
189
+ (0, vitest_1.expect)(result).toBe("success");
190
+ (0, vitest_1.expect)(fn).toHaveBeenCalledTimes(2);
191
+ });
192
+ });
193
+ //# sourceMappingURL=retry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.test.js","sourceRoot":"","sources":["../../src/api/retry.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import React from 'react';
2
- import type { ViewStyle } from 'react-native';
3
- import type { components } from '../types/index.js';
4
- import type { CategoryOption } from '../components/CategorySelector';
5
- import type { AttachmentSourceConfig } from '../hooks/useAttachmentPicker';
6
- type FeedbackSubmissionResponse = components['schemas']['FeedbackSubmissionResponse'];
1
+ import React from "react";
2
+ import type { ViewStyle, StyleProp } from "react-native";
3
+ import type { components } from "../types/index.js";
4
+ import type { CategoryOption } from "../components/CategorySelector";
5
+ import type { AttachmentSourceConfig } from "../hooks/useAttachmentPicker";
6
+ type FeedbackSubmissionResponse = components["schemas"]["FeedbackSubmissionResponse"];
7
7
  export interface FeedbackSheetProps {
8
8
  /** Called when feedback is successfully submitted */
9
9
  onSuccess?: (result: FeedbackSubmissionResponse) => void;
@@ -11,7 +11,7 @@ export interface FeedbackSheetProps {
11
11
  onError?: (error: Error) => void;
12
12
  /** Called when user cancels/dismisses the form */
13
13
  onCancel?: () => void;
14
- /** Title text */
14
+ /** Title text. Set to empty string to hide title section entirely. */
15
15
  title?: string;
16
16
  /** Placeholder text for message input */
17
17
  placeholder?: string;
@@ -43,10 +43,20 @@ export interface FeedbackSheetProps {
43
43
  showSuccessAlert?: boolean;
44
44
  /** Whether to clear form on success. @default true */
45
45
  clearOnSuccess?: boolean;
46
- /** Container style override */
47
- containerStyle?: ViewStyle;
48
- /** Form content style override */
49
- formStyle?: ViewStyle;
46
+ /**
47
+ * Layout mode for the container.
48
+ * - 'flex': Uses flex: 1 (default, requires parent with explicit height)
49
+ * - 'auto': Content determines height (for bottom sheet modal embedding)
50
+ */
51
+ layout?: "flex" | "auto";
52
+ /** Container style override (outer KeyboardAvoidingView) */
53
+ containerStyle?: StyleProp<ViewStyle>;
54
+ /** Content style override (inner ScrollView content) */
55
+ contentStyle?: StyleProp<ViewStyle>;
56
+ /**
57
+ * @deprecated Use `contentStyle` instead
58
+ */
59
+ formStyle?: StyleProp<ViewStyle>;
50
60
  }
51
61
  /**
52
62
  * A batteries-included feedback form component with full attachment support.
@@ -56,13 +66,26 @@ export interface FeedbackSheetProps {
56
66
  *
57
67
  * For the version without attachment dependencies, import from the main entry point.
58
68
  *
69
+ * Uses the following theme tokens:
70
+ * - `colors.formBackground` for background
71
+ * - `spacing.formPadding` for padding
72
+ * - `spacing.sectionGap` for section gaps
73
+ * - `radii.form` for border radius
74
+ *
59
75
  * @example
60
76
  * ```tsx
61
- * import { FeedbackSheet } from '@harkenapp/sdk-react-native/attachments';
77
+ * import { FeedbackSheet } from '@harkenapp/sdk-react-native';
62
78
  *
63
79
  * // Minimal usage with attachments
64
80
  * <FeedbackSheet onSuccess={() => navigation.goBack()} />
65
81
  *
82
+ * // For bottom sheet modal embedding
83
+ * <FeedbackSheet
84
+ * layout="auto"
85
+ * title=""
86
+ * onSuccess={() => closeModal()}
87
+ * />
88
+ *
66
89
  * // With customization
67
90
  * <FeedbackSheet
68
91
  * title="Report a Bug"
@@ -83,6 +106,6 @@ export interface FeedbackSheetProps {
83
106
  * />
84
107
  * ```
85
108
  */
86
- export declare function FeedbackSheet({ onSuccess, onError, onCancel, title, placeholder, submitLabel, cancelLabel, categories, requireCategory, minMessageLength, maxMessageLength, enableAttachments, maxAttachments, attachmentSources, successMessage, showSuccessAlert, clearOnSuccess, containerStyle, formStyle, }: FeedbackSheetProps): React.JSX.Element;
109
+ export declare function FeedbackSheet({ onSuccess, onError, onCancel, title, placeholder, submitLabel, cancelLabel, categories, requireCategory, minMessageLength, maxMessageLength, enableAttachments, maxAttachments, attachmentSources, successMessage, showSuccessAlert, clearOnSuccess, layout, containerStyle, contentStyle, formStyle, }: FeedbackSheetProps): React.JSX.Element;
87
110
  export {};
88
111
  //# sourceMappingURL=FeedbackSheet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FeedbackSheet.d.ts","sourceRoot":"","sources":["../../src/attachments/FeedbackSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAQrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAI3E,KAAK,0BAA0B,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,4BAA4B,CAAC,CAAC;AAEtF,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACzD,mCAAmC;IACnC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,wBAAwB;IACxB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAE3C,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,kCAAkC;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,OAAO,EACP,QAAQ,EACR,KAAuB,EACvB,WAA6C,EAC7C,WAAsB,EACtB,WAAsB,EACtB,UAA+B,EAC/B,eAAuB,EACvB,gBAAoB,EACpB,gBAAuB,EACvB,iBAAwB,EACxB,cAAkB,EAClB,iBAAiB,EACjB,cAA+C,EAC/C,gBAAuB,EACvB,cAAqB,EACrB,cAAc,EACd,SAAS,GACV,EAAE,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA6QxC"}
1
+ {"version":3,"file":"FeedbackSheet.d.ts","sourceRoot":"","sources":["../../src/attachments/FeedbackSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAI3E,KAAK,0BAA0B,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,4BAA4B,CAAC,CAAC;AAEtF,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACzD,mCAAmC;IACnC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,wBAAwB;IACxB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAE3C,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,wDAAwD;IACxD,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,OAAO,EACP,QAAQ,EACR,KAAuB,EACvB,WAA6C,EAC7C,WAAsB,EACtB,WAAsB,EACtB,UAA+B,EAC/B,eAAuB,EACvB,gBAAoB,EACpB,gBAAuB,EACvB,iBAAwB,EACxB,cAAkB,EAClB,iBAAiB,EACjB,cAA+C,EAC/C,gBAAuB,EACvB,cAAqB,EACrB,MAAe,EACf,cAAc,EACd,YAAY,EACZ,SAAS,GACV,EAAE,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA6QxC"}