@knocklabs/client 0.11.0 → 0.11.2
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 +15 -0
- package/dist/cjs/clients/ms-teams/index.js +1 -1
- package/dist/cjs/clients/ms-teams/index.js.map +1 -1
- package/dist/cjs/knock.js.map +1 -1
- package/dist/esm/clients/ms-teams/index.mjs +68 -31
- package/dist/esm/clients/ms-teams/index.mjs.map +1 -1
- package/dist/esm/knock.mjs.map +1 -1
- package/dist/types/clients/ms-teams/index.d.ts +3 -0
- package/dist/types/clients/ms-teams/index.d.ts.map +1 -1
- package/dist/types/clients/ms-teams/interfaces.d.ts +49 -0
- package/dist/types/clients/ms-teams/interfaces.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/knock.d.ts +2 -2
- package/dist/types/knock.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/clients/ms-teams/index.ts +58 -0
- package/src/clients/ms-teams/interfaces.ts +54 -0
- package/src/index.ts +1 -0
- package/src/knock.ts +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.11.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 2161d3f: Make id and displayName required in MsTeamsTeam and MsTeamsChannel types
|
|
8
|
+
- 2161d3f: Add `ms_teams_team_id` to MsTeamsChannelConnection type
|
|
9
|
+
- 1ba1393: add TeamsKit hooks for teams and channels
|
|
10
|
+
- b4b5c02: add getTeams and getChannels to MsTeamsClient
|
|
11
|
+
|
|
12
|
+
## 0.11.1
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- b9f6712: fix: types for userId should handle undefined and null
|
|
17
|
+
|
|
3
18
|
## 0.11.0
|
|
4
19
|
|
|
5
20
|
### Minor Changes
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var l=Object.defineProperty;var u=(n,e,t)=>e in n?l(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var c=(n,e,t)=>u(n,typeof e!="symbol"?e+"":e,t);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("../objects/constants.js");class m{constructor(e){c(this,"instance");this.instance=e}async authCheck({tenant:e,knockChannelId:t}){const s=await this.instance.client().makeRequest({method:"GET",url:`/v1/providers/ms-teams/${t}/auth_check`,params:{ms_teams_tenant_object:{object_id:e,collection:r.TENANT_OBJECT_COLLECTION},channel_id:t}});return this.handleResponse(s)}async getTeams(e){const{knockChannelId:t,tenant:s}=e,a=e.queryOptions||{},o=await this.instance.client().makeRequest({method:"GET",url:`/v1/providers/ms-teams/${t}/teams`,params:{ms_teams_tenant_object:{object_id:s,collection:r.TENANT_OBJECT_COLLECTION},query_options:{$filter:a.$filter,$select:a.$select,$top:a.$top,$skiptoken:a.$skiptoken}}});return this.handleResponse(o)}async getChannels(e){const{knockChannelId:t,teamId:s,tenant:a}=e,o=e.queryOptions||{},i=await this.instance.client().makeRequest({method:"GET",url:`/v1/providers/ms-teams/${t}/channels`,params:{ms_teams_tenant_object:{object_id:a,collection:r.TENANT_OBJECT_COLLECTION},team_id:s,query_options:{$filter:o.$filter,$select:o.$select}}});return this.handleResponse(i)}async revokeAccessToken({tenant:e,knockChannelId:t}){const s=await this.instance.client().makeRequest({method:"PUT",url:`/v1/providers/ms-teams/${t}/revoke_access`,params:{ms_teams_tenant_object:{object_id:e,collection:r.TENANT_OBJECT_COLLECTION},channel_id:t}});return this.handleResponse(s)}handleResponse(e){var t,s;if(e.statusCode==="error"){if(((s=(t=e.error)==null?void 0:t.response)==null?void 0:s.status)<500)return e.error||e.body;throw new Error(e.error||e.body)}return e.body}}exports.default=m;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/clients/ms-teams/index.ts"],"sourcesContent":["import { ApiResponse } from \"../../api\";\nimport { AuthCheckInput, RevokeAccessTokenInput } from \"../../interfaces\";\nimport Knock from \"../../knock\";\nimport { TENANT_OBJECT_COLLECTION } from \"../objects/constants\";\n\nclass MsTeamsClient {\n private instance: Knock;\n\n constructor(instance: Knock) {\n this.instance = instance;\n }\n\n async authCheck({ tenant: tenantId, knockChannelId }: AuthCheckInput) {\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/providers/ms-teams/${knockChannelId}/auth_check`,\n params: {\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n channel_id: knockChannelId,\n },\n });\n\n return this.handleResponse(result);\n }\n\n async revokeAccessToken({\n tenant: tenantId,\n knockChannelId,\n }: RevokeAccessTokenInput) {\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/providers/ms-teams/${knockChannelId}/revoke_access`,\n params: {\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n channel_id: knockChannelId,\n },\n });\n\n return this.handleResponse(result);\n }\n\n private handleResponse(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;\n }\n}\n\nexport default MsTeamsClient;\n"],"names":["MsTeamsClient","instance","__publicField","tenantId","knockChannelId","result","TENANT_OBJECT_COLLECTION","response","_b","_a"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/clients/ms-teams/index.ts"],"sourcesContent":["import { ApiResponse } from \"../../api\";\nimport { AuthCheckInput, RevokeAccessTokenInput } from \"../../interfaces\";\nimport Knock from \"../../knock\";\nimport { TENANT_OBJECT_COLLECTION } from \"../objects/constants\";\n\nimport {\n GetMsTeamsChannelsInput,\n GetMsTeamsChannelsResponse,\n GetMsTeamsTeamsInput,\n GetMsTeamsTeamsResponse,\n} from \"./interfaces\";\n\nclass MsTeamsClient {\n private instance: Knock;\n\n constructor(instance: Knock) {\n this.instance = instance;\n }\n\n async authCheck({ tenant: tenantId, knockChannelId }: AuthCheckInput) {\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/providers/ms-teams/${knockChannelId}/auth_check`,\n params: {\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n channel_id: knockChannelId,\n },\n });\n\n return this.handleResponse(result);\n }\n\n async getTeams(\n input: GetMsTeamsTeamsInput,\n ): Promise<GetMsTeamsTeamsResponse> {\n const { knockChannelId, tenant: tenantId } = input;\n const queryOptions = input.queryOptions || {};\n\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/providers/ms-teams/${knockChannelId}/teams`,\n params: {\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n query_options: {\n $filter: queryOptions.$filter,\n $select: queryOptions.$select,\n $top: queryOptions.$top,\n $skiptoken: queryOptions.$skiptoken,\n },\n },\n });\n\n return this.handleResponse(result);\n }\n\n async getChannels(\n input: GetMsTeamsChannelsInput,\n ): Promise<GetMsTeamsChannelsResponse> {\n const { knockChannelId, teamId, tenant: tenantId } = input;\n const queryOptions = input.queryOptions || {};\n\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/providers/ms-teams/${knockChannelId}/channels`,\n params: {\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n team_id: teamId,\n query_options: {\n $filter: queryOptions.$filter,\n $select: queryOptions.$select,\n },\n },\n });\n\n return this.handleResponse(result);\n }\n\n async revokeAccessToken({\n tenant: tenantId,\n knockChannelId,\n }: RevokeAccessTokenInput) {\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/providers/ms-teams/${knockChannelId}/revoke_access`,\n params: {\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n channel_id: knockChannelId,\n },\n });\n\n return this.handleResponse(result);\n }\n\n private handleResponse(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;\n }\n}\n\nexport default MsTeamsClient;\n"],"names":["MsTeamsClient","instance","__publicField","tenantId","knockChannelId","result","TENANT_OBJECT_COLLECTION","input","queryOptions","teamId","response","_b","_a"],"mappings":"2TAYA,MAAMA,CAAc,CAGlB,YAAYC,EAAiB,CAFrBC,EAAA,iBAGN,KAAK,SAAWD,CAClB,CAEA,MAAM,UAAU,CAAE,OAAQE,EAAU,eAAAC,GAAkC,CACpE,MAAMC,EAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY,CACtD,OAAQ,MACR,IAAK,0BAA0BD,CAAc,cAC7C,OAAQ,CACN,uBAAwB,CACtB,UAAWD,EACX,WAAYG,EAAA,wBACd,EACA,WAAYF,CACd,CAAA,CACD,EAEM,OAAA,KAAK,eAAeC,CAAM,CACnC,CAEA,MAAM,SACJE,EACkC,CAClC,KAAM,CAAE,eAAAH,EAAgB,OAAQD,CAAA,EAAaI,EACvCC,EAAeD,EAAM,cAAgB,GAErCF,EAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY,CACtD,OAAQ,MACR,IAAK,0BAA0BD,CAAc,SAC7C,OAAQ,CACN,uBAAwB,CACtB,UAAWD,EACX,WAAYG,EAAA,wBACd,EACA,cAAe,CACb,QAASE,EAAa,QACtB,QAASA,EAAa,QACtB,KAAMA,EAAa,KACnB,WAAYA,EAAa,UAC3B,CACF,CAAA,CACD,EAEM,OAAA,KAAK,eAAeH,CAAM,CACnC,CAEA,MAAM,YACJE,EACqC,CACrC,KAAM,CAAE,eAAAH,EAAgB,OAAAK,EAAQ,OAAQN,GAAaI,EAC/CC,EAAeD,EAAM,cAAgB,GAErCF,EAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY,CACtD,OAAQ,MACR,IAAK,0BAA0BD,CAAc,YAC7C,OAAQ,CACN,uBAAwB,CACtB,UAAWD,EACX,WAAYG,EAAA,wBACd,EACA,QAASG,EACT,cAAe,CACb,QAASD,EAAa,QACtB,QAASA,EAAa,OACxB,CACF,CAAA,CACD,EAEM,OAAA,KAAK,eAAeH,CAAM,CACnC,CAEA,MAAM,kBAAkB,CACtB,OAAQF,EACR,eAAAC,CAAA,EACyB,CACzB,MAAMC,EAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY,CACtD,OAAQ,MACR,IAAK,0BAA0BD,CAAc,iBAC7C,OAAQ,CACN,uBAAwB,CACtB,UAAWD,EACX,WAAYG,EAAA,wBACd,EACA,WAAYF,CACd,CAAA,CACD,EAEM,OAAA,KAAK,eAAeC,CAAM,CACnC,CAEQ,eAAeK,EAAuB,SACxC,GAAAA,EAAS,aAAe,QAAS,CACnC,KAAIC,GAAAC,EAAAF,EAAS,QAAT,YAAAE,EAAgB,WAAhB,YAAAD,EAA0B,QAAS,IAC9B,OAAAD,EAAS,OAASA,EAAS,KAEpC,MAAM,IAAI,MAAMA,EAAS,OAASA,EAAS,IAAI,CACjD,CAEA,OAAOA,EAAS,IAClB,CACF"}
|
package/dist/cjs/knock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knock.js","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 MsTeamsClient from \"./clients/ms-teams\";\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 msTeams = new MsTeamsClient(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 // 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:
|
|
1
|
+
{"version":3,"file":"knock.js","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 MsTeamsClient from \"./clients/ms-teams\";\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 | null;\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 msTeams = new MsTeamsClient(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 // 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: Knock[\"userId\"],\n userToken?: Knock[\"userToken\"],\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","MsTeamsClient","UserClient","MessageClient","userId","userToken","reinitializeApi","checkUserToken","_a","message","ApiClient","callbackFn","timeBeforeExpirationInMs","decoded","jwtDecode","expiresAtMs","nowMs","msInFuture","newToken"],"mappings":"2lBAiBMA,EAAe,wBAErB,MAAMC,CAAM,CAeV,YACWC,EACTC,EAAwB,GACxB,CAjBKC,EAAA,aACCA,EAAA,iBAA8B,MAC/BA,EAAA,eACAA,EAAA,kBACAA,EAAA,iBACCA,EAAA,4BAA6D,MAC5DA,EAAA,aAAQ,IAAIC,UAAW,IAAI,GAC3BD,EAAA,eAAU,IAAIE,UAAa,IAAI,GAC/BF,EAAA,mBAAc,IAAIG,UAAY,IAAI,GAClCH,EAAA,aAAQ,IAAII,UAAY,IAAI,GAC5BJ,EAAA,eAAU,IAAIK,UAAc,IAAI,GAChCL,EAAA,YAAO,IAAIM,UAAW,IAAI,GAC1BN,EAAA,gBAAW,IAAIO,UAAc,IAAI,GAYxC,GATS,KAAA,OAAAT,EAGJ,KAAA,KAAOC,EAAQ,MAAQH,EAC5B,KAAK,SAAWG,EAAQ,SAExB,KAAK,IAAI,4BAA4B,EAGjC,KAAK,QAAU,KAAK,OAAO,WAAW,KAAK,EAC7C,MAAM,IAAI,MACR,qFAAA,CAGN,CAEA,QAAS,CAEH,OAAC,KAAK,YACH,KAAA,UAAY,KAAK,mBAGjB,KAAK,SACd,CAMA,aACES,EACAC,EACAV,EACA,CACA,IAAIW,EAAkB,GACG,KAAK,YAM3B,KAAK,SAAWF,GAAU,KAAK,YAAcC,KAE9C,KAAK,IAAI,yDAAyD,EAClE,KAAK,MAAM,oBACX,KAAK,SAAS,EACIC,EAAA,IAGpB,KAAK,OAASF,EACd,KAAK,UAAYC,EAEZ,KAAA,IAAI,6BAA6BD,CAAM,EAAE,EAE1C,KAAK,YAAaT,GAAA,YAAAA,EAAS,+BAA+B,UACvD,KAAA,iCACHA,EAAQ,oBACRA,EAAQ,wBAAA,EAORW,IACG,KAAA,UAAY,KAAK,kBACtB,KAAK,MAAM,wBACX,KAAK,IAAI,qCAAqC,EAIlD,CAMA,gBAAgBC,EAAiB,GAAO,CAC/B,OAAAA,EAAiB,CAAC,EAAE,KAAK,QAAU,KAAK,WAAa,CAAC,CAAC,KAAK,MACrE,CAGA,UAAW,OACL,KAAK,sBACP,aAAa,KAAK,oBAAoB,GAEpCC,EAAA,KAAK,YAAL,MAAAA,EAAgB,QAAU,KAAK,UAAU,OAAO,eAC7C,KAAA,UAAU,OAAO,YAE1B,CAEA,IAAIC,EAAiB,CACf,KAAK,WAAa,SACZ,QAAA,IAAI,WAAWA,CAAO,EAAE,CAEpC,CAKQ,iBAAkB,CACxB,OAAO,IAAIC,EAAAA,QAAU,CACnB,OAAQ,KAAK,OACb,KAAM,KAAK,KACX,UAAW,KAAK,SAAA,CACjB,CACH,CAEA,MAAc,iCACZC,EACAC,EAAmC,IACnC,CACI,GAAA,CAAC,KAAK,UAAW,OAEf,MAAAC,EAAUC,EAAAA,UAAU,KAAK,SAAS,EAClCC,GAAeF,EAAQ,KAAO,GAAK,IACnCG,EAAQ,KAAK,MAGf,GAAAD,GAAeA,EAAcC,EAAO,CAIhC,MAAAC,EAAaF,EAAcH,EAA2BI,EAEvD,KAAA,qBAAuB,WAAW,SAAY,CACjD,MAAME,EAAW,MAAMP,EAAW,KAAK,UAAqBE,CAAO,EAG/D,OAAOK,GAAa,UACjB,KAAA,aAAa,KAAK,OAASA,EAAU,CACxC,oBAAqBP,EACrB,yBAAAC,CAAA,CACD,GAEFK,CAAU,CACf,CACF,CACF"}
|
|
@@ -1,54 +1,91 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { TENANT_OBJECT_COLLECTION as
|
|
5
|
-
class
|
|
6
|
-
constructor(
|
|
7
|
-
|
|
8
|
-
this.instance =
|
|
1
|
+
var l = Object.defineProperty;
|
|
2
|
+
var m = (n, e, t) => e in n ? l(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
|
|
3
|
+
var c = (n, e, t) => m(n, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
import { TENANT_OBJECT_COLLECTION as r } from "../objects/constants.mjs";
|
|
5
|
+
class h {
|
|
6
|
+
constructor(e) {
|
|
7
|
+
c(this, "instance");
|
|
8
|
+
this.instance = e;
|
|
9
9
|
}
|
|
10
|
-
async authCheck({ tenant:
|
|
11
|
-
const
|
|
10
|
+
async authCheck({ tenant: e, knockChannelId: t }) {
|
|
11
|
+
const s = await this.instance.client().makeRequest({
|
|
12
12
|
method: "GET",
|
|
13
|
-
url: `/v1/providers/ms-teams/${
|
|
13
|
+
url: `/v1/providers/ms-teams/${t}/auth_check`,
|
|
14
14
|
params: {
|
|
15
15
|
ms_teams_tenant_object: {
|
|
16
|
-
object_id:
|
|
17
|
-
collection:
|
|
16
|
+
object_id: e,
|
|
17
|
+
collection: r
|
|
18
18
|
},
|
|
19
|
-
channel_id:
|
|
19
|
+
channel_id: t
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
|
-
return this.handleResponse(
|
|
22
|
+
return this.handleResponse(s);
|
|
23
|
+
}
|
|
24
|
+
async getTeams(e) {
|
|
25
|
+
const { knockChannelId: t, tenant: s } = e, a = e.queryOptions || {}, o = await this.instance.client().makeRequest({
|
|
26
|
+
method: "GET",
|
|
27
|
+
url: `/v1/providers/ms-teams/${t}/teams`,
|
|
28
|
+
params: {
|
|
29
|
+
ms_teams_tenant_object: {
|
|
30
|
+
object_id: s,
|
|
31
|
+
collection: r
|
|
32
|
+
},
|
|
33
|
+
query_options: {
|
|
34
|
+
$filter: a.$filter,
|
|
35
|
+
$select: a.$select,
|
|
36
|
+
$top: a.$top,
|
|
37
|
+
$skiptoken: a.$skiptoken
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return this.handleResponse(o);
|
|
42
|
+
}
|
|
43
|
+
async getChannels(e) {
|
|
44
|
+
const { knockChannelId: t, teamId: s, tenant: a } = e, o = e.queryOptions || {}, i = await this.instance.client().makeRequest({
|
|
45
|
+
method: "GET",
|
|
46
|
+
url: `/v1/providers/ms-teams/${t}/channels`,
|
|
47
|
+
params: {
|
|
48
|
+
ms_teams_tenant_object: {
|
|
49
|
+
object_id: a,
|
|
50
|
+
collection: r
|
|
51
|
+
},
|
|
52
|
+
team_id: s,
|
|
53
|
+
query_options: {
|
|
54
|
+
$filter: o.$filter,
|
|
55
|
+
$select: o.$select
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return this.handleResponse(i);
|
|
23
60
|
}
|
|
24
61
|
async revokeAccessToken({
|
|
25
|
-
tenant:
|
|
26
|
-
knockChannelId:
|
|
62
|
+
tenant: e,
|
|
63
|
+
knockChannelId: t
|
|
27
64
|
}) {
|
|
28
|
-
const
|
|
65
|
+
const s = await this.instance.client().makeRequest({
|
|
29
66
|
method: "PUT",
|
|
30
|
-
url: `/v1/providers/ms-teams/${
|
|
67
|
+
url: `/v1/providers/ms-teams/${t}/revoke_access`,
|
|
31
68
|
params: {
|
|
32
69
|
ms_teams_tenant_object: {
|
|
33
|
-
object_id:
|
|
34
|
-
collection:
|
|
70
|
+
object_id: e,
|
|
71
|
+
collection: r
|
|
35
72
|
},
|
|
36
|
-
channel_id:
|
|
73
|
+
channel_id: t
|
|
37
74
|
}
|
|
38
75
|
});
|
|
39
|
-
return this.handleResponse(
|
|
76
|
+
return this.handleResponse(s);
|
|
40
77
|
}
|
|
41
|
-
handleResponse(
|
|
42
|
-
var
|
|
43
|
-
if (
|
|
44
|
-
if (((
|
|
45
|
-
return
|
|
46
|
-
throw new Error(
|
|
78
|
+
handleResponse(e) {
|
|
79
|
+
var t, s;
|
|
80
|
+
if (e.statusCode === "error") {
|
|
81
|
+
if (((s = (t = e.error) == null ? void 0 : t.response) == null ? void 0 : s.status) < 500)
|
|
82
|
+
return e.error || e.body;
|
|
83
|
+
throw new Error(e.error || e.body);
|
|
47
84
|
}
|
|
48
|
-
return
|
|
85
|
+
return e.body;
|
|
49
86
|
}
|
|
50
87
|
}
|
|
51
88
|
export {
|
|
52
|
-
|
|
89
|
+
h as default
|
|
53
90
|
};
|
|
54
91
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/clients/ms-teams/index.ts"],"sourcesContent":["import { ApiResponse } from \"../../api\";\nimport { AuthCheckInput, RevokeAccessTokenInput } from \"../../interfaces\";\nimport Knock from \"../../knock\";\nimport { TENANT_OBJECT_COLLECTION } from \"../objects/constants\";\n\nclass MsTeamsClient {\n private instance: Knock;\n\n constructor(instance: Knock) {\n this.instance = instance;\n }\n\n async authCheck({ tenant: tenantId, knockChannelId }: AuthCheckInput) {\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/providers/ms-teams/${knockChannelId}/auth_check`,\n params: {\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n channel_id: knockChannelId,\n },\n });\n\n return this.handleResponse(result);\n }\n\n async revokeAccessToken({\n tenant: tenantId,\n knockChannelId,\n }: RevokeAccessTokenInput) {\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/providers/ms-teams/${knockChannelId}/revoke_access`,\n params: {\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n channel_id: knockChannelId,\n },\n });\n\n return this.handleResponse(result);\n }\n\n private handleResponse(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;\n }\n}\n\nexport default MsTeamsClient;\n"],"names":["MsTeamsClient","instance","__publicField","tenantId","knockChannelId","result","TENANT_OBJECT_COLLECTION","response","_b","_a"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/clients/ms-teams/index.ts"],"sourcesContent":["import { ApiResponse } from \"../../api\";\nimport { AuthCheckInput, RevokeAccessTokenInput } from \"../../interfaces\";\nimport Knock from \"../../knock\";\nimport { TENANT_OBJECT_COLLECTION } from \"../objects/constants\";\n\nimport {\n GetMsTeamsChannelsInput,\n GetMsTeamsChannelsResponse,\n GetMsTeamsTeamsInput,\n GetMsTeamsTeamsResponse,\n} from \"./interfaces\";\n\nclass MsTeamsClient {\n private instance: Knock;\n\n constructor(instance: Knock) {\n this.instance = instance;\n }\n\n async authCheck({ tenant: tenantId, knockChannelId }: AuthCheckInput) {\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/providers/ms-teams/${knockChannelId}/auth_check`,\n params: {\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n channel_id: knockChannelId,\n },\n });\n\n return this.handleResponse(result);\n }\n\n async getTeams(\n input: GetMsTeamsTeamsInput,\n ): Promise<GetMsTeamsTeamsResponse> {\n const { knockChannelId, tenant: tenantId } = input;\n const queryOptions = input.queryOptions || {};\n\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/providers/ms-teams/${knockChannelId}/teams`,\n params: {\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n query_options: {\n $filter: queryOptions.$filter,\n $select: queryOptions.$select,\n $top: queryOptions.$top,\n $skiptoken: queryOptions.$skiptoken,\n },\n },\n });\n\n return this.handleResponse(result);\n }\n\n async getChannels(\n input: GetMsTeamsChannelsInput,\n ): Promise<GetMsTeamsChannelsResponse> {\n const { knockChannelId, teamId, tenant: tenantId } = input;\n const queryOptions = input.queryOptions || {};\n\n const result = await this.instance.client().makeRequest({\n method: \"GET\",\n url: `/v1/providers/ms-teams/${knockChannelId}/channels`,\n params: {\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n team_id: teamId,\n query_options: {\n $filter: queryOptions.$filter,\n $select: queryOptions.$select,\n },\n },\n });\n\n return this.handleResponse(result);\n }\n\n async revokeAccessToken({\n tenant: tenantId,\n knockChannelId,\n }: RevokeAccessTokenInput) {\n const result = await this.instance.client().makeRequest({\n method: \"PUT\",\n url: `/v1/providers/ms-teams/${knockChannelId}/revoke_access`,\n params: {\n ms_teams_tenant_object: {\n object_id: tenantId,\n collection: TENANT_OBJECT_COLLECTION,\n },\n channel_id: knockChannelId,\n },\n });\n\n return this.handleResponse(result);\n }\n\n private handleResponse(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;\n }\n}\n\nexport default MsTeamsClient;\n"],"names":["MsTeamsClient","instance","__publicField","tenantId","knockChannelId","result","TENANT_OBJECT_COLLECTION","input","queryOptions","teamId","response","_b","_a"],"mappings":";;;;AAYA,MAAMA,EAAc;AAAA,EAGlB,YAAYC,GAAiB;AAFrB,IAAAC,EAAA;AAGN,SAAK,WAAWD;AAAA,EAClB;AAAA,EAEA,MAAM,UAAU,EAAE,QAAQE,GAAU,gBAAAC,KAAkC;AACpE,UAAMC,IAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY;AAAA,MACtD,QAAQ;AAAA,MACR,KAAK,0BAA0BD,CAAc;AAAA,MAC7C,QAAQ;AAAA,QACN,wBAAwB;AAAA,UACtB,WAAWD;AAAA,UACX,YAAYG;AAAA,QACd;AAAA,QACA,YAAYF;AAAA,MACd;AAAA,IAAA,CACD;AAEM,WAAA,KAAK,eAAeC,CAAM;AAAA,EACnC;AAAA,EAEA,MAAM,SACJE,GACkC;AAClC,UAAM,EAAE,gBAAAH,GAAgB,QAAQD,EAAA,IAAaI,GACvCC,IAAeD,EAAM,gBAAgB,IAErCF,IAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY;AAAA,MACtD,QAAQ;AAAA,MACR,KAAK,0BAA0BD,CAAc;AAAA,MAC7C,QAAQ;AAAA,QACN,wBAAwB;AAAA,UACtB,WAAWD;AAAA,UACX,YAAYG;AAAA,QACd;AAAA,QACA,eAAe;AAAA,UACb,SAASE,EAAa;AAAA,UACtB,SAASA,EAAa;AAAA,UACtB,MAAMA,EAAa;AAAA,UACnB,YAAYA,EAAa;AAAA,QAC3B;AAAA,MACF;AAAA,IAAA,CACD;AAEM,WAAA,KAAK,eAAeH,CAAM;AAAA,EACnC;AAAA,EAEA,MAAM,YACJE,GACqC;AACrC,UAAM,EAAE,gBAAAH,GAAgB,QAAAK,GAAQ,QAAQN,MAAaI,GAC/CC,IAAeD,EAAM,gBAAgB,IAErCF,IAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY;AAAA,MACtD,QAAQ;AAAA,MACR,KAAK,0BAA0BD,CAAc;AAAA,MAC7C,QAAQ;AAAA,QACN,wBAAwB;AAAA,UACtB,WAAWD;AAAA,UACX,YAAYG;AAAA,QACd;AAAA,QACA,SAASG;AAAA,QACT,eAAe;AAAA,UACb,SAASD,EAAa;AAAA,UACtB,SAASA,EAAa;AAAA,QACxB;AAAA,MACF;AAAA,IAAA,CACD;AAEM,WAAA,KAAK,eAAeH,CAAM;AAAA,EACnC;AAAA,EAEA,MAAM,kBAAkB;AAAA,IACtB,QAAQF;AAAA,IACR,gBAAAC;AAAA,EAAA,GACyB;AACzB,UAAMC,IAAS,MAAM,KAAK,SAAS,OAAA,EAAS,YAAY;AAAA,MACtD,QAAQ;AAAA,MACR,KAAK,0BAA0BD,CAAc;AAAA,MAC7C,QAAQ;AAAA,QACN,wBAAwB;AAAA,UACtB,WAAWD;AAAA,UACX,YAAYG;AAAA,QACd;AAAA,QACA,YAAYF;AAAA,MACd;AAAA,IAAA,CACD;AAEM,WAAA,KAAK,eAAeC,CAAM;AAAA,EACnC;AAAA,EAEQ,eAAeK,GAAuB;;AACxC,QAAAA,EAAS,eAAe,SAAS;AACnC,YAAIC,KAAAC,IAAAF,EAAS,UAAT,gBAAAE,EAAgB,aAAhB,gBAAAD,EAA0B,UAAS;AAC9B,eAAAD,EAAS,SAASA,EAAS;AAEpC,YAAM,IAAI,MAAMA,EAAS,SAASA,EAAS,IAAI;AAAA,IACjD;AAEA,WAAOA,EAAS;AAAA,EAClB;AACF;"}
|
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 MsTeamsClient from \"./clients/ms-teams\";\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 msTeams = new MsTeamsClient(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 // 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:
|
|
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 MsTeamsClient from \"./clients/ms-teams\";\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 | null;\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 msTeams = new MsTeamsClient(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 // 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: Knock[\"userId\"],\n userToken?: Knock[\"userToken\"],\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","MsTeamsClient","UserClient","MessageClient","userId","userToken","reinitializeApi","checkUserToken","_a","message","ApiClient","callbackFn","timeBeforeExpirationInMs","decoded","jwtDecode","expiresAtMs","nowMs","msInFuture","newToken"],"mappings":";;;;;;;;;;;;AAiBA,MAAMA,IAAe;AAErB,MAAMC,EAAM;AAAA,EAeV,YACWC,GACTC,IAAwB,IACxB;AAjBK,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,iBAAU,IAAIK,EAAc,IAAI;AAChC,IAAAL,EAAA,cAAO,IAAIM,EAAW,IAAI;AAC1B,IAAAN,EAAA,kBAAW,IAAIO,EAAc,IAAI;AAYxC,QATS,KAAA,SAAAT,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;AAEH,WAAC,KAAK,cACH,KAAA,YAAY,KAAK,oBAGjB,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aACES,GACAC,GACAV,GACA;AACA,QAAIW,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,cAAaT,KAAA,gBAAAA,EAAS,gCAA+B,YACvD,KAAA;AAAA,MACHA,EAAQ;AAAA,MACRA,EAAQ;AAAA,IAAA,GAORW,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;"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { AuthCheckInput, RevokeAccessTokenInput } from '../../interfaces';
|
|
2
2
|
import { default as Knock } from '../../knock';
|
|
3
|
+
import { GetMsTeamsChannelsInput, GetMsTeamsChannelsResponse, GetMsTeamsTeamsInput, GetMsTeamsTeamsResponse } from './interfaces';
|
|
3
4
|
declare class MsTeamsClient {
|
|
4
5
|
private instance;
|
|
5
6
|
constructor(instance: Knock);
|
|
6
7
|
authCheck({ tenant: tenantId, knockChannelId }: AuthCheckInput): Promise<any>;
|
|
8
|
+
getTeams(input: GetMsTeamsTeamsInput): Promise<GetMsTeamsTeamsResponse>;
|
|
9
|
+
getChannels(input: GetMsTeamsChannelsInput): Promise<GetMsTeamsChannelsResponse>;
|
|
7
10
|
revokeAccessToken({ tenant: tenantId, knockChannelId, }: RevokeAccessTokenInput): Promise<any>;
|
|
8
11
|
private handleResponse;
|
|
9
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/clients/ms-teams/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,MAAM,aAAa,CAAC;AAGhC,cAAM,aAAa;IACjB,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,QAAQ,EAAE,KAAK;IAIrB,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,cAAc;IAgB9D,iBAAiB,CAAC,EACtB,MAAM,EAAE,QAAQ,EAChB,cAAc,GACf,EAAE,sBAAsB;IAgBzB,OAAO,CAAC,cAAc;CAUvB;AAED,eAAe,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/clients/ms-teams/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,MAAM,aAAa,CAAC;AAGhC,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,cAAc,CAAC;AAEtB,cAAM,aAAa;IACjB,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,QAAQ,EAAE,KAAK;IAIrB,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,cAAc;IAgB9D,QAAQ,CACZ,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,uBAAuB,CAAC;IAwB7B,WAAW,CACf,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,0BAA0B,CAAC;IAuBhC,iBAAiB,CAAC,EACtB,MAAM,EAAE,QAAQ,EAChB,cAAc,GACf,EAAE,sBAAsB;IAgBzB,OAAO,CAAC,cAAc;CAUvB;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export type MsTeamsChannelConnection = {
|
|
2
|
+
ms_teams_tenant_id?: string;
|
|
3
|
+
ms_teams_team_id?: string;
|
|
4
|
+
ms_teams_channel_id?: string;
|
|
5
|
+
ms_teams_user_id?: null;
|
|
6
|
+
incoming_webhook?: {
|
|
7
|
+
url: string;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
export type GetMsTeamsTeamsInput = {
|
|
11
|
+
tenant: string;
|
|
12
|
+
knockChannelId: string;
|
|
13
|
+
queryOptions?: {
|
|
14
|
+
$filter?: string;
|
|
15
|
+
$select?: string;
|
|
16
|
+
$top?: number;
|
|
17
|
+
$skiptoken?: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export type GetMsTeamsChannelsInput = {
|
|
21
|
+
tenant: string;
|
|
22
|
+
knockChannelId: string;
|
|
23
|
+
teamId: string;
|
|
24
|
+
queryOptions?: {
|
|
25
|
+
$filter?: string;
|
|
26
|
+
$select?: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export type GetMsTeamsTeamsResponse = {
|
|
30
|
+
ms_teams_teams: MsTeamsTeam[];
|
|
31
|
+
skip_token: string | null;
|
|
32
|
+
};
|
|
33
|
+
export type GetMsTeamsChannelsResponse = {
|
|
34
|
+
ms_teams_channels: MsTeamsChannel[];
|
|
35
|
+
};
|
|
36
|
+
export type MsTeamsTeam = {
|
|
37
|
+
id: string;
|
|
38
|
+
displayName: string;
|
|
39
|
+
description?: string;
|
|
40
|
+
};
|
|
41
|
+
export type MsTeamsChannel = {
|
|
42
|
+
id: string;
|
|
43
|
+
displayName: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
membershipType?: string;
|
|
46
|
+
isArchived?: boolean;
|
|
47
|
+
createdDateTime?: string;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/clients/ms-teams/interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG;IACrC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,gBAAgB,CAAC,EAAE;QACjB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,iBAAiB,EAAE,cAAc,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export * from './clients/preferences/interfaces';
|
|
|
9
9
|
export * from './clients/slack';
|
|
10
10
|
export * from './clients/slack/interfaces';
|
|
11
11
|
export * from './clients/ms-teams';
|
|
12
|
+
export * from './clients/ms-teams/interfaces';
|
|
12
13
|
export * from './clients/users';
|
|
13
14
|
export * from './clients/users/interfaces';
|
|
14
15
|
export * from './clients/messages';
|
|
@@ -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,oBAAoB,CAAC;AACnC,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,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,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"}
|
package/dist/types/knock.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ declare class Knock {
|
|
|
11
11
|
readonly apiKey: string;
|
|
12
12
|
host: string;
|
|
13
13
|
private apiClient;
|
|
14
|
-
userId: string | undefined;
|
|
14
|
+
userId: string | undefined | null;
|
|
15
15
|
userToken?: string;
|
|
16
16
|
logLevel?: LogLevel;
|
|
17
17
|
private tokenExpirationTimer;
|
|
@@ -24,7 +24,7 @@ declare class Knock {
|
|
|
24
24
|
readonly messages: MessageClient;
|
|
25
25
|
constructor(apiKey: string, options?: KnockOptions);
|
|
26
26
|
client(): ApiClient;
|
|
27
|
-
authenticate(userId:
|
|
27
|
+
authenticate(userId: Knock["userId"], userToken?: Knock["userToken"], options?: AuthenticateOptions): void;
|
|
28
28
|
isAuthenticated(checkUserToken?: boolean): boolean;
|
|
29
29
|
teardown(): void;
|
|
30
30
|
log(message: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knock.d.ts","sourceRoot":"","sources":["../../src/knock.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,OAAO,CAAC;AAC9B,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EAET,MAAM,cAAc,CAAC;AAItB,cAAM,KAAK;IAgBP,QAAQ,CAAC,MAAM,EAAE,MAAM;IAflB,IAAI,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,SAAS,CAA0B;IACpC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"knock.d.ts","sourceRoot":"","sources":["../../src/knock.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,OAAO,CAAC;AAC9B,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EAET,MAAM,cAAc,CAAC;AAItB,cAAM,KAAK;IAgBP,QAAQ,CAAC,MAAM,EAAE,MAAM;IAflB,IAAI,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,SAAS,CAA0B;IACpC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC3B,OAAO,CAAC,oBAAoB,CAA8C;IAC1E,QAAQ,CAAC,KAAK,aAAwB;IACtC,QAAQ,CAAC,OAAO,eAA0B;IAC1C,QAAQ,CAAC,WAAW,cAAyB;IAC7C,QAAQ,CAAC,KAAK,cAAyB;IACvC,QAAQ,CAAC,OAAO,gBAA2B;IAC3C,QAAQ,CAAC,IAAI,aAAwB;IACrC,QAAQ,CAAC,QAAQ,gBAA2B;gBAGjC,MAAM,EAAE,MAAM,EACvB,OAAO,GAAE,YAAiB;IAe5B,MAAM;IAaN,YAAY,CACV,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EACvB,SAAS,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,EAC9B,OAAO,CAAC,EAAE,mBAAmB;IA6C/B,eAAe,CAAC,cAAc,UAAQ;IAKtC,QAAQ;IASR,GAAG,CAAC,OAAO,EAAE,MAAM;IAMnB;;OAEG;IACH,OAAO,CAAC,eAAe;YAQT,gCAAgC;CA8B/C;AAED,eAAe,KAAK,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knocklabs/client",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.2",
|
|
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",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"@babel/plugin-proposal-object-rest-spread": "^7.16.7",
|
|
54
54
|
"@babel/plugin-transform-runtime": "^7.25.4",
|
|
55
55
|
"@babel/preset-env": "^7.26.0",
|
|
56
|
-
"@babel/preset-typescript": "^7.
|
|
56
|
+
"@babel/preset-typescript": "^7.26.0",
|
|
57
57
|
"@types/jsonwebtoken": "^9.0.5",
|
|
58
58
|
"@typescript-eslint/eslint-plugin": "^8.19.1",
|
|
59
59
|
"@typescript-eslint/parser": "^8.16.0",
|
|
@@ -64,9 +64,9 @@
|
|
|
64
64
|
"prettier": "^3.4.2",
|
|
65
65
|
"rimraf": "^6.0.1",
|
|
66
66
|
"rollup": "^4.27.4",
|
|
67
|
-
"typescript": "^5.
|
|
67
|
+
"typescript": "^5.7.3",
|
|
68
68
|
"vite": "^5.0.0",
|
|
69
|
-
"vitest": "^2.1.
|
|
69
|
+
"vitest": "^2.1.8"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"@babel/runtime": "^7.26.0",
|
|
@@ -3,6 +3,13 @@ import { AuthCheckInput, RevokeAccessTokenInput } from "../../interfaces";
|
|
|
3
3
|
import Knock from "../../knock";
|
|
4
4
|
import { TENANT_OBJECT_COLLECTION } from "../objects/constants";
|
|
5
5
|
|
|
6
|
+
import {
|
|
7
|
+
GetMsTeamsChannelsInput,
|
|
8
|
+
GetMsTeamsChannelsResponse,
|
|
9
|
+
GetMsTeamsTeamsInput,
|
|
10
|
+
GetMsTeamsTeamsResponse,
|
|
11
|
+
} from "./interfaces";
|
|
12
|
+
|
|
6
13
|
class MsTeamsClient {
|
|
7
14
|
private instance: Knock;
|
|
8
15
|
|
|
@@ -26,6 +33,57 @@ class MsTeamsClient {
|
|
|
26
33
|
return this.handleResponse(result);
|
|
27
34
|
}
|
|
28
35
|
|
|
36
|
+
async getTeams(
|
|
37
|
+
input: GetMsTeamsTeamsInput,
|
|
38
|
+
): Promise<GetMsTeamsTeamsResponse> {
|
|
39
|
+
const { knockChannelId, tenant: tenantId } = input;
|
|
40
|
+
const queryOptions = input.queryOptions || {};
|
|
41
|
+
|
|
42
|
+
const result = await this.instance.client().makeRequest({
|
|
43
|
+
method: "GET",
|
|
44
|
+
url: `/v1/providers/ms-teams/${knockChannelId}/teams`,
|
|
45
|
+
params: {
|
|
46
|
+
ms_teams_tenant_object: {
|
|
47
|
+
object_id: tenantId,
|
|
48
|
+
collection: TENANT_OBJECT_COLLECTION,
|
|
49
|
+
},
|
|
50
|
+
query_options: {
|
|
51
|
+
$filter: queryOptions.$filter,
|
|
52
|
+
$select: queryOptions.$select,
|
|
53
|
+
$top: queryOptions.$top,
|
|
54
|
+
$skiptoken: queryOptions.$skiptoken,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
return this.handleResponse(result);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async getChannels(
|
|
63
|
+
input: GetMsTeamsChannelsInput,
|
|
64
|
+
): Promise<GetMsTeamsChannelsResponse> {
|
|
65
|
+
const { knockChannelId, teamId, tenant: tenantId } = input;
|
|
66
|
+
const queryOptions = input.queryOptions || {};
|
|
67
|
+
|
|
68
|
+
const result = await this.instance.client().makeRequest({
|
|
69
|
+
method: "GET",
|
|
70
|
+
url: `/v1/providers/ms-teams/${knockChannelId}/channels`,
|
|
71
|
+
params: {
|
|
72
|
+
ms_teams_tenant_object: {
|
|
73
|
+
object_id: tenantId,
|
|
74
|
+
collection: TENANT_OBJECT_COLLECTION,
|
|
75
|
+
},
|
|
76
|
+
team_id: teamId,
|
|
77
|
+
query_options: {
|
|
78
|
+
$filter: queryOptions.$filter,
|
|
79
|
+
$select: queryOptions.$select,
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
return this.handleResponse(result);
|
|
85
|
+
}
|
|
86
|
+
|
|
29
87
|
async revokeAccessToken({
|
|
30
88
|
tenant: tenantId,
|
|
31
89
|
knockChannelId,
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export type MsTeamsChannelConnection = {
|
|
2
|
+
ms_teams_tenant_id?: string;
|
|
3
|
+
ms_teams_team_id?: string;
|
|
4
|
+
ms_teams_channel_id?: string;
|
|
5
|
+
ms_teams_user_id?: null;
|
|
6
|
+
incoming_webhook?: {
|
|
7
|
+
url: string;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export type GetMsTeamsTeamsInput = {
|
|
12
|
+
tenant: string;
|
|
13
|
+
knockChannelId: string;
|
|
14
|
+
queryOptions?: {
|
|
15
|
+
$filter?: string;
|
|
16
|
+
$select?: string;
|
|
17
|
+
$top?: number;
|
|
18
|
+
$skiptoken?: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export type GetMsTeamsChannelsInput = {
|
|
23
|
+
tenant: string;
|
|
24
|
+
knockChannelId: string;
|
|
25
|
+
teamId: string;
|
|
26
|
+
queryOptions?: {
|
|
27
|
+
$filter?: string;
|
|
28
|
+
$select?: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export type GetMsTeamsTeamsResponse = {
|
|
33
|
+
ms_teams_teams: MsTeamsTeam[];
|
|
34
|
+
skip_token: string | null;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export type GetMsTeamsChannelsResponse = {
|
|
38
|
+
ms_teams_channels: MsTeamsChannel[];
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export type MsTeamsTeam = {
|
|
42
|
+
id: string;
|
|
43
|
+
displayName: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export type MsTeamsChannel = {
|
|
48
|
+
id: string;
|
|
49
|
+
displayName: string;
|
|
50
|
+
description?: string;
|
|
51
|
+
membershipType?: string;
|
|
52
|
+
isArchived?: boolean;
|
|
53
|
+
createdDateTime?: string;
|
|
54
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -10,6 +10,7 @@ export * from "./clients/preferences/interfaces";
|
|
|
10
10
|
export * from "./clients/slack";
|
|
11
11
|
export * from "./clients/slack/interfaces";
|
|
12
12
|
export * from "./clients/ms-teams";
|
|
13
|
+
export * from "./clients/ms-teams/interfaces";
|
|
13
14
|
export * from "./clients/users";
|
|
14
15
|
export * from "./clients/users/interfaces";
|
|
15
16
|
export * from "./clients/messages";
|
package/src/knock.ts
CHANGED
|
@@ -20,7 +20,7 @@ const DEFAULT_HOST = "https://api.knock.app";
|
|
|
20
20
|
class Knock {
|
|
21
21
|
public host: string;
|
|
22
22
|
private apiClient: ApiClient | null = null;
|
|
23
|
-
public userId: string | undefined;
|
|
23
|
+
public userId: string | undefined | null;
|
|
24
24
|
public userToken?: string;
|
|
25
25
|
public logLevel?: LogLevel;
|
|
26
26
|
private tokenExpirationTimer: ReturnType<typeof setTimeout> | null = null;
|
|
@@ -63,8 +63,8 @@ class Knock {
|
|
|
63
63
|
the userToken must be specified.
|
|
64
64
|
*/
|
|
65
65
|
authenticate(
|
|
66
|
-
userId:
|
|
67
|
-
userToken?:
|
|
66
|
+
userId: Knock["userId"],
|
|
67
|
+
userToken?: Knock["userToken"],
|
|
68
68
|
options?: AuthenticateOptions,
|
|
69
69
|
) {
|
|
70
70
|
let reinitializeApi = false;
|