@knocklabs/client 0.4.5-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/dist/cjs/api.js +165 -0
  4. package/dist/cjs/api.js.map +1 -0
  5. package/dist/cjs/clients/feed/feed.js +557 -0
  6. package/dist/cjs/clients/feed/feed.js.map +1 -0
  7. package/dist/cjs/clients/feed/index.js +43 -0
  8. package/dist/cjs/clients/feed/index.js.map +1 -0
  9. package/dist/cjs/clients/feed/interfaces.js +2 -0
  10. package/dist/cjs/clients/feed/interfaces.js.map +1 -0
  11. package/dist/cjs/clients/feed/store.js +115 -0
  12. package/dist/cjs/clients/feed/store.js.map +1 -0
  13. package/dist/cjs/clients/feed/types.js +2 -0
  14. package/dist/cjs/clients/feed/types.js.map +1 -0
  15. package/dist/cjs/clients/feed/utils.js +31 -0
  16. package/dist/cjs/clients/feed/utils.js.map +1 -0
  17. package/dist/cjs/clients/preferences/index.js +406 -0
  18. package/dist/cjs/clients/preferences/index.js.map +1 -0
  19. package/dist/cjs/clients/preferences/interfaces.js +2 -0
  20. package/dist/cjs/clients/preferences/interfaces.js.map +1 -0
  21. package/dist/cjs/index.js +108 -0
  22. package/dist/cjs/index.js.map +1 -0
  23. package/dist/cjs/interfaces.js +2 -0
  24. package/dist/cjs/interfaces.js.map +1 -0
  25. package/dist/cjs/knock.js +86 -0
  26. package/dist/cjs/knock.js.map +1 -0
  27. package/dist/cjs/networkStatus.js +21 -0
  28. package/dist/cjs/networkStatus.js.map +1 -0
  29. package/dist/esm/api.js +119 -0
  30. package/dist/esm/api.js.map +1 -0
  31. package/dist/esm/clients/feed/feed.js +337 -0
  32. package/dist/esm/clients/feed/feed.js.map +1 -0
  33. package/dist/esm/clients/feed/index.js +20 -0
  34. package/dist/esm/clients/feed/index.js.map +1 -0
  35. package/dist/esm/clients/feed/interfaces.js +2 -0
  36. package/dist/esm/clients/feed/interfaces.js.map +1 -0
  37. package/dist/esm/clients/feed/store.js +91 -0
  38. package/dist/esm/clients/feed/store.js.map +1 -0
  39. package/dist/esm/clients/feed/types.js +2 -0
  40. package/dist/esm/clients/feed/types.js.map +1 -0
  41. package/dist/esm/clients/feed/utils.js +18 -0
  42. package/dist/esm/clients/feed/utils.js.map +1 -0
  43. package/dist/esm/clients/preferences/index.js +176 -0
  44. package/dist/esm/clients/preferences/index.js.map +1 -0
  45. package/dist/esm/clients/preferences/interfaces.js +2 -0
  46. package/dist/esm/clients/preferences/interfaces.js.map +1 -0
  47. package/dist/esm/index.js +10 -0
  48. package/dist/esm/index.js.map +1 -0
  49. package/dist/esm/interfaces.js +2 -0
  50. package/dist/esm/interfaces.js.map +1 -0
  51. package/dist/esm/knock.js +69 -0
  52. package/dist/esm/knock.js.map +1 -0
  53. package/dist/esm/networkStatus.js +13 -0
  54. package/dist/esm/networkStatus.js.map +1 -0
  55. package/dist/types/api.d.ts +28 -0
  56. package/dist/types/api.d.ts.map +1 -0
  57. package/dist/types/clients/feed/feed.d.ts +46 -0
  58. package/dist/types/clients/feed/feed.d.ts.map +1 -0
  59. package/dist/types/clients/feed/index.d.ts +11 -0
  60. package/dist/types/clients/feed/index.d.ts.map +1 -0
  61. package/dist/types/clients/feed/interfaces.d.ts +50 -0
  62. package/dist/types/clients/feed/interfaces.d.ts.map +1 -0
  63. package/dist/types/clients/feed/store.d.ts +3 -0
  64. package/dist/types/clients/feed/store.d.ts.map +1 -0
  65. package/dist/types/clients/feed/types.d.ts +25 -0
  66. package/dist/types/clients/feed/types.d.ts.map +1 -0
  67. package/dist/types/clients/feed/utils.d.ts +4 -0
  68. package/dist/types/clients/feed/utils.d.ts.map +1 -0
  69. package/dist/types/clients/preferences/index.d.ts +18 -0
  70. package/dist/types/clients/preferences/index.d.ts.map +1 -0
  71. package/dist/types/clients/preferences/interfaces.d.ts +26 -0
  72. package/dist/types/clients/preferences/interfaces.d.ts.map +1 -0
  73. package/dist/types/index.d.ts +10 -0
  74. package/dist/types/index.d.ts.map +1 -0
  75. package/dist/types/interfaces.d.ts +27 -0
  76. package/dist/types/interfaces.d.ts.map +1 -0
  77. package/dist/types/knock.d.ts +19 -0
  78. package/dist/types/knock.d.ts.map +1 -0
  79. package/dist/types/networkStatus.d.ts +8 -0
  80. package/dist/types/networkStatus.d.ts.map +1 -0
  81. package/package.json +66 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/clients/feed/feed.ts"],"names":["Feed","knock","feedId","options","apiClient","client","userFeedId","buildUserFeedId","store","broadcaster","EventEmitter","defaultOptions","connectSocket","channel","createChannel","channelConnected","join","receive","on","resp","onNewMessageReceived","leave","e","console","error","eventName","callback","off","getState","itemOrItems","now","Date","toISOString","optimisticallyPerformStatusUpdate","seen_at","makeStatusUpdate","read_at","archived_at","setState","networkStatus","setNetworkStatus","__loadingType","NetworkStatus","loading","queryParams","makeRequest","method","url","userId","params","result","statusCode","status","data","body","response","entries","meta","page_info","before","opts","shouldSetPage","shouldAppend","state","setResult","after","broadcast","pageInfo","fetch","fetchMore","emit","metadata","currentHead","items","setMetadata","__cursor","type","attrs","badgeCountAttr","itemIds","Array","isArray","map","item","id","direction","startsWith","length","Math","max","setItemAttrs","message_ids"],"mappings":"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","sourcesContent":["import { Channel } from \"phoenix\";\nimport { StoreApi } from \"zustand\";\nimport EventEmitter from \"eventemitter3\";\nimport ApiClient from \"../../api\";\nimport createStore from \"./store\";\nimport {\n FeedMessagesReceivedPayload,\n FeedRealTimeEvent,\n FeedItemOrItems,\n FeedStoreState,\n} from \"./types\";\nimport { FeedItem, FeedClientOptions, FetchFeedOptions } from \"./interfaces\";\nimport Knock from \"../../knock\";\nimport { isRequestInFlight, NetworkStatus } from \"../../networkStatus\";\n\nexport type Status =\n | \"seen\"\n | \"read\"\n | \"archived\"\n | \"unseen\"\n | \"unread\"\n | \"unarchived\";\n\nclass Feed {\n private apiClient: ApiClient;\n private userFeedId: string;\n private channelConnected: boolean = false;\n private channel: Channel;\n private broadcaster: EventEmitter;\n private defaultOptions: FeedClientOptions;\n\n // The raw store instance, used for binding in React and other environments\n public store: StoreApi<FeedStoreState>;\n\n constructor(\n readonly knock: Knock,\n readonly feedId: string,\n options: FeedClientOptions,\n ) {\n this.apiClient = knock.client();\n this.feedId = feedId;\n this.userFeedId = this.buildUserFeedId();\n this.store = createStore();\n this.broadcaster = new EventEmitter();\n this.defaultOptions = options;\n\n // Try and connect to the socket\n this.apiClient.connectSocket();\n\n this.channel = this.apiClient.createChannel(\n `feeds:${this.userFeedId}`,\n this.defaultOptions,\n );\n }\n\n /*\n Returns a socket to listen for feed updates\n */\n listenForUpdates() {\n if (!this.channelConnected) {\n this.channel.join().receive(\"ok\", () => {\n this.channelConnected = true;\n });\n\n this.channel.on(\"new-message\", (resp) => this.onNewMessageReceived(resp));\n }\n\n return () => {\n try {\n this.channel.leave();\n } catch (e) {\n // tslint:disable-next-line\n console.error(\"error while leaving channel\", e);\n }\n };\n }\n\n /* Binds a handler to be invoked when event occurs */\n on(eventName: FeedRealTimeEvent, callback: () => void) {\n this.broadcaster.on(eventName, callback);\n }\n\n off(eventName: FeedRealTimeEvent, callback: () => void) {\n this.broadcaster.off(eventName, callback);\n }\n\n getState() {\n return this.store.getState();\n }\n\n async markAsSeen(itemOrItems: FeedItemOrItems) {\n const now = new Date().toISOString();\n this.optimisticallyPerformStatusUpdate(\n itemOrItems,\n \"seen\",\n { seen_at: now },\n \"unseen_count\",\n );\n return this.makeStatusUpdate(itemOrItems, \"seen\");\n }\n\n async markAsUnseen(itemOrItems: FeedItemOrItems) {\n this.optimisticallyPerformStatusUpdate(\n itemOrItems,\n \"unseen\",\n { seen_at: null },\n \"unseen_count\",\n );\n return this.makeStatusUpdate(itemOrItems, \"unseen\");\n }\n\n async markAsRead(itemOrItems: FeedItemOrItems) {\n const now = new Date().toISOString();\n this.optimisticallyPerformStatusUpdate(\n itemOrItems,\n \"read\",\n { read_at: now },\n \"unread_count\",\n );\n return this.makeStatusUpdate(itemOrItems, \"read\");\n }\n\n async markAsUnread(itemOrItems: FeedItemOrItems) {\n this.optimisticallyPerformStatusUpdate(\n itemOrItems,\n \"unread\",\n { read_at: null },\n \"unread_count\",\n );\n return this.makeStatusUpdate(itemOrItems, \"unread\");\n }\n\n async markAsArchived(itemOrItems: FeedItemOrItems) {\n const now = new Date().toISOString();\n this.optimisticallyPerformStatusUpdate(itemOrItems, \"archived\", {\n archived_at: now,\n });\n return this.makeStatusUpdate(itemOrItems, \"archived\");\n }\n\n async markAsUnarchived(itemOrItems: FeedItemOrItems) {\n this.optimisticallyPerformStatusUpdate(itemOrItems, \"unarchived\", {\n archived_at: null,\n });\n return this.makeStatusUpdate(itemOrItems, \"unarchived\");\n }\n\n /* Fetches the feed content, appending it to the store */\n async fetch(options: FetchFeedOptions = {}) {\n const { setState, getState } = this.store;\n const { networkStatus } = getState();\n\n // If there's an existing request in flight, then do nothing\n if (isRequestInFlight(networkStatus)) {\n return;\n }\n\n // Set the loading type based on the request type it is\n setState((store) =>\n store.setNetworkStatus(options.__loadingType ?? NetworkStatus.loading),\n );\n\n // Always include the default params, if they have been set\n const queryParams = { ...this.defaultOptions, ...options };\n\n const result = await this.apiClient.makeRequest({\n method: \"GET\",\n url: `/v1/users/${this.knock.userId}/feeds/${this.feedId}`,\n params: queryParams,\n });\n\n if (result.statusCode === \"error\") {\n setState((store) => store.setNetworkStatus(NetworkStatus.error));\n\n return {\n status: result.statusCode,\n data: result.error || result.body,\n };\n }\n\n const response = {\n entries: result.body.entries,\n meta: result.body.meta,\n page_info: result.body.page_info,\n };\n\n if (options.before) {\n const opts = { shouldSetPage: false, shouldAppend: true };\n setState((state) => state.setResult(response, opts));\n } else if (options.after) {\n const opts = { shouldSetPage: true, shouldAppend: true };\n setState((state) => state.setResult(response, opts));\n } else {\n setState((state) => state.setResult(response));\n }\n\n this.broadcast(\"messages.new\", response);\n return { data: response, status: result.statusCode };\n }\n\n async fetchNextPage() {\n // Attempts to fetch the next page of results (if we have any)\n const { getState } = this.store;\n const { pageInfo } = getState();\n\n if (!pageInfo.after) {\n // Nothing more to fetch\n return;\n }\n\n this.fetch({\n after: pageInfo.after,\n __loadingType: NetworkStatus.fetchMore,\n });\n }\n\n private broadcast(eventName: FeedRealTimeEvent, data: any) {\n this.broadcaster.emit(eventName, data);\n }\n\n // Invoked when a new real-time message comes in from the socket\n private async onNewMessageReceived({\n metadata,\n }: FeedMessagesReceivedPayload) {\n // Handle the new message coming in\n const { getState, setState } = this.store;\n const currentHead: FeedItem | undefined = getState().items[0];\n // Optimistically set the badge counts\n setState((state) => state.setMetadata(metadata));\n // Fetch the items before the current head (if it exists)\n this.fetch({ before: currentHead?.__cursor });\n }\n\n private buildUserFeedId() {\n return `${this.feedId}:${this.knock.userId}`;\n }\n\n private optimisticallyPerformStatusUpdate(\n itemOrItems: FeedItemOrItems,\n type: Status,\n attrs: object,\n badgeCountAttr?: \"unread_count\" | \"unseen_count\",\n ) {\n const { getState, setState } = this.store;\n const itemIds = Array.isArray(itemOrItems)\n ? itemOrItems.map((item) => item.id)\n : [itemOrItems.id];\n\n if (badgeCountAttr) {\n const { metadata } = getState();\n\n // Tnis is a hack to determine the direction of whether we're\n // adding or removing from the badge count\n const direction = type.startsWith(\"un\")\n ? itemIds.length\n : -itemIds.length;\n\n setState((store) =>\n store.setMetadata({\n ...metadata,\n [badgeCountAttr]: Math.max(0, metadata[badgeCountAttr] + direction),\n }),\n );\n }\n\n // Update the items with the given attributes\n setState((store) => store.setItemAttrs(itemIds, attrs));\n }\n\n private async makeStatusUpdate(itemOrItems: FeedItemOrItems, type: Status) {\n // If we're interacting with an array, then we want to send this as a batch\n if (Array.isArray(itemOrItems)) {\n const itemIds = itemOrItems.map((item) => item.id);\n\n return await this.apiClient.makeRequest({\n method: \"POST\",\n url: `/v1/messages/batch/${type}`,\n data: { message_ids: itemIds },\n });\n }\n\n // If its a single then we can just call the regular endpoint\n const result = await this.apiClient.makeRequest({\n method: type.startsWith(\"un\") ? \"DELETE\" : \"PUT\",\n url: `/v1/messages/${itemOrItems.id}/${type}`,\n });\n\n return result;\n }\n}\n\nexport default Feed;\n"],"file":"feed.js"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ Object.defineProperty(exports, "Feed", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _feed["default"];
12
+ }
13
+ });
14
+ exports["default"] = void 0;
15
+
16
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
+
18
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
+
20
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
21
+
22
+ var _feed = _interopRequireDefault(require("./feed"));
23
+
24
+ var FeedClient = /*#__PURE__*/function () {
25
+ function FeedClient(instance) {
26
+ (0, _classCallCheck2["default"])(this, FeedClient);
27
+ (0, _defineProperty2["default"])(this, "instance", void 0);
28
+ this.instance = instance;
29
+ }
30
+
31
+ (0, _createClass2["default"])(FeedClient, [{
32
+ key: "initialize",
33
+ value: function initialize(feedChannelId) {
34
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
35
+ return new _feed["default"](this.instance, feedChannelId, options);
36
+ }
37
+ }]);
38
+ return FeedClient;
39
+ }();
40
+
41
+ var _default = FeedClient;
42
+ exports["default"] = _default;
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/clients/feed/index.ts"],"names":["FeedClient","instance","feedChannelId","options","Feed"],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA;;IAGMA,U;AAGJ,sBAAYC,QAAZ,EAA6B;AAAA;AAAA;AAC3B,SAAKA,QAAL,GAAgBA,QAAhB;AACD;;;;WAED,oBAAWC,aAAX,EAAmE;AAAA,UAAjCC,OAAiC,uEAAJ,EAAI;AACjE,aAAO,IAAIC,gBAAJ,CAAS,KAAKH,QAAd,EAAwBC,aAAxB,EAAuCC,OAAvC,CAAP;AACD;;;;;eAIYH,U","sourcesContent":["import Knock from \"../../knock\";\nimport Feed from \"./feed\";\nimport { FeedClientOptions } from \"./interfaces\";\n\nclass FeedClient {\n private instance: Knock;\n\n constructor(instance: Knock) {\n this.instance = instance;\n }\n\n initialize(feedChannelId: string, options: FeedClientOptions = {}) {\n return new Feed(this.instance, feedChannelId, options);\n }\n}\n\nexport { Feed };\nexport default FeedClient;\n"],"file":"index.js"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"interfaces.js"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = createStore;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _vanilla = _interopRequireDefault(require("zustand/vanilla"));
13
+
14
+ var _networkStatus = require("../../networkStatus");
15
+
16
+ var _utils = require("./utils");
17
+
18
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
19
+
20
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
21
+
22
+ function processItems(items) {
23
+ var deduped = (0, _utils.deduplicateItems)(items);
24
+ var sorted = (0, _utils.sortItems)(deduped);
25
+ return sorted;
26
+ }
27
+
28
+ var defaultSetResultOptions = {
29
+ shouldSetPage: true,
30
+ shouldAppend: false
31
+ };
32
+
33
+ function createStore() {
34
+ return (0, _vanilla["default"])(function (set) {
35
+ return {
36
+ // Keeps track of all of the items loaded
37
+ items: [],
38
+ // The network status indicates what's happening with the request
39
+ networkStatus: _networkStatus.NetworkStatus.ready,
40
+ loading: false,
41
+ // Keeps track of the current badge counts
42
+ metadata: {
43
+ total_count: 0,
44
+ unread_count: 0,
45
+ unseen_count: 0
46
+ },
47
+ // Keeps track of the last full page of results we received (for paginating)
48
+ pageInfo: {
49
+ before: null,
50
+ after: null,
51
+ page_size: 50
52
+ },
53
+ // TODO: remove this function from the store as we're now using the
54
+ // `setNetworkStatus` function to derive this information instead
55
+ setLoading: function setLoading(loading) {
56
+ return set(function () {
57
+ return {
58
+ loading: loading
59
+ };
60
+ });
61
+ },
62
+ setNetworkStatus: function setNetworkStatus(networkStatus) {
63
+ return set(function () {
64
+ return {
65
+ networkStatus: networkStatus,
66
+ loading: networkStatus === _networkStatus.NetworkStatus.loading
67
+ };
68
+ });
69
+ },
70
+ setResult: function setResult(_ref) {
71
+ var entries = _ref.entries,
72
+ meta = _ref.meta,
73
+ page_info = _ref.page_info;
74
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultSetResultOptions;
75
+ return set(function (state) {
76
+ // We resort the list on set, so concating everything is fine (if a bit suboptimal)
77
+ var items = options.shouldAppend ? processItems(state.items.concat(entries)) : entries;
78
+ return {
79
+ items: items,
80
+ metadata: meta,
81
+ pageInfo: options.shouldSetPage ? page_info : state.pageInfo,
82
+ loading: false,
83
+ networkStatus: _networkStatus.NetworkStatus.ready
84
+ };
85
+ });
86
+ },
87
+ setMetadata: function setMetadata(metadata) {
88
+ return set(function () {
89
+ return {
90
+ metadata: metadata
91
+ };
92
+ });
93
+ },
94
+ setItemAttrs: function setItemAttrs(itemIds, attrs) {
95
+ // Create a map for the items to the updates to be made
96
+ var itemUpdatesMap = itemIds.reduce(function (acc, itemId) {
97
+ return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, itemId, attrs));
98
+ }, {});
99
+ return set(function (state) {
100
+ var items = state.items.map(function (item) {
101
+ if (itemUpdatesMap[item.id]) {
102
+ return _objectSpread(_objectSpread({}, item), itemUpdatesMap[item.id]);
103
+ }
104
+
105
+ return item;
106
+ });
107
+ return {
108
+ items: items
109
+ };
110
+ });
111
+ }
112
+ };
113
+ });
114
+ }
115
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/clients/feed/store.ts"],"names":["processItems","items","deduped","sorted","defaultSetResultOptions","shouldSetPage","shouldAppend","createStore","set","networkStatus","NetworkStatus","ready","loading","metadata","total_count","unread_count","unseen_count","pageInfo","before","after","page_size","setLoading","setNetworkStatus","setResult","entries","meta","page_info","options","state","concat","setMetadata","setItemAttrs","itemIds","attrs","itemUpdatesMap","reduce","acc","itemId","map","item","id"],"mappings":"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","sourcesContent":["import create from \"zustand/vanilla\";\nimport { NetworkStatus } from \"../../networkStatus\";\nimport { FeedItem } from \"./interfaces\";\nimport { FeedStoreState } from \"./types\";\nimport { deduplicateItems, sortItems } from \"./utils\";\n\nfunction processItems(items: FeedItem[]) {\n const deduped = deduplicateItems(items);\n const sorted = sortItems(deduped);\n\n return sorted;\n}\n\nconst defaultSetResultOptions = {\n shouldSetPage: true,\n shouldAppend: false,\n};\n\nexport default function createStore() {\n return create<FeedStoreState>((set) => ({\n // Keeps track of all of the items loaded\n items: [],\n\n // The network status indicates what's happening with the request\n networkStatus: NetworkStatus.ready,\n loading: false,\n\n // Keeps track of the current badge counts\n metadata: {\n total_count: 0,\n unread_count: 0,\n unseen_count: 0,\n },\n\n // Keeps track of the last full page of results we received (for paginating)\n pageInfo: {\n before: null,\n after: null,\n page_size: 50,\n },\n\n // TODO: remove this function from the store as we're now using the\n // `setNetworkStatus` function to derive this information instead\n setLoading: (loading) => set(() => ({ loading })),\n\n setNetworkStatus: (networkStatus: NetworkStatus) =>\n set(() => ({\n networkStatus,\n loading: networkStatus === NetworkStatus.loading,\n })),\n\n setResult: (\n { entries, meta, page_info },\n options = defaultSetResultOptions,\n ) =>\n set((state) => {\n // We resort the list on set, so concating everything is fine (if a bit suboptimal)\n const items = options.shouldAppend\n ? processItems(state.items.concat(entries))\n : entries;\n\n return {\n items,\n metadata: meta,\n pageInfo: options.shouldSetPage ? page_info : state.pageInfo,\n loading: false,\n networkStatus: NetworkStatus.ready,\n };\n }),\n\n setMetadata: (metadata) => set(() => ({ metadata })),\n setItemAttrs: (itemIds, attrs) => {\n // Create a map for the items to the updates to be made\n const itemUpdatesMap: { [id: string]: object } = itemIds.reduce(\n (acc, itemId) => ({ ...acc, [itemId]: attrs }),\n {},\n );\n\n return set((state) => {\n const items = state.items.map((item) => {\n if (itemUpdatesMap[item.id]) {\n return { ...item, ...itemUpdatesMap[item.id] };\n }\n\n return item;\n });\n\n return { items };\n });\n },\n }));\n}\n"],"file":"store.js"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"types.js"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.deduplicateItems = deduplicateItems;
9
+ exports.sortItems = sortItems;
10
+
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+
13
+ function deduplicateItems(items) {
14
+ var seen = {};
15
+ var values = [];
16
+ return items.reduce(function (acc, item) {
17
+ if (seen[item.id]) {
18
+ return acc;
19
+ }
20
+
21
+ seen[item.id] = true;
22
+ return [].concat((0, _toConsumableArray2["default"])(acc), [item]);
23
+ }, values);
24
+ }
25
+
26
+ function sortItems(items) {
27
+ return items.sort(function (a, b) {
28
+ return new Date(b.inserted_at).getTime() - new Date(a.inserted_at).getTime();
29
+ });
30
+ }
31
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/clients/feed/utils.ts"],"names":["deduplicateItems","items","seen","values","reduce","acc","item","id","sortItems","sort","a","b","Date","inserted_at","getTime"],"mappings":";;;;;;;;;;;;AAEO,SAASA,gBAAT,CAA0BC,KAA1B,EAAyD;AAC9D,MAAMC,IAAI,GAAG,EAAb;AACA,MAAMC,MAAkB,GAAG,EAA3B;AAEA,SAAOF,KAAK,CAACG,MAAN,CAAa,UAACC,GAAD,EAAMC,IAAN,EAAe;AACjC,QAAIJ,IAAI,CAACI,IAAI,CAACC,EAAN,CAAR,EAAmB;AACjB,aAAOF,GAAP;AACD;;AAEDH,IAAAA,IAAI,CAACI,IAAI,CAACC,EAAN,CAAJ,GAAgB,IAAhB;AACA,yDAAWF,GAAX,IAAgBC,IAAhB;AACD,GAPM,EAOJH,MAPI,CAAP;AAQD;;AAEM,SAASK,SAAT,CAAmBP,KAAnB,EAAsC;AAC3C,SAAOA,KAAK,CAACQ,IAAN,CAAW,UAACC,CAAD,EAAIC,CAAJ,EAAU;AAC1B,WACE,IAAIC,IAAJ,CAASD,CAAC,CAACE,WAAX,EAAwBC,OAAxB,KAAoC,IAAIF,IAAJ,CAASF,CAAC,CAACG,WAAX,EAAwBC,OAAxB,EADtC;AAGD,GAJM,CAAP;AAKD","sourcesContent":["import { FeedItem } from \"./interfaces\";\n\nexport function deduplicateItems(items: FeedItem[]): FeedItem[] {\n const seen = {};\n const values: FeedItem[] = [];\n\n return items.reduce((acc, item) => {\n if (seen[item.id]) {\n return acc;\n }\n\n seen[item.id] = true;\n return [...acc, item];\n }, values);\n}\n\nexport function sortItems(items: FeedItem[]) {\n return items.sort((a, b) => {\n return (\n new Date(b.inserted_at).getTime() - new Date(a.inserted_at).getTime()\n );\n });\n}\n"],"file":"utils.js"}
@@ -0,0 +1,406 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
14
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
+
16
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
+
18
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
+
20
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
21
+
22
+ var DEFAULT_PREFERENCE_SET_ID = "default";
23
+
24
+ function buildUpdateParam(param) {
25
+ if ((0, _typeof2["default"])(param) === "object") {
26
+ return param;
27
+ }
28
+
29
+ return {
30
+ subscribed: param
31
+ };
32
+ }
33
+
34
+ var Preferences = /*#__PURE__*/function () {
35
+ function Preferences(instance) {
36
+ (0, _classCallCheck2["default"])(this, Preferences);
37
+ (0, _defineProperty2["default"])(this, "instance", void 0);
38
+ this.instance = instance;
39
+ }
40
+
41
+ (0, _createClass2["default"])(Preferences, [{
42
+ key: "getAll",
43
+ value: function () {
44
+ var _getAll = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
45
+ var result;
46
+ return _regenerator["default"].wrap(function _callee$(_context) {
47
+ while (1) {
48
+ switch (_context.prev = _context.next) {
49
+ case 0:
50
+ _context.next = 2;
51
+ return this.instance.client().makeRequest({
52
+ method: "GET",
53
+ url: "/v1/users/".concat(this.instance.userId, "/preferences")
54
+ });
55
+
56
+ case 2:
57
+ result = _context.sent;
58
+ return _context.abrupt("return", this.handleResponse(result));
59
+
60
+ case 4:
61
+ case "end":
62
+ return _context.stop();
63
+ }
64
+ }
65
+ }, _callee, this);
66
+ }));
67
+
68
+ function getAll() {
69
+ return _getAll.apply(this, arguments);
70
+ }
71
+
72
+ return getAll;
73
+ }()
74
+ }, {
75
+ key: "get",
76
+ value: function () {
77
+ var _get = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
78
+ var options,
79
+ preferenceSetId,
80
+ result,
81
+ _args2 = arguments;
82
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
83
+ while (1) {
84
+ switch (_context2.prev = _context2.next) {
85
+ case 0:
86
+ options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};
87
+ preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
88
+ _context2.next = 4;
89
+ return this.instance.client().makeRequest({
90
+ method: "GET",
91
+ url: "/v1/users/".concat(this.instance.userId, "/preferences/").concat(preferenceSetId)
92
+ });
93
+
94
+ case 4:
95
+ result = _context2.sent;
96
+ return _context2.abrupt("return", this.handleResponse(result));
97
+
98
+ case 6:
99
+ case "end":
100
+ return _context2.stop();
101
+ }
102
+ }
103
+ }, _callee2, this);
104
+ }));
105
+
106
+ function get() {
107
+ return _get.apply(this, arguments);
108
+ }
109
+
110
+ return get;
111
+ }()
112
+ }, {
113
+ key: "set",
114
+ value: function () {
115
+ var _set = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(preferenceSet) {
116
+ var options,
117
+ preferenceSetId,
118
+ result,
119
+ _args3 = arguments;
120
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
121
+ while (1) {
122
+ switch (_context3.prev = _context3.next) {
123
+ case 0:
124
+ options = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {};
125
+ preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
126
+ _context3.next = 4;
127
+ return this.instance.client().makeRequest({
128
+ method: "PUT",
129
+ url: "/v1/users/".concat(this.instance.userId, "/preferences/").concat(preferenceSetId),
130
+ data: preferenceSet
131
+ });
132
+
133
+ case 4:
134
+ result = _context3.sent;
135
+ return _context3.abrupt("return", this.handleResponse(result));
136
+
137
+ case 6:
138
+ case "end":
139
+ return _context3.stop();
140
+ }
141
+ }
142
+ }, _callee3, this);
143
+ }));
144
+
145
+ function set(_x) {
146
+ return _set.apply(this, arguments);
147
+ }
148
+
149
+ return set;
150
+ }()
151
+ }, {
152
+ key: "setChannelTypes",
153
+ value: function () {
154
+ var _setChannelTypes = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(channelTypePreferences) {
155
+ var options,
156
+ preferenceSetId,
157
+ result,
158
+ _args4 = arguments;
159
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
160
+ while (1) {
161
+ switch (_context4.prev = _context4.next) {
162
+ case 0:
163
+ options = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : {};
164
+ preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
165
+ _context4.next = 4;
166
+ return this.instance.client().makeRequest({
167
+ method: "PUT",
168
+ url: "/v1/users/".concat(this.instance.userId, "/preferences/").concat(preferenceSetId, "/channel_types"),
169
+ data: channelTypePreferences
170
+ });
171
+
172
+ case 4:
173
+ result = _context4.sent;
174
+ return _context4.abrupt("return", this.handleResponse(result));
175
+
176
+ case 6:
177
+ case "end":
178
+ return _context4.stop();
179
+ }
180
+ }
181
+ }, _callee4, this);
182
+ }));
183
+
184
+ function setChannelTypes(_x2) {
185
+ return _setChannelTypes.apply(this, arguments);
186
+ }
187
+
188
+ return setChannelTypes;
189
+ }()
190
+ }, {
191
+ key: "setChannelType",
192
+ value: function () {
193
+ var _setChannelType = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(channelType, setting) {
194
+ var options,
195
+ preferenceSetId,
196
+ result,
197
+ _args5 = arguments;
198
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
199
+ while (1) {
200
+ switch (_context5.prev = _context5.next) {
201
+ case 0:
202
+ options = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : {};
203
+ preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
204
+ _context5.next = 4;
205
+ return this.instance.client().makeRequest({
206
+ method: "PUT",
207
+ url: "/v1/users/".concat(this.instance.userId, "/preferences/").concat(preferenceSetId, "/channel_types/").concat(channelType),
208
+ data: {
209
+ subscribed: setting
210
+ }
211
+ });
212
+
213
+ case 4:
214
+ result = _context5.sent;
215
+ return _context5.abrupt("return", this.handleResponse(result));
216
+
217
+ case 6:
218
+ case "end":
219
+ return _context5.stop();
220
+ }
221
+ }
222
+ }, _callee5, this);
223
+ }));
224
+
225
+ function setChannelType(_x3, _x4) {
226
+ return _setChannelType.apply(this, arguments);
227
+ }
228
+
229
+ return setChannelType;
230
+ }()
231
+ }, {
232
+ key: "setWorkflows",
233
+ value: function () {
234
+ var _setWorkflows = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(workflowPreferences) {
235
+ var options,
236
+ preferenceSetId,
237
+ result,
238
+ _args6 = arguments;
239
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
240
+ while (1) {
241
+ switch (_context6.prev = _context6.next) {
242
+ case 0:
243
+ options = _args6.length > 1 && _args6[1] !== undefined ? _args6[1] : {};
244
+ preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
245
+ _context6.next = 4;
246
+ return this.instance.client().makeRequest({
247
+ method: "PUT",
248
+ url: "/v1/users/".concat(this.instance.userId, "/preferences/").concat(preferenceSetId, "/workflows"),
249
+ data: workflowPreferences
250
+ });
251
+
252
+ case 4:
253
+ result = _context6.sent;
254
+ return _context6.abrupt("return", this.handleResponse(result));
255
+
256
+ case 6:
257
+ case "end":
258
+ return _context6.stop();
259
+ }
260
+ }
261
+ }, _callee6, this);
262
+ }));
263
+
264
+ function setWorkflows(_x5) {
265
+ return _setWorkflows.apply(this, arguments);
266
+ }
267
+
268
+ return setWorkflows;
269
+ }()
270
+ }, {
271
+ key: "setWorkflow",
272
+ value: function () {
273
+ var _setWorkflow = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(workflowKey, setting) {
274
+ var options,
275
+ preferenceSetId,
276
+ params,
277
+ result,
278
+ _args7 = arguments;
279
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
280
+ while (1) {
281
+ switch (_context7.prev = _context7.next) {
282
+ case 0:
283
+ options = _args7.length > 2 && _args7[2] !== undefined ? _args7[2] : {};
284
+ preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
285
+ params = buildUpdateParam(setting);
286
+ _context7.next = 5;
287
+ return this.instance.client().makeRequest({
288
+ method: "PUT",
289
+ url: "/v1/users/".concat(this.instance.userId, "/preferences/").concat(preferenceSetId, "/workflows/").concat(workflowKey),
290
+ data: params
291
+ });
292
+
293
+ case 5:
294
+ result = _context7.sent;
295
+ return _context7.abrupt("return", this.handleResponse(result));
296
+
297
+ case 7:
298
+ case "end":
299
+ return _context7.stop();
300
+ }
301
+ }
302
+ }, _callee7, this);
303
+ }));
304
+
305
+ function setWorkflow(_x6, _x7) {
306
+ return _setWorkflow.apply(this, arguments);
307
+ }
308
+
309
+ return setWorkflow;
310
+ }()
311
+ }, {
312
+ key: "setCategories",
313
+ value: function () {
314
+ var _setCategories = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(categoryPreferences) {
315
+ var options,
316
+ preferenceSetId,
317
+ result,
318
+ _args8 = arguments;
319
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
320
+ while (1) {
321
+ switch (_context8.prev = _context8.next) {
322
+ case 0:
323
+ options = _args8.length > 1 && _args8[1] !== undefined ? _args8[1] : {};
324
+ preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
325
+ _context8.next = 4;
326
+ return this.instance.client().makeRequest({
327
+ method: "PUT",
328
+ url: "/v1/users/".concat(this.instance.userId, "/preferences/").concat(preferenceSetId, "/categories"),
329
+ data: categoryPreferences
330
+ });
331
+
332
+ case 4:
333
+ result = _context8.sent;
334
+ return _context8.abrupt("return", this.handleResponse(result));
335
+
336
+ case 6:
337
+ case "end":
338
+ return _context8.stop();
339
+ }
340
+ }
341
+ }, _callee8, this);
342
+ }));
343
+
344
+ function setCategories(_x8) {
345
+ return _setCategories.apply(this, arguments);
346
+ }
347
+
348
+ return setCategories;
349
+ }()
350
+ }, {
351
+ key: "setCategory",
352
+ value: function () {
353
+ var _setCategory = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(categoryKey, setting) {
354
+ var options,
355
+ preferenceSetId,
356
+ params,
357
+ result,
358
+ _args9 = arguments;
359
+ return _regenerator["default"].wrap(function _callee9$(_context9) {
360
+ while (1) {
361
+ switch (_context9.prev = _context9.next) {
362
+ case 0:
363
+ options = _args9.length > 2 && _args9[2] !== undefined ? _args9[2] : {};
364
+ preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
365
+ params = buildUpdateParam(setting);
366
+ _context9.next = 5;
367
+ return this.instance.client().makeRequest({
368
+ method: "PUT",
369
+ url: "/v1/users/".concat(this.instance.userId, "/preferences/").concat(preferenceSetId, "/categories/").concat(categoryKey),
370
+ data: params
371
+ });
372
+
373
+ case 5:
374
+ result = _context9.sent;
375
+ return _context9.abrupt("return", this.handleResponse(result));
376
+
377
+ case 7:
378
+ case "end":
379
+ return _context9.stop();
380
+ }
381
+ }
382
+ }, _callee9, this);
383
+ }));
384
+
385
+ function setCategory(_x9, _x10) {
386
+ return _setCategory.apply(this, arguments);
387
+ }
388
+
389
+ return setCategory;
390
+ }()
391
+ }, {
392
+ key: "handleResponse",
393
+ value: function handleResponse(response) {
394
+ if (response.statusCode === "error") {
395
+ throw new Error(response.error || response.body);
396
+ }
397
+
398
+ return response.body;
399
+ }
400
+ }]);
401
+ return Preferences;
402
+ }();
403
+
404
+ var _default = Preferences;
405
+ exports["default"] = _default;
406
+ //# sourceMappingURL=index.js.map