@knocklabs/client 0.10.13 → 0.11.0-rc.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 +11 -0
- package/dist/cjs/clients/in-app-messages/channel-client.js +2 -0
- package/dist/cjs/clients/in-app-messages/channel-client.js.map +1 -0
- package/dist/cjs/clients/in-app-messages/message-client.js +2 -0
- package/dist/cjs/clients/in-app-messages/message-client.js.map +1 -0
- package/dist/cjs/clients/in-app-messages/socket-manager.js +2 -0
- package/dist/cjs/clients/in-app-messages/socket-manager.js.map +1 -0
- package/dist/cjs/clients/in-app-messages/store.js +2 -0
- package/dist/cjs/clients/in-app-messages/store.js.map +1 -0
- package/dist/cjs/clients/users/index.js +1 -1
- package/dist/cjs/clients/users/index.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/esm/clients/in-app-messages/channel-client.mjs +80 -0
- package/dist/esm/clients/in-app-messages/channel-client.mjs.map +1 -0
- package/dist/esm/clients/in-app-messages/message-client.mjs +153 -0
- package/dist/esm/clients/in-app-messages/message-client.mjs.map +1 -0
- package/dist/esm/clients/in-app-messages/socket-manager.mjs +83 -0
- package/dist/esm/clients/in-app-messages/socket-manager.mjs.map +1 -0
- package/dist/esm/clients/in-app-messages/store.mjs +11 -0
- package/dist/esm/clients/in-app-messages/store.mjs.map +1 -0
- package/dist/esm/clients/users/index.mjs +28 -20
- package/dist/esm/clients/users/index.mjs.map +1 -1
- package/dist/esm/index.mjs +11 -7
- package/dist/esm/index.mjs.map +1 -1
- package/dist/types/clients/in-app-messages/channel-client.d.ts +23 -0
- package/dist/types/clients/in-app-messages/channel-client.d.ts.map +1 -0
- package/dist/types/clients/in-app-messages/index.d.ts +4 -0
- package/dist/types/clients/in-app-messages/index.d.ts.map +1 -0
- package/dist/types/clients/in-app-messages/message-client.d.ts +52 -0
- package/dist/types/clients/in-app-messages/message-client.d.ts.map +1 -0
- package/dist/types/clients/in-app-messages/socket-manager.d.ts +27 -0
- package/dist/types/clients/in-app-messages/socket-manager.d.ts.map +1 -0
- package/dist/types/clients/in-app-messages/store.d.ts +6 -0
- package/dist/types/clients/in-app-messages/store.d.ts.map +1 -0
- package/dist/types/clients/in-app-messages/types.d.ts +52 -0
- package/dist/types/clients/in-app-messages/types.d.ts.map +1 -0
- package/dist/types/clients/preferences/interfaces.d.ts +1 -1
- package/dist/types/clients/preferences/interfaces.d.ts.map +1 -1
- package/dist/types/clients/users/index.d.ts +3 -1
- package/dist/types/clients/users/index.d.ts.map +1 -1
- package/dist/types/clients/users/interfaces.d.ts +6 -0
- package/dist/types/clients/users/interfaces.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +11 -9
- package/src/clients/in-app-messages/channel-client.ts +129 -0
- package/src/clients/in-app-messages/index.ts +3 -0
- package/src/clients/in-app-messages/message-client.ts +271 -0
- package/src/clients/in-app-messages/socket-manager.ts +187 -0
- package/src/clients/in-app-messages/store.ts +15 -0
- package/src/clients/in-app-messages/types.ts +79 -0
- package/src/clients/preferences/interfaces.ts +1 -1
- package/src/clients/users/index.ts +19 -1
- package/src/clients/users/interfaces.ts +8 -0
- package/src/index.ts +1 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
var
|
|
2
|
-
var u = (
|
|
3
|
-
var
|
|
4
|
-
const
|
|
1
|
+
var c = Object.defineProperty;
|
|
2
|
+
var u = (n, e, s) => e in n ? c(n, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : n[e] = s;
|
|
3
|
+
var r = (n, e, s) => u(n, typeof e != "symbol" ? e + "" : e, s);
|
|
4
|
+
const i = "default";
|
|
5
5
|
class l {
|
|
6
6
|
constructor(e) {
|
|
7
|
-
|
|
7
|
+
r(this, "instance");
|
|
8
8
|
this.instance = e;
|
|
9
9
|
}
|
|
10
10
|
async get() {
|
|
@@ -15,12 +15,12 @@ class l {
|
|
|
15
15
|
return this.handleResponse(e);
|
|
16
16
|
}
|
|
17
17
|
async identify(e = {}) {
|
|
18
|
-
const
|
|
18
|
+
const s = await this.instance.client().makeRequest({
|
|
19
19
|
method: "PUT",
|
|
20
20
|
url: `/v1/users/${this.instance.userId}`,
|
|
21
21
|
params: e
|
|
22
22
|
});
|
|
23
|
-
return this.handleResponse(
|
|
23
|
+
return this.handleResponse(s);
|
|
24
24
|
}
|
|
25
25
|
async getAllPreferences() {
|
|
26
26
|
const e = await this.instance.client().makeRequest({
|
|
@@ -30,38 +30,46 @@ class l {
|
|
|
30
30
|
return this.handleResponse(e);
|
|
31
31
|
}
|
|
32
32
|
async getPreferences(e = {}) {
|
|
33
|
-
const
|
|
33
|
+
const s = e.preferenceSet || i, t = await this.instance.client().makeRequest({
|
|
34
34
|
method: "GET",
|
|
35
|
-
url: `/v1/users/${this.instance.userId}/preferences/${
|
|
35
|
+
url: `/v1/users/${this.instance.userId}/preferences/${s}`,
|
|
36
36
|
params: { tenant: e.tenant }
|
|
37
37
|
});
|
|
38
|
-
return this.handleResponse(
|
|
38
|
+
return this.handleResponse(t);
|
|
39
39
|
}
|
|
40
|
-
async setPreferences(e,
|
|
41
|
-
const
|
|
40
|
+
async setPreferences(e, s = {}) {
|
|
41
|
+
const t = s.preferenceSet || i, a = await this.instance.client().makeRequest({
|
|
42
42
|
method: "PUT",
|
|
43
|
-
url: `/v1/users/${this.instance.userId}/preferences/${
|
|
43
|
+
url: `/v1/users/${this.instance.userId}/preferences/${t}`,
|
|
44
44
|
data: e
|
|
45
45
|
});
|
|
46
|
-
return this.handleResponse(
|
|
46
|
+
return this.handleResponse(a);
|
|
47
47
|
}
|
|
48
48
|
async getChannelData(e) {
|
|
49
|
-
const
|
|
49
|
+
const s = await this.instance.client().makeRequest({
|
|
50
50
|
method: "GET",
|
|
51
51
|
url: `/v1/users/${this.instance.userId}/channel_data/${e.channelId}`
|
|
52
52
|
});
|
|
53
|
-
return this.handleResponse(
|
|
53
|
+
return this.handleResponse(s);
|
|
54
54
|
}
|
|
55
55
|
async setChannelData({
|
|
56
56
|
channelId: e,
|
|
57
|
-
channelData:
|
|
57
|
+
channelData: s
|
|
58
58
|
}) {
|
|
59
|
-
const
|
|
59
|
+
const t = await this.instance.client().makeRequest({
|
|
60
60
|
method: "PUT",
|
|
61
61
|
url: `/v1/users/${this.instance.userId}/channel_data/${e}`,
|
|
62
|
-
data: { data:
|
|
62
|
+
data: { data: s }
|
|
63
|
+
});
|
|
64
|
+
return this.handleResponse(t);
|
|
65
|
+
}
|
|
66
|
+
async getInAppMessages({ channelId: e, messageType: s, params: t }) {
|
|
67
|
+
const a = await this.instance.client().makeRequest({
|
|
68
|
+
method: "GET",
|
|
69
|
+
url: `/v1/users/${this.instance.userId}/in-app-messages/${e}/${s}`,
|
|
70
|
+
params: t
|
|
63
71
|
});
|
|
64
|
-
return this.handleResponse(
|
|
72
|
+
return this.handleResponse(a);
|
|
65
73
|
}
|
|
66
74
|
handleResponse(e) {
|
|
67
75
|
if (e.statusCode === "error")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/clients/users/index.ts"],"sourcesContent":["import { GenericData } from \"@knocklabs/types\";\n\nimport { ApiResponse } from \"../../api\";\nimport { ChannelData, User } from \"../../interfaces\";\nimport Knock from \"../../knock\";\nimport {\n GetPreferencesOptions,\n PreferenceOptions,\n PreferenceSet,\n SetPreferencesProperties,\n} from \"../preferences/interfaces\";\n\nimport {
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/clients/users/index.ts"],"sourcesContent":["import { GenericData } from \"@knocklabs/types\";\n\nimport { ApiResponse } from \"../../api\";\nimport { ChannelData, User } from \"../../interfaces\";\nimport Knock from \"../../knock\";\nimport { InAppMessagesResponse } from \"../in-app-messages\";\nimport {\n GetPreferencesOptions,\n PreferenceOptions,\n PreferenceSet,\n SetPreferencesProperties,\n} from \"../preferences/interfaces\";\n\nimport {\n GetChannelDataInput,\n GetInAppMessagesInput,\n SetChannelDataInput,\n} from \"./interfaces\";\n\nconst DEFAULT_PREFERENCE_SET_ID = \"default\";\n\nclass UserClient {\n private instance: Knock;\n\n constructor(instance: Knock) {\n this.instance = instance;\n }\n\n async get() {\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/users/${this.instance.userId}`,\n });\n\n return this.handleResponse<User>(result);\n }\n\n async identify(props: GenericData = {}) {\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/users/${this.instance.userId}`,\n params: props,\n });\n\n return this.handleResponse<User>(result);\n }\n\n async getAllPreferences() {\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<PreferenceSet[]>(result);\n }\n\n async getPreferences(\n options: GetPreferencesOptions = {},\n ): Promise<PreferenceSet> {\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 params: { tenant: options.tenant },\n });\n\n return this.handleResponse<PreferenceSet>(result);\n }\n\n async setPreferences(\n preferenceSet: SetPreferencesProperties,\n options: PreferenceOptions = {},\n ): Promise<PreferenceSet> {\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<PreferenceSet>(result);\n }\n\n async getChannelData<T = GenericData>(params: GetChannelDataInput) {\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/users/${this.instance.userId}/channel_data/${params.channelId}`,\n });\n\n return this.handleResponse<ChannelData<T>>(result);\n }\n\n async setChannelData<T = GenericData>({\n channelId,\n channelData,\n }: SetChannelDataInput) {\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/users/${this.instance.userId}/channel_data/${channelId}`,\n data: { data: channelData },\n });\n\n return this.handleResponse<ChannelData<T>>(result);\n }\n\n async getInAppMessages<\n TContent extends GenericData = GenericData,\n TData extends GenericData = GenericData,\n >({ channelId, messageType, params }: GetInAppMessagesInput) {\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/users/${this.instance.userId}/in-app-messages/${channelId}/${messageType}`,\n params,\n });\n\n return this.handleResponse<InAppMessagesResponse<TContent, TData>>(result);\n }\n\n private handleResponse<T>(response: ApiResponse) {\n if (response.statusCode === \"error\") {\n throw new Error(response.error || response.body);\n }\n\n return response.body as T;\n }\n}\n\nexport default UserClient;\n"],"names":["DEFAULT_PREFERENCE_SET_ID","UserClient","instance","__publicField","result","props","options","preferenceSetId","preferenceSet","params","channelId","channelData","messageType","response"],"mappings":";;;AAmBA,MAAMA,IAA4B;AAElC,MAAMC,EAAW;AAAA,EAGf,YAAYC,GAAiB;AAFrB,IAAAC,EAAA;AAGN,SAAK,WAAWD;AAAA,EAClB;AAAA,EAEA,MAAM,MAAM;AACV,UAAME,IAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY;AAAA,MACtD,QAAQ;AAAA,MACR,KAAK,aAAa,KAAK,SAAS,MAAM;AAAA,IAAA,CACvC;AAEM,WAAA,KAAK,eAAqBA,CAAM;AAAA,EACzC;AAAA,EAEA,MAAM,SAASC,IAAqB,IAAI;AACtC,UAAMD,IAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY;AAAA,MACtD,QAAQ;AAAA,MACR,KAAK,aAAa,KAAK,SAAS,MAAM;AAAA,MACtC,QAAQC;AAAA,IAAA,CACT;AAEM,WAAA,KAAK,eAAqBD,CAAM;AAAA,EACzC;AAAA,EAEA,MAAM,oBAAoB;AACxB,UAAMA,IAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY;AAAA,MACtD,QAAQ;AAAA,MACR,KAAK,aAAa,KAAK,SAAS,MAAM;AAAA,IAAA,CACvC;AAEM,WAAA,KAAK,eAAgCA,CAAM;AAAA,EACpD;AAAA,EAEA,MAAM,eACJE,IAAiC,IACT;AAClB,UAAAC,IAAkBD,EAAQ,iBAAiBN,GAE3CI,IAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY;AAAA,MACtD,QAAQ;AAAA,MACR,KAAK,aAAa,KAAK,SAAS,MAAM,gBAAgBG,CAAe;AAAA,MACrE,QAAQ,EAAE,QAAQD,EAAQ,OAAO;AAAA,IAAA,CAClC;AAEM,WAAA,KAAK,eAA8BF,CAAM;AAAA,EAClD;AAAA,EAEA,MAAM,eACJI,GACAF,IAA6B,IACL;AAClB,UAAAC,IAAkBD,EAAQ,iBAAiBN,GAE3CI,IAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY;AAAA,MACtD,QAAQ;AAAA,MACR,KAAK,aAAa,KAAK,SAAS,MAAM,gBAAgBG,CAAe;AAAA,MACrE,MAAMC;AAAA,IAAA,CACP;AAEM,WAAA,KAAK,eAA8BJ,CAAM;AAAA,EAClD;AAAA,EAEA,MAAM,eAAgCK,GAA6B;AACjE,UAAML,IAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY;AAAA,MACtD,QAAQ;AAAA,MACR,KAAK,aAAa,KAAK,SAAS,MAAM,iBAAiBK,EAAO,SAAS;AAAA,IAAA,CACxE;AAEM,WAAA,KAAK,eAA+BL,CAAM;AAAA,EACnD;AAAA,EAEA,MAAM,eAAgC;AAAA,IACpC,WAAAM;AAAA,IACA,aAAAC;AAAA,EAAA,GACsB;AACtB,UAAMP,IAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY;AAAA,MACtD,QAAQ;AAAA,MACR,KAAK,aAAa,KAAK,SAAS,MAAM,iBAAiBM,CAAS;AAAA,MAChE,MAAM,EAAE,MAAMC,EAAY;AAAA,IAAA,CAC3B;AAEM,WAAA,KAAK,eAA+BP,CAAM;AAAA,EACnD;AAAA,EAEA,MAAM,iBAGJ,EAAE,WAAAM,GAAW,aAAAE,GAAa,QAAAH,KAAiC;AAC3D,UAAML,IAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY;AAAA,MACtD,QAAQ;AAAA,MACR,KAAK,aAAa,KAAK,SAAS,MAAM,oBAAoBM,CAAS,IAAIE,CAAW;AAAA,MAClF,QAAAH;AAAA,IAAA,CACD;AAEM,WAAA,KAAK,eAAuDL,CAAM;AAAA,EAC3E;AAAA,EAEQ,eAAkBS,GAAuB;AAC3C,QAAAA,EAAS,eAAe;AAC1B,YAAM,IAAI,MAAMA,EAAS,SAASA,EAAS,IAAI;AAGjD,WAAOA,EAAS;AAAA,EAClB;AACF;"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import { default as
|
|
1
|
+
import { default as p } from "./clients/feed/index.mjs";
|
|
2
2
|
import t from "./knock.mjs";
|
|
3
|
-
import { TENANT_OBJECT_COLLECTION as
|
|
4
|
-
import {
|
|
3
|
+
import { TENANT_OBJECT_COLLECTION as a } from "./clients/objects/constants.mjs";
|
|
4
|
+
import { InAppMessagesChannelClient as n } from "./clients/in-app-messages/channel-client.mjs";
|
|
5
|
+
import { InAppMessagesClient as m } from "./clients/in-app-messages/message-client.mjs";
|
|
6
|
+
import { NetworkStatus as C, isRequestInFlight as i } from "./networkStatus.mjs";
|
|
5
7
|
import { default as u } from "./clients/feed/feed.mjs";
|
|
6
8
|
export {
|
|
7
9
|
u as Feed,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
m as
|
|
10
|
+
p as FeedClient,
|
|
11
|
+
n as InAppMessagesChannelClient,
|
|
12
|
+
m as InAppMessagesClient,
|
|
13
|
+
C as NetworkStatus,
|
|
14
|
+
a as TENANT_OBJECT_COLLECTION,
|
|
11
15
|
t as default,
|
|
12
|
-
|
|
16
|
+
i as isRequestInFlight
|
|
13
17
|
};
|
|
14
18
|
//# sourceMappingURL=index.mjs.map
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { default as Knock } from '../../knock';
|
|
2
|
+
import { InAppMessagesClient } from './message-client';
|
|
3
|
+
import { InAppMessagesStore } from './store';
|
|
4
|
+
import { InAppMessage, InAppMessagesClientOptions, InAppMessagesQueryInfo, InAppMessagesResponse } from './types';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Manages the configuration for an in app channel.
|
|
8
|
+
* Stores all fetched messages to support optimistic updates.
|
|
9
|
+
*/
|
|
10
|
+
export declare class InAppMessagesChannelClient {
|
|
11
|
+
readonly knock: Knock;
|
|
12
|
+
readonly channelId: string;
|
|
13
|
+
readonly defaultOptions: InAppMessagesClientOptions;
|
|
14
|
+
store: InAppMessagesStore;
|
|
15
|
+
private socketManager;
|
|
16
|
+
constructor(knock: Knock, channelId: string, defaultOptions?: InAppMessagesClientOptions);
|
|
17
|
+
setMessageAttrs(messageIds: string[], attrs: Partial<InAppMessage>): void;
|
|
18
|
+
setQueryResponse(queryKey: string, response: InAppMessagesResponse): void;
|
|
19
|
+
setQueryStatus(queryKey: string, status: Pick<InAppMessagesQueryInfo, "loading" | "networkStatus">): void;
|
|
20
|
+
subscribe(client: InAppMessagesClient): (() => void) | undefined;
|
|
21
|
+
unsubscribe(client: InAppMessagesClient): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=channel-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-client.d.ts","sourceRoot":"","sources":["../../../../src/clients/in-app-messages/channel-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,aAAa,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAe,MAAM,SAAS,CAAC;AAC1D,OAAO,EACL,YAAY,EACZ,0BAA0B,EAC1B,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,0BAA0B;IAMnC,QAAQ,CAAC,KAAK,EAAE,KAAK;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,cAAc,EAAE,0BAA0B;IAP9C,KAAK,EAAE,kBAAkB,CAAC;IAEjC,OAAO,CAAC,aAAa,CAAwC;gBAGlD,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EACjB,cAAc,GAAE,0BAA+B;IAmB1D,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC;IAkBlE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB;IA2BlE,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,GAAG,eAAe,CAAC;IAkBnE,SAAS,CAAC,MAAM,EAAE,mBAAmB;IAWrC,WAAW,CAAC,MAAM,EAAE,mBAAmB;CAQxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/clients/in-app-messages/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { GenericData } from '@knocklabs/types';
|
|
2
|
+
import { NetworkStatus } from '../../networkStatus';
|
|
3
|
+
import { InAppMessagesChannelClient } from './channel-client';
|
|
4
|
+
import { SocketEventPayload } from './socket-manager';
|
|
5
|
+
import { InAppMessage, InAppMessagesClientOptions, InAppMessagesResponse, InAppMessagesStoreState } from './types';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Manages realtime connection to in app messages service.
|
|
9
|
+
*/
|
|
10
|
+
export declare class InAppMessagesClient {
|
|
11
|
+
readonly channelClient: InAppMessagesChannelClient;
|
|
12
|
+
readonly messageType: string;
|
|
13
|
+
readonly defaultOptions: InAppMessagesClientOptions;
|
|
14
|
+
private knock;
|
|
15
|
+
queryKey: string;
|
|
16
|
+
referenceId: string;
|
|
17
|
+
unsub?: () => void;
|
|
18
|
+
constructor(channelClient: InAppMessagesChannelClient, messageType: string, defaultOptions?: InAppMessagesClientOptions);
|
|
19
|
+
fetch<TContent extends GenericData = GenericData, TData extends GenericData = GenericData>(): Promise<{
|
|
20
|
+
status: "ok";
|
|
21
|
+
data: InAppMessagesResponse<TContent, TData>;
|
|
22
|
+
} | {
|
|
23
|
+
status: "error";
|
|
24
|
+
error: Error;
|
|
25
|
+
} | undefined>;
|
|
26
|
+
getQueryInfoSelector<TContent extends GenericData = GenericData, TData extends GenericData = GenericData>(state: InAppMessagesStoreState): {
|
|
27
|
+
messages: InAppMessage<TContent, TData>[];
|
|
28
|
+
loading: boolean;
|
|
29
|
+
networkStatus: NetworkStatus;
|
|
30
|
+
};
|
|
31
|
+
markAsSeen(itemOrItems: InAppMessage | InAppMessage[]): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
32
|
+
markAsUnseen(itemOrItems: InAppMessage | InAppMessage[]): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
33
|
+
markAsRead(itemOrItems: InAppMessage | InAppMessage[]): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
34
|
+
markAsUnread(itemOrItems: InAppMessage | InAppMessage[]): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
35
|
+
markAsInteracted(itemOrItems: InAppMessage | InAppMessage[], metadata?: Record<string, string>): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
36
|
+
markAsArchived(itemOrItems: InAppMessage | InAppMessage[]): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
37
|
+
markAsUnarchived(itemOrItems: InAppMessage | InAppMessage[]): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
38
|
+
private makeStatusUpdate;
|
|
39
|
+
private buildQueryKey;
|
|
40
|
+
subscribe(): void;
|
|
41
|
+
unsubscribe(): void;
|
|
42
|
+
handleSocketEvent(payload: SocketEventPayload): Promise<{
|
|
43
|
+
status: "error";
|
|
44
|
+
error: Error;
|
|
45
|
+
} | {
|
|
46
|
+
status: "ok";
|
|
47
|
+
data: InAppMessagesResponse<GenericData, GenericData>;
|
|
48
|
+
} | undefined>;
|
|
49
|
+
socketChannelTopic(): string;
|
|
50
|
+
private getItemIds;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=message-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-client.d.ts","sourceRoot":"","sources":["../../../../src/clients/in-app-messages/message-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAGvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAmB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EACL,YAAY,EACZ,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,qBAAa,mBAAmB;IAQ5B,QAAQ,CAAC,aAAa,EAAE,0BAA0B;IAClD,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,cAAc,EAAE,0BAA0B;IATrD,OAAO,CAAC,KAAK,CAAQ;IAEd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;gBAGf,aAAa,EAAE,0BAA0B,EACzC,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,0BAA+B;IAgBpD,KAAK,CACT,QAAQ,SAAS,WAAW,GAAG,WAAW,EAC1C,KAAK,SAAS,WAAW,GAAG,WAAW,KACpC,OAAO,CACR;QACE,MAAM,EAAE,IAAI,CAAC;QACb,IAAI,EAAE,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;KAC9C,GACD;QACE,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC;KACd,GACD,SAAS,CACZ;IA+CD,oBAAoB,CAClB,QAAQ,SAAS,WAAW,GAAG,WAAW,EAC1C,KAAK,SAAS,WAAW,GAAG,WAAW,EAEvC,KAAK,EAAE,uBAAuB,GAC7B;QACD,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,EAAE,aAAa,CAAC;KAC9B;IAyBK,UAAU,CAAC,WAAW,EAAE,YAAY,GAAG,YAAY,EAAE;IAUrD,YAAY,CAAC,WAAW,EAAE,YAAY,GAAG,YAAY,EAAE;IAUvD,UAAU,CAAC,WAAW,EAAE,YAAY,GAAG,YAAY,EAAE;IAUrD,YAAY,CAAC,WAAW,EAAE,YAAY,GAAG,YAAY,EAAE;IAUvD,gBAAgB,CACpB,WAAW,EAAE,YAAY,GAAG,YAAY,EAAE,EAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAa7B,cAAc,CAAC,WAAW,EAAE,YAAY,GAAG,YAAY,EAAE;IAUzD,gBAAgB,CAAC,WAAW,EAAE,YAAY,GAAG,YAAY,EAAE;YAUnD,gBAAgB;IAoB9B,OAAO,CAAC,aAAa;IAMrB,SAAS;IAIT,WAAW;IAML,iBAAiB,CAAC,OAAO,EAAE,kBAAkB;gBApMrC,OAAO;eACR,KAAK;;gBALJ,IAAI;;;IAoNlB,kBAAkB;IAIlB,OAAO,CAAC,UAAU;CAInB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Socket } from 'phoenix';
|
|
2
|
+
import { InAppMessagesClient } from './message-client';
|
|
3
|
+
import { InAppMessage } from './types';
|
|
4
|
+
|
|
5
|
+
export declare enum SocketEventType {
|
|
6
|
+
MessageCreated = "message.created"
|
|
7
|
+
}
|
|
8
|
+
type MessageCreatedEventPayload = {
|
|
9
|
+
event: SocketEventType.MessageCreated;
|
|
10
|
+
topic: string;
|
|
11
|
+
data: {
|
|
12
|
+
in_app_message: InAppMessage;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export type SocketEventPayload = MessageCreatedEventPayload;
|
|
16
|
+
export declare class InAppMessageSocketManager {
|
|
17
|
+
readonly socket: Socket;
|
|
18
|
+
private channels;
|
|
19
|
+
private params;
|
|
20
|
+
private inbox;
|
|
21
|
+
constructor(socket: Socket);
|
|
22
|
+
join(iamClient: InAppMessagesClient): () => void;
|
|
23
|
+
leave(iamClient: InAppMessagesClient): void;
|
|
24
|
+
private setInbox;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=socket-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-manager.d.ts","sourceRoot":"","sources":["../../../../src/clients/in-app-messages/socket-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,YAAY,EAA8B,MAAM,SAAS,CAAC;AAEnE,oBAAY,eAAe;IACzB,cAAc,oBAAoB;CACnC;AAYD,KAAK,0BAA0B,GAAG;IAChC,KAAK,EAAE,eAAe,CAAC,cAAc,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE;QACJ,cAAc,EAAE,YAAY,CAAC;KAC9B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,0BAA0B,CAAC;AAc5D,qBAAa,yBAAyB;IAwCxB,QAAQ,CAAC,MAAM,EAAE,MAAM;IArCnC,OAAO,CAAC,QAAQ,CAAgC;IAyBhD,OAAO,CAAC,MAAM,CAGZ;IAIF,OAAO,CAAC,KAAK,CAGX;gBAEmB,MAAM,EAAE,MAAM;IAMnC,IAAI,CAAC,SAAS,EAAE,mBAAmB;IAwDnC,KAAK,CAAC,SAAS,EAAE,mBAAmB;IA8BpC,OAAO,CAAC,QAAQ;CAYjB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Store } from '@tanstack/store';
|
|
2
|
+
import { InAppMessagesStoreState } from './types';
|
|
3
|
+
|
|
4
|
+
export type InAppMessagesStore = Store<InAppMessagesStoreState, (cb: InAppMessagesStoreState) => InAppMessagesStoreState>;
|
|
5
|
+
export declare function createStore(): Store<InAppMessagesStoreState, (cb: InAppMessagesStoreState) => InAppMessagesStoreState>;
|
|
6
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/clients/in-app-messages/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,MAAM,kBAAkB,GAAG,KAAK,CACpC,uBAAuB,EACvB,CAAC,EAAE,EAAE,uBAAuB,KAAK,uBAAuB,CACzD,CAAC;AAEF,wBAAgB,WAAW,6FAK1B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { GenericData, PageInfo, Tenant } from '@knocklabs/types';
|
|
2
|
+
import { NetworkStatus } from '../../networkStatus';
|
|
3
|
+
import { NotificationSource } from '../messages/interfaces';
|
|
4
|
+
|
|
5
|
+
export interface InAppMessage<TContent extends GenericData = GenericData, TData extends GenericData = GenericData, TTenantProperties = GenericData> {
|
|
6
|
+
__cursor: string;
|
|
7
|
+
id: string;
|
|
8
|
+
message_type: string;
|
|
9
|
+
schema_variant: string;
|
|
10
|
+
schema_version: string;
|
|
11
|
+
content: TContent;
|
|
12
|
+
data: TData | null;
|
|
13
|
+
inserted_at: string;
|
|
14
|
+
updated_at: string;
|
|
15
|
+
seen_at: string | null;
|
|
16
|
+
read_at: string | null;
|
|
17
|
+
interacted_at: string | null;
|
|
18
|
+
archived_at: string | null;
|
|
19
|
+
link_clicked_at: string | null;
|
|
20
|
+
source: NotificationSource;
|
|
21
|
+
tenant: Tenant<TTenantProperties>;
|
|
22
|
+
}
|
|
23
|
+
export interface InAppMessagesResponse<TContent extends GenericData = GenericData, TData extends GenericData = GenericData> {
|
|
24
|
+
entries: InAppMessage<TContent, TData>[];
|
|
25
|
+
pageInfo: PageInfo;
|
|
26
|
+
}
|
|
27
|
+
export interface InAppMessagesQueryInfo {
|
|
28
|
+
networkStatus: NetworkStatus;
|
|
29
|
+
loading: boolean;
|
|
30
|
+
data?: {
|
|
31
|
+
messageIds: string[];
|
|
32
|
+
pageInfo: PageInfo;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface InAppMessagesStoreState {
|
|
36
|
+
messages: Record<string, InAppMessage>;
|
|
37
|
+
queries: Record<string, InAppMessagesQueryInfo>;
|
|
38
|
+
}
|
|
39
|
+
export type InAppMessageEngagementStatus = "read" | "unread" | "seen" | "unseen" | "link_clicked" | "link_unclicked" | "interacted" | "uninteracted";
|
|
40
|
+
export interface InAppMessagesClientOptions {
|
|
41
|
+
order?: "asc" | "desc";
|
|
42
|
+
before?: string;
|
|
43
|
+
after?: string;
|
|
44
|
+
page_size?: number;
|
|
45
|
+
engagement_status?: InAppMessageEngagementStatus[];
|
|
46
|
+
tenant_id?: string | string[];
|
|
47
|
+
workflow_key?: string | string[];
|
|
48
|
+
workflow_categories?: string[];
|
|
49
|
+
archived?: "include" | "exclude" | "only";
|
|
50
|
+
trigger_data?: GenericData;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/clients/in-app-messages/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,WAAW,YAAY,CAC3B,QAAQ,SAAS,WAAW,GAAG,WAAW,EAC1C,KAAK,SAAS,WAAW,GAAG,WAAW,EACvC,iBAAiB,GAAG,WAAW;IAE/B,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,QAAQ,CAAC;IAClB,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB,CACpC,QAAQ,SAAS,WAAW,GAAG,WAAW,EAC1C,KAAK,SAAS,WAAW,GAAG,WAAW;IAEvC,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;IACzC,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE;QACL,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,EAAE,QAAQ,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACjD;AAED,MAAM,MAAM,4BAA4B,GACpC,MAAM,GACN,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,cAAc,GACd,gBAAgB,GAChB,YAAY,GACZ,cAAc,CAAC;AAEnB,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,4BAA4B,EAAE,CAAC;IAEnD,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE9B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEjC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAI1C,YAAY,CAAC,EAAE,WAAW,CAAC;CAC5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/clients/preferences/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,MAAM,sBAAsB,GAAG;KAClC,
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/clients/preferences/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,MAAM,sBAAsB,GAAG;KAClC,EAAE,IAAI,WAAW,CAAC,CAAC,EAAE,OAAO;CAC9B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GACjC,OAAO,GACP;IAAE,aAAa,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAE9C,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAC1C,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,UAAU,EAAE,mBAAmB,CAAC;IAChC,aAAa,EAAE,sBAAsB,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,mBAAmB,CAAC;IAChC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,aAAa,EAAE,sBAAsB,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { GenericData } from '@knocklabs/types';
|
|
2
2
|
import { ChannelData, User } from '../../interfaces';
|
|
3
3
|
import { default as Knock } from '../../knock';
|
|
4
|
+
import { InAppMessagesResponse } from '../in-app-messages';
|
|
4
5
|
import { GetPreferencesOptions, PreferenceOptions, PreferenceSet, SetPreferencesProperties } from '../preferences/interfaces';
|
|
5
|
-
import { GetChannelDataInput, SetChannelDataInput } from './interfaces';
|
|
6
|
+
import { GetChannelDataInput, GetInAppMessagesInput, SetChannelDataInput } from './interfaces';
|
|
6
7
|
|
|
7
8
|
declare class UserClient {
|
|
8
9
|
private instance;
|
|
@@ -14,6 +15,7 @@ declare class UserClient {
|
|
|
14
15
|
setPreferences(preferenceSet: SetPreferencesProperties, options?: PreferenceOptions): Promise<PreferenceSet>;
|
|
15
16
|
getChannelData<T = GenericData>(params: GetChannelDataInput): Promise<ChannelData<T>>;
|
|
16
17
|
setChannelData<T = GenericData>({ channelId, channelData, }: SetChannelDataInput): Promise<ChannelData<T>>;
|
|
18
|
+
getInAppMessages<TContent extends GenericData = GenericData, TData extends GenericData = GenericData>({ channelId, messageType, params }: GetInAppMessagesInput): Promise<InAppMessagesResponse<TContent, TData>>;
|
|
17
19
|
private handleResponse;
|
|
18
20
|
}
|
|
19
21
|
export default UserClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/clients/users/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/clients/users/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAItB,cAAM,UAAU;IACd,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,QAAQ,EAAE,KAAK;IAIrB,GAAG;IASH,QAAQ,CAAC,KAAK,GAAE,WAAgB;IAUhC,iBAAiB;IASjB,cAAc,CAClB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,aAAa,CAAC;IAYnB,cAAc,CAClB,aAAa,EAAE,wBAAwB,EACvC,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,aAAa,CAAC;IAYnB,cAAc,CAAC,CAAC,GAAG,WAAW,EAAE,MAAM,EAAE,mBAAmB;IAS3D,cAAc,CAAC,CAAC,GAAG,WAAW,EAAE,EACpC,SAAS,EACT,WAAW,GACZ,EAAE,mBAAmB;IAUhB,gBAAgB,CACpB,QAAQ,SAAS,WAAW,GAAG,WAAW,EAC1C,KAAK,SAAS,WAAW,GAAG,WAAW,EACvC,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,qBAAqB;IAU3D,OAAO,CAAC,cAAc;CAOvB;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GenericData } from '@knocklabs/types';
|
|
2
|
+
import { InAppMessagesClientOptions } from '../in-app-messages/types';
|
|
2
3
|
|
|
3
4
|
export interface SetChannelDataInput {
|
|
4
5
|
channelId: string;
|
|
@@ -7,4 +8,9 @@ export interface SetChannelDataInput {
|
|
|
7
8
|
export interface GetChannelDataInput {
|
|
8
9
|
channelId: string;
|
|
9
10
|
}
|
|
11
|
+
export interface GetInAppMessagesInput {
|
|
12
|
+
channelId: string;
|
|
13
|
+
messageType: string;
|
|
14
|
+
params: InAppMessagesClientOptions;
|
|
15
|
+
}
|
|
10
16
|
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/clients/users/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/clients/users/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,0BAA0B,CAAC;CACpC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export * from './clients/slack/interfaces';
|
|
|
12
12
|
export * from './clients/users';
|
|
13
13
|
export * from './clients/users/interfaces';
|
|
14
14
|
export * from './clients/messages';
|
|
15
|
+
export * from './clients/in-app-messages';
|
|
15
16
|
export * from './clients/messages/interfaces';
|
|
16
17
|
export * from './networkStatus';
|
|
17
18
|
export default Knock;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAEhC,eAAe,KAAK,CAAC;AACrB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAEhC,eAAe,KAAK,CAAC;AACrB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knocklabs/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0-rc.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",
|
|
@@ -47,35 +47,37 @@
|
|
|
47
47
|
"prepublishOnly": "npm run build"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@babel/cli": "^7.25.
|
|
51
|
-
"@babel/core": "^7.
|
|
50
|
+
"@babel/cli": "^7.25.7",
|
|
51
|
+
"@babel/core": "^7.25.7",
|
|
52
52
|
"@babel/plugin-proposal-class-properties": "^7.16.7",
|
|
53
53
|
"@babel/plugin-proposal-object-rest-spread": "^7.16.7",
|
|
54
|
-
"@babel/plugin-transform-runtime": "^7.
|
|
54
|
+
"@babel/plugin-transform-runtime": "^7.25.4",
|
|
55
55
|
"@babel/preset-env": "^7.16.7",
|
|
56
56
|
"@babel/preset-typescript": "^7.16.7",
|
|
57
57
|
"@types/jsonwebtoken": "^9.0.5",
|
|
58
58
|
"@typescript-eslint/eslint-plugin": "^6.20.0",
|
|
59
|
-
"@typescript-eslint/parser": "^
|
|
59
|
+
"@typescript-eslint/parser": "^8.8.1",
|
|
60
60
|
"cross-env": "^7.0.3",
|
|
61
61
|
"crypto": "^1.0.1",
|
|
62
62
|
"eslint": "^8.56.0",
|
|
63
63
|
"jsonwebtoken": "^9.0.2",
|
|
64
64
|
"prettier": "^3.1.0",
|
|
65
65
|
"rimraf": "^6.0.1",
|
|
66
|
-
"rollup": "^4.
|
|
67
|
-
"typescript": "^5.
|
|
66
|
+
"rollup": "^4.22.5",
|
|
67
|
+
"typescript": "^5.6.2",
|
|
68
68
|
"vite": "^5.0.0",
|
|
69
69
|
"vitest": "^2.0.5"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"@babel/runtime": "^7.25.6",
|
|
73
|
-
"@knocklabs/types": "^0.1.
|
|
73
|
+
"@knocklabs/types": "^0.1.5-rc.0",
|
|
74
|
+
"@tanstack/store": "^0.5.5",
|
|
74
75
|
"@types/phoenix": "^1.5.4",
|
|
75
76
|
"axios": "^1.7.4",
|
|
76
|
-
"axios-retry": "^
|
|
77
|
+
"axios-retry": "^4.5.0",
|
|
77
78
|
"eventemitter2": "^6.4.5",
|
|
78
79
|
"jwt-decode": "^4.0.0",
|
|
80
|
+
"nanoid": "^3.0.0",
|
|
79
81
|
"phoenix": "1.6.16",
|
|
80
82
|
"zustand": "^3.7.2"
|
|
81
83
|
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import Knock from "../../knock";
|
|
2
|
+
import { NetworkStatus } from "../../networkStatus";
|
|
3
|
+
|
|
4
|
+
import { InAppMessagesClient } from "./message-client";
|
|
5
|
+
import { InAppMessageSocketManager } from "./socket-manager";
|
|
6
|
+
import { InAppMessagesStore, createStore } from "./store";
|
|
7
|
+
import {
|
|
8
|
+
InAppMessage,
|
|
9
|
+
InAppMessagesClientOptions,
|
|
10
|
+
InAppMessagesQueryInfo,
|
|
11
|
+
InAppMessagesResponse,
|
|
12
|
+
} from "./types";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Manages the configuration for an in app channel.
|
|
16
|
+
* Stores all fetched messages to support optimistic updates.
|
|
17
|
+
*/
|
|
18
|
+
export class InAppMessagesChannelClient {
|
|
19
|
+
public store: InAppMessagesStore;
|
|
20
|
+
|
|
21
|
+
private socketManager: InAppMessageSocketManager | undefined;
|
|
22
|
+
|
|
23
|
+
constructor(
|
|
24
|
+
readonly knock: Knock,
|
|
25
|
+
readonly channelId: string,
|
|
26
|
+
readonly defaultOptions: InAppMessagesClientOptions = {},
|
|
27
|
+
) {
|
|
28
|
+
this.store = createStore();
|
|
29
|
+
|
|
30
|
+
// Initialize a socket manager for the in-app channel client, which there
|
|
31
|
+
// should be one per in-app channel client but it's abstracted out as a
|
|
32
|
+
// separate module for the organization/encapsulation purposes.
|
|
33
|
+
const { socket } = this.knock.client();
|
|
34
|
+
if (socket) {
|
|
35
|
+
this.socketManager = new InAppMessageSocketManager(socket);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
this.knock.log(`[IAM] Initialized a client on channel ${channelId}`);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ----------------------------------------------
|
|
42
|
+
// Store helpers
|
|
43
|
+
// ----------------------------------------------
|
|
44
|
+
|
|
45
|
+
setMessageAttrs(messageIds: string[], attrs: Partial<InAppMessage>) {
|
|
46
|
+
this.store.setState((state) => ({
|
|
47
|
+
...state,
|
|
48
|
+
messages: {
|
|
49
|
+
...state.messages,
|
|
50
|
+
...messageIds.reduce<Record<string, InAppMessage>>((messages, id) => {
|
|
51
|
+
if (state.messages[id]) {
|
|
52
|
+
messages[id] = {
|
|
53
|
+
...state.messages[id],
|
|
54
|
+
...attrs,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return messages;
|
|
58
|
+
}, {}),
|
|
59
|
+
},
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
setQueryResponse(queryKey: string, response: InAppMessagesResponse) {
|
|
64
|
+
const queryInfo: InAppMessagesQueryInfo = {
|
|
65
|
+
loading: false,
|
|
66
|
+
networkStatus: NetworkStatus.ready,
|
|
67
|
+
data: {
|
|
68
|
+
messageIds: response.entries.map((iam) => iam.id),
|
|
69
|
+
pageInfo: response.pageInfo,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
this.store.setState((state) => {
|
|
74
|
+
return {
|
|
75
|
+
...state,
|
|
76
|
+
// Store new messages in store
|
|
77
|
+
messages: response.entries.reduce((messages, message) => {
|
|
78
|
+
messages[message.id] = message;
|
|
79
|
+
return messages;
|
|
80
|
+
}, state.messages),
|
|
81
|
+
// Store query results
|
|
82
|
+
queries: {
|
|
83
|
+
...state.queries,
|
|
84
|
+
[queryKey]: queryInfo,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
setQueryStatus(
|
|
91
|
+
queryKey: string,
|
|
92
|
+
status: Pick<InAppMessagesQueryInfo, "loading" | "networkStatus">,
|
|
93
|
+
) {
|
|
94
|
+
this.store.setState((state) => ({
|
|
95
|
+
...state,
|
|
96
|
+
queries: {
|
|
97
|
+
...state.queries,
|
|
98
|
+
[queryKey]: {
|
|
99
|
+
...state.queries[queryKey],
|
|
100
|
+
...status,
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* Socket
|
|
108
|
+
*/
|
|
109
|
+
|
|
110
|
+
subscribe(client: InAppMessagesClient) {
|
|
111
|
+
if (!this.socketManager) return;
|
|
112
|
+
this.knock.log(
|
|
113
|
+
`[InAppMessagesClient] Subscribe a client ${client.referenceId} to socket events`,
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
// Pass the unsub func back to iam client so it can be used when
|
|
117
|
+
// unsubscribing.
|
|
118
|
+
return this.socketManager.join(client);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
unsubscribe(client: InAppMessagesClient) {
|
|
122
|
+
if (!this.socketManager) return;
|
|
123
|
+
this.knock.log(
|
|
124
|
+
`[InAppMessagesClient] Unsubscribe a client ${client.referenceId}`,
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
this.socketManager.leave(client);
|
|
128
|
+
}
|
|
129
|
+
}
|