@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":["EventEmitter","createStore","isRequestInFlight","NetworkStatus","Feed","constructor","knock","feedId","options","apiClient","client","userFeedId","buildUserFeedId","store","broadcaster","defaultOptions","connectSocket","channel","createChannel","listenForUpdates","channelConnected","join","receive","on","resp","onNewMessageReceived","leave","e","console","error","eventName","callback","off","getState","markAsSeen","itemOrItems","now","Date","toISOString","optimisticallyPerformStatusUpdate","seen_at","makeStatusUpdate","markAsUnseen","markAsRead","read_at","markAsUnread","markAsArchived","archived_at","markAsUnarchived","fetch","setState","networkStatus","setNetworkStatus","__loadingType","loading","queryParams","result","makeRequest","method","url","userId","params","statusCode","status","data","body","response","entries","meta","page_info","before","opts","shouldSetPage","shouldAppend","state","setResult","after","broadcast","fetchNextPage","pageInfo","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,20 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import Feed from "./feed";
3
+
4
+ class FeedClient {
5
+ constructor(instance) {
6
+ _defineProperty(this, "instance", void 0);
7
+
8
+ this.instance = instance;
9
+ }
10
+
11
+ initialize(feedChannelId) {
12
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
13
+ return new Feed(this.instance, feedChannelId, options);
14
+ }
15
+
16
+ }
17
+
18
+ export { Feed };
19
+ export default FeedClient;
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/clients/feed/index.ts"],"names":["Feed","FeedClient","constructor","instance","initialize","feedChannelId","options"],"mappings":";AACA,OAAOA,IAAP,MAAiB,QAAjB;;AAGA,MAAMC,UAAN,CAAiB;AAGfC,EAAAA,WAAW,CAACC,QAAD,EAAkB;AAAA;;AAC3B,SAAKA,QAAL,GAAgBA,QAAhB;AACD;;AAEDC,EAAAA,UAAU,CAACC,aAAD,EAAyD;AAAA,QAAjCC,OAAiC,uEAAJ,EAAI;AACjE,WAAO,IAAIN,IAAJ,CAAS,KAAKG,QAAd,EAAwBE,aAAxB,EAAuCC,OAAvC,CAAP;AACD;;AATc;;AAYjB,SAASN,IAAT;AACA,eAAeC,UAAf","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
+
2
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"interfaces.js"}
@@ -0,0 +1,91 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+
3
+ 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; }
4
+
5
+ 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) { _defineProperty(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; }
6
+
7
+ import create from "zustand/vanilla";
8
+ import { NetworkStatus } from "../../networkStatus";
9
+ import { deduplicateItems, sortItems } from "./utils";
10
+
11
+ function processItems(items) {
12
+ var deduped = deduplicateItems(items);
13
+ var sorted = sortItems(deduped);
14
+ return sorted;
15
+ }
16
+
17
+ var defaultSetResultOptions = {
18
+ shouldSetPage: true,
19
+ shouldAppend: false
20
+ };
21
+ export default function createStore() {
22
+ return create(set => ({
23
+ // Keeps track of all of the items loaded
24
+ items: [],
25
+ // The network status indicates what's happening with the request
26
+ networkStatus: NetworkStatus.ready,
27
+ loading: false,
28
+ // Keeps track of the current badge counts
29
+ metadata: {
30
+ total_count: 0,
31
+ unread_count: 0,
32
+ unseen_count: 0
33
+ },
34
+ // Keeps track of the last full page of results we received (for paginating)
35
+ pageInfo: {
36
+ before: null,
37
+ after: null,
38
+ page_size: 50
39
+ },
40
+ // TODO: remove this function from the store as we're now using the
41
+ // `setNetworkStatus` function to derive this information instead
42
+ setLoading: loading => set(() => ({
43
+ loading
44
+ })),
45
+ setNetworkStatus: networkStatus => set(() => ({
46
+ networkStatus,
47
+ loading: networkStatus === NetworkStatus.loading
48
+ })),
49
+ setResult: function setResult(_ref) {
50
+ var {
51
+ entries,
52
+ meta,
53
+ page_info
54
+ } = _ref;
55
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultSetResultOptions;
56
+ return set(state => {
57
+ // We resort the list on set, so concating everything is fine (if a bit suboptimal)
58
+ var items = options.shouldAppend ? processItems(state.items.concat(entries)) : entries;
59
+ return {
60
+ items,
61
+ metadata: meta,
62
+ pageInfo: options.shouldSetPage ? page_info : state.pageInfo,
63
+ loading: false,
64
+ networkStatus: NetworkStatus.ready
65
+ };
66
+ });
67
+ },
68
+ setMetadata: metadata => set(() => ({
69
+ metadata
70
+ })),
71
+ setItemAttrs: (itemIds, attrs) => {
72
+ // Create a map for the items to the updates to be made
73
+ var itemUpdatesMap = itemIds.reduce((acc, itemId) => _objectSpread(_objectSpread({}, acc), {}, {
74
+ [itemId]: attrs
75
+ }), {});
76
+ return set(state => {
77
+ var items = state.items.map(item => {
78
+ if (itemUpdatesMap[item.id]) {
79
+ return _objectSpread(_objectSpread({}, item), itemUpdatesMap[item.id]);
80
+ }
81
+
82
+ return item;
83
+ });
84
+ return {
85
+ items
86
+ };
87
+ });
88
+ }
89
+ }));
90
+ }
91
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/clients/feed/store.ts"],"names":["create","NetworkStatus","deduplicateItems","sortItems","processItems","items","deduped","sorted","defaultSetResultOptions","shouldSetPage","shouldAppend","createStore","set","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
+
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"types.js"}
@@ -0,0 +1,18 @@
1
+ export function deduplicateItems(items) {
2
+ var seen = {};
3
+ var values = [];
4
+ return items.reduce((acc, item) => {
5
+ if (seen[item.id]) {
6
+ return acc;
7
+ }
8
+
9
+ seen[item.id] = true;
10
+ return [...acc, item];
11
+ }, values);
12
+ }
13
+ export function sortItems(items) {
14
+ return items.sort((a, b) => {
15
+ return new Date(b.inserted_at).getTime() - new Date(a.inserted_at).getTime();
16
+ });
17
+ }
18
+ //# 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":"AAEA,OAAO,SAASA,gBAAT,CAA0BC,KAA1B,EAAyD;AAC9D,MAAMC,IAAI,GAAG,EAAb;AACA,MAAMC,MAAkB,GAAG,EAA3B;AAEA,SAAOF,KAAK,CAACG,MAAN,CAAa,CAACC,GAAD,EAAMC,IAAN,KAAe;AACjC,QAAIJ,IAAI,CAACI,IAAI,CAACC,EAAN,CAAR,EAAmB;AACjB,aAAOF,GAAP;AACD;;AAEDH,IAAAA,IAAI,CAACI,IAAI,CAACC,EAAN,CAAJ,GAAgB,IAAhB;AACA,WAAO,CAAC,GAAGF,GAAJ,EAASC,IAAT,CAAP;AACD,GAPM,EAOJH,MAPI,CAAP;AAQD;AAED,OAAO,SAASK,SAAT,CAAmBP,KAAnB,EAAsC;AAC3C,SAAOA,KAAK,CAACQ,IAAN,CAAW,CAACC,CAAD,EAAIC,CAAJ,KAAU;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,176 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ var DEFAULT_PREFERENCE_SET_ID = "default";
4
+
5
+ function buildUpdateParam(param) {
6
+ if (typeof param === "object") {
7
+ return param;
8
+ }
9
+
10
+ return {
11
+ subscribed: param
12
+ };
13
+ }
14
+
15
+ class Preferences {
16
+ constructor(instance) {
17
+ _defineProperty(this, "instance", void 0);
18
+
19
+ this.instance = instance;
20
+ }
21
+
22
+ getAll() {
23
+ var _this = this;
24
+
25
+ return _asyncToGenerator(function* () {
26
+ var result = yield _this.instance.client().makeRequest({
27
+ method: "GET",
28
+ url: "/v1/users/".concat(_this.instance.userId, "/preferences")
29
+ });
30
+ return _this.handleResponse(result);
31
+ })();
32
+ }
33
+
34
+ get() {
35
+ var _arguments = arguments,
36
+ _this2 = this;
37
+
38
+ return _asyncToGenerator(function* () {
39
+ var options = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : {};
40
+ var preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
41
+ var result = yield _this2.instance.client().makeRequest({
42
+ method: "GET",
43
+ url: "/v1/users/".concat(_this2.instance.userId, "/preferences/").concat(preferenceSetId)
44
+ });
45
+ return _this2.handleResponse(result);
46
+ })();
47
+ }
48
+
49
+ set(preferenceSet) {
50
+ var _arguments2 = arguments,
51
+ _this3 = this;
52
+
53
+ return _asyncToGenerator(function* () {
54
+ var options = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : {};
55
+ var preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
56
+ var result = yield _this3.instance.client().makeRequest({
57
+ method: "PUT",
58
+ url: "/v1/users/".concat(_this3.instance.userId, "/preferences/").concat(preferenceSetId),
59
+ data: preferenceSet
60
+ });
61
+ return _this3.handleResponse(result);
62
+ })();
63
+ }
64
+
65
+ setChannelTypes(channelTypePreferences) {
66
+ var _arguments3 = arguments,
67
+ _this4 = this;
68
+
69
+ return _asyncToGenerator(function* () {
70
+ var options = _arguments3.length > 1 && _arguments3[1] !== undefined ? _arguments3[1] : {};
71
+ var preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
72
+ var result = yield _this4.instance.client().makeRequest({
73
+ method: "PUT",
74
+ url: "/v1/users/".concat(_this4.instance.userId, "/preferences/").concat(preferenceSetId, "/channel_types"),
75
+ data: channelTypePreferences
76
+ });
77
+ return _this4.handleResponse(result);
78
+ })();
79
+ }
80
+
81
+ setChannelType(channelType, setting) {
82
+ var _arguments4 = arguments,
83
+ _this5 = this;
84
+
85
+ return _asyncToGenerator(function* () {
86
+ var options = _arguments4.length > 2 && _arguments4[2] !== undefined ? _arguments4[2] : {};
87
+ var preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
88
+ var result = yield _this5.instance.client().makeRequest({
89
+ method: "PUT",
90
+ url: "/v1/users/".concat(_this5.instance.userId, "/preferences/").concat(preferenceSetId, "/channel_types/").concat(channelType),
91
+ data: {
92
+ subscribed: setting
93
+ }
94
+ });
95
+ return _this5.handleResponse(result);
96
+ })();
97
+ }
98
+
99
+ setWorkflows(workflowPreferences) {
100
+ var _arguments5 = arguments,
101
+ _this6 = this;
102
+
103
+ return _asyncToGenerator(function* () {
104
+ var options = _arguments5.length > 1 && _arguments5[1] !== undefined ? _arguments5[1] : {};
105
+ var preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
106
+ var result = yield _this6.instance.client().makeRequest({
107
+ method: "PUT",
108
+ url: "/v1/users/".concat(_this6.instance.userId, "/preferences/").concat(preferenceSetId, "/workflows"),
109
+ data: workflowPreferences
110
+ });
111
+ return _this6.handleResponse(result);
112
+ })();
113
+ }
114
+
115
+ setWorkflow(workflowKey, setting) {
116
+ var _arguments6 = arguments,
117
+ _this7 = this;
118
+
119
+ return _asyncToGenerator(function* () {
120
+ var options = _arguments6.length > 2 && _arguments6[2] !== undefined ? _arguments6[2] : {};
121
+ var preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
122
+ var params = buildUpdateParam(setting);
123
+ var result = yield _this7.instance.client().makeRequest({
124
+ method: "PUT",
125
+ url: "/v1/users/".concat(_this7.instance.userId, "/preferences/").concat(preferenceSetId, "/workflows/").concat(workflowKey),
126
+ data: params
127
+ });
128
+ return _this7.handleResponse(result);
129
+ })();
130
+ }
131
+
132
+ setCategories(categoryPreferences) {
133
+ var _arguments7 = arguments,
134
+ _this8 = this;
135
+
136
+ return _asyncToGenerator(function* () {
137
+ var options = _arguments7.length > 1 && _arguments7[1] !== undefined ? _arguments7[1] : {};
138
+ var preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
139
+ var result = yield _this8.instance.client().makeRequest({
140
+ method: "PUT",
141
+ url: "/v1/users/".concat(_this8.instance.userId, "/preferences/").concat(preferenceSetId, "/categories"),
142
+ data: categoryPreferences
143
+ });
144
+ return _this8.handleResponse(result);
145
+ })();
146
+ }
147
+
148
+ setCategory(categoryKey, setting) {
149
+ var _arguments8 = arguments,
150
+ _this9 = this;
151
+
152
+ return _asyncToGenerator(function* () {
153
+ var options = _arguments8.length > 2 && _arguments8[2] !== undefined ? _arguments8[2] : {};
154
+ var preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;
155
+ var params = buildUpdateParam(setting);
156
+ var result = yield _this9.instance.client().makeRequest({
157
+ method: "PUT",
158
+ url: "/v1/users/".concat(_this9.instance.userId, "/preferences/").concat(preferenceSetId, "/categories/").concat(categoryKey),
159
+ data: params
160
+ });
161
+ return _this9.handleResponse(result);
162
+ })();
163
+ }
164
+
165
+ handleResponse(response) {
166
+ if (response.statusCode === "error") {
167
+ throw new Error(response.error || response.body);
168
+ }
169
+
170
+ return response.body;
171
+ }
172
+
173
+ }
174
+
175
+ export default Preferences;
176
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/clients/preferences/index.ts"],"names":["DEFAULT_PREFERENCE_SET_ID","buildUpdateParam","param","subscribed","Preferences","constructor","instance","getAll","result","client","makeRequest","method","url","userId","handleResponse","get","options","preferenceSetId","preferenceSet","set","data","setChannelTypes","channelTypePreferences","setChannelType","channelType","setting","setWorkflows","workflowPreferences","setWorkflow","workflowKey","params","setCategories","categoryPreferences","setCategory","categoryKey","response","statusCode","Error","error","body"],"mappings":"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","sourcesContent":["import { ApiResponse } from \"../../api\";\nimport Knock from \"../../knock\";\nimport {\n ChannelTypePreferences,\n ChannelType,\n PreferenceOptions,\n SetPreferencesProperties,\n WorkflowPreferenceSetting,\n WorkflowPreferences,\n PreferenceSet,\n} from \"./interfaces\";\n\nconst DEFAULT_PREFERENCE_SET_ID = \"default\";\n\nfunction buildUpdateParam(param: WorkflowPreferenceSetting) {\n if (typeof param === \"object\") {\n return param;\n }\n\n return { subscribed: param };\n}\n\nclass Preferences {\n private instance: Knock;\n\n constructor(instance: Knock) {\n this.instance = instance;\n }\n\n async getAll() {\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/users/${this.instance.userId}/preferences`,\n });\n\n return this.handleResponse(result);\n }\n\n async get(options: PreferenceOptions = {}) {\n const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;\n\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}`,\n });\n\n return this.handleResponse(result);\n }\n\n async set(\n preferenceSet: SetPreferencesProperties,\n options: PreferenceOptions = {},\n ) {\n const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;\n\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}`,\n data: preferenceSet,\n });\n\n return this.handleResponse(result);\n }\n\n async setChannelTypes(\n channelTypePreferences: ChannelTypePreferences,\n options: PreferenceOptions = {},\n ) {\n const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;\n\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}/channel_types`,\n data: channelTypePreferences,\n });\n\n return this.handleResponse(result);\n }\n\n async setChannelType(\n channelType: ChannelType,\n setting: boolean,\n options: PreferenceOptions = {},\n ) {\n const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;\n\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}/channel_types/${channelType}`,\n data: { subscribed: setting },\n });\n\n return this.handleResponse(result);\n }\n\n async setWorkflows(\n workflowPreferences: WorkflowPreferences,\n options: PreferenceOptions = {},\n ) {\n const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;\n\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}/workflows`,\n data: workflowPreferences,\n });\n\n return this.handleResponse(result);\n }\n\n async setWorkflow(\n workflowKey: string,\n setting: WorkflowPreferenceSetting,\n options: PreferenceOptions = {},\n ) {\n const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;\n const params = buildUpdateParam(setting);\n\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}/workflows/${workflowKey}`,\n data: params,\n });\n\n return this.handleResponse(result);\n }\n\n async setCategories(\n categoryPreferences: WorkflowPreferences,\n options: PreferenceOptions = {},\n ) {\n const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;\n\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}/categories`,\n data: categoryPreferences,\n });\n\n return this.handleResponse(result);\n }\n\n async setCategory(\n categoryKey: string,\n setting: WorkflowPreferenceSetting,\n options: PreferenceOptions = {},\n ) {\n const preferenceSetId = options.preferenceSet || DEFAULT_PREFERENCE_SET_ID;\n const params = buildUpdateParam(setting);\n\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/users/${this.instance.userId}/preferences/${preferenceSetId}/categories/${categoryKey}`,\n data: params,\n });\n\n return this.handleResponse(result);\n }\n\n private handleResponse(response: ApiResponse) {\n if (response.statusCode === \"error\") {\n throw new Error(response.error || response.body);\n }\n\n return response.body as PreferenceSet;\n }\n}\n\nexport default Preferences;\n"],"file":"index.js"}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"interfaces.js"}
@@ -0,0 +1,10 @@
1
+ import Knock from "./knock";
2
+ import FeedClient, { Feed } from "./clients/feed";
3
+ export * from "./interfaces";
4
+ export * from "./clients/feed/types";
5
+ export * from "./clients/feed/interfaces";
6
+ export * from "./clients/preferences/interfaces";
7
+ export * from "./networkStatus";
8
+ export default Knock;
9
+ export { Feed, FeedClient };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts"],"names":["Knock","FeedClient","Feed"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,SAAlB;AACA,OAAOC,UAAP,IAAqBC,IAArB,QAAiC,gBAAjC;AAEA,cAAc,cAAd;AACA,cAAc,sBAAd;AACA,cAAc,2BAAd;AACA,cAAc,kCAAd;AACA,cAAc,iBAAd;AAEA,eAAeF,KAAf;AACA,SAASE,IAAT,EAAeD,UAAf","sourcesContent":["import Knock from \"./knock\";\nimport FeedClient, { Feed } from \"./clients/feed\";\n\nexport * from \"./interfaces\";\nexport * from \"./clients/feed/types\";\nexport * from \"./clients/feed/interfaces\";\nexport * from \"./clients/preferences/interfaces\";\nexport * from \"./networkStatus\";\n\nexport default Knock;\nexport { Feed, FeedClient };\n"],"file":"index.js"}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"interfaces.js"}
@@ -0,0 +1,69 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import ApiClient from "./api";
3
+ import FeedClient from "./clients/feed";
4
+ import Preferences from "./clients/preferences";
5
+ var DEFAULT_HOST = "https://api.knock.app";
6
+
7
+ class Knock {
8
+ constructor(apiKey) {
9
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
10
+ this.apiKey = apiKey;
11
+
12
+ _defineProperty(this, "host", void 0);
13
+
14
+ _defineProperty(this, "userToken", void 0);
15
+
16
+ _defineProperty(this, "apiClient", null);
17
+
18
+ _defineProperty(this, "userId", void 0);
19
+
20
+ _defineProperty(this, "feeds", new FeedClient(this));
21
+
22
+ _defineProperty(this, "preferences", new Preferences(this));
23
+
24
+ this.host = options.host || DEFAULT_HOST; // Fail loudly if we're using the wrong API key
25
+
26
+ if (this.apiKey && this.apiKey.startsWith("sk_")) {
27
+ throw new Error("[Knock] You are using your secret API key on the client. Please use the public key.");
28
+ }
29
+ }
30
+
31
+ client() {
32
+ if (!this.userId && !this.userToken) {
33
+ console.warn("[Knock] You must call authenticate(userId, userToken) first before trying to make a request.\n Typically you'll see this message when you're creating a feed instance before having called\n authenticate with a user Id and token. That means we won't know who to issue the request\n to Knock on behalf of.\n ");
34
+ } // Initiate a new API client if we don't have one yet
35
+
36
+
37
+ if (!this.apiClient) {
38
+ this.apiClient = new ApiClient({
39
+ apiKey: this.apiKey,
40
+ host: this.host,
41
+ userToken: this.userToken
42
+ });
43
+ }
44
+
45
+ return this.apiClient;
46
+ }
47
+ /*
48
+ Authenticates the current user. In non-sandbox environments
49
+ the userToken must be specified.
50
+ */
51
+
52
+
53
+ authenticate(userId, userToken) {
54
+ this.userId = userId;
55
+ this.userToken = userToken;
56
+ return;
57
+ } // Used to teardown any connected instances
58
+
59
+
60
+ teardown() {
61
+ if (this.apiClient) {
62
+ this.apiClient.disconnectSocket();
63
+ }
64
+ }
65
+
66
+ }
67
+
68
+ export default Knock;
69
+ //# sourceMappingURL=knock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/knock.ts"],"names":["ApiClient","FeedClient","Preferences","DEFAULT_HOST","Knock","constructor","apiKey","options","host","startsWith","Error","client","userId","userToken","console","warn","apiClient","authenticate","teardown","disconnectSocket"],"mappings":";AAAA,OAAOA,SAAP,MAAsB,OAAtB;AACA,OAAOC,UAAP,MAAuB,gBAAvB;AACA,OAAOC,WAAP,MAAwB,uBAAxB;AAGA,IAAMC,YAAY,GAAG,uBAArB;;AAEA,MAAMC,KAAN,CAAY;AASVC,EAAAA,WAAW,CAAUC,MAAV,EAAsD;AAAA,QAA5BC,OAA4B,uEAAJ,EAAI;AAAA,SAA5CD,MAA4C,GAA5CA,MAA4C;;AAAA;;AAAA;;AAAA,uCAN3B,IAM2B;;AAAA;;AAAA,mCAHhD,IAAIL,UAAJ,CAAe,IAAf,CAGgD;;AAAA,yCAF1C,IAAIC,WAAJ,CAAgB,IAAhB,CAE0C;;AAC/D,SAAKM,IAAL,GAAYD,OAAO,CAACC,IAAR,IAAgBL,YAA5B,CAD+D,CAG/D;;AACA,QAAI,KAAKG,MAAL,IAAe,KAAKA,MAAL,CAAYG,UAAZ,CAAuB,KAAvB,CAAnB,EAAkD;AAChD,YAAM,IAAIC,KAAJ,CACJ,qFADI,CAAN;AAGD;AACF;;AAEDC,EAAAA,MAAM,GAAG;AACP,QAAI,CAAC,KAAKC,MAAN,IAAgB,CAAC,KAAKC,SAA1B,EAAqC;AACnCC,MAAAA,OAAO,CAACC,IAAR;AAOD,KATM,CAWP;;;AACA,QAAI,CAAC,KAAKC,SAAV,EAAqB;AACnB,WAAKA,SAAL,GAAiB,IAAIhB,SAAJ,CAAc;AAC7BM,QAAAA,MAAM,EAAE,KAAKA,MADgB;AAE7BE,QAAAA,IAAI,EAAE,KAAKA,IAFkB;AAG7BK,QAAAA,SAAS,EAAE,KAAKA;AAHa,OAAd,CAAjB;AAKD;;AAED,WAAO,KAAKG,SAAZ;AACD;AAED;AACF;AACA;AACA;;;AACEC,EAAAA,YAAY,CAACL,MAAD,EAAiBC,SAAjB,EAAqC;AAC/C,SAAKD,MAAL,GAAcA,MAAd;AACA,SAAKC,SAAL,GAAiBA,SAAjB;AAEA;AACD,GApDS,CAsDV;;;AACAK,EAAAA,QAAQ,GAAG;AACT,QAAI,KAAKF,SAAT,EAAoB;AAClB,WAAKA,SAAL,CAAeG,gBAAf;AACD;AACF;;AA3DS;;AA8DZ,eAAef,KAAf","sourcesContent":["import ApiClient from \"./api\";\nimport FeedClient from \"./clients/feed\";\nimport Preferences from \"./clients/preferences\";\nimport { KnockOptions } from \"./interfaces\";\n\nconst DEFAULT_HOST = \"https://api.knock.app\";\n\nclass Knock {\n private host: string;\n private userToken: string | undefined;\n private apiClient: ApiClient | null = null;\n public userId: string | undefined;\n\n readonly feeds = new FeedClient(this);\n readonly preferences = new Preferences(this);\n\n constructor(readonly apiKey: string, options: KnockOptions = {}) {\n this.host = options.host || DEFAULT_HOST;\n\n // Fail loudly if we're using the wrong API key\n if (this.apiKey && this.apiKey.startsWith(\"sk_\")) {\n throw new Error(\n \"[Knock] You are using your secret API key on the client. Please use the public key.\",\n );\n }\n }\n\n client() {\n if (!this.userId && !this.userToken) {\n console.warn(\n `[Knock] You must call authenticate(userId, userToken) first before trying to make a request.\n Typically you'll see this message when you're creating a feed instance before having called\n authenticate with a user Id and token. That means we won't know who to issue the request\n to Knock on behalf of.\n `,\n );\n }\n\n // Initiate a new API client if we don't have one yet\n if (!this.apiClient) {\n this.apiClient = new ApiClient({\n apiKey: this.apiKey,\n host: this.host,\n userToken: this.userToken,\n });\n }\n\n return this.apiClient;\n }\n\n /*\n Authenticates the current user. In non-sandbox environments\n the userToken must be specified.\n */\n authenticate(userId: string, userToken?: string) {\n this.userId = userId;\n this.userToken = userToken;\n\n return;\n }\n\n // Used to teardown any connected instances\n teardown() {\n if (this.apiClient) {\n this.apiClient.disconnectSocket();\n }\n }\n}\n\nexport default Knock;\n"],"file":"knock.js"}