@knocklabs/client 0.14.8 → 0.14.10-canary.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/clients/feed/store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA6BzC,MAAM,CAAC,OAAO,UAAU,WAAW,+CA0DlC"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/clients/feed/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKxC,OAAO,EAAE,cAAc,EAA0B,MAAM,SAAS,CAAC;AAejE,eAAO,MAAM,iBAAiB,EAAE,cAmB/B,CAAC;AAwEF;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;gBAEjB,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC;IAIxC,QAAQ;IAIR,QAAQ,CACN,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,KAAK,cAAc,CAAC,GAAG,cAAc;IAOvE,eAAe;IAIf,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI;CAGpD;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,cAGlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/clients/guide/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/clients/guide/client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knocklabs/client",
3
- "version": "0.14.8",
3
+ "version": "0.14.10-canary.0",
4
4
  "description": "The clientside library for interacting with Knock",
5
5
  "homepage": "https://github.com/knocklabs/javascript/tree/main/packages/client",
6
6
  "author": "@knocklabs",
@@ -36,8 +36,6 @@
36
36
  "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
37
37
  "format": "prettier \"src/**/*.{js,ts,tsx}\" --write",
38
38
  "format:check": "prettier \"src/**/*.{js,ts,tsx}\" --check",
39
- "test": "vitest run",
40
- "test:watch": "vitest",
41
39
  "type:check": "tsc --noEmit",
42
40
  "coverage": "vitest run --coverage",
43
41
  "clean": "rimraf dist",
@@ -47,7 +45,7 @@
47
45
  "prepublishOnly": "npm run build"
48
46
  },
49
47
  "devDependencies": {
50
- "@babel/cli": "^7.26.4",
48
+ "@babel/cli": "^7.27.2",
51
49
  "@babel/core": "^7.26.0",
52
50
  "@babel/plugin-proposal-class-properties": "^7.16.7",
53
51
  "@babel/plugin-proposal-object-rest-spread": "^7.16.7",
@@ -55,31 +53,30 @@
55
53
  "@babel/preset-env": "^7.27.1",
56
54
  "@babel/preset-typescript": "^7.27.0",
57
55
  "@types/jsonwebtoken": "^9.0.9",
58
- "@typescript-eslint/eslint-plugin": "^8.19.1",
59
- "@typescript-eslint/parser": "^8.27.0",
56
+ "@typescript-eslint/eslint-plugin": "^8.32.0",
57
+ "@typescript-eslint/parser": "^8.32.1",
60
58
  "cross-env": "^7.0.3",
61
59
  "crypto": "^1.0.1",
62
60
  "eslint": "^8.56.0",
63
61
  "jsonwebtoken": "^9.0.2",
64
62
  "prettier": "^3.5.3",
65
63
  "rimraf": "^6.0.1",
66
- "rollup": "^4.34.8",
64
+ "rollup": "^4.41.1",
67
65
  "typescript": "^5.8.3",
68
66
  "vite": "^5.4.19",
69
67
  "vitest": "^3.1.1"
70
68
  },
71
69
  "dependencies": {
72
- "@babel/runtime": "^7.27.0",
70
+ "@babel/runtime": "^7.27.1",
73
71
  "@knocklabs/types": "^0.1.5",
74
- "@tanstack/store": "0.6.0",
72
+ "@tanstack/store": "^0.7.1",
75
73
  "@types/phoenix": "^1.6.6",
76
- "axios": "^1.8.4",
74
+ "axios": "^1.9.0",
77
75
  "axios-retry": "^4.5.0",
78
76
  "eventemitter2": "^6.4.5",
79
77
  "jwt-decode": "^4.0.0",
80
78
  "nanoid": "^3.3.11",
81
79
  "phoenix": "1.7.19",
82
- "urlpattern-polyfill": "^10.0.0",
83
- "zustand": "^4.5.6"
80
+ "urlpattern-polyfill": "^10.0.0"
84
81
  }
85
82
  }
@@ -1,7 +1,6 @@
1
1
  import { GenericData } from "@knocklabs/types";
