@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.
Files changed (55) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cjs/clients/in-app-messages/channel-client.js +2 -0
  3. package/dist/cjs/clients/in-app-messages/channel-client.js.map +1 -0
  4. package/dist/cjs/clients/in-app-messages/message-client.js +2 -0
  5. package/dist/cjs/clients/in-app-messages/message-client.js.map +1 -0
  6. package/dist/cjs/clients/in-app-messages/socket-manager.js +2 -0
  7. package/dist/cjs/clients/in-app-messages/socket-manager.js.map +1 -0
  8. package/dist/cjs/clients/in-app-messages/store.js +2 -0
  9. package/dist/cjs/clients/in-app-messages/store.js.map +1 -0
  10. package/dist/cjs/clients/users/index.js +1 -1
  11. package/dist/cjs/clients/users/index.js.map +1 -1
  12. package/dist/cjs/index.js +1 -1
  13. package/dist/esm/clients/in-app-messages/channel-client.mjs +80 -0
  14. package/dist/esm/clients/in-app-messages/channel-client.mjs.map +1 -0
  15. package/dist/esm/clients/in-app-messages/message-client.mjs +153 -0
  16. package/dist/esm/clients/in-app-messages/message-client.mjs.map +1 -0
  17. package/dist/esm/clients/in-app-messages/socket-manager.mjs +83 -0
  18. package/dist/esm/clients/in-app-messages/socket-manager.mjs.map +1 -0
  19. package/dist/esm/clients/in-app-messages/store.mjs +11 -0
  20. package/dist/esm/clients/in-app-messages/store.mjs.map +1 -0
  21. package/dist/esm/clients/users/index.mjs +28 -20
  22. package/dist/esm/clients/users/index.mjs.map +1 -1
  23. package/dist/esm/index.mjs +11 -7
  24. package/dist/esm/index.mjs.map +1 -1
  25. package/dist/types/clients/in-app-messages/channel-client.d.ts +23 -0
  26. package/dist/types/clients/in-app-messages/channel-client.d.ts.map +1 -0
  27. package/dist/types/clients/in-app-messages/index.d.ts +4 -0
  28. package/dist/types/clients/in-app-messages/index.d.ts.map +1 -0
  29. package/dist/types/clients/in-app-messages/message-client.d.ts +52 -0
  30. package/dist/types/clients/in-app-messages/message-client.d.ts.map +1 -0
  31. package/dist/types/clients/in-app-messages/socket-manager.d.ts +27 -0
  32. package/dist/types/clients/in-app-messages/socket-manager.d.ts.map +1 -0
  33. package/dist/types/clients/in-app-messages/store.d.ts +6 -0
  34. package/dist/types/clients/in-app-messages/store.d.ts.map +1 -0
  35. package/dist/types/clients/in-app-messages/types.d.ts +52 -0
  36. package/dist/types/clients/in-app-messages/types.d.ts.map +1 -0
  37. package/dist/types/clients/preferences/interfaces.d.ts +1 -1
  38. package/dist/types/clients/preferences/interfaces.d.ts.map +1 -1
  39. package/dist/types/clients/users/index.d.ts +3 -1
  40. package/dist/types/clients/users/index.d.ts.map +1 -1
  41. package/dist/types/clients/users/interfaces.d.ts +6 -0
  42. package/dist/types/clients/users/interfaces.d.ts.map +1 -1
  43. package/dist/types/index.d.ts +1 -0
  44. package/dist/types/index.d.ts.map +1 -1
  45. package/package.json +11 -9
  46. package/src/clients/in-app-messages/channel-client.ts +129 -0
  47. package/src/clients/in-app-messages/index.ts +3 -0
  48. package/src/clients/in-app-messages/message-client.ts +271 -0
  49. package/src/clients/in-app-messages/socket-manager.ts +187 -0
  50. package/src/clients/in-app-messages/store.ts +15 -0
  51. package/src/clients/in-app-messages/types.ts +79 -0
  52. package/src/clients/preferences/interfaces.ts +1 -1
  53. package/src/clients/users/index.ts +19 -1
  54. package/src/clients/users/interfaces.ts +8 -0
  55. package/src/index.ts +1 -0
