diff --git a/CHANGELOG.md b/CHANGELOG.md index 79c36310..8a74d6f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v0.7.12] - 2024-11-18 +### Changed +- Added offline token support for partner clients. + ## [v0.7.11] - 2024-09-23 ### Changed - Kafka config response key change in api. diff --git a/README.md b/README.md index e535f526..45cb94ca 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,31 @@ function backgroundHandler(companyId) { } ``` + +#### How to call partner apis in background tasks? + +Background tasks running under some consumer or webhook or under any queue can get partner client via method `getPartnerClient`. It will return instance of `PartnerClient` as well. + +> Here FdkClient `access_mode` should be **offline**. Cause such client can only access PartnerClient in background task. + +```javascript +function backgroundHandler(organizationId) { + try { + const partnerClient = await fdkExtension.getPartnerClient(organizationId); + let data = await partnerClient.webhook.responseTimeSummary({ + extensionId: '', + startDate: '', + endDate: '' + }); + // Some business logic here + res.json({ success: true }); + } catch (err) { + console.error(err); + res.status(404).json({ success: false }); + } +} +``` + #### How to call partner apis? To call partner api you need to have instance of `PartnerClient`. Instance holds methods for SDK classes. All routes registered under `partnerApiRoutes` express router will have `partnerClient` under request object which is instance of `PartnerClient`. diff --git a/express/extension.js b/express/extension.js index fd3fe650..4a8cf357 100644 --- a/express/extension.js +++ b/express/extension.js @@ -176,7 +176,7 @@ class Extension { partnerConfig.oauthClient.setToken(session); partnerConfig.oauthClient.token_expires_at = session.access_token_validity; - if (session.access_token_validity && session.refresh_token) { + if (!session.access_token_validity || session.refresh_token) { let ac_nr_expired = ((session.access_token_validity - new Date().getTime()) / 1000) <= 120; if (ac_nr_expired) { logger.debug(`Renewing access token for organization ${organizationId} with platform config ${logger.safeStringify(partnerConfig)}`); diff --git a/express/index.js b/express/index.js index f107c083..6a3e1969 100644 --- a/express/index.js +++ b/express/index.js @@ -44,6 +44,19 @@ function setupFdk(data, syncInitialization) { return applicationClient; } + async function getPartnerClient(organizationId) { + let client = null; + if (!extension.isOnlineAccessMode()) { + let sid = Session.generateSessionId(false, { + cluster: extension.cluster, + id: organizationId + }); + let session = await SessionStorage.getSession(sid); + client = await extension.getPartnerClient(organizationId, session); + } + return client; + } + const configInstance = { fdkHandler: router, extension: extension, @@ -53,6 +66,7 @@ function setupFdk(data, syncInitialization) { webhookRegistry: extension.webhookRegistry, applicationProxyRoutes: applicationProxyRoutes, getPlatformClient: getPlatformClient, + getPartnerClient: getPartnerClient, getApplicationClient: getApplicationClient }; diff --git a/package-lock.json b/package-lock.json index dbff1a3f..a9eaec8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@gofynd/fdk-extension-javascript", - "version": "0.7.11", + "version": "0.7.12", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index 3844dc4a..0c7dea6a 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ }, "name": "@gofynd/fdk-extension-javascript", "description": "FDK Extension Helper Library", - "version": "0.7.11", + "version": "0.7.12", "main": "index.js", "directories": { "example": "examples"