@knocklabs/client 0.10.17 → 0.11.0-rc-2.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 (81) hide show
  1. package/CHANGELOG.md +6 -15
  2. package/dist/cjs/api.js +1 -1
  3. package/dist/cjs/api.js.map +1 -1
  4. package/dist/cjs/clients/feed/feed.js +1 -1
  5. package/dist/cjs/clients/feed/feed.js.map +1 -1
  6. package/dist/cjs/clients/feed/store.js +1 -1
  7. package/dist/cjs/clients/feed/store.js.map +1 -1
  8. package/dist/cjs/clients/in-app-messages/channel-client.js +2 -0
  9. package/dist/cjs/clients/in-app-messages/channel-client.js.map +1 -0
  10. package/dist/cjs/clients/in-app-messages/message-client.js +2 -0
  11. package/dist/cjs/clients/in-app-messages/message-client.js.map +1 -0
  12. package/dist/cjs/clients/in-app-messages/socket-manager.js +2 -0
  13. package/dist/cjs/clients/in-app-messages/socket-manager.js.map +1 -0
  14. package/dist/cjs/clients/in-app-messages/store.js +2 -0
  15. package/dist/cjs/clients/in-app-messages/store.js.map +1 -0
  16. package/dist/cjs/clients/users/index.js +1 -1
  17. package/dist/cjs/clients/users/index.js.map +1 -1
  18. package/dist/cjs/index.js +1 -1
  19. package/dist/esm/api.mjs +14 -9
  20. package/dist/esm/api.mjs.map +1 -1
  21. package/dist/esm/clients/in-app-messages/channel-client.mjs +80 -0
  22. package/dist/esm/clients/in-app-messages/channel-client.mjs.map +1 -0
  23. package/dist/esm/clients/in-app-messages/message-client.mjs +157 -0
  24. package/dist/esm/clients/in-app-messages/message-client.mjs.map +1 -0
  25. package/dist/esm/clients/in-app-messages/socket-manager.mjs +83 -0
  26. package/dist/esm/clients/in-app-messages/socket-manager.mjs.map +1 -0
  27. package/dist/esm/clients/in-app-messages/store.mjs +11 -0
  28. package/dist/esm/clients/in-app-messages/store.mjs.map +1 -0
  29. package/dist/esm/clients/users/index.mjs +28 -20
  30. package/dist/esm/clients/users/index.mjs.map +1 -1
  31. package/dist/esm/index.mjs +11 -7
  32. package/dist/esm/index.mjs.map +1 -1
  33. package/dist/types/api.d.ts +1 -0
  34. package/dist/types/api.d.ts.map +1 -1
  35. package/dist/types/clients/feed/feed.d.ts +1 -0
  36. package/dist/types/clients/feed/index.d.ts +1 -0
  37. package/dist/types/clients/feed/interfaces.d.ts +1 -0
  38. package/dist/types/clients/feed/store.d.ts +1 -0
  39. package/dist/types/clients/feed/types.d.ts +1 -0
  40. package/dist/types/clients/feed/utils.d.ts +1 -0
  41. package/dist/types/clients/in-app-messages/channel-client.d.ts +23 -0
  42. package/dist/types/clients/in-app-messages/channel-client.d.ts.map +1 -0
  43. package/dist/types/clients/in-app-messages/index.d.ts +4 -0
  44. package/dist/types/clients/in-app-messages/index.d.ts.map +1 -0
  45. package/dist/types/clients/in-app-messages/message-client.d.ts +52 -0
  46. package/dist/types/clients/in-app-messages/message-client.d.ts.map +1 -0
  47. package/dist/types/clients/in-app-messages/socket-manager.d.ts +27 -0
  48. package/dist/types/clients/in-app-messages/socket-manager.d.ts.map +1 -0
  49. package/dist/types/clients/in-app-messages/store.d.ts +6 -0
  50. package/dist/types/clients/in-app-messages/store.d.ts.map +1 -0
  51. package/dist/types/clients/in-app-messages/types.d.ts +54 -0
  52. package/dist/types/clients/in-app-messages/types.d.ts.map +1 -0
  53. package/dist/types/clients/messages/index.d.ts +1 -0
  54. package/dist/types/clients/messages/interfaces.d.ts +2 -1
  55. package/dist/types/clients/messages/interfaces.d.ts.map +1 -1
  56. package/dist/types/clients/objects/index.d.ts +1 -0
  57. package/dist/types/clients/preferences/index.d.ts +1 -0
  58. package/dist/types/clients/preferences/interfaces.d.ts +7 -9
  59. package/dist/types/clients/preferences/interfaces.d.ts.map +1 -1
  60. package/dist/types/clients/slack/index.d.ts +1 -0
  61. package/dist/types/clients/users/index.d.ts +4 -1
  62. package/dist/types/clients/users/index.d.ts.map +1 -1
  63. package/dist/types/clients/users/interfaces.d.ts +9 -0
  64. package/dist/types/clients/users/interfaces.d.ts.map +1 -1
  65. package/dist/types/index.d.ts +2 -0
  66. package/dist/types/index.d.ts.map +1 -1
  67. package/dist/types/interfaces.d.ts +1 -0
  68. package/dist/types/knock.d.ts +1 -0
  69. package/package.json +15 -13
  70. package/src/api.ts +9 -2
  71. package/src/clients/in-app-messages/channel-client.ts +129 -0
  72. package/src/clients/in-app-messages/index.ts +3 -0
  73. package/src/clients/in-app-messages/message-client.ts +275 -0
  74. package/src/clients/in-app-messages/socket-manager.ts +187 -0
  75. package/src/clients/in-app-messages/store.ts +15 -0
  76. package/src/clients/in-app-messages/types.ts +82 -0
  77. package/src/clients/messages/interfaces.ts +1 -9
  78. package/src/clients/preferences/interfaces.ts +6 -11
  79. package/src/clients/users/index.ts +19 -1
  80. package/src/clients/users/interfaces.ts +10 -0
  81. package/src/index.ts +1 -0