@@ -1,10 +1,10 @@
1
- var i = Object.defineProperty;
2
- var u = (s, e, t) => e in s ? i(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t;
3
- var a = (s, e, t) => u(s, typeof e != "symbol" ? e + "" : e, t);
4
- const r = "default";
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
- a(this, "instance");
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 t = await this.instance.client().makeRequest({
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(t);
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 t = e.preferenceSet || r, n = await this.instance.client().makeRequest({
33
+ const s = e.preferenceSet || i, t = await this.instance.client().makeRequest({
34
34
  method: "GET",
35
- url: `/v1/users/${this.instance.userId}/preferences/${t}`,
35
+ url: `/v1/users/${this.instance.userId}/preferences/${s}`,
36
36
  params: { tenant: e.tenant }
37
37
  });
38
- return this.handleResponse(n);
38
+ return this.handleResponse(t);
39
39
  }
40
- async setPreferences(e, t = {}) {
41
- const n = t.preferenceSet || r, c = await this.instance.client().makeRequest({
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/${n}`,
43
+ url: `/v1/users/${this.instance.userId}/preferences/${t}`,
44
44
  data: e
45
45
  });
46
- return this.handleResponse(c);
46
+ return this.handleResponse(a);
47
47
  }
48
48
  async getChannelData(e) {
49
- const t = await this.instance.client().makeRequest({
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(t);
53
+ return this.handleResponse(s);
54
54
  }
55
55
  async setChannelData({
56
56
  channelId: e,
57
- channelData: t
57
+ channelData: s
58
58
  }) {
59
- const n = await this.instance.client().makeRequest({
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: t }
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(n);
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 { GetChannelDataInput, SetChannelDataInput } 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 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","response"],"mappings":";;;AAcA,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,EAEQ,eAAkBQ,GAAuB;AAC3C,QAAAA,EAAS,eAAe;AAC1B,YAAM,IAAI,MAAMA,EAAS,SAASA,EAAS,IAAI;AAGjD,WAAOA,EAAS;AAAA,EAClB;AACF;"}
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;"}
@@ -1,14 +1,18 @@
1
- import { default as f } from "./clients/feed/index.mjs";
1
+ import { default as p } from "./clients/feed/index.mjs";
2
2
  import t from "./knock.mjs";
3
- import { TENANT_OBJECT_COLLECTION as m } from "./clients/objects/constants.mjs";
4
- import { NetworkStatus as s, isRequestInFlight as d } from "./networkStatus.mjs";
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
- f as FeedClient,
9
- s as NetworkStatus,
10
- m as TENANT_OBJECT_COLLECTION,
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
- d as isRequestInFlight
16
+ i as isRequestInFlight
13
17
  };
14
18
  //# sourceMappingURL=index.mjs.map
@@ -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,4 @@
1
+ export * from './channel-client';
2
+ export * from './message-client';
3
+ export * from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 +1,7 @@
1
1
  import { ChannelType } from '@knocklabs/types';
2
2
 
3
3
  export type ChannelTypePreferences = {
4
- [K in ChannelType]?: boolean;
4
+ [_K in ChannelType]?: boolean;
5
5
  };
6
6
  export type WorkflowPreferenceSetting = boolean | {
7
7
  channel_types: ChannelTypePreferences;
@@ -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,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,OAAO;CAC7B,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
+ {"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,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxE,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;IAUtB,OAAO,CAAC,cAAc;CAOvB;AAED,eAAe,UAAU,CAAC"}
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"}
@@ -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.10.13",
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.6",
51
- "@babel/core": "^7.20.0",
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.16.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": "^6.20.0",
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.21.0",
67
- "typescript": "^5.5.4",
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.4",
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": "^3.1.9",
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
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./channel-client";
2
+ export * from "./message-client";
3
+ export * from "./types";