2
2
  import EventEmitter from "eventemitter2";
3
3
  import { nanoid } from "nanoid";
4
- import type { StoreApi } from "zustand";
5
4
 
6
5
  import { isValidUuid } from "../../helpers";
7
6
  import Knock from "../../knock";
@@ -24,7 +23,7 @@ import {
24
23
  SocketEventPayload,
25
24
  SocketEventType,
26
25
  } from "./socket-manager";
27
- import createStore from "./store";
26
+ import createStore, { FeedStore } from "./store";
28
27
  import {
29
28
  BindableFeedEvent,
30
29
  FeedEvent,
@@ -33,7 +32,6 @@ import {
33
32
  FeedItemOrItems,
34
33
  FeedMessagesReceivedPayload,
35
34
  FeedRealTimeCallback,
36
- FeedStoreState,
37
35
  } from "./types";
38
36
  import { getFormattedTriggerData, mergeDateRangeParams } from "./utils";
39
37
 
@@ -60,7 +58,7 @@ class Feed {
60
58
  private visibilityChangeListenerConnected: boolean = false;
61
59
 
62
60
  // The raw store instance, used for binding in React and other environments
63
- public store: StoreApi<FeedStoreState>;
61
+ public store: FeedStore;
64
62
 
65
63
  constructor(
66
64
  readonly knock: Knock,
@@ -1,10 +1,10 @@
1
1
  import { GenericData } from "@knocklabs/types";
2
- import { createStore as createVanillaZustandStore } from "zustand";
2
+ import { Store } from "@tanstack/store";
3
3
 
4
4
  import { NetworkStatus } from "../../networkStatus";
5
5
 
6
- import { FeedItem } from "./interfaces";
7
- import { FeedStoreState } from "./types";
6
+ import { FeedItem, FeedMetadata, FeedResponse } from "./interfaces";
7
+ import { FeedStoreState, StoreFeedResultOptions } from "./types";
8
8
  import { deduplicateItems, sortItems } from "./utils";
9
9
 
10
10
  function processItems(items: FeedItem[]) {
@@ -19,7 +19,7 @@ const defaultSetResultOptions = {
19
19
  shouldAppend: false,
20
20
  };
21
21
 
22
- const initialStoreState = {
22
+ export const initialStoreState: FeedStoreState = {
23
23
  items: [],
24
24
  metadata: {
25
25
  total_count: 0,
@@ -31,33 +31,47 @@ const initialStoreState = {
31
31
  after: null,
32
32
  page_size: 50,
33
33
  },
34
+ loading: false,
35
+ networkStatus: NetworkStatus.ready,
36
+ setResult: () => {},
37
+ setMetadata: () => {},
38
+ setNetworkStatus: () => {},
39
+ resetStore: () => {},
40
+ setItemAttrs: () => {},
34
41
  };
35
42
 
36
- export default function createStore() {
37
- return createVanillaZustandStore<FeedStoreState>()((set) => ({
38
- // Keeps track of all of the items loaded
39
- ...initialStoreState,
43
+ /**
44
+ * Initalize the store with tanstack store so it can be used within our
45
+ * FeedStore class. We do this seperately so that we have the ability to
46
+ * change which store library we use in the future if need be.
47
+ */
48
+ const initalizeStore = () => {
49
+ const store = new Store(initialStoreState);
50
+
51
+ store.setState((state) => ({
52
+ ...state,
40
53
  // The network status indicates what's happening with the request
41
54
  networkStatus: NetworkStatus.ready,
42
55
  loading: false,
43
-
44
56
  setNetworkStatus: (networkStatus: NetworkStatus) =>
45
- set(() => ({
57
+ store.setState((state) => ({
58
+ ...state,
46
59
  networkStatus,
47
60
  loading: networkStatus === NetworkStatus.loading,
48
61
  })),
49
62
 
50
63
  setResult: (
51
- { entries, meta, page_info },
52
- options = defaultSetResultOptions,
64
+ { entries, meta, page_info }: FeedResponse,
65
+ options: StoreFeedResultOptions = defaultSetResultOptions,
53
66
  ) =>
54
- set((state) => {
67
+ store.setState((state) => {
55
68
  // We resort the list on set, so concating everything is fine (if a bit suboptimal)
56
69
  const items = options.shouldAppend
57
70
  ? processItems(state.items.concat(entries as FeedItem<GenericData>[]))
58
71
  : entries;
59
72
 
60
73
  return {
74
+ ...state,
61
75
  items,
62
76
  metadata: meta,
63
77
  pageInfo: options.shouldSetPage ? page_info : state.pageInfo,
@@ -66,19 +80,20 @@ export default function createStore() {
66
80
  };
67
81
  }),
68
82
 
69
- setMetadata: (metadata) => set(() => ({ metadata })),
83
+ setMetadata: (metadata: FeedMetadata) =>
84
+ store.setState((state) => ({ ...state, metadata })),
70
85
 
71
86
  resetStore: (metadata = initialStoreState.metadata) =>
72
- set(() => ({ ...initialStoreState, metadata })),
87
+ store.setState(() => ({ ...initialStoreState, metadata })),
73
88
 
74
- setItemAttrs: (itemIds, attrs) => {
89
+ setItemAttrs: (itemIds: Array<string>, attrs: object) => {
75
90
  // Create a map for the items to the updates to be made
76
91
  const itemUpdatesMap: { [id: string]: object } = itemIds.reduce(
77
92
  (acc, itemId) => ({ ...acc, [itemId]: attrs }),
78
93
  {},
79
94
  );
80
95
 
81
- return set((state) => {
96
+ return store.setState((state) => {
82
97
  const items = state.items.map((item) => {
83
98
  if (itemUpdatesMap[item.id]) {
84
99
  return { ...item, ...itemUpdatesMap[item.id] };
@@ -87,8 +102,50 @@ export default function createStore() {
87
102
  return item;
88
103
  });
89
104
 
90
- return { items };
105
+ return { ...state, items };
91
106
  });
92
107
  },
93
108
  }));
109
+
110
+ return store;
111
+ };
112
+
113
+ /**
114
+ * The FeedStore class is a wrapper for our store solution that's
115
+ * based on the same shape as zustand. This wrapping class allows
116
+ * us to maintain backwards compatibility with the zustand model
117
+ * while still allowing us to utilize tanstack store for the
118
+ * underlying store solution.
119
+ */
120
+ export class FeedStore {
121
+ store: Store<FeedStoreState>;
122
+
123
+ constructor(store: Store<FeedStoreState>) {
124
+ this.store = store;
125
+ }
126
+
127
+ getState() {
128
+ return this.store.state;
129
+ }
130
+
131
+ setState(
132
+ updater: ((state: FeedStoreState) => FeedStoreState) | FeedStoreState,
133
+ ) {
134
+ this.store.setState(
135
+ typeof updater === "function" ? updater : () => updater,
136
+ );
137
+ }
138
+
139
+ getInitialState() {
140
+ return initialStoreState;
141
+ }
142
+
143
+ subscribe(listener: (state: FeedStoreState) => void) {
144
+ return this.store.subscribe((state) => listener(state.currentVal));
145
+ }
146
+ }
147
+
148
+ export default function createStore() {
149
+ const store = initalizeStore();
150
+ return new FeedStore(store);
94
151
  }
@@ -620,14 +620,15 @@ export class KnockGuideClient {
620
620
  });
621
621
  }
622
622
 
623
- private handleLocationChange() {
623
+ // Define as an arrow func property to always bind this to the class instance.
624
+ private handleLocationChange = () => {
624
625
  const href = window.location.href;
625
626
  if (this.store.state.location === href) return;
626
627
 
627
628
  this.knock.log(`[Guide] Handle Location change: ${href}`);
628
629
 
629
630
  this.store.setState((state) => ({ ...state, location: href }));
630
- }
631
+ };
631
632
 
632
633
  private listenForLocationChangesFromWindow() {
633
634
  if (window?.history) {