@@ -1,4 +1,5 @@
1
1
  import { FeedItem } from './interfaces';
2
+
2
3
  export declare function deduplicateItems(items: FeedItem[]): FeedItem[];
3
4
  export declare function sortItems(items: FeedItem[]): FeedItem<import('@knocklabs/types').GenericData>[];
4
5
  //# sourceMappingURL=utils.d.ts.map
@@ -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;IAmDD,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;gBAxMrC,OAAO;eACR,KAAK;;gBALJ,IAAI;;;IAwNlB,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,54 @@
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
+ type InAppMessageEngagementStatus = "read" | "unread" | "seen" | "unseen" | "link_clicked" | "link_unclicked" | "interacted" | "uninteracted";
40
+ export interface InAppMessagesClientOptions {
41
+ order?: "asc" | "desc";
42
+ engagement_status?: InAppMessageEngagementStatus[];
43
+ schema_version?: string;
44
+ tenant_id?: string | string[];
45
+ workflow_key?: string | string[];
46
+ workflow_categories?: string[];
47
+ archived?: "include" | "exclude" | "only";
48
+ trigger_data?: GenericData;
49
+ before?: string;
50
+ after?: string;
51
+ page_size?: number;
52
+ }
53
+ export {};
54
+ //# 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,KAAK,4BAA4B,GAC7B,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,iBAAiB,CAAC,EAAE,4BAA4B,EAAE,CAAC;IAInD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,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;IAE1C,YAAY,CAAC,EAAE,WAAW,CAAC;IAE3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -1,6 +1,7 @@
1
1
  import { BulkOperation } from '../../interfaces';
2
2
  import { default as Knock } from '../../knock';
3
3
  import { BulkUpdateMessagesInChannelProperties, Message, MessageEngagementStatus, UpdateMessageStatusOptions } from './interfaces';
4
+
4
5
  declare class MessageClient {
5
6
  private knock;
6
7
  constructor(knock: Knock);
@@ -1,5 +1,6 @@
1
1
  import { GenericData } from '@knocklabs/types';
2
2
  import { RecipientRef } from '../..';
3
+
3
4
  export type MessageDeliveryStatus = "queued" | "sent" | "delivered" | "delivery_attempted" | "undelivered" | "not_sent";
4
5
  export interface NotificationSource {
5
6
  key: string;
@@ -31,7 +32,7 @@ export type BulkUpdateMessagesInChannelProperties = {
31
32
  status: "seen" | "read" | "archive";
32
33
  options: {
33
34
  user_ids?: string[];
34
- engagement_status?: "seen" | "read" | "archived" | "unseen" | "unread" | "unarchived" | "interacted" | "link_clicked";
35
+ engagement_status?: "seen" | "read" | "unseen" | "unread";
35
36
  archived?: "exclude" | "include" | "only";
36
37
  has_tenant?: boolean;
37
38
  tenants?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/clients/messages/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,GACR,MAAM,GACN,WAAW,GACX,oBAAoB,GACpB,aAAa,GACb,UAAU,CAAC;AAEf,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,uBAAuB,GAC/B,MAAM,GACN,MAAM,GACN,YAAY,GACZ,UAAU,CAAC;AAEf,MAAM,WAAW,OAAO,CAAC,CAAC,GAAG,WAAW;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,mBAAmB,EAAE,uBAAuB,EAAE,CAAC;IAC/C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,QAAQ,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,MAAM,qCAAqC,GAAG;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,iBAAiB,CAAC,EACd,MAAM,GACN,MAAM,GACN,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,YAAY,GACZ,cAAc,CAAC;QACnB,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;QAC1C,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,CAAC"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/clients/messages/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,GACR,MAAM,GACN,WAAW,GACX,oBAAoB,GACpB,aAAa,GACb,UAAU,CAAC;AAEf,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,uBAAuB,GAC/B,MAAM,GACN,MAAM,GACN,YAAY,GACZ,UAAU,CAAC;AAEf,MAAM,WAAW,OAAO,CAAC,CAAC,GAAG,WAAW;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,mBAAmB,EAAE,uBAAuB,EAAE,CAAC;IAC/C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,QAAQ,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,MAAM,qCAAqC,GAAG;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAC1D,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;QAC1C,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { GenericData } from '@knocklabs/types';
2
2
  import { ChannelData } from '../../interfaces';
3
3
  import { default as Knock } from '../../knock';
4
+
4
5
  type GetChannelDataInput = {
5
6
  objectId: string;
6
7
  collection: string;
@@ -1,6 +1,7 @@
1
1
  import { ChannelType } from '@knocklabs/types';
2
2
  import { default as Knock } from '../../knock';
3
3
  import { ChannelTypePreferences, PreferenceOptions, PreferenceSet, SetPreferencesProperties, WorkflowPreferenceSetting, WorkflowPreferences } from './interfaces';
4
+
4
5
  declare class Preferences {
5
6
  private instance;
6
7
  constructor(instance: Knock);
@@ -1,13 +1,11 @@
1
- import { ChannelType, Condition } from '@knocklabs/types';
2
- export type ConditionalPreferenceSettings = {
3
- conditions: Condition[];
4
- };
1
+ import { ChannelType } from '@knocklabs/types';
2
+
5
3
  export type ChannelTypePreferences = {
6
- [_K in ChannelType]?: boolean | ConditionalPreferenceSettings;
4
+ [_K in ChannelType]?: boolean;
7
5
  };
8
6
  export type WorkflowPreferenceSetting = boolean | {
9
7
  channel_types: ChannelTypePreferences;
10
- } | ConditionalPreferenceSettings;
8
+ };
11
9
  export type WorkflowPreferences = Partial<Record<string, WorkflowPreferenceSetting>>;
12
10
  export interface SetPreferencesProperties {
13
11
  workflows: WorkflowPreferences;
@@ -16,9 +14,9 @@ export interface SetPreferencesProperties {
16
14
  }
17
15
  export interface PreferenceSet {
18
16
  id: string;
19
- categories: WorkflowPreferences | null;
20
- workflows: WorkflowPreferences | null;
21
- channel_types: ChannelTypePreferences | null;
17
+ categories: WorkflowPreferences;
18
+ workflows: WorkflowPreferences;
19
+ channel_types: ChannelTypePreferences;
22
20
  }
23
21
  export interface PreferenceOptions {
24
22
  preferenceSet?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/clients/preferences/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,MAAM,6BAA6B,GAAG;IAC1C,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;KAClC,EAAE,IAAI,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,6BAA6B;CAC9D,CAAC;AAEF,MAAM,MAAM,yBAAyB,GACjC,OAAO,GACP;IAAE,aAAa,EAAE,sBAAsB,CAAA;CAAE,GACzC,6BAA6B,CAAC;AAElC,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,GAAG,IAAI,CAAC;IACvC,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACtC,aAAa,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAC9C;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,5 +1,6 @@
1
1
  import { default as Knock } from '../../knock';
2
2
  import { AuthCheckInput, GetSlackChannelsInput, GetSlackChannelsResponse, RevokeAccessTokenInput } from './interfaces';
3
+
3
4
  declare class SlackClient {
4
5
  private instance;
5
6
  constructor(instance: Knock);
@@ -1,8 +1,10 @@
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';
7
+
6
8
  declare class UserClient {
7
9
  private instance;
8
10
  constructor(instance: Knock);
@@ -13,6 +15,7 @@ declare class UserClient {
13
15
  setPreferences(preferenceSet: SetPreferencesProperties, options?: PreferenceOptions): Promise<PreferenceSet>;
14
16
  getChannelData<T = GenericData>(params: GetChannelDataInput): Promise<ChannelData<T>>;
15
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>>;
16
19
  private handleResponse;
17
20
  }
18
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,6 @@
1
1
  import { GenericData } from '@knocklabs/types';
2
+ import { InAppMessagesClientOptions } from '../in-app-messages/types';
3
+
2
4
  export interface SetChannelDataInput {
3
5
  channelId: string;
4
6
  channelData: GenericData;
@@ -6,4 +8,11 @@ export interface SetChannelDataInput {
6
8
  export interface GetChannelDataInput {
7
9
  channelId: string;
8
10
  }
11
+ export interface GetInAppMessagesInput {
12
+ channelId: string;
13
+ messageType: string;
14
+ params: Omit<InAppMessagesClientOptions, "trigger_data"> & {
15
+ trigger_data: string;
16
+ };
17
+ }
9
18
  //# 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,IAAI,CAAC,0BAA0B,EAAE,cAAc,CAAC,GAAG;QACzD,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH"}
@@ -1,5 +1,6 @@
1
1
  import { default as FeedClient, Feed } from './clients/feed';
2
2
  import { default as Knock } from './knock';
3
+
3
4
  export * from './interfaces';
4
5
  export * from './clients/feed/types';
5
6
  export * from './clients/feed/interfaces';
@@ -11,6 +12,7 @@ export * from './clients/slack/interfaces';
11
12
  export * from './clients/users';
12
13
  export * from './clients/users/interfaces';
13
14
  export * from './clients/messages';
15
+ export * from './clients/in-app-messages';
14
16
  export * from './clients/messages/interfaces';
15
17
  export * from './networkStatus';
16
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"}
@@ -1,5 +1,6 @@
1
1
  import { GenericData } from '@knocklabs/types';
2
2
  import { JwtPayload } from 'jwt-decode';
3
+
3
4
  export type LogLevel = "debug";
4
5
  export interface KnockOptions {
5
6
  host?: string;
@@ -6,6 +6,7 @@ import { default as Preferences } from './clients/preferences';
6
6
  import { default as SlackClient } from './clients/slack';
7
7
  import { default as UserClient } from './clients/users';
8
8
  import { AuthenticateOptions, KnockOptions, LogLevel } from './interfaces';
9
+
9
10
  declare class Knock {
10
11
  readonly apiKey: string;
11
12
  host: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knocklabs/client",
3
- "version": "0.10.17",
3
+ "version": "0.11.0-rc-2.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,36 +47,38 @@
47
47
  "prepublishOnly": "npm run build"
48
48
  },
49
49
  "devDependencies": {
50
- "@babel/cli": "^7.26.4",
51
- "@babel/core": "^7.26.0",
50
+ "@babel/cli": "^7.25.7",
51
+ "@babel/core": "^7.25.8",
52
52
  "@babel/plugin-proposal-class-properties": "^7.16.7",
53
53
  "@babel/plugin-proposal-object-rest-spread": "^7.16.7",
54
54
  "@babel/plugin-transform-runtime": "^7.25.4",
55
- "@babel/preset-env": "^7.26.0",
55
+ "@babel/preset-env": "^7.16.7",
56
56
  "@babel/preset-typescript": "^7.16.7",
57
57
  "@types/jsonwebtoken": "^9.0.5",
58
- "@typescript-eslint/eslint-plugin": "^8.19.1",
59
- "@typescript-eslint/parser": "^8.16.0",
58
+ "@typescript-eslint/eslint-plugin": "^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
- "prettier": "^3.4.2",
64
+ "prettier": "^3.1.0",
65
65
  "rimraf": "^6.0.1",
66
- "rollup": "^4.27.4",
66
+ "rollup": "^4.24.2",
67
67
  "typescript": "^5.6.3",
68
68
  "vite": "^5.0.0",
69
69
  "vitest": "^2.1.4"
70
70
  },
71
71
  "dependencies": {
72
- "@babel/runtime": "^7.26.0",
73
- "@knocklabs/types": "^0.1.5",
74
- "@types/phoenix": "^1.6.6",
75
- "axios": "^1.7.9",
72
+ "@babel/runtime": "^7.25.6",
73
+ "@knocklabs/types": "^0.1.5-rc-2.0",
74
+ "@tanstack/store": "^0.5.5",
75
+ "@types/phoenix": "^1.5.4",
76
+ "axios": "^1.7.4",
76
77
  "axios-retry": "^4.5.0",
77
78
  "eventemitter2": "^6.4.5",
78
79
  "jwt-decode": "^4.0.0",
79
- "phoenix": "1.7.14",
80
+ "nanoid": "^3.0.0",
81
+ "phoenix": "1.6.16",
80
82
  "zustand": "^3.7.2"
81
83
  }
82
84
  }
package/src/api.ts CHANGED
@@ -30,8 +30,15 @@ class ApiClient {
30
30
  this.apiKey = options.apiKey;
31
31
  this.userToken = options.userToken || null;
32
32
 
33
- // Create a retryable axios client
34
- this.axiosClient = axios.create({
33
+ // Create a retryable axios client, but account for issues where the axios export is not
34
+ // the default in certain bundlers (Webpack).
35
+ //
36
+ // NOTE: This is a temporary fix that exists because of this issue:
37
+ // https://github.com/axios/axios/issues/6591
38
+ const axiosInstance = // @ts-expect-error Fixing the issue described above
39
+ (axios.default ? axios.default : axios) as AxiosStatic;
40
+
41
+ this.axiosClient = axiosInstance.create({
35
42
  baseURL: this.host,
36
43
  headers: {
37
44
  Accept: "application/json",
@@ -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";