@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.
- package/README.md +44 -7
- package/app.plugin.cjs +12 -17
- package/dist/__mocks__/async-storage.d.ts +16 -0
- package/dist/__mocks__/async-storage.d.ts.map +1 -0
- package/dist/__mocks__/async-storage.js +39 -0
- package/dist/__mocks__/async-storage.js.map +1 -0
- package/dist/__mocks__/expo-document-picker.d.ts +26 -0
- package/dist/__mocks__/expo-document-picker.d.ts.map +1 -0
- package/dist/__mocks__/expo-document-picker.js +25 -0
- package/dist/__mocks__/expo-document-picker.js.map +1 -0
- package/dist/__mocks__/expo-file-system.d.ts +42 -0
- package/dist/__mocks__/expo-file-system.d.ts.map +1 -0
- package/dist/__mocks__/expo-file-system.js +37 -0
- package/dist/__mocks__/expo-file-system.js.map +1 -0
- package/dist/__mocks__/expo-image-picker.d.ts +30 -0
- package/dist/__mocks__/expo-image-picker.d.ts.map +1 -0
- package/dist/__mocks__/expo-image-picker.js +30 -0
- package/dist/__mocks__/expo-image-picker.js.map +1 -0
- package/dist/__mocks__/expo-secure-store.d.ts +15 -0
- package/dist/__mocks__/expo-secure-store.d.ts.map +1 -0
- package/dist/__mocks__/expo-secure-store.js +30 -0
- package/dist/__mocks__/expo-secure-store.js.map +1 -0
- package/dist/__mocks__/react-native.d.ts +73 -0
- package/dist/__mocks__/react-native.d.ts.map +1 -0
- package/dist/__mocks__/react-native.js +45 -0
- package/dist/__mocks__/react-native.js.map +1 -0
- package/dist/api/client.d.ts +8 -8
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +17 -19
- package/dist/api/client.js.map +1 -1
- package/dist/api/client.test.d.ts +2 -0
- package/dist/api/client.test.d.ts.map +1 -0
- package/dist/api/client.test.js +417 -0
- package/dist/api/client.test.js.map +1 -0
- package/dist/api/errors.d.ts +3 -3
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/errors.js +3 -3
- package/dist/api/errors.js.map +1 -1
- package/dist/api/errors.test.d.ts +2 -0
- package/dist/api/errors.test.d.ts.map +1 -0
- package/dist/api/errors.test.js +155 -0
- package/dist/api/errors.test.js.map +1 -0
- package/dist/api/index.d.ts +6 -6
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/retry.d.ts +1 -1
- package/dist/api/retry.d.ts.map +1 -1
- package/dist/api/retry.js.map +1 -1
- package/dist/api/retry.test.d.ts +2 -0
- package/dist/api/retry.test.d.ts.map +1 -0
- package/dist/api/retry.test.js +193 -0
- package/dist/api/retry.test.js.map +1 -0
- package/dist/attachments/FeedbackSheet.d.ts +36 -13
- package/dist/attachments/FeedbackSheet.d.ts.map +1 -1
- package/dist/attachments/FeedbackSheet.js +50 -30
- package/dist/attachments/FeedbackSheet.js.map +1 -1
- package/dist/attachments/index.d.ts +2 -2
- package/dist/components/AttachmentGrid.d.ts +12 -4
- package/dist/components/AttachmentGrid.d.ts.map +1 -1
- package/dist/components/AttachmentGrid.js +44 -34
- package/dist/components/AttachmentGrid.js.map +1 -1
- package/dist/components/AttachmentPicker.d.ts +3 -3
- package/dist/components/AttachmentPicker.d.ts.map +1 -1
- package/dist/components/AttachmentPicker.js +34 -36
- package/dist/components/AttachmentPicker.js.map +1 -1
- package/dist/components/AttachmentPreview.d.ts +10 -4
- package/dist/components/AttachmentPreview.d.ts.map +1 -1
- package/dist/components/AttachmentPreview.js +48 -34
- package/dist/components/AttachmentPreview.js.map +1 -1
- package/dist/components/CategorySelector.d.ts +3 -3
- package/dist/components/CategorySelector.d.ts.map +1 -1
- package/dist/components/CategorySelector.js +21 -27
- package/dist/components/CategorySelector.js.map +1 -1
- package/dist/components/FeedbackForm.d.ts +3 -3
- package/dist/components/FeedbackForm.d.ts.map +1 -1
- package/dist/components/FeedbackForm.js +7 -8
- package/dist/components/FeedbackForm.js.map +1 -1
- package/dist/components/FeedbackSheet.d.ts +34 -11
- package/dist/components/FeedbackSheet.d.ts.map +1 -1
- package/dist/components/FeedbackSheet.js +46 -28
- package/dist/components/FeedbackSheet.js.map +1 -1
- package/dist/components/ThemedButton.d.ts +16 -5
- package/dist/components/ThemedButton.d.ts.map +1 -1
- package/dist/components/ThemedButton.js +38 -29
- package/dist/components/ThemedButton.js.map +1 -1
- package/dist/components/ThemedText.d.ts +3 -3
- package/dist/components/ThemedText.d.ts.map +1 -1
- package/dist/components/ThemedText.js +1 -1
- package/dist/components/ThemedText.js.map +1 -1
- package/dist/components/ThemedTextInput.d.ts +11 -2
- package/dist/components/ThemedTextInput.d.ts.map +1 -1
- package/dist/components/ThemedTextInput.js +19 -9
- package/dist/components/ThemedTextInput.js.map +1 -1
- package/dist/components/UploadStatusOverlay.d.ts +11 -3
- package/dist/components/UploadStatusOverlay.d.ts.map +1 -1
- package/dist/components/UploadStatusOverlay.js +59 -76
- package/dist/components/UploadStatusOverlay.js.map +1 -1
- package/dist/components/index.d.ts +18 -18
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/context/HarkenContext.d.ts +20 -15
- package/dist/context/HarkenContext.d.ts.map +1 -1
- package/dist/context/HarkenContext.js +20 -17
- package/dist/context/HarkenContext.js.map +1 -1
- package/dist/context/index.d.ts +2 -2
- package/dist/domain/index.d.ts +2 -2
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js.map +1 -1
- package/dist/hooks/index.d.ts +5 -5
- package/dist/hooks/useAnonymousId.js +1 -1
- package/dist/hooks/useAnonymousId.test.d.ts +2 -0
- package/dist/hooks/useAnonymousId.test.d.ts.map +1 -0
- package/dist/hooks/useAnonymousId.test.js +154 -0
- package/dist/hooks/useAnonymousId.test.js.map +1 -0
- package/dist/hooks/useAttachmentPicker.d.ts +3 -3
- package/dist/hooks/useAttachmentPicker.js +7 -7
- package/dist/hooks/useAttachmentStatus.d.ts +1 -1
- package/dist/hooks/useAttachmentStatus.d.ts.map +1 -1
- package/dist/hooks/useAttachmentStatus.js.map +1 -1
- package/dist/hooks/useAttachmentUpload.d.ts +2 -2
- package/dist/hooks/useAttachmentUpload.d.ts.map +1 -1
- package/dist/hooks/useAttachmentUpload.js +5 -5
- package/dist/hooks/useAttachmentUpload.js.map +1 -1
- package/dist/hooks/useAttachmentUpload.test.d.ts +2 -0
- package/dist/hooks/useAttachmentUpload.test.d.ts.map +1 -0
- package/dist/hooks/useAttachmentUpload.test.js +542 -0
- package/dist/hooks/useAttachmentUpload.test.js.map +1 -0
- package/dist/hooks/useFeedback.d.ts +4 -4
- package/dist/hooks/useFeedback.d.ts.map +1 -1
- package/dist/hooks/useFeedback.js +3 -5
- package/dist/hooks/useFeedback.js.map +1 -1
- package/dist/hooks/useFeedback.test.d.ts +2 -0
- package/dist/hooks/useFeedback.test.d.ts.map +1 -0
- package/dist/hooks/useFeedback.test.js +299 -0
- package/dist/hooks/useFeedback.test.js.map +1 -0
- package/dist/hooks/useHarkenContext.d.ts +1 -1
- package/dist/hooks/useHarkenContext.js +1 -1
- package/dist/hooks/useHarkenTheme.d.ts +27 -3
- package/dist/hooks/useHarkenTheme.d.ts.map +1 -1
- package/dist/hooks/useHarkenTheme.js +26 -2
- package/dist/hooks/useHarkenTheme.js.map +1 -1
- package/dist/index.d.ts +28 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/services/index.d.ts +3 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/uploadQueueService.d.ts +2 -2
- package/dist/services/uploadQueueService.d.ts.map +1 -1
- package/dist/services/uploadQueueService.js +16 -17
- package/dist/services/uploadQueueService.js.map +1 -1
- package/dist/services/uploadQueueService.test.d.ts +2 -0
- package/dist/services/uploadQueueService.test.d.ts.map +1 -0
- package/dist/services/uploadQueueService.test.js +426 -0
- package/dist/services/uploadQueueService.test.js.map +1 -0
- package/dist/services/uploadQueueStorage.d.ts +1 -1
- package/dist/services/uploadQueueStorage.d.ts.map +1 -1
- package/dist/services/uploadQueueStorage.js +4 -4
- package/dist/services/uploadQueueStorage.js.map +1 -1
- package/dist/services/uploadQueueStorage.test.d.ts +2 -0
- package/dist/services/uploadQueueStorage.test.d.ts.map +1 -0
- package/dist/services/uploadQueueStorage.test.js +200 -0
- package/dist/services/uploadQueueStorage.test.js.map +1 -0
- package/dist/storage/IdentityStore.d.ts +1 -1
- package/dist/storage/IdentityStore.d.ts.map +1 -1
- package/dist/storage/IdentityStore.js.map +1 -1
- package/dist/storage/IdentityStore.test.d.ts +2 -0
- package/dist/storage/IdentityStore.test.d.ts.map +1 -0
- package/dist/storage/IdentityStore.test.js +176 -0
- package/dist/storage/IdentityStore.test.js.map +1 -0
- package/dist/storage/SecureStoreAdapter.d.ts +1 -1
- package/dist/storage/SecureStoreAdapter.test.d.ts +2 -0
- package/dist/storage/SecureStoreAdapter.test.d.ts.map +1 -0
- package/dist/storage/SecureStoreAdapter.test.js +114 -0
- package/dist/storage/SecureStoreAdapter.test.js.map +1 -0
- package/dist/storage/defaultStorage.d.ts +1 -1
- package/dist/storage/defaultStorage.js +4 -4
- package/dist/storage/defaultStorage.test.d.ts +2 -0
- package/dist/storage/defaultStorage.test.d.ts.map +1 -0
- package/dist/storage/defaultStorage.test.js +159 -0
- package/dist/storage/defaultStorage.test.js.map +1 -0
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/types.js +1 -1
- package/dist/theme/defaults.d.ts +14 -3
- package/dist/theme/defaults.d.ts.map +1 -1
- package/dist/theme/defaults.js +58 -43
- package/dist/theme/defaults.js.map +1 -1
- package/dist/theme/index.d.ts +3 -2
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +4 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/resolver.d.ts +16 -0
- package/dist/theme/resolver.d.ts.map +1 -0
- package/dist/theme/resolver.js +375 -0
- package/dist/theme/resolver.js.map +1 -0
- package/dist/theme/resolver.test.d.ts +2 -0
- package/dist/theme/resolver.test.d.ts.map +1 -0
- package/dist/theme/resolver.test.js +344 -0
- package/dist/theme/resolver.test.js.map +1 -0
- package/dist/theme/types.d.ts +378 -5
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/types/config.d.ts +4 -4
- package/dist/types/index.d.ts +2 -2
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/uuid.d.ts.map +1 -1
- package/dist/utils/uuid.js +4 -5
- package/dist/utils/uuid.js.map +1 -1
- package/dist/utils/uuid.test.d.ts +2 -0
- package/dist/utils/uuid.test.d.ts.map +1 -0
- package/dist/utils/uuid.test.js +78 -0
- package/dist/utils/uuid.test.js.map +1 -0
- package/package.json +21 -13
- package/src/@types/expo-file-system-legacy.d.ts +3 -3
- package/src/__mocks__/async-storage.ts +46 -0
- package/src/__mocks__/expo-document-picker.ts +41 -0
- package/src/__mocks__/expo-file-system.ts +62 -0
- package/src/__mocks__/expo-image-picker.ts +48 -0
- package/src/__mocks__/expo-secure-store.ts +29 -0
- package/src/__mocks__/react-native.ts +46 -0
- package/src/api/client.test.ts +515 -0
- package/src/api/client.ts +45 -64
- package/src/api/errors.test.ts +193 -0
- package/src/api/errors.ts +7 -11
- package/src/api/index.ts +6 -10
- package/src/api/retry.test.ts +251 -0
- package/src/api/retry.ts +3 -6
- package/src/attachments/FeedbackSheet.tsx +100 -80
- package/src/attachments/index.ts +2 -2
- package/src/components/AttachmentGrid.tsx +54 -45
- package/src/components/AttachmentPicker.tsx +43 -54
- package/src/components/AttachmentPreview.tsx +51 -47
- package/src/components/CategorySelector.tsx +29 -35
- package/src/components/FeedbackForm.tsx +23 -35
- package/src/components/FeedbackSheet.tsx +89 -68
- package/src/components/ThemedButton.tsx +49 -47
- package/src/components/ThemedText.tsx +7 -10
- package/src/components/ThemedTextInput.tsx +23 -13
- package/src/components/UploadStatusOverlay.tsx +66 -89
- package/src/components/index.ts +18 -21
- package/src/context/HarkenContext.tsx +29 -28
- package/src/context/index.ts +2 -2
- package/src/domain/index.ts +2 -5
- package/src/domain/upload-queue.ts +5 -5
- package/src/hooks/index.ts +5 -5
- package/src/hooks/useAnonymousId.test.ts +189 -0
- package/src/hooks/useAnonymousId.ts +3 -3
- package/src/hooks/useAttachmentPicker.ts +12 -12
- package/src/hooks/useAttachmentStatus.ts +12 -16
- package/src/hooks/useAttachmentUpload.test.ts +632 -0
- package/src/hooks/useAttachmentUpload.ts +45 -54
- package/src/hooks/useFeedback.test.ts +376 -0
- package/src/hooks/useFeedback.ts +12 -14
- package/src/hooks/useHarkenContext.ts +4 -4
- package/src/hooks/useHarkenTheme.ts +30 -6
- package/src/index.ts +28 -52
- package/src/services/index.ts +3 -9
- package/src/services/uploadQueueService.test.ts +489 -0
- package/src/services/uploadQueueService.ts +40 -56
- package/src/services/uploadQueueStorage.test.ts +243 -0
- package/src/services/uploadQueueStorage.ts +7 -9
- package/src/storage/IdentityStore.test.ts +173 -0
- package/src/storage/IdentityStore.ts +4 -5
- package/src/storage/SecureStoreAdapter.test.ts +147 -0
- package/src/storage/SecureStoreAdapter.ts +1 -1
- package/src/storage/defaultStorage.test.ts +159 -0
- package/src/storage/defaultStorage.ts +6 -6
- package/src/storage/index.ts +5 -5
- package/src/storage/types.ts +1 -1
- package/src/theme/defaults.ts +75 -46
- package/src/theme/index.ts +15 -2
- package/src/theme/resolver.test.ts +411 -0
- package/src/theme/resolver.ts +446 -0
- package/src/theme/types.ts +453 -15
- package/src/types/config.ts +4 -4
- package/src/types/index.ts +2 -2
- package/src/utils/index.ts +1 -1
- package/src/utils/uuid.test.ts +85 -0
- package/src/utils/uuid.ts +4 -7
package/dist/api/errors.js.map
CHANGED
|
@@ -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,
|
|
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 @@
|
|
|
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":"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"}
|
package/dist/api/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { HarkenClient, createHarkenClient } from
|
|
2
|
-
export type { HarkenClientConfig } from
|
|
3
|
-
export { HarkenError, HarkenApiError, HarkenNetworkError
|
|
4
|
-
export { withRetry, calculateRetryDelay, isRetryableError } from
|
|
5
|
-
export type { RetryConfig } from
|
|
6
|
-
export { DEFAULT_RETRY_CONFIG } from
|
|
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
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/api/index.js.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/api/retry.d.ts
CHANGED
package/dist/api/retry.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/api/retry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/api/retry.ts"],"names":[],"mappings":";;;AAuBA,kDAmBC;AAKD,
|
|
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 @@
|
|
|
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
|
|
2
|
-
import type { ViewStyle } from
|
|
3
|
-
import type { components } from
|
|
4
|
-
import type { CategoryOption } from
|
|
5
|
-
import type { AttachmentSourceConfig } from
|
|
6
|
-
type FeedbackSubmissionResponse = components[
|
|
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
|
-
/**
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
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;
|
|
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"}
|