@knocklabs/client 0.8.18 → 0.8.19

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 (121) hide show
  1. package/dist/api.d.ts +25 -0
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +84 -0
  4. package/dist/cjs/api.js +2 -133
  5. package/dist/cjs/api.js.map +1 -1
  6. package/dist/cjs/clients/feed/feed.js +2 -939
  7. package/dist/cjs/clients/feed/feed.js.map +1 -1
  8. package/dist/cjs/clients/feed/index.js +2 -34
  9. package/dist/cjs/clients/feed/index.js.map +1 -1
  10. package/dist/cjs/clients/feed/store.js +2 -111
  11. package/dist/cjs/clients/feed/store.js.map +1 -1
  12. package/dist/cjs/clients/feed/utils.js +2 -26
  13. package/dist/cjs/clients/feed/utils.js.map +1 -1
  14. package/dist/cjs/clients/preferences/index.js +2 -373
  15. package/dist/cjs/clients/preferences/index.js.map +1 -1
  16. package/dist/cjs/clients/users/index.js +2 -185
  17. package/dist/cjs/clients/users/index.js.map +1 -1
  18. package/dist/cjs/index.js +2 -102
  19. package/dist/cjs/index.js.map +1 -1
  20. package/dist/cjs/knock.js +6 -89
  21. package/dist/cjs/knock.js.map +1 -1
  22. package/dist/cjs/networkStatus.js +2 -18
  23. package/dist/cjs/networkStatus.js.map +1 -1
  24. package/dist/clients/feed/feed.d.ts +64 -0
  25. package/dist/clients/feed/feed.d.ts.map +1 -0
  26. package/dist/clients/feed/feed.js +572 -0
  27. package/dist/clients/feed/index.d.ts +15 -0
  28. package/dist/clients/feed/index.d.ts.map +1 -0
  29. package/dist/clients/feed/index.js +34 -0
  30. package/dist/clients/feed/interfaces.d.ts +60 -0
  31. package/dist/clients/feed/interfaces.d.ts.map +1 -0
  32. package/dist/clients/feed/interfaces.js +2 -0
  33. package/dist/clients/feed/store.d.ts +3 -0
  34. package/dist/clients/feed/store.d.ts.map +1 -0
  35. package/dist/clients/feed/store.js +72 -0
  36. package/dist/clients/feed/types.d.ts +34 -0
  37. package/dist/clients/feed/types.d.ts.map +1 -0
  38. package/dist/clients/feed/types.js +2 -0
  39. package/dist/clients/feed/utils.d.ts +4 -0
  40. package/dist/clients/feed/utils.d.ts.map +1 -0
  41. package/dist/clients/feed/utils.js +21 -0
  42. package/dist/clients/preferences/index.d.ts +46 -0
  43. package/dist/clients/preferences/index.d.ts.map +1 -0
  44. package/dist/clients/preferences/index.js +129 -0
  45. package/dist/clients/preferences/interfaces.d.ts +26 -0
  46. package/dist/clients/preferences/interfaces.d.ts.map +1 -0
  47. package/dist/clients/preferences/interfaces.js +2 -0
  48. package/dist/clients/users/index.d.ts +16 -0
  49. package/dist/clients/users/index.d.ts.map +1 -0
  50. package/dist/clients/users/index.js +56 -0
  51. package/dist/clients/users/interfaces.d.ts +8 -0
  52. package/dist/clients/users/interfaces.d.ts.map +1 -0
  53. package/dist/clients/users/interfaces.js +2 -0
  54. package/dist/esm/api.js +44 -84
  55. package/dist/esm/api.js.map +1 -1
  56. package/dist/esm/clients/feed/feed.js +296 -603
  57. package/dist/esm/clients/feed/feed.js.map +1 -1
  58. package/dist/esm/clients/feed/index.js +28 -12
  59. package/dist/esm/clients/feed/index.js.map +1 -1
  60. package/dist/esm/clients/feed/store.js +37 -71
  61. package/dist/esm/clients/feed/store.js.map +1 -1
  62. package/dist/esm/clients/feed/utils.js +10 -15
  63. package/dist/esm/clients/feed/utils.js.map +1 -1
  64. package/dist/esm/clients/preferences/index.js +79 -146
  65. package/dist/esm/clients/preferences/index.js.map +1 -1
  66. package/dist/esm/clients/users/index.js +52 -76
  67. package/dist/esm/clients/users/index.js.map +1 -1
  68. package/dist/esm/index.js +12 -11
  69. package/dist/esm/index.js.map +1 -1
  70. package/dist/esm/knock.js +72 -51
  71. package/dist/esm/knock.js.map +1 -1
  72. package/dist/esm/networkStatus.js +14 -10
  73. package/dist/esm/networkStatus.js.map +1 -1
  74. package/dist/index.d.ts +11 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +43 -0
  77. package/dist/interfaces.d.ts +41 -0
  78. package/dist/interfaces.d.ts.map +1 -0
  79. package/dist/interfaces.js +2 -0
  80. package/dist/knock.d.ts +30 -0
  81. package/dist/knock.d.ts.map +1 -0
  82. package/dist/knock.js +135 -0
  83. package/dist/networkStatus.d.ts +8 -0
  84. package/dist/networkStatus.d.ts.map +1 -0
  85. package/dist/networkStatus.js +18 -0
  86. package/dist/types/api.d.ts +0 -2
  87. package/dist/types/api.d.ts.map +1 -1
  88. package/dist/types/clients/feed/feed.d.ts +12 -4
  89. package/dist/types/clients/feed/feed.d.ts.map +1 -1
  90. package/dist/types/clients/feed/index.d.ts +4 -0
  91. package/dist/types/clients/feed/index.d.ts.map +1 -1
  92. package/dist/types/clients/feed/store.d.ts.map +1 -1
  93. package/dist/types/clients/feed/types.d.ts +0 -1
  94. package/dist/types/clients/feed/types.d.ts.map +1 -1
  95. package/dist/types/index.d.ts +1 -1
  96. package/dist/types/index.d.ts.map +1 -1
  97. package/dist/types/interfaces.d.ts +7 -0
  98. package/dist/types/interfaces.d.ts.map +1 -1
  99. package/dist/types/knock.d.ts +12 -4
  100. package/dist/types/knock.d.ts.map +1 -1
  101. package/package.json +12 -8
  102. package/dist/cjs/clients/feed/interfaces.js +0 -6
  103. package/dist/cjs/clients/feed/interfaces.js.map +0 -1
  104. package/dist/cjs/clients/feed/types.js +0 -6
  105. package/dist/cjs/clients/feed/types.js.map +0 -1
  106. package/dist/cjs/clients/preferences/interfaces.js +0 -6
  107. package/dist/cjs/clients/preferences/interfaces.js.map +0 -1
  108. package/dist/cjs/clients/users/interfaces.js +0 -6
  109. package/dist/cjs/clients/users/interfaces.js.map +0 -1
  110. package/dist/cjs/interfaces.js +0 -6
  111. package/dist/cjs/interfaces.js.map +0 -1
  112. package/dist/esm/clients/feed/interfaces.js +0 -2
  113. package/dist/esm/clients/feed/interfaces.js.map +0 -1
  114. package/dist/esm/clients/feed/types.js +0 -2
  115. package/dist/esm/clients/feed/types.js.map +0 -1
  116. package/dist/esm/clients/preferences/interfaces.js +0 -2
  117. package/dist/esm/clients/preferences/interfaces.js.map +0 -1
  118. package/dist/esm/clients/users/interfaces.js +0 -2
  119. package/dist/esm/clients/users/interfaces.js.map +0 -1
  120. package/dist/esm/interfaces.js +0 -2
  121. package/dist/esm/interfaces.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/clients/feed/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;IAEvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAE1C,YAAY,CAAC,EAAE,WAAW,CAAC;IAE3B,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAE5C,6BAA6B,CAAC,EAAE,OAAO,CAAC;IAGxC,mCAAmC,CAAC,EAAE,MAAM,CAAC;CAC9C;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC;IAChE,aAAa,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CACnC,GAAG,IAAI,CAAC,iBAAiB,EAAE,mCAAmC,CAAC,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,WAAW;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,QAAQ,CAAC;CACrB"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ import { FeedStoreState } from "./types";
2
+ export default function createStore(): import("zustand/vanilla").StoreApi<FeedStoreState>;
3
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/clients/feed/store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA6BzC,MAAM,CAAC,OAAO,UAAU,WAAW,uDA0DlC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const vanilla_1 = __importDefault(require("zustand/vanilla"));
7
+ const networkStatus_1 = require("../../networkStatus");
8
+ const utils_1 = require("./utils");
9
+ function processItems(items) {
10
+ const deduped = (0, utils_1.deduplicateItems)(items);
11
+ const sorted = (0, utils_1.sortItems)(deduped);
12
+ return sorted;
13
+ }
14
+ const defaultSetResultOptions = {
15
+ shouldSetPage: true,
16
+ shouldAppend: false,
17
+ };
18
+ const initialStoreState = {
19
+ items: [],
20
+ metadata: {
21
+ total_count: 0,
22
+ unread_count: 0,
23
+ unseen_count: 0,
24
+ },
25
+ pageInfo: {
26
+ before: null,
27
+ after: null,
28
+ page_size: 50,
29
+ },
30
+ };
31
+ function createStore() {
32
+ return (0, vanilla_1.default)((set) => ({
33
+ // Keeps track of all of the items loaded
34
+ ...initialStoreState,
35
+ // The network status indicates what's happening with the request
36
+ networkStatus: networkStatus_1.NetworkStatus.ready,
37
+ loading: false,
38
+ setNetworkStatus: (networkStatus) => set(() => ({
39
+ networkStatus,
40
+ loading: networkStatus === networkStatus_1.NetworkStatus.loading,
41
+ })),
42
+ setResult: ({ entries, meta, page_info }, options = defaultSetResultOptions) => set((state) => {
43
+ // We resort the list on set, so concating everything is fine (if a bit suboptimal)
44
+ const items = options.shouldAppend
45
+ ? processItems(state.items.concat(entries))
46
+ : entries;
47
+ return {
48
+ items,
49
+ metadata: meta,
50
+ pageInfo: options.shouldSetPage ? page_info : state.pageInfo,
51
+ loading: false,
52
+ networkStatus: networkStatus_1.NetworkStatus.ready,
53
+ };
54
+ }),
55
+ setMetadata: (metadata) => set(() => ({ metadata })),
56
+ resetStore: (metadata = initialStoreState.metadata) => set(() => ({ ...initialStoreState, metadata })),
57
+ setItemAttrs: (itemIds, attrs) => {
58
+ // Create a map for the items to the updates to be made
59
+ const itemUpdatesMap = itemIds.reduce((acc, itemId) => ({ ...acc, [itemId]: attrs }), {});
60
+ return set((state) => {
61
+ const items = state.items.map((item) => {
62
+ if (itemUpdatesMap[item.id]) {
63
+ return { ...item, ...itemUpdatesMap[item.id] };
64
+ }
65
+ return item;
66
+ });
67
+ return { items };
68
+ });
69
+ },
70
+ }));
71
+ }
72
+ exports.default = createStore;
@@ -0,0 +1,34 @@
1
+ import { PageInfo } from "@knocklabs/types";
2
+ import { NetworkStatus } from "../../networkStatus";
3
+ import { FeedItem, FeedMetadata, FeedResponse } from "./interfaces";
4
+ export type StoreFeedResultOptions = {
5
+ shouldSetPage?: boolean;
6
+ shouldAppend?: boolean;
7
+ };
8
+ export type FeedStoreState = {
9
+ items: FeedItem[];
10
+ pageInfo: PageInfo;
11
+ metadata: FeedMetadata;
12
+ loading: boolean;
13
+ networkStatus: NetworkStatus;
14
+ setResult: (response: FeedResponse, opts?: StoreFeedResultOptions) => void;
15
+ setMetadata: (metadata: FeedMetadata) => void;
16
+ setNetworkStatus: (networkStatus: NetworkStatus) => void;
17
+ setItemAttrs: (itemIds: string[], attrs: object) => void;
18
+ resetStore: (metadata?: FeedMetadata) => void;
19
+ };
20
+ export type FeedMessagesReceivedPayload = {
21
+ metadata: FeedMetadata;
22
+ };
23
+ export type FeedRealTimeEvent = "messages.new";
24
+ export type FeedEvent = FeedRealTimeEvent | "items.received.page" | "items.received.realtime" | "items.archived" | "items.unarchived" | "items.seen" | "items.unseen" | "items.read" | "items.unread" | "items.all_archived" | "items.all_read" | "items.all_seen";
25
+ export type BindableFeedEvent = FeedEvent | "items.received.*" | "items.*";
26
+ export type FeedEventPayload = {
27
+ event: Omit<FeedEvent, "messages.new">;
28
+ items: FeedItem[];
29
+ metadata: FeedMetadata;
30
+ };
31
+ export type FeedRealTimeCallback = (resp: FeedResponse) => void;
32
+ export type FeedEventCallback = (payload: FeedEventPayload) => void;
33
+ export type FeedItemOrItems = FeedItem | FeedItem[];
34
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/clients/feed/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC3E,WAAW,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,gBAAgB,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,IAAI,CAAC;IACzD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAQF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAE/C,MAAM,MAAM,SAAS,GACjB,iBAAiB,GACjB,qBAAqB,GACrB,yBAAyB,GACzB,gBAAgB,GAChB,kBAAkB,GAClB,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,cAAc,GACd,oBAAoB,GACpB,gBAAgB,GAChB,gBAAgB,CAAC;AAGrB,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAE3E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACvC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEpE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ import { FeedItem } from "./interfaces";
2
+ export declare function deduplicateItems(items: FeedItem[]): FeedItem[];
3
+ export declare function sortItems(items: FeedItem[]): FeedItem<import("@knocklabs/types").GenericData>[];
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/clients/feed/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAY9D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,sDAM1C"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sortItems = exports.deduplicateItems = void 0;
4
+ function deduplicateItems(items) {
5
+ const seen = {};
6
+ const values = [];
7
+ return items.reduce((acc, item) => {
8
+ if (seen[item.id]) {
9
+ return acc;
10
+ }
11
+ seen[item.id] = true;
12
+ return [...acc, item];
13
+ }, values);
14
+ }
15
+ exports.deduplicateItems = deduplicateItems;
16
+ function sortItems(items) {
17
+ return items.sort((a, b) => {
18
+ return (new Date(b.inserted_at).getTime() - new Date(a.inserted_at).getTime());
19
+ });
20
+ }
21
+ exports.sortItems = sortItems;
@@ -0,0 +1,46 @@
1
+ import { ChannelType } from "@knocklabs/types";
2
+ import Knock from "../../knock";
3
+ import { ChannelTypePreferences, PreferenceOptions, SetPreferencesProperties, WorkflowPreferenceSetting, WorkflowPreferences, PreferenceSet } from "./interfaces";
4
+ declare class Preferences {
5
+ private instance;
6
+ constructor(instance: Knock);
7
+ /**
8
+ * @deprecated Use `user.getAllPreferences()` instead
9
+ */
10
+ getAll(): Promise<PreferenceSet>;
11
+ /**
12
+ * @deprecated Use `user.getPreferences()` instead
13
+ */
14
+ get(options?: PreferenceOptions): Promise<PreferenceSet>;
15
+ /**
16
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
17
+ */
18
+ set(preferenceSet: SetPreferencesProperties, options?: PreferenceOptions): Promise<PreferenceSet>;
19
+ /**
20
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
21
+ */
22
+ setChannelTypes(channelTypePreferences: ChannelTypePreferences, options?: PreferenceOptions): Promise<PreferenceSet>;
23
+ /**
24
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
25
+ */
26
+ setChannelType(channelType: ChannelType, setting: boolean, options?: PreferenceOptions): Promise<PreferenceSet>;
27
+ /**
28
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
29
+ */
30
+ setWorkflows(workflowPreferences: WorkflowPreferences, options?: PreferenceOptions): Promise<PreferenceSet>;
31
+ /**
32
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
33
+ */
34
+ setWorkflow(workflowKey: string, setting: WorkflowPreferenceSetting, options?: PreferenceOptions): Promise<PreferenceSet>;
35
+ /**
36
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
37
+ */
38
+ setCategories(categoryPreferences: WorkflowPreferences, options?: PreferenceOptions): Promise<PreferenceSet>;
39
+ /**
40
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
41
+ */
42
+ setCategory(categoryKey: string, setting: WorkflowPreferenceSetting, options?: PreferenceOptions): Promise<PreferenceSet>;
43
+ private handleResponse;
44
+ }
45
+ export default Preferences;
46
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clients/preferences/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACd,MAAM,cAAc,CAAC;AAYtB,cAAM,WAAW;IACf,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,QAAQ,EAAE,KAAK;IAI3B;;OAEG;IACG,MAAM;IASZ;;OAEG;IACG,GAAG,CAAC,OAAO,GAAE,iBAAsB;IAWzC;;OAEG;IACG,GAAG,CACP,aAAa,EAAE,wBAAwB,EACvC,OAAO,GAAE,iBAAsB;IAajC;;OAEG;IACG,eAAe,CACnB,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,GAAE,iBAAsB;IAajC;;OAEG;IACG,cAAc,CAClB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,iBAAsB;IAajC;;OAEG;IACG,YAAY,CAChB,mBAAmB,EAAE,mBAAmB,EACxC,OAAO,GAAE,iBAAsB;IAajC;;OAEG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,yBAAyB,EAClC,OAAO,GAAE,iBAAsB;IAcjC;;OAEG;IACG,aAAa,CACjB,mBAAmB,EAAE,mBAAmB,EACxC,OAAO,GAAE,iBAAsB;IAajC;;OAEG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,yBAAyB,EAClC,OAAO,GAAE,iBAAsB;IAcjC,OAAO,CAAC,cAAc;CAOvB;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const DEFAULT_PREFERENCE_SET_ID = "default";
4
+ function buildUpdateParam(param) {
5
+ if (typeof param === "object") {
6
+ return param;
7
+ }
8
+ return { subscribed: param };
9
+ }
10
+ class Preferences {
11
+ instance;
12
+ constructor(instance) {
13
+ this.instance = instance;
14
+ }
15
+ /**
16
+ * @deprecated Use `user.getAllPreferences()` instead
17
+ */
18
+ async getAll() {
19
+ const result = await this.instance.client().makeRequest({
20
+ method: "GET",
21
+ url: `/v1/users/${this.instance.userId}/preferences`,
22
+ });
23
+ return this.handleResponse(result);
24
+ }
25
+ /**
26
+ * @deprecated Use `user.getPreferences()` instead
27
+ */
28
+ async get(options = {}) {
29
+ const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
30
+ const result = await this.instance.client().makeRequest({
31
+ method: "GET",
32
+ url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}`,
33
+ });
34
+ return this.handleResponse(result);
35
+ }
36
+ /**
37
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
38
+ */
39
+ async set(preferenceSet, options = {}) {
40
+ const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
41
+ const result = await this.instance.client().makeRequest({
42
+ method: "PUT",
43
+ url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}`,
44
+ data: preferenceSet,
45
+ });
46
+ return this.handleResponse(result);
47
+ }
48
+ /**
49
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
50
+ */
51
+ async setChannelTypes(channelTypePreferences, options = {}) {
52
+ const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
53
+ const result = await this.instance.client().makeRequest({
54
+ method: "PUT",
55
+ url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}/channel_types`,
56
+ data: channelTypePreferences,
57
+ });
58
+ return this.handleResponse(result);
59
+ }
60
+ /**
61
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
62
+ */
63
+ async setChannelType(channelType, setting, options = {}) {
64
+ const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
65
+ const result = await this.instance.client().makeRequest({
66
+ method: "PUT",
67
+ url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}/channel_types/${channelType}`,
68
+ data: { subscribed: setting },
69
+ });
70
+ return this.handleResponse(result);
71
+ }
72
+ /**
73
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
74
+ */
75
+ async setWorkflows(workflowPreferences, options = {}) {
76
+ const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
77
+ const result = await this.instance.client().makeRequest({
78
+ method: "PUT",
79
+ url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}/workflows`,
80
+ data: workflowPreferences,
81
+ });
82
+ return this.handleResponse(result);
83
+ }
84
+ /**
85
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
86
+ */
87
+ async setWorkflow(workflowKey, setting, options = {}) {
88
+ const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
89
+ const params = buildUpdateParam(setting);
90
+ const result = await this.instance.client().makeRequest({
91
+ method: "PUT",
92
+ url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}/workflows/${workflowKey}`,
93
+ data: params,
94
+ });
95
+ return this.handleResponse(result);
96
+ }
97
+ /**
98
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
99
+ */
100
+ async setCategories(categoryPreferences, options = {}) {
101
+ const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
102
+ const result = await this.instance.client().makeRequest({
103
+ method: "PUT",
104
+ url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}/categories`,
105
+ data: categoryPreferences,
106
+ });
107
+ return this.handleResponse(result);
108
+ }
109
+ /**
110
+ * @deprecated Use `user.setPreferences(preferenceSet, options)` instead
111
+ */
112
+ async setCategory(categoryKey, setting, options = {}) {
113
+ const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
114
+ const params = buildUpdateParam(setting);
115
+ const result = await this.instance.client().makeRequest({
116
+ method: "PUT",
117
+ url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}/categories/${categoryKey}`,
118
+ data: params,
119
+ });
120
+ return this.handleResponse(result);
121
+ }
122
+ handleResponse(response) {
123
+ if (response.statusCode === "error") {
124
+ throw new Error(response.error || response.body);
125
+ }
126
+ return response.body;
127
+ }
128
+ }
129
+ exports.default = Preferences;
@@ -0,0 +1,26 @@
1
+ import { ChannelType } from "@knocklabs/types";
2
+ export type ChannelTypePreferences = {
3
+ [K in ChannelType]?: boolean;
4
+ };
5
+ export type WorkflowPreferenceSetting = boolean | {
6
+ channel_types: ChannelTypePreferences;
7
+ };
8
+ export type WorkflowPreferences = Partial<Record<string, WorkflowPreferenceSetting>>;
9
+ export interface SetPreferencesProperties {
10
+ workflows: WorkflowPreferences;
11
+ categories: WorkflowPreferences;
12
+ channel_types: ChannelTypePreferences;
13
+ }
14
+ export interface PreferenceSet {
15
+ id: string;
16
+ categories: WorkflowPreferences;
17
+ workflows: WorkflowPreferences;
18
+ channel_types: ChannelTypePreferences;
19
+ }
20
+ export interface PreferenceOptions {
21
+ preferenceSet?: string;
22
+ }
23
+ export interface GetPreferencesOptions extends PreferenceOptions {
24
+ tenant?: string;
25
+ }
26
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/clients/preferences/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,MAAM,sBAAsB,GAAG;KAClC,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,OAAO;CAC7B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GACjC,OAAO,GACP;IAAE,aAAa,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAE9C,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAC1C,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,UAAU,EAAE,mBAAmB,CAAC;IAChC,aAAa,EAAE,sBAAsB,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,mBAAmB,CAAC;IAChC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,aAAa,EAAE,sBAAsB,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,16 @@
1
+ import { ChannelData } from "../../interfaces";
2
+ import Knock from "../../knock";
3
+ import { GetPreferencesOptions, PreferenceOptions, PreferenceSet, SetPreferencesProperties } from "../preferences/interfaces";
4
+ import { GetChannelDataInput, SetChannelDataInput } from "./interfaces";
5
+ declare class UserClient {
6
+ private instance;
7
+ constructor(instance: Knock);
8
+ getAllPreferences(): Promise<PreferenceSet[]>;
9
+ getPreferences(options?: GetPreferencesOptions): Promise<PreferenceSet>;
10
+ setPreferences(preferenceSet: SetPreferencesProperties, options?: PreferenceOptions): Promise<PreferenceSet>;
11
+ getChannelData<T = any>(params: GetChannelDataInput): Promise<ChannelData<T>>;
12
+ setChannelData<T = any>({ channelId, channelData, }: SetChannelDataInput): Promise<ChannelData<T>>;
13
+ private handleResponse;
14
+ }
15
+ export default UserClient;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clients/users/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxE,cAAM,UAAU;IACd,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,QAAQ,EAAE,KAAK;IAIrB,iBAAiB;IASjB,cAAc,CAClB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,aAAa,CAAC;IAYnB,cAAc,CAClB,aAAa,EAAE,wBAAwB,EACvC,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,aAAa,CAAC;IAYnB,cAAc,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,mBAAmB;IASnD,cAAc,CAAC,CAAC,GAAG,GAAG,EAAE,EAC5B,SAAS,EACT,WAAW,GACZ,EAAE,mBAAmB;IAUtB,OAAO,CAAC,cAAc;CAOvB;AAED,eAAe,UAAU,CAAC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const DEFAULT_PREFERENCE_SET_ID = "default";
4
+ class UserClient {
5
+ instance;
6
+ constructor(instance) {
7
+ this.instance = instance;
8
+ }
9
+ async getAllPreferences() {
10
+ const result = await this.instance.client().makeRequest({
11
+ method: "GET",
12
+ url: `/v1/users/${this.instance.userId}/preferences`,
13
+ });
14
+ return this.handleResponse(result);
15
+ }
16
+ async getPreferences(options = {}) {
17
+ const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
18
+ const result = await this.instance.client().makeRequest({
19
+ method: "GET",
20
+ url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}`,
21
+ params: { tenant: options.tenant },
22
+ });
23
+ return this.handleResponse(result);
24
+ }
25
+ async setPreferences(preferenceSet, options = {}) {
26
+ const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
27
+ const result = await this.instance.client().makeRequest({
28
+ method: "PUT",
29
+ url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}`,
30
+ data: preferenceSet,
31
+ });
32
+ return this.handleResponse(result);
33
+ }
34
+ async getChannelData(params) {
35
+ const result = await this.instance.client().makeRequest({
36
+ method: "GET",
37
+ url: `/v1/users/${this.instance.userId}/channel_data/${params.channelId}`,
38
+ });
39
+ return this.handleResponse(result);
40
+ }
41
+ async setChannelData({ channelId, channelData, }) {
42
+ const result = await this.instance.client().makeRequest({
43
+ method: "PUT",
44
+ url: `/v1/users/${this.instance.userId}/channel_data/${channelId}`,
45
+ data: { data: channelData },
46
+ });
47
+ return this.handleResponse(result);
48
+ }
49
+ handleResponse(response) {
50
+ if (response.statusCode === "error") {
51
+ throw new Error(response.error || response.body);
52
+ }
53
+ return response.body;
54
+ }
55
+ }
56
+ exports.default = UserClient;
@@ -0,0 +1,8 @@
1
+ export interface SetChannelDataInput {
2
+ channelId: string;
3
+ channelData: Record<string, any>;
4
+ }
5
+ export interface GetChannelDataInput {
6
+ channelId: string;
7
+ }
8
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/clients/users/interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/esm/api.js CHANGED
@@ -1,98 +1,58 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- import axios from "axios";
4
- import axiosRetry from "axios-retry";
5
- import { Socket } from "phoenix";
6
- class ApiClient {
7
- constructor(options) {
8
- _defineProperty(this, "host", void 0);
9
- _defineProperty(this, "apiKey", void 0);
10
- _defineProperty(this, "userToken", void 0);
11
- _defineProperty(this, "axiosClient", void 0);
12
- _defineProperty(this, "socket", void 0);
13
- this.host = options.host;
14
- this.apiKey = options.apiKey;
15
- this.userToken = options.userToken || null;
16
-
17
- // Create a retryable axios client
18
- this.axiosClient = axios.create({
1
+ var i = Object.defineProperty;
2
+ var a = (s, e, t) => e in s ? i(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t;
3
+ var r = (s, e, t) => (a(s, typeof e != "symbol" ? e + "" : e, t), t);
4
+ import n from "axios";
5
+ import o from "axios-retry";
6
+ import { Socket as u } from "phoenix";
7
+ class y {
8
+ constructor(e) {
9
+ r(this, "host");
10
+ r(this, "apiKey");
11
+ r(this, "userToken");
12
+ r(this, "axiosClient");
13
+ r(this, "socket");
14
+ this.host = e.host, this.apiKey = e.apiKey, this.userToken = e.userToken || null, this.axiosClient = n.create({
19
15
  baseURL: this.host,
20
16
  headers: {
21
17
  Accept: "application/json",
22
18
  "Content-Type": "application/json",
23
- Authorization: "Bearer ".concat(this.apiKey),
19
+ Authorization: `Bearer ${this.apiKey}`,
24
20
  "X-Knock-User-Token": this.userToken
25
21
  }
26
- });
27
- if (typeof window !== "undefined") {
28
- this.socket = new Socket("".concat(this.host.replace("http", "ws"), "/ws/v1"), {
29
- params: {
30
- user_token: this.userToken,
31
- api_key: this.apiKey
32
- }
33
- });
34
- }
35
- axiosRetry(this.axiosClient, {
22
+ }), typeof window < "u" && (this.socket = new u(`${this.host.replace("http", "ws")}/ws/v1`, {
23
+ params: {
24
+ user_token: this.userToken,
25
+ api_key: this.apiKey
26
+ }
27
+ })), o(this.axiosClient, {
36
28
  retries: 3,
37
29
  retryCondition: this.canRetryRequest,
38
- retryDelay: axiosRetry.exponentialDelay
30
+ retryDelay: o.exponentialDelay
39
31
  });
40
32
  }
41
- makeRequest(req) {
42
- var _this = this;
43
- return _asyncToGenerator(function* () {
44
- try {
45
- var result = yield _this.axiosClient(req);
46
- return {
47
- statusCode: result.status < 300 ? "ok" : "error",
48
- body: result.data,
49
- error: undefined,
50
- status: result.status
51
- };
52
-
53
- // eslint:disable-next-line
54
- } catch (e) {
55
- console.error(e);
56
- return {
57
- statusCode: "error",
58
- status: 500,
59
- body: undefined,
60
- error: e
61
- };
62
- }
63
- })();
64
- }
65
- reconnectSocket() {
66
- if (this.socket && !this.socket.isConnected()) {
67
- this.socket.connect();
33
+ async makeRequest(e) {
34
+ try {
35
+ const t = await this.axiosClient(e);
36
+ return {
37
+ statusCode: t.status < 300 ? "ok" : "error",
38
+ body: t.data,
39
+ error: void 0,
40
+ status: t.status
41
+ };
42
+ } catch (t) {
43
+ return console.error(t), {
44
+ statusCode: "error",
45
+ status: 500,
46
+ body: void 0,
47
+ error: t
48
+ };
68
49
  }
69
50
  }
70
- disconnectSocket() {
71
- if (this.socket) {
72
- this.socket.disconnect();
73
- }
74
- }
75
- canRetryRequest(error) {
76
- // Retry Network Errors.
77
- if (axiosRetry.isNetworkError(error)) {
78
- return true;
79
- }
80
- if (!error.response) {
81
- // Cannot determine if the request can be retried
82
- return false;
83
- }
84
-
85
- // Retry Server Errors (5xx).
86
- if (error.response.status >= 500 && error.response.status <= 599) {
87
- return true;
88
- }
89
-
90
- // Retry if rate limited.
91
- if (error.response.status === 429) {
92
- return true;
93
- }
94
- return false;
51
+ canRetryRequest(e) {
52
+ return o.isNetworkError(e) ? !0 : e.response ? e.response.status >= 500 && e.response.status <= 599 || e.response.status === 429 : !1;
95
53
  }
96
54
  }
97
- export default ApiClient;
98
- //# sourceMappingURL=api.js.map
55
+ export {
56
+ y as default
57
+ };
58
+ //# sourceMappingURL=api.js.map