@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.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/clients/feed/feed.js.map +1 -1
- package/dist/cjs/clients/feed/store.js +1 -1
- package/dist/cjs/clients/feed/store.js.map +1 -1
- package/dist/cjs/clients/guide/client.js +1 -1
- package/dist/cjs/clients/guide/client.js.map +1 -1
- package/dist/esm/clients/feed/feed.mjs.map +1 -1
- package/dist/esm/clients/feed/store.mjs +80 -32
- package/dist/esm/clients/feed/store.mjs.map +1 -1
- package/dist/esm/clients/guide/client.mjs +5 -4
- package/dist/esm/clients/guide/client.mjs.map +1 -1
- package/dist/types/clients/feed/feed.d.ts +4 -4
- package/dist/types/clients/feed/feed.d.ts.map +1 -1
- package/dist/types/clients/feed/store.d.ts +18 -1
- package/dist/types/clients/feed/store.d.ts.map +1 -1
- package/dist/types/clients/guide/client.d.ts.map +1 -1
- package/package.json +9 -12
- package/src/clients/feed/feed.ts +2 -4
- package/src/clients/feed/store.ts +75 -18
- package/src/clients/guide/client.ts +3 -2
- package/test/README.md +590 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/clients/feed/store.ts"],"names":[],"mappings":"
|
|
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.
|
|
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.
|
|
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.
|
|
59
|
-
"@typescript-eslint/parser": "^8.
|
|
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.
|
|
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.
|
|
70
|
+
"@babel/runtime": "^7.27.1",
|
|
73
71
|
"@knocklabs/types": "^0.1.5",
|
|
74
|
-
"@tanstack/store": "0.
|
|
72
|
+
"@tanstack/store": "^0.7.1",
|
|
75
73
|
"@types/phoenix": "^1.6.6",
|
|
76
|
-
"axios": "^1.
|
|
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
|
}
|
package/src/clients/feed/feed.ts
CHANGED
|
@@ -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:
|
|
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 {
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
83
|
+
setMetadata: (metadata: FeedMetadata) =>
|
|
84
|
+
store.setState((state) => ({ ...state, metadata })),
|
|
70
85
|
|
|
71
86
|
resetStore: (metadata = initialStoreState.metadata) =>
|
|
72
|
-
|
|
87
|
+
store.setState(() => ({ ...initialStoreState, metadata })),
|
|
73
88
|
|
|
74
|
-
setItemAttrs: (itemIds
|
|
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
|
|
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
|
-
|
|
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) {
|