@knocklabs/client 0.10.10 → 0.10.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/api.js +1 -1
- package/dist/cjs/api.js.map +1 -1
- package/dist/cjs/clients/feed/feed.js +1 -1
- package/dist/cjs/clients/feed/feed.js.map +1 -1
- package/dist/cjs/clients/feed/index.js +1 -1
- package/dist/cjs/clients/feed/index.js.map +1 -1
- package/dist/cjs/clients/feed/store.js +1 -1
- package/dist/cjs/clients/feed/store.js.map +1 -1
- package/dist/cjs/clients/messages/index.js +1 -1
- package/dist/cjs/clients/messages/index.js.map +1 -1
- package/dist/cjs/clients/objects/index.js +1 -1
- package/dist/cjs/clients/objects/index.js.map +1 -1
- package/dist/cjs/clients/preferences/index.js +1 -1
- package/dist/cjs/clients/preferences/index.js.map +1 -1
- package/dist/cjs/clients/slack/index.js +1 -1
- package/dist/cjs/clients/slack/index.js.map +1 -1
- package/dist/cjs/clients/users/index.js +1 -1
- package/dist/cjs/clients/users/index.js.map +1 -1
- package/dist/cjs/knock.js +1 -1
- package/dist/cjs/knock.js.map +1 -1
- package/dist/esm/api.mjs +1 -1
- package/dist/esm/clients/feed/feed.mjs +64 -60
- package/dist/esm/clients/feed/feed.mjs.map +1 -1
- package/dist/esm/clients/feed/index.mjs +1 -1
- package/dist/esm/clients/feed/store.mjs +22 -18
- package/dist/esm/clients/feed/store.mjs.map +1 -1
- package/dist/esm/clients/messages/index.mjs +23 -22
- package/dist/esm/clients/messages/index.mjs.map +1 -1
- package/dist/esm/clients/objects/index.mjs +1 -1
- package/dist/esm/clients/preferences/index.mjs +1 -1
- package/dist/esm/clients/slack/index.mjs +1 -1
- package/dist/esm/clients/users/index.mjs +1 -1
- package/dist/esm/knock.mjs +2 -3
- package/dist/esm/knock.mjs.map +1 -1
- package/dist/types/api.d.ts +3 -2
- package/dist/types/clients/feed/feed.d.ts +16 -15
- package/dist/types/clients/feed/feed.d.ts.map +1 -1
- package/dist/types/clients/feed/index.d.ts +4 -3
- package/dist/types/clients/feed/interfaces.d.ts +5 -4
- package/dist/types/clients/feed/store.d.ts +3 -2
- package/dist/types/clients/feed/store.d.ts.map +1 -1
- package/dist/types/clients/feed/types.d.ts +4 -3
- package/dist/types/clients/feed/utils.d.ts +3 -2
- package/dist/types/clients/messages/index.d.ts +6 -5
- package/dist/types/clients/messages/index.d.ts.map +1 -1
- package/dist/types/clients/messages/interfaces.d.ts +6 -2
- package/dist/types/clients/messages/interfaces.d.ts.map +1 -1
- package/dist/types/clients/objects/index.d.ts +4 -3
- package/dist/types/clients/preferences/index.d.ts +4 -3
- package/dist/types/clients/preferences/interfaces.d.ts +2 -1
- package/dist/types/clients/slack/index.d.ts +3 -2
- package/dist/types/clients/users/index.d.ts +6 -5
- package/dist/types/clients/users/interfaces.d.ts +2 -1
- package/dist/types/index.d.ts +16 -15
- package/dist/types/interfaces.d.ts +3 -2
- package/dist/types/knock.d.ts +9 -8
- package/package.json +5 -5
- package/src/clients/feed/feed.ts +11 -3
- package/src/clients/feed/store.ts +7 -1
- package/src/clients/messages/index.ts +15 -1
- package/src/clients/messages/interfaces.ts +4 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
class
|
|
1
|
+
var o = Object.defineProperty;
|
|
2
|
+
var l = (s, e, t) => e in s ? o(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t;
|
|
3
|
+
var d = (s, e, t) => l(s, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
class u {
|
|
5
5
|
constructor(e) {
|
|
6
|
-
|
|
6
|
+
d(this, "knock");
|
|
7
7
|
this.knock = e;
|
|
8
8
|
}
|
|
9
9
|
async get(e) {
|
|
@@ -13,44 +13,45 @@ class c {
|
|
|
13
13
|
});
|
|
14
14
|
return this.handleResponse(t);
|
|
15
15
|
}
|
|
16
|
-
async updateStatus(e, t) {
|
|
17
|
-
const
|
|
16
|
+
async updateStatus(e, t, a) {
|
|
17
|
+
const n = t === "interacted" && a ? { metadata: a.metadata } : void 0, r = await this.knock.client().makeRequest({
|
|
18
18
|
method: "PUT",
|
|
19
|
-
url: `/v1/messages/${e}/${t}
|
|
19
|
+
url: `/v1/messages/${e}/${t}`,
|
|
20
|
+
data: n
|
|
20
21
|
});
|
|
21
|
-
return this.handleResponse(
|
|
22
|
+
return this.handleResponse(r);
|
|
22
23
|
}
|
|
23
24
|
async removeStatus(e, t) {
|
|
24
|
-
const
|
|
25
|
+
const a = await this.knock.client().makeRequest({
|
|
25
26
|
method: "DELETE",
|
|
26
27
|
url: `/v1/messages/${e}/${t}`
|
|
27
28
|
});
|
|
28
|
-
return this.handleResponse(
|
|
29
|
+
return this.handleResponse(a);
|
|
29
30
|
}
|
|
30
|
-
async batchUpdateStatuses(e, t) {
|
|
31
|
-
const
|
|
31
|
+
async batchUpdateStatuses(e, t, a) {
|
|
32
|
+
const n = t === "interacted" && a ? { metadata: a.metadata } : {}, r = await this.knock.client().makeRequest({
|
|
32
33
|
method: "POST",
|
|
33
34
|
url: `/v1/messages/batch/${t}`,
|
|
34
|
-
data: { message_ids: e }
|
|
35
|
+
data: { message_ids: e, ...n }
|
|
35
36
|
});
|
|
36
|
-
return this.handleResponse(
|
|
37
|
+
return this.handleResponse(r);
|
|
37
38
|
}
|
|
38
39
|
async bulkUpdateAllStatusesInChannel({
|
|
39
40
|
channelId: e,
|
|
40
41
|
status: t,
|
|
41
|
-
options:
|
|
42
|
+
options: a
|
|
42
43
|
}) {
|
|
43
|
-
const
|
|
44
|
+
const n = await this.knock.client().makeRequest({
|
|
44
45
|
method: "POST",
|
|
45
46
|
url: `/v1/channels/${e}/messages/bulk/${t}`,
|
|
46
|
-
data:
|
|
47
|
+
data: a
|
|
47
48
|
});
|
|
48
|
-
return this.handleResponse(
|
|
49
|
+
return this.handleResponse(n);
|
|
49
50
|
}
|
|
50
51
|
handleResponse(e) {
|
|
51
|
-
var t,
|
|
52
|
+
var t, a;
|
|
52
53
|
if (e.statusCode === "error") {
|
|
53
|
-
if (((
|
|
54
|
+
if (((a = (t = e.error) == null ? void 0 : t.response) == null ? void 0 : a.status) < 500)
|
|
54
55
|
return e.error || e.body;
|
|
55
56
|
throw new Error(e.error || e.body);
|
|
56
57
|
}
|
|
@@ -58,6 +59,6 @@ class c {
|
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
export {
|
|
61
|
-
|
|
62
|
+
u as default
|
|
62
63
|
};
|
|
63
64
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/clients/messages/index.ts"],"sourcesContent":["import { ApiResponse } from \"../../api\";\nimport { BulkOperation } from \"../../interfaces\";\nimport Knock from \"../../knock\";\n\nimport {\n BulkUpdateMessagesInChannelProperties,\n Message,\n MessageEngagementStatus,\n} from \"./interfaces\";\n\nclass MessageClient {\n private knock: Knock;\n\n constructor(knock: Knock) {\n this.knock = knock;\n }\n\n async get(messageId: string): Promise<Message> {\n const result = await this.knock.client().makeRequest({\n method: \"GET\",\n url: `/v1/messages/${messageId}`,\n });\n\n return this.handleResponse<Message>(result);\n }\n\n async updateStatus(\n messageId: string,\n status: MessageEngagementStatus,\n ): Promise<Message> {\n const result = await this.knock.client().makeRequest({\n method: \"PUT\",\n url: `/v1/messages/${messageId}/${status}`,\n });\n\n return this.handleResponse<Message>(result);\n }\n\n async removeStatus(\n messageId: string,\n status: Exclude<MessageEngagementStatus, \"interacted\">,\n ): Promise<Message> {\n const result = await this.knock.client().makeRequest({\n method: \"DELETE\",\n url: `/v1/messages/${messageId}/${status}`,\n });\n\n return this.handleResponse<Message>(result);\n }\n\n async batchUpdateStatuses(\n messageIds: string[],\n status: MessageEngagementStatus | \"unseen\" | \"unread\" | \"unarchived\",\n ): Promise<Message[]> {\n const result = await this.knock.client().makeRequest({\n method: \"POST\",\n url: `/v1/messages/batch/${status}`,\n data: { message_ids: messageIds },\n });\n\n return this.handleResponse<Message[]>(result);\n }\n\n async bulkUpdateAllStatusesInChannel({\n channelId,\n status,\n options,\n }: BulkUpdateMessagesInChannelProperties): Promise<BulkOperation> {\n const result = await this.knock.client().makeRequest({\n method: \"POST\",\n url: `/v1/channels/${channelId}/messages/bulk/${status}`,\n data: options,\n });\n\n return this.handleResponse<BulkOperation>(result);\n }\n\n private handleResponse<T = unknown>(response: ApiResponse) {\n if (response.statusCode === \"error\") {\n if (response.error?.response?.status < 500) {\n return response.error || response.body;\n }\n throw new Error(response.error || response.body);\n }\n\n return response.body as T;\n }\n}\n\nexport default MessageClient;\n"],"names":["MessageClient","knock","__publicField","messageId","result","status","messageIds","
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/clients/messages/index.ts"],"sourcesContent":["import { ApiResponse } from \"../../api\";\nimport { BulkOperation } from \"../../interfaces\";\nimport Knock from \"../../knock\";\n\nimport {\n BulkUpdateMessagesInChannelProperties,\n Message,\n MessageEngagementStatus,\n UpdateMessageStatusOptions,\n} from \"./interfaces\";\n\nclass MessageClient {\n private knock: Knock;\n\n constructor(knock: Knock) {\n this.knock = knock;\n }\n\n async get(messageId: string): Promise<Message> {\n const result = await this.knock.client().makeRequest({\n method: \"GET\",\n url: `/v1/messages/${messageId}`,\n });\n\n return this.handleResponse<Message>(result);\n }\n\n async updateStatus(\n messageId: string,\n status: MessageEngagementStatus,\n options?: UpdateMessageStatusOptions,\n ): Promise<Message> {\n // Metadata is only required for the \"interacted\" status\n const payload =\n status === \"interacted\" && options\n ? { metadata: options.metadata }\n : undefined;\n\n const result = await this.knock.client().makeRequest({\n method: \"PUT\",\n url: `/v1/messages/${messageId}/${status}`,\n data: payload,\n });\n\n return this.handleResponse<Message>(result);\n }\n\n async removeStatus(\n messageId: string,\n status: Exclude<MessageEngagementStatus, \"interacted\">,\n ): Promise<Message> {\n const result = await this.knock.client().makeRequest({\n method: \"DELETE\",\n url: `/v1/messages/${messageId}/${status}`,\n });\n\n return this.handleResponse<Message>(result);\n }\n\n async batchUpdateStatuses(\n messageIds: string[],\n status: MessageEngagementStatus | \"unseen\" | \"unread\" | \"unarchived\",\n options?: UpdateMessageStatusOptions,\n ): Promise<Message[]> {\n // Metadata is only required for the \"interacted\" status\n const additionalPayload =\n status === \"interacted\" && options ? { metadata: options.metadata } : {};\n\n const result = await this.knock.client().makeRequest({\n method: \"POST\",\n url: `/v1/messages/batch/${status}`,\n data: { message_ids: messageIds, ...additionalPayload },\n });\n\n return this.handleResponse<Message[]>(result);\n }\n\n async bulkUpdateAllStatusesInChannel({\n channelId,\n status,\n options,\n }: BulkUpdateMessagesInChannelProperties): Promise<BulkOperation> {\n const result = await this.knock.client().makeRequest({\n method: \"POST\",\n url: `/v1/channels/${channelId}/messages/bulk/${status}`,\n data: options,\n });\n\n return this.handleResponse<BulkOperation>(result);\n }\n\n private handleResponse<T = unknown>(response: ApiResponse) {\n if (response.statusCode === \"error\") {\n if (response.error?.response?.status < 500) {\n return response.error || response.body;\n }\n throw new Error(response.error || response.body);\n }\n\n return response.body as T;\n }\n}\n\nexport default MessageClient;\n"],"names":["MessageClient","knock","__publicField","messageId","result","status","options","payload","messageIds","additionalPayload","channelId","response","_a","_b"],"mappings":";;;AAWA,MAAMA,EAAc;AAAA,EAGlB,YAAYC,GAAc;AAFlB,IAAAC,EAAA;AAGN,SAAK,QAAQD;AAAA,EACf;AAAA,EAEA,MAAM,IAAIE,GAAqC;AAC7C,UAAMC,IAAS,MAAM,KAAK,MAAM,OAAA,EAAS,YAAY;AAAA,MACnD,QAAQ;AAAA,MACR,KAAK,gBAAgBD,CAAS;AAAA,IAAA,CAC/B;AAEM,WAAA,KAAK,eAAwBC,CAAM;AAAA,EAC5C;AAAA,EAEA,MAAM,aACJD,GACAE,GACAC,GACkB;AAEZ,UAAAC,IACJF,MAAW,gBAAgBC,IACvB,EAAE,UAAUA,EAAQ,aACpB,QAEAF,IAAS,MAAM,KAAK,MAAM,OAAA,EAAS,YAAY;AAAA,MACnD,QAAQ;AAAA,MACR,KAAK,gBAAgBD,CAAS,IAAIE,CAAM;AAAA,MACxC,MAAME;AAAA,IAAA,CACP;AAEM,WAAA,KAAK,eAAwBH,CAAM;AAAA,EAC5C;AAAA,EAEA,MAAM,aACJD,GACAE,GACkB;AAClB,UAAMD,IAAS,MAAM,KAAK,MAAM,OAAA,EAAS,YAAY;AAAA,MACnD,QAAQ;AAAA,MACR,KAAK,gBAAgBD,CAAS,IAAIE,CAAM;AAAA,IAAA,CACzC;AAEM,WAAA,KAAK,eAAwBD,CAAM;AAAA,EAC5C;AAAA,EAEA,MAAM,oBACJI,GACAH,GACAC,GACoB;AAEd,UAAAG,IACJJ,MAAW,gBAAgBC,IAAU,EAAE,UAAUA,EAAQ,SAAS,IAAI,IAElEF,IAAS,MAAM,KAAK,MAAM,OAAA,EAAS,YAAY;AAAA,MACnD,QAAQ;AAAA,MACR,KAAK,sBAAsBC,CAAM;AAAA,MACjC,MAAM,EAAE,aAAaG,GAAY,GAAGC,EAAkB;AAAA,IAAA,CACvD;AAEM,WAAA,KAAK,eAA0BL,CAAM;AAAA,EAC9C;AAAA,EAEA,MAAM,+BAA+B;AAAA,IACnC,WAAAM;AAAA,IACA,QAAAL;AAAA,IACA,SAAAC;AAAA,EAAA,GACgE;AAChE,UAAMF,IAAS,MAAM,KAAK,MAAM,OAAA,EAAS,YAAY;AAAA,MACnD,QAAQ;AAAA,MACR,KAAK,gBAAgBM,CAAS,kBAAkBL,CAAM;AAAA,MACtD,MAAMC;AAAA,IAAA,CACP;AAEM,WAAA,KAAK,eAA8BF,CAAM;AAAA,EAClD;AAAA,EAEQ,eAA4BO,GAAuB;AAhF7D,QAAAC,GAAAC;AAiFQ,QAAAF,EAAS,eAAe,SAAS;AACnC,YAAIE,KAAAD,IAAAD,EAAS,UAAT,gBAAAC,EAAgB,aAAhB,gBAAAC,EAA0B,UAAS;AAC9B,eAAAF,EAAS,SAASA,EAAS;AAEpC,YAAM,IAAI,MAAMA,EAAS,SAASA,EAAS,IAAI;AAAA,IACjD;AAEA,WAAOA,EAAS;AAAA,EAClB;AACF;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var l = Object.defineProperty;
|
|
2
2
|
var o = (a, t, e) => t in a ? l(a, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : a[t] = e;
|
|
3
|
-
var r = (a, t, e) =>
|
|
3
|
+
var r = (a, t, e) => o(a, typeof t != "symbol" ? t + "" : t, e);
|
|
4
4
|
class i {
|
|
5
5
|
constructor(t) {
|
|
6
6
|
r(this, "instance");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var d = Object.defineProperty;
|
|
2
2
|
var h = (r, e, t) => e in r ? d(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
|
|
3
|
-
var u = (r, e, t) =>
|
|
3
|
+
var u = (r, e, t) => h(r, typeof e != "symbol" ? e + "" : e, t);
|
|
4
4
|
const a = "default";
|
|
5
5
|
function o(r) {
|
|
6
6
|
return typeof r == "object" ? r : { subscribed: r };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var i = Object.defineProperty;
|
|
2
2
|
var l = (c, e, t) => e in c ? i(c, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : c[e] = t;
|
|
3
|
-
var r = (c, e, t) =>
|
|
3
|
+
var r = (c, e, t) => l(c, typeof e != "symbol" ? e + "" : e, t);
|
|
4
4
|
const a = "$tenants";
|
|
5
5
|
class u {
|
|
6
6
|
constructor(e) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var i = Object.defineProperty;
|
|
2
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) =>
|
|
3
|
+
var a = (s, e, t) => u(s, typeof e != "symbol" ? e + "" : e, t);
|
|
4
4
|
const r = "default";
|
|
5
5
|
class l {
|
|
6
6
|
constructor(e) {
|
package/dist/esm/knock.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var l = Object.defineProperty;
|
|
2
2
|
var c = (n, e, t) => e in n ? l(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
|
|
3
|
-
var i = (n, e, t) =>
|
|
3
|
+
var i = (n, e, t) => c(n, typeof e != "symbol" ? e + "" : e, t);
|
|
4
4
|
import { jwtDecode as u } from "jwt-decode";
|
|
5
5
|
import p from "./api.mjs";
|
|
6
6
|
import k from "./clients/feed/index.mjs";
|
|
@@ -75,8 +75,7 @@ class v {
|
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
async maybeScheduleUserTokenExpiration(e, t = 3e4) {
|
|
78
|
-
if (!this.userToken)
|
|
79
|
-
return;
|
|
78
|
+
if (!this.userToken) return;
|
|
80
79
|
const s = u(this.userToken), o = (s.exp ?? 0) * 1e3, r = Date.now();
|
|
81
80
|
if (o && o > r) {
|
|
82
81
|
const h = o - t - r;
|
package/dist/esm/knock.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knock.mjs","sources":["../../src/knock.ts"],"sourcesContent":["import { jwtDecode } from \"jwt-decode\";\n\nimport ApiClient from \"./api\";\nimport FeedClient from \"./clients/feed\";\nimport MessageClient from \"./clients/messages\";\nimport ObjectClient from \"./clients/objects\";\nimport Preferences from \"./clients/preferences\";\nimport SlackClient from \"./clients/slack\";\nimport UserClient from \"./clients/users\";\nimport {\n AuthenticateOptions,\n KnockOptions,\n LogLevel,\n UserTokenExpiringCallback,\n} from \"./interfaces\";\n\nconst DEFAULT_HOST = \"https://api.knock.app\";\n\nclass Knock {\n public host: string;\n private apiClient: ApiClient | null = null;\n public userId: string | undefined;\n public userToken?: string;\n public logLevel?: LogLevel;\n private tokenExpirationTimer: ReturnType<typeof setTimeout> | null = null;\n readonly feeds = new FeedClient(this);\n readonly objects = new ObjectClient(this);\n readonly preferences = new Preferences(this);\n readonly slack = new SlackClient(this);\n readonly user = new UserClient(this);\n readonly messages = new MessageClient(this);\n\n constructor(\n readonly apiKey: string,\n options: KnockOptions = {},\n ) {\n this.host = options.host || DEFAULT_HOST;\n this.logLevel = options.logLevel;\n\n this.log(\"Initialized Knock instance\");\n\n // Fail loudly if we're using the wrong API key\n if (this.apiKey && this.apiKey.startsWith(\"sk_\")) {\n throw new Error(\n \"[Knock] You are using your secret API key on the client. Please use the public key.\",\n );\n }\n }\n\n client() {\n if (!this.userId) {\n console.warn(\n `[Knock] You must call authenticate(userId, userToken) first before trying to make a request.\n Typically you'll see this message when you're creating a feed instance before having called\n authenticate with a user Id and token. That means we won't know who to issue the request\n to Knock on behalf of.\n `,\n );\n }\n\n // Initiate a new API client if we don't have one yet\n if (!this.apiClient) {\n this.apiClient = this.createApiClient();\n }\n\n return this.apiClient;\n }\n\n /*\n Authenticates the current user. In non-sandbox environments\n the userToken must be specified.\n */\n authenticate(\n userId: string,\n userToken?: string,\n options?: AuthenticateOptions,\n ) {\n let reinitializeApi = false;\n const currentApiClient = this.apiClient;\n\n // If we've previously been initialized and the values have now changed, then we\n // need to reinitialize any stateful connections we have\n if (\n currentApiClient &&\n (this.userId !== userId || this.userToken !== userToken)\n ) {\n this.log(\"userId or userToken changed; reinitializing connections\");\n this.feeds.teardownInstances();\n this.teardown();\n reinitializeApi = true;\n }\n\n this.userId = userId;\n this.userToken = userToken;\n\n this.log(`Authenticated with userId ${userId}`);\n\n if (this.userToken && options?.onUserTokenExpiring instanceof Function) {\n this.maybeScheduleUserTokenExpiration(\n options.onUserTokenExpiring,\n options.timeBeforeExpirationInMs,\n );\n }\n\n // If we get the signal to reinitialize the api client, then we want to create a new client\n // and the reinitialize any existing feed real-time connections we have so everything continues\n // to work with the new credentials we've been given\n if (reinitializeApi) {\n this.apiClient = this.createApiClient();\n this.feeds.reinitializeInstances();\n this.log(\"Reinitialized real-time connections\");\n }\n\n return;\n }\n\n /*\n Returns whether or this Knock instance is authenticated. Passing `true` will check the presence\n of the userToken as well.\n */\n isAuthenticated(checkUserToken = false) {\n return checkUserToken ? !!(this.userId && this.userToken) : !!this.userId;\n }\n\n // Used to teardown any connected instances\n teardown() {\n if (this.tokenExpirationTimer) {\n clearTimeout(this.tokenExpirationTimer);\n }\n if (this.apiClient?.socket && this.apiClient.socket.isConnected()) {\n this.apiClient.socket.disconnect();\n }\n }\n\n log(message: string) {\n if (this.logLevel === \"debug\") {\n console.log(`[Knock] ${message}`);\n }\n }\n\n /**\n * Initiates an API client\n */\n private createApiClient() {\n return new ApiClient({\n apiKey: this.apiKey,\n host: this.host,\n userToken: this.userToken,\n });\n }\n\n private async maybeScheduleUserTokenExpiration(\n callbackFn: UserTokenExpiringCallback,\n timeBeforeExpirationInMs: number = 30_000,\n ) {\n if (!this.userToken) return;\n\n const decoded = jwtDecode(this.userToken);\n const expiresAtMs = (decoded.exp ?? 0) * 1000;\n const nowMs = Date.now();\n\n // Expiration is in the future\n if (expiresAtMs && expiresAtMs > nowMs) {\n // Check how long until the token should be regenerated\n // | ----------------- | ----------------------- |\n // ^ now ^ expiration offset ^ expires at\n const msInFuture = expiresAtMs - timeBeforeExpirationInMs - nowMs;\n\n this.tokenExpirationTimer = setTimeout(async () => {\n const newToken = await callbackFn(this.userToken as string, decoded);\n\n // Reauthenticate which will handle reinitializing sockets\n if (typeof newToken === \"string\") {\n this.authenticate(this.userId!, newToken, {\n onUserTokenExpiring: callbackFn,\n timeBeforeExpirationInMs: timeBeforeExpirationInMs,\n });\n }\n }, msInFuture);\n }\n }\n}\n\nexport default Knock;\n"],"names":["DEFAULT_HOST","Knock","apiKey","options","__publicField","FeedClient","ObjectClient","Preferences","SlackClient","UserClient","MessageClient","userId","userToken","reinitializeApi","checkUserToken","_a","message","ApiClient","callbackFn","timeBeforeExpirationInMs","decoded","jwtDecode","expiresAtMs","nowMs","msInFuture","newToken"],"mappings":";;;;;;;;;;;AAgBA,MAAMA,IAAe;AAErB,MAAMC,EAAM;AAAA,EAcV,YACWC,GACTC,IAAwB,IACxB;AAhBK,IAAAC,EAAA;AACC,IAAAA,EAAA,mBAA8B;AAC/B,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACC,IAAAA,EAAA,8BAA6D;AAC5D,IAAAA,EAAA,eAAQ,IAAIC,EAAW,IAAI;AAC3B,IAAAD,EAAA,iBAAU,IAAIE,EAAa,IAAI;AAC/B,IAAAF,EAAA,qBAAc,IAAIG,EAAY,IAAI;AAClC,IAAAH,EAAA,eAAQ,IAAII,EAAY,IAAI;AAC5B,IAAAJ,EAAA,cAAO,IAAIK,EAAW,IAAI;AAC1B,IAAAL,EAAA,kBAAW,IAAIM,EAAc,IAAI;AAYxC,QATS,KAAA,SAAAR,GAGJ,KAAA,OAAOC,EAAQ,QAAQH,GAC5B,KAAK,WAAWG,EAAQ,UAExB,KAAK,IAAI,4BAA4B,GAGjC,KAAK,UAAU,KAAK,OAAO,WAAW,KAAK;AAC7C,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAAA,EAGN;AAAA,EAEA,SAAS;AACH,WAAC,KAAK,UACA,QAAA;AAAA,MACN;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,GASC,KAAK,cACH,KAAA,YAAY,KAAK,oBAGjB,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aACEQ,GACAC,GACAT,GACA;AACA,QAAIU,IAAkB;AAKtB,IAJyB,KAAK,cAM3B,KAAK,WAAWF,KAAU,KAAK,cAAcC,OAE9C,KAAK,IAAI,yDAAyD,GAClE,KAAK,MAAM,qBACX,KAAK,SAAS,GACIC,IAAA,KAGpB,KAAK,SAASF,GACd,KAAK,YAAYC,GAEZ,KAAA,IAAI,6BAA6BD,CAAM,EAAE,GAE1C,KAAK,cAAaR,KAAA,gBAAAA,EAAS,gCAA+B,YACvD,KAAA;AAAA,MACHA,EAAQ;AAAA,MACRA,EAAQ;AAAA,IAAA,GAORU,MACG,KAAA,YAAY,KAAK,mBACtB,KAAK,MAAM,yBACX,KAAK,IAAI,qCAAqC;AAAA,EAIlD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgBC,IAAiB,IAAO;AAC/B,WAAAA,IAAiB,CAAC,EAAE,KAAK,UAAU,KAAK,aAAa,CAAC,CAAC,KAAK;AAAA,EACrE;AAAA;AAAA,EAGA,WAAW;;AACT,IAAI,KAAK,wBACP,aAAa,KAAK,oBAAoB,IAEpCC,IAAA,KAAK,cAAL,QAAAA,EAAgB,UAAU,KAAK,UAAU,OAAO,iBAC7C,KAAA,UAAU,OAAO;EAE1B;AAAA,EAEA,IAAIC,GAAiB;AACf,IAAA,KAAK,aAAa,WACZ,QAAA,IAAI,WAAWA,CAAO,EAAE;AAAA,EAEpC;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB;AACxB,WAAO,IAAIC,EAAU;AAAA,MACnB,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,WAAW,KAAK;AAAA,IAAA,CACjB;AAAA,EACH;AAAA,EAEA,MAAc,iCACZC,GACAC,IAAmC,KACnC;
|
|
1
|
+
{"version":3,"file":"knock.mjs","sources":["../../src/knock.ts"],"sourcesContent":["import { jwtDecode } from \"jwt-decode\";\n\nimport ApiClient from \"./api\";\nimport FeedClient from \"./clients/feed\";\nimport MessageClient from \"./clients/messages\";\nimport ObjectClient from \"./clients/objects\";\nimport Preferences from \"./clients/preferences\";\nimport SlackClient from \"./clients/slack\";\nimport UserClient from \"./clients/users\";\nimport {\n AuthenticateOptions,\n KnockOptions,\n LogLevel,\n UserTokenExpiringCallback,\n} from \"./interfaces\";\n\nconst DEFAULT_HOST = \"https://api.knock.app\";\n\nclass Knock {\n public host: string;\n private apiClient: ApiClient | null = null;\n public userId: string | undefined;\n public userToken?: string;\n public logLevel?: LogLevel;\n private tokenExpirationTimer: ReturnType<typeof setTimeout> | null = null;\n readonly feeds = new FeedClient(this);\n readonly objects = new ObjectClient(this);\n readonly preferences = new Preferences(this);\n readonly slack = new SlackClient(this);\n readonly user = new UserClient(this);\n readonly messages = new MessageClient(this);\n\n constructor(\n readonly apiKey: string,\n options: KnockOptions = {},\n ) {\n this.host = options.host || DEFAULT_HOST;\n this.logLevel = options.logLevel;\n\n this.log(\"Initialized Knock instance\");\n\n // Fail loudly if we're using the wrong API key\n if (this.apiKey && this.apiKey.startsWith(\"sk_\")) {\n throw new Error(\n \"[Knock] You are using your secret API key on the client. Please use the public key.\",\n );\n }\n }\n\n client() {\n if (!this.userId) {\n console.warn(\n `[Knock] You must call authenticate(userId, userToken) first before trying to make a request.\n Typically you'll see this message when you're creating a feed instance before having called\n authenticate with a user Id and token. That means we won't know who to issue the request\n to Knock on behalf of.\n `,\n );\n }\n\n // Initiate a new API client if we don't have one yet\n if (!this.apiClient) {\n this.apiClient = this.createApiClient();\n }\n\n return this.apiClient;\n }\n\n /*\n Authenticates the current user. In non-sandbox environments\n the userToken must be specified.\n */\n authenticate(\n userId: string,\n userToken?: string,\n options?: AuthenticateOptions,\n ) {\n let reinitializeApi = false;\n const currentApiClient = this.apiClient;\n\n // If we've previously been initialized and the values have now changed, then we\n // need to reinitialize any stateful connections we have\n if (\n currentApiClient &&\n (this.userId !== userId || this.userToken !== userToken)\n ) {\n this.log(\"userId or userToken changed; reinitializing connections\");\n this.feeds.teardownInstances();\n this.teardown();\n reinitializeApi = true;\n }\n\n this.userId = userId;\n this.userToken = userToken;\n\n this.log(`Authenticated with userId ${userId}`);\n\n if (this.userToken && options?.onUserTokenExpiring instanceof Function) {\n this.maybeScheduleUserTokenExpiration(\n options.onUserTokenExpiring,\n options.timeBeforeExpirationInMs,\n );\n }\n\n // If we get the signal to reinitialize the api client, then we want to create a new client\n // and the reinitialize any existing feed real-time connections we have so everything continues\n // to work with the new credentials we've been given\n if (reinitializeApi) {\n this.apiClient = this.createApiClient();\n this.feeds.reinitializeInstances();\n this.log(\"Reinitialized real-time connections\");\n }\n\n return;\n }\n\n /*\n Returns whether or this Knock instance is authenticated. Passing `true` will check the presence\n of the userToken as well.\n */\n isAuthenticated(checkUserToken = false) {\n return checkUserToken ? !!(this.userId && this.userToken) : !!this.userId;\n }\n\n // Used to teardown any connected instances\n teardown() {\n if (this.tokenExpirationTimer) {\n clearTimeout(this.tokenExpirationTimer);\n }\n if (this.apiClient?.socket && this.apiClient.socket.isConnected()) {\n this.apiClient.socket.disconnect();\n }\n }\n\n log(message: string) {\n if (this.logLevel === \"debug\") {\n console.log(`[Knock] ${message}`);\n }\n }\n\n /**\n * Initiates an API client\n */\n private createApiClient() {\n return new ApiClient({\n apiKey: this.apiKey,\n host: this.host,\n userToken: this.userToken,\n });\n }\n\n private async maybeScheduleUserTokenExpiration(\n callbackFn: UserTokenExpiringCallback,\n timeBeforeExpirationInMs: number = 30_000,\n ) {\n if (!this.userToken) return;\n\n const decoded = jwtDecode(this.userToken);\n const expiresAtMs = (decoded.exp ?? 0) * 1000;\n const nowMs = Date.now();\n\n // Expiration is in the future\n if (expiresAtMs && expiresAtMs > nowMs) {\n // Check how long until the token should be regenerated\n // | ----------------- | ----------------------- |\n // ^ now ^ expiration offset ^ expires at\n const msInFuture = expiresAtMs - timeBeforeExpirationInMs - nowMs;\n\n this.tokenExpirationTimer = setTimeout(async () => {\n const newToken = await callbackFn(this.userToken as string, decoded);\n\n // Reauthenticate which will handle reinitializing sockets\n if (typeof newToken === \"string\") {\n this.authenticate(this.userId!, newToken, {\n onUserTokenExpiring: callbackFn,\n timeBeforeExpirationInMs: timeBeforeExpirationInMs,\n });\n }\n }, msInFuture);\n }\n }\n}\n\nexport default Knock;\n"],"names":["DEFAULT_HOST","Knock","apiKey","options","__publicField","FeedClient","ObjectClient","Preferences","SlackClient","UserClient","MessageClient","userId","userToken","reinitializeApi","checkUserToken","_a","message","ApiClient","callbackFn","timeBeforeExpirationInMs","decoded","jwtDecode","expiresAtMs","nowMs","msInFuture","newToken"],"mappings":";;;;;;;;;;;AAgBA,MAAMA,IAAe;AAErB,MAAMC,EAAM;AAAA,EAcV,YACWC,GACTC,IAAwB,IACxB;AAhBK,IAAAC,EAAA;AACC,IAAAA,EAAA,mBAA8B;AAC/B,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACC,IAAAA,EAAA,8BAA6D;AAC5D,IAAAA,EAAA,eAAQ,IAAIC,EAAW,IAAI;AAC3B,IAAAD,EAAA,iBAAU,IAAIE,EAAa,IAAI;AAC/B,IAAAF,EAAA,qBAAc,IAAIG,EAAY,IAAI;AAClC,IAAAH,EAAA,eAAQ,IAAII,EAAY,IAAI;AAC5B,IAAAJ,EAAA,cAAO,IAAIK,EAAW,IAAI;AAC1B,IAAAL,EAAA,kBAAW,IAAIM,EAAc,IAAI;AAYxC,QATS,KAAA,SAAAR,GAGJ,KAAA,OAAOC,EAAQ,QAAQH,GAC5B,KAAK,WAAWG,EAAQ,UAExB,KAAK,IAAI,4BAA4B,GAGjC,KAAK,UAAU,KAAK,OAAO,WAAW,KAAK;AAC7C,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAAA,EAGN;AAAA,EAEA,SAAS;AACH,WAAC,KAAK,UACA,QAAA;AAAA,MACN;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,GASC,KAAK,cACH,KAAA,YAAY,KAAK,oBAGjB,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aACEQ,GACAC,GACAT,GACA;AACA,QAAIU,IAAkB;AAKtB,IAJyB,KAAK,cAM3B,KAAK,WAAWF,KAAU,KAAK,cAAcC,OAE9C,KAAK,IAAI,yDAAyD,GAClE,KAAK,MAAM,qBACX,KAAK,SAAS,GACIC,IAAA,KAGpB,KAAK,SAASF,GACd,KAAK,YAAYC,GAEZ,KAAA,IAAI,6BAA6BD,CAAM,EAAE,GAE1C,KAAK,cAAaR,KAAA,gBAAAA,EAAS,gCAA+B,YACvD,KAAA;AAAA,MACHA,EAAQ;AAAA,MACRA,EAAQ;AAAA,IAAA,GAORU,MACG,KAAA,YAAY,KAAK,mBACtB,KAAK,MAAM,yBACX,KAAK,IAAI,qCAAqC;AAAA,EAIlD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgBC,IAAiB,IAAO;AAC/B,WAAAA,IAAiB,CAAC,EAAE,KAAK,UAAU,KAAK,aAAa,CAAC,CAAC,KAAK;AAAA,EACrE;AAAA;AAAA,EAGA,WAAW;;AACT,IAAI,KAAK,wBACP,aAAa,KAAK,oBAAoB,IAEpCC,IAAA,KAAK,cAAL,QAAAA,EAAgB,UAAU,KAAK,UAAU,OAAO,iBAC7C,KAAA,UAAU,OAAO;EAE1B;AAAA,EAEA,IAAIC,GAAiB;AACf,IAAA,KAAK,aAAa,WACZ,QAAA,IAAI,WAAWA,CAAO,EAAE;AAAA,EAEpC;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB;AACxB,WAAO,IAAIC,EAAU;AAAA,MACnB,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,WAAW,KAAK;AAAA,IAAA,CACjB;AAAA,EACH;AAAA,EAEA,MAAc,iCACZC,GACAC,IAAmC,KACnC;AACI,QAAA,CAAC,KAAK,UAAW;AAEf,UAAAC,IAAUC,EAAU,KAAK,SAAS,GAClCC,KAAeF,EAAQ,OAAO,KAAK,KACnCG,IAAQ,KAAK;AAGf,QAAAD,KAAeA,IAAcC,GAAO;AAIhC,YAAAC,IAAaF,IAAcH,IAA2BI;AAEvD,WAAA,uBAAuB,WAAW,YAAY;AACjD,cAAME,IAAW,MAAMP,EAAW,KAAK,WAAqBE,CAAO;AAG/D,QAAA,OAAOK,KAAa,YACjB,KAAA,aAAa,KAAK,QAASA,GAAU;AAAA,UACxC,qBAAqBP;AAAA,UACrB,0BAAAC;AAAA,QAAA,CACD;AAAA,SAEFK,CAAU;AAAA,IACf;AAAA,EACF;AACF;"}
|
package/dist/types/api.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { GenericData } from
|
|
2
|
-
import { StoreApi } from
|
|
3
|
-
import Knock from
|
|
4
|
-
import { FeedClientOptions, FetchFeedOptions } from
|
|
5
|
-
import { BindableFeedEvent, FeedEventCallback, FeedItemOrItems, FeedRealTimeCallback, FeedStoreState } from
|
|
1
|
+
import { GenericData } from '@knocklabs/types';
|
|
2
|
+
import { StoreApi } from 'zustand';
|
|
3
|
+
import { default as Knock } from '../../knock';
|
|
4
|
+
import { FeedClientOptions, FetchFeedOptions } from './interfaces';
|
|
5
|
+
import { BindableFeedEvent, FeedEventCallback, FeedItemOrItems, FeedRealTimeCallback, FeedStoreState } from './types';
|
|
6
|
+
|
|
6
7
|
declare class Feed {
|
|
7
8
|
readonly knock: Knock;
|
|
8
9
|
readonly feedId: string;
|
|
@@ -32,16 +33,16 @@ declare class Feed {
|
|
|
32
33
|
on(eventName: BindableFeedEvent, callback: FeedEventCallback | FeedRealTimeCallback): void;
|
|
33
34
|
off(eventName: BindableFeedEvent, callback: FeedEventCallback | FeedRealTimeCallback): void;
|
|
34
35
|
getState(): FeedStoreState;
|
|
35
|
-
markAsSeen(itemOrItems: FeedItemOrItems): Promise<import(
|
|
36
|
-
markAllAsSeen(): Promise<import(
|
|
37
|
-
markAsUnseen(itemOrItems: FeedItemOrItems): Promise<import(
|
|
38
|
-
markAsRead(itemOrItems: FeedItemOrItems): Promise<import(
|
|
39
|
-
markAllAsRead(): Promise<import(
|
|
40
|
-
markAsUnread(itemOrItems: FeedItemOrItems): Promise<import(
|
|
41
|
-
markAsInteracted(itemOrItems: FeedItemOrItems): Promise<import(
|
|
42
|
-
markAsArchived(itemOrItems: FeedItemOrItems): Promise<import(
|
|
43
|
-
markAllAsArchived(): Promise<import(
|
|
44
|
-
markAsUnarchived(itemOrItems: FeedItemOrItems): Promise<import(
|
|
36
|
+
markAsSeen(itemOrItems: FeedItemOrItems): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
37
|
+
markAllAsSeen(): Promise<import('../..').BulkOperation>;
|
|
38
|
+
markAsUnseen(itemOrItems: FeedItemOrItems): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
39
|
+
markAsRead(itemOrItems: FeedItemOrItems): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
40
|
+
markAllAsRead(): Promise<import('../..').BulkOperation>;
|
|
41
|
+
markAsUnread(itemOrItems: FeedItemOrItems): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
42
|
+
markAsInteracted(itemOrItems: FeedItemOrItems, metadata?: Record<string, string>): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
43
|
+
markAsArchived(itemOrItems: FeedItemOrItems): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
44
|
+
markAllAsArchived(): Promise<import('../..').BulkOperation>;
|
|
45
|
+
markAsUnarchived(itemOrItems: FeedItemOrItems): Promise<import('../messages/interfaces').Message<GenericData>[]>;
|
|
45
46
|
fetch(options?: FetchFeedOptions): Promise<{
|
|
46
47
|
status: "ok" | "error";
|
|
47
48
|
data: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../../../src/clients/feed/feed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,KAAK,MAAM,aAAa,CAAC;AAOhC,OAAO,EACL,iBAAiB,EAIjB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EAEjB,iBAAiB,EAEjB,eAAe,EAEf,oBAAoB,EACpB,cAAc,EACf,MAAM,SAAS,CAAC;AASjB,cAAM,IAAI;IAeN,QAAQ,CAAC,KAAK,EAAE,KAAK;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAfzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,eAAe,CAA8C;IACrE,OAAO,CAAC,8BAA8B,CAAkB;IACxD,OAAO,CAAC,uBAAuB,CAAwB;IACvD,OAAO,CAAC,iCAAiC,CAAkB;IAGpD,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAG5B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,iBAAiB;IAgB5B;;OAEG;IACH,YAAY;IAWZ;;;OAGG;IACH,QAAQ;IAoBR,2EAA2E;IAC3E,OAAO;IAWP,gBAAgB;IAmBhB,EAAE,CACA,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,iBAAiB,GAAG,oBAAoB;IAKpD,GAAG,CACD,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,iBAAiB,GAAG,oBAAoB;IAKpD,QAAQ;IAIF,UAAU,CAAC,WAAW,EAAE,eAAe;IAYvC,aAAa;IA0Cb,YAAY,CAAC,WAAW,EAAE,eAAe;IAWzC,UAAU,CAAC,WAAW,EAAE,eAAe;IAYvC,aAAa;IA0Cb,YAAY,CAAC,WAAW,EAAE,eAAe;IAWzC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../../../src/clients/feed/feed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,KAAK,MAAM,aAAa,CAAC;AAOhC,OAAO,EACL,iBAAiB,EAIjB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EAEjB,iBAAiB,EAEjB,eAAe,EAEf,oBAAoB,EACpB,cAAc,EACf,MAAM,SAAS,CAAC;AASjB,cAAM,IAAI;IAeN,QAAQ,CAAC,KAAK,EAAE,KAAK;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAfzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,eAAe,CAA8C;IACrE,OAAO,CAAC,8BAA8B,CAAkB;IACxD,OAAO,CAAC,uBAAuB,CAAwB;IACvD,OAAO,CAAC,iCAAiC,CAAkB;IAGpD,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAG5B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,iBAAiB;IAgB5B;;OAEG;IACH,YAAY;IAWZ;;;OAGG;IACH,QAAQ;IAoBR,2EAA2E;IAC3E,OAAO;IAWP,gBAAgB;IAmBhB,EAAE,CACA,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,iBAAiB,GAAG,oBAAoB;IAKpD,GAAG,CACD,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,iBAAiB,GAAG,oBAAoB;IAKpD,QAAQ;IAIF,UAAU,CAAC,WAAW,EAAE,eAAe;IAYvC,aAAa;IA0Cb,YAAY,CAAC,WAAW,EAAE,eAAe;IAWzC,UAAU,CAAC,WAAW,EAAE,eAAe;IAYvC,aAAa;IA0Cb,YAAY,CAAC,WAAW,EAAE,eAAe;IAWzC,gBAAgB,CACpB,WAAW,EAAE,eAAe,EAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAwB7B,cAAc,CAAC,WAAW,EAAE,eAAe;IAuE3C,iBAAiB;IA2BjB,gBAAgB,CAAC,WAAW,EAAE,eAAe;IAS7C,KAAK,CAAC,OAAO,GAAE,gBAAqB;;;;IA0EpC,aAAa;IAenB,OAAO,CAAC,SAAS;YAQH,oBAAoB;IAclC,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iCAAiC;YAiD3B,gBAAgB;YAsBhB,oBAAoB;IA2BlC,OAAO,CAAC,qBAAqB;IAoC7B,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,4BAA4B;IA0BpC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,yBAAyB;IAUjC,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,sBAAsB;CA2B/B;AAED,eAAe,IAAI,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import Knock from
|
|
2
|
-
import Feed from
|
|
3
|
-
import { FeedClientOptions } from
|
|
1
|
+
import { default as Knock } from '../../knock';
|
|
2
|
+
import { default as Feed } from './feed';
|
|
3
|
+
import { FeedClientOptions } from './interfaces';
|
|
4
|
+
|
|
4
5
|
declare class FeedClient {
|
|
5
6
|
private instance;
|
|
6
7
|
private feedInstances;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { GenericData, PageInfo } from
|
|
2
|
-
import { Activity, Recipient } from
|
|
3
|
-
import { NetworkStatus } from
|
|
4
|
-
import { NotificationSource } from
|
|
1
|
+
import { GenericData, PageInfo } from '@knocklabs/types';
|
|
2
|
+
import { Activity, Recipient } from '../../interfaces';
|
|
3
|
+
import { NetworkStatus } from '../../networkStatus';
|
|
4
|
+
import { NotificationSource } from '../messages/interfaces';
|
|
5
|
+
|
|
5
6
|
export interface FeedClientOptions {
|
|
6
7
|
before?: string;
|
|
7
8
|
after?: string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { FeedStoreState } from
|
|
2
|
-
|
|
1
|
+
import { FeedStoreState } from './types';
|
|
2
|
+
|
|
3
|
+
export default function createStore(): import('zustand/vanilla').StoreApi<FeedStoreState>;
|
|
3
4
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/clients/feed/store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/clients/feed/store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAmCzC,MAAM,CAAC,OAAO,UAAU,WAAW,uDA0DlC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { GenericData, PageInfo } from
|
|
2
|
-
import { NetworkStatus } from
|
|
3
|
-
import { FeedItem, FeedMetadata, FeedResponse } from
|
|
1
|
+
import { GenericData, PageInfo } from '@knocklabs/types';
|
|
2
|
+
import { NetworkStatus } from '../../networkStatus';
|
|
3
|
+
import { FeedItem, FeedMetadata, FeedResponse } from './interfaces';
|
|
4
|
+
|
|
4
5
|
export type StoreFeedResultOptions = {
|
|
5
6
|
shouldSetPage?: boolean;
|
|
6
7
|
shouldAppend?: boolean;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { FeedItem } from
|
|
1
|
+
import { FeedItem } from './interfaces';
|
|
2
|
+
|
|
2
3
|
export declare function deduplicateItems(items: FeedItem[]): FeedItem[];
|
|
3
|
-
export declare function sortItems(items: FeedItem[]): FeedItem<import(
|
|
4
|
+
export declare function sortItems(items: FeedItem[]): FeedItem<import('@knocklabs/types').GenericData>[];
|
|
4
5
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { BulkOperation } from
|
|
2
|
-
import Knock from
|
|
3
|
-
import { BulkUpdateMessagesInChannelProperties, Message, MessageEngagementStatus } from
|
|
1
|
+
import { BulkOperation } from '../../interfaces';
|
|
2
|
+
import { default as Knock } from '../../knock';
|
|
3
|
+
import { BulkUpdateMessagesInChannelProperties, Message, MessageEngagementStatus, UpdateMessageStatusOptions } from './interfaces';
|
|
4
|
+
|
|
4
5
|
declare class MessageClient {
|
|
5
6
|
private knock;
|
|
6
7
|
constructor(knock: Knock);
|
|
7
8
|
get(messageId: string): Promise<Message>;
|
|
8
|
-
updateStatus(messageId: string, status: MessageEngagementStatus): Promise<Message>;
|
|
9
|
+
updateStatus(messageId: string, status: MessageEngagementStatus, options?: UpdateMessageStatusOptions): Promise<Message>;
|
|
9
10
|
removeStatus(messageId: string, status: Exclude<MessageEngagementStatus, "interacted">): Promise<Message>;
|
|
10
|
-
batchUpdateStatuses(messageIds: string[], status: MessageEngagementStatus | "unseen" | "unread" | "unarchived"): Promise<Message[]>;
|
|
11
|
+
batchUpdateStatuses(messageIds: string[], status: MessageEngagementStatus | "unseen" | "unread" | "unarchived", options?: UpdateMessageStatusOptions): Promise<Message[]>;
|
|
11
12
|
bulkUpdateAllStatusesInChannel({ channelId, status, options, }: BulkUpdateMessagesInChannelProperties): Promise<BulkOperation>;
|
|
12
13
|
private handleResponse;
|
|
13
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/clients/messages/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,MAAM,aAAa,CAAC;AAEhC,OAAO,EACL,qCAAqC,EACrC,OAAO,EACP,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/clients/messages/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,MAAM,aAAa,CAAC;AAEhC,OAAO,EACL,qCAAqC,EACrC,OAAO,EACP,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,cAAc,CAAC;AAEtB,cAAM,aAAa;IACjB,OAAO,CAAC,KAAK,CAAQ;gBAET,KAAK,EAAE,KAAK;IAIlB,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASxC,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,uBAAuB,EAC/B,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,OAAO,CAAC;IAgBb,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,CAAC,uBAAuB,EAAE,YAAY,CAAC,GACrD,OAAO,CAAC,OAAO,CAAC;IASb,mBAAmB,CACvB,UAAU,EAAE,MAAM,EAAE,EACpB,MAAM,EAAE,uBAAuB,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,EACpE,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,OAAO,EAAE,CAAC;IAcf,8BAA8B,CAAC,EACnC,SAAS,EACT,MAAM,EACN,OAAO,GACR,EAAE,qCAAqC,GAAG,OAAO,CAAC,aAAa,CAAC;IAUjE,OAAO,CAAC,cAAc;CAUvB;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { GenericData } from
|
|
2
|
-
import { RecipientRef } from
|
|
1
|
+
import { GenericData } from '@knocklabs/types';
|
|
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;
|
|
@@ -37,4 +38,7 @@ export type BulkUpdateMessagesInChannelProperties = {
|
|
|
37
38
|
tenants?: string[];
|
|
38
39
|
};
|
|
39
40
|
};
|
|
41
|
+
export type UpdateMessageStatusOptions = {
|
|
42
|
+
metadata?: Record<string, string>;
|
|
43
|
+
};
|
|
40
44
|
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -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,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"}
|
|
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
|
-
import { GenericData } from
|
|
2
|
-
import { ChannelData } from
|
|
3
|
-
import Knock from
|
|
1
|
+
import { GenericData } from '@knocklabs/types';
|
|
2
|
+
import { ChannelData } from '../../interfaces';
|
|
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
|
-
import { ChannelType } from
|
|
2
|
-
import Knock from
|
|
3
|
-
import { ChannelTypePreferences, PreferenceOptions, PreferenceSet, SetPreferencesProperties, WorkflowPreferenceSetting, WorkflowPreferences } from
|
|
1
|
+
import { ChannelType } from '@knocklabs/types';
|
|
2
|
+
import { default as Knock } from '../../knock';
|
|
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,5 +1,6 @@
|
|
|
1
|
-
import Knock from
|
|
2
|
-
import { AuthCheckInput, GetSlackChannelsInput, GetSlackChannelsResponse, RevokeAccessTokenInput } from
|
|
1
|
+
import { default as Knock } from '../../knock';
|
|
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,9 @@
|
|
|
1
|
-
import { GenericData } from
|
|
2
|
-
import { ChannelData, User } from
|
|
3
|
-
import Knock from
|
|
4
|
-
import { GetPreferencesOptions, PreferenceOptions, PreferenceSet, SetPreferencesProperties } from
|
|
5
|
-
import { GetChannelDataInput, SetChannelDataInput } from
|
|
1
|
+
import { GenericData } from '@knocklabs/types';
|
|
2
|
+
import { ChannelData, User } from '../../interfaces';
|
|
3
|
+
import { default as Knock } from '../../knock';
|
|
4
|
+
import { GetPreferencesOptions, PreferenceOptions, PreferenceSet, SetPreferencesProperties } from '../preferences/interfaces';
|
|
5
|
+
import { GetChannelDataInput, SetChannelDataInput } from './interfaces';
|
|
6
|
+
|
|
6
7
|
declare class UserClient {
|
|
7
8
|
private instance;
|
|
8
9
|
constructor(instance: Knock);
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import FeedClient,
|
|
2
|
-
import Knock from
|
|
3
|
-
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export * from
|
|
9
|
-
export * from
|
|
10
|
-
export * from
|
|
11
|
-
export * from
|
|
12
|
-
export * from
|
|
13
|
-
export * from
|
|
14
|
-
export * from
|
|
15
|
-
export * from
|
|
1
|
+
import { default as FeedClient, Feed } from './clients/feed';
|
|
2
|
+
import { default as Knock } from './knock';
|
|
3
|
+
|
|
4
|
+
export * from './interfaces';
|
|
5
|
+
export * from './clients/feed/types';
|
|
6
|
+
export * from './clients/feed/interfaces';
|
|
7
|
+
export * from './clients/objects';
|
|
8
|
+
export * from './clients/objects/constants';
|
|
9
|
+
export * from './clients/preferences/interfaces';
|
|
10
|
+
export * from './clients/slack';
|
|
11
|
+
export * from './clients/slack/interfaces';
|
|
12
|
+
export * from './clients/users';
|
|
13
|
+
export * from './clients/users/interfaces';
|
|
14
|
+
export * from './clients/messages';
|
|
15
|
+
export * from './clients/messages/interfaces';
|
|
16
|
+
export * from './networkStatus';
|
|
16
17
|
export default Knock;
|
|
17
18
|
export { Feed, FeedClient };
|
|
18
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { GenericData } from
|
|
2
|
-
import { JwtPayload } from
|
|
1
|
+
import { GenericData } from '@knocklabs/types';
|
|
2
|
+
import { JwtPayload } from 'jwt-decode';
|
|
3
|
+
|
|
3
4
|
export type LogLevel = "debug";
|
|
4
5
|
export interface KnockOptions {
|
|
5
6
|
host?: string;
|
package/dist/types/knock.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import ApiClient from
|
|
2
|
-
import FeedClient from
|
|
3
|
-
import MessageClient from
|
|
4
|
-
import ObjectClient from
|
|
5
|
-
import Preferences from
|
|
6
|
-
import SlackClient from
|
|
7
|
-
import UserClient from
|
|
8
|
-
import { AuthenticateOptions, KnockOptions, LogLevel } from
|
|
1
|
+
import { default as ApiClient } from './api';
|
|
2
|
+
import { default as FeedClient } from './clients/feed';
|
|
3
|
+
import { default as MessageClient } from './clients/messages';
|
|
4
|
+
import { default as ObjectClient } from './clients/objects';
|
|
5
|
+
import { default as Preferences } from './clients/preferences';
|
|
6
|
+
import { default as SlackClient } from './clients/slack';
|
|
7
|
+
import { default as UserClient } from './clients/users';
|
|
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.
|
|
3
|
+
"version": "0.10.12",
|
|
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",
|
|
@@ -62,17 +62,17 @@
|
|
|
62
62
|
"eslint": "^8.56.0",
|
|
63
63
|
"jsonwebtoken": "^9.0.2",
|
|
64
64
|
"prettier": "^3.1.0",
|
|
65
|
-
"rimraf": "^
|
|
65
|
+
"rimraf": "^6.0.1",
|
|
66
66
|
"rollup": "^2.46.0",
|
|
67
|
-
"typescript": "^5.
|
|
67
|
+
"typescript": "^5.5.4",
|
|
68
68
|
"vite": "^5.0.0",
|
|
69
|
-
"vitest": "^
|
|
69
|
+
"vitest": "^2.0.5"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"@babel/runtime": "^7.23.9",
|
|
73
73
|
"@knocklabs/types": "^0.1.4",
|
|
74
74
|
"@types/phoenix": "^1.5.4",
|
|
75
|
-
"axios": "^1.
|
|
75
|
+
"axios": "^1.7.3",
|
|
76
76
|
"axios-retry": "^3.1.9",
|
|
77
77
|
"eventemitter2": "^6.4.5",
|
|
78
78
|
"jwt-decode": "^4.0.0",
|
package/src/clients/feed/feed.ts
CHANGED
|
@@ -286,7 +286,10 @@ class Feed {
|
|
|
286
286
|
return this.makeStatusUpdate(itemOrItems, "unread");
|
|
287
287
|
}
|
|
288
288
|
|
|
289
|
-
async markAsInteracted(
|
|
289
|
+
async markAsInteracted(
|
|
290
|
+
itemOrItems: FeedItemOrItems,
|
|
291
|
+
metadata?: Record<string, string>,
|
|
292
|
+
) {
|
|
290
293
|
const now = new Date().toISOString();
|
|
291
294
|
this.optimisticallyPerformStatusUpdate(
|
|
292
295
|
itemOrItems,
|
|
@@ -298,7 +301,7 @@ class Feed {
|
|
|
298
301
|
"unread_count",
|
|
299
302
|
);
|
|
300
303
|
|
|
301
|
-
return this.makeStatusUpdate(itemOrItems, "interacted");
|
|
304
|
+
return this.makeStatusUpdate(itemOrItems, "interacted", metadata);
|
|
302
305
|
}
|
|
303
306
|
|
|
304
307
|
/*
|
|
@@ -583,12 +586,17 @@ class Feed {
|
|
|
583
586
|
private async makeStatusUpdate(
|
|
584
587
|
itemOrItems: FeedItemOrItems,
|
|
585
588
|
type: MessageEngagementStatus | "unread" | "unseen" | "unarchived",
|
|
589
|
+
metadata?: Record<string, string>,
|
|
586
590
|
) {
|
|
587
591
|
// Always treat items as a batch to use the corresponding batch endpoint
|
|
588
592
|
const items = Array.isArray(itemOrItems) ? itemOrItems : [itemOrItems];
|
|
589
593
|
const itemIds = items.map((item) => item.id);
|
|
590
594
|
|
|
591
|
-
const result = await this.knock.messages.batchUpdateStatuses(
|
|
595
|
+
const result = await this.knock.messages.batchUpdateStatuses(
|
|
596
|
+
itemIds,
|
|
597
|
+
type,
|
|
598
|
+
{ metadata },
|
|
599
|
+
);
|
|
592
600
|
|
|
593
601
|
// Emit the event that these items had their statuses changed
|
|
594
602
|
// Note: we do this after the update to ensure that the server event actually completed
|