diff --git a/.github/workflows/run_test_cases.yml b/.github/workflows/run_test_cases.yml new file mode 100644 index 00000000..5f1249b1 --- /dev/null +++ b/.github/workflows/run_test_cases.yml @@ -0,0 +1,9 @@ +name: PR Tests + +on: + pull_request: + branches: [ main ] + +jobs: + test: + uses: ./.github/workflows/test_cases.yml \ No newline at end of file diff --git a/.github/workflows/test_cases.yml b/.github/workflows/test_cases.yml new file mode 100644 index 00000000..6009589c --- /dev/null +++ b/.github/workflows/test_cases.yml @@ -0,0 +1,38 @@ +name: Run test cases + +on: workflow_call + +jobs: + run-test-cases: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + node-version: [18.x, 20.x] + fail-fast: false + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Run tests + shell: bash + run: npm test + env: + NODE_ENV: test + + - name: Upload coverage (Ubuntu + Node 18 only) + if: matrix.os == 'ubuntu-latest' && matrix.node-version == '18.x' && github.ref == 'refs/heads/main' + uses: coverallsapp/github-action@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/express/api_routes.js b/express/api_routes.js index e9dd91fc..0617fd9b 100644 --- a/express/api_routes.js +++ b/express/api_routes.js @@ -2,7 +2,7 @@ const { extension } = require('./extension'); const express = require('express'); const { sessionMiddleware, partnerSessionMiddleware } = require('./middleware/session_middleware'); -const { ApplicationConfig, ApplicationClient } = require("@gofynd/fdk-client-javascript"); +const { ApplicationClient } = require("@gofynd/fdk-client-javascript"); function setupProxyRoutes(configData) { @@ -18,13 +18,12 @@ function setupProxyRoutes(configData) { } if (req.headers["x-application-data"]) { req.application = JSON.parse(req.headers["x-application-data"]); - req.applicationConfig = new ApplicationConfig({ + req.applicationClient = new ApplicationClient({ applicationID: req.application._id, applicationToken: req.application.token, domain: extension.cluster, - logLevel: configData.debug === true? "debug": null + logLevel: configData.debug === true ? "debug" : null }); - req.applicationClient = new ApplicationClient(req.applicationConfig); } next(); } catch (error) { diff --git a/express/extension.js b/express/extension.js index 4a8cf357..d04217cb 100644 --- a/express/extension.js +++ b/express/extension.js @@ -2,7 +2,7 @@ const validator = require('validator'); const { FdkInvalidExtensionConfig } = require("./error_code"); const urljoin = require('url-join'); -const { PlatformConfig, PlatformClient, PartnerConfig, PartnerClient } = require("@gofynd/fdk-client-javascript"); +const { PlatformClient, PartnerClient } = require("@gofynd/fdk-client-javascript"); const { WebhookRegistry } = require('./webhook'); const logger = require('./logger'); const { fdkAxios } = require('@gofynd/fdk-client-javascript/sdk/common/AxiosHelper'); @@ -110,7 +110,9 @@ class Extension { if (!this._isInitialized){ await this.initialize(this.configData); } - let platformConfig = new PlatformConfig({ + + // Create client without session for OAuth operations only + let platformClient = new PlatformClient({ companyId: parseInt(companyId), domain: this.cluster, apiKey: this.api_key, @@ -118,8 +120,8 @@ class Extension { useAutoRenewTimer: false, logLevel: this.configData.debug === true? "debug": null }); - return platformConfig; - + + return platformClient.config; // Return just the config } async getPlatformClient(companyId, session) { @@ -127,23 +129,29 @@ class Extension { await this.initialize(this.configData); } const SessionStorage = require('./session/session_storage'); - - let platformConfig = await this.getPlatformConfig(companyId); - platformConfig.oauthClient.setToken(session); - platformConfig.oauthClient.token_expires_at = session.access_token_validity; + let platformClient = new PlatformClient({ + companyId: parseInt(companyId), + domain: this.cluster, + apiKey: this.api_key, + apiSecret: this.api_secret, + useAutoRenewTimer: false, + logLevel: this.configData.debug === true? "debug": null + }); + + platformClient.config.oauthClient.setToken(session); + platformClient.config.oauthClient.token_expires_at = session.access_token_validity; if (!session.access_token_validity || session.refresh_token) { let ac_nr_expired = !session.access_token_validity? true: ((session.access_token_validity - new Date().getTime()) / 1000) <= 120; if (ac_nr_expired) { - logger.debug(`Renewing access token for company ${companyId} with platform config ${logger.safeStringify(platformConfig)}`); - const renewTokenRes = await platformConfig.oauthClient.renewAccessToken(session.access_mode === 'offline'); - renewTokenRes.access_token_validity = platformConfig.oauthClient.token_expires_at; + logger.debug(`Renewing access token for company ${companyId}`); + const renewTokenRes = await platformClient.config.oauthClient.renewAccessToken(session.access_mode === 'offline'); + renewTokenRes.access_token_validity = platformClient.config.oauthClient.token_expires_at; session.updateToken(renewTokenRes); await SessionStorage.saveSession(session); - logger.debug(`Access token renewed for company ${companyId} with response ${logger.safeStringify(renewTokenRes)}`); + logger.debug(`Access token renewed for company ${companyId}`); } } - let platformClient = new PlatformClient(platformConfig); platformClient.setExtraHeaders({ 'x-ext-lib-version': `js/${version}` }) @@ -154,16 +162,18 @@ class Extension { if (!this._isInitialized) { throw new FdkInvalidExtensionConfig("Extension not initialized due to invalid data"); } - - let partnerConfig = new PartnerConfig({ + + // Create client without session for OAuth operations only + let partnerClient = new PartnerClient({ organizationId: organizationId, domain: this.cluster, apiKey: this.api_key, apiSecret: this.api_secret, useAutoRenewTimer: false, - logLevel: this.configData.debug === true? "debug": null - }) - return partnerConfig; + logLevel: this.configData.debug === true? "debug": null + }); + + return partnerClient.config; // Return just the config } async getPartnerClient(organizationId, session) { @@ -172,22 +182,29 @@ class Extension { } const SessionStorage = require('./session/session_storage'); - let partnerConfig = this.getPartnerConfig(organizationId); - partnerConfig.oauthClient.setToken(session); - partnerConfig.oauthClient.token_expires_at = session.access_token_validity; + let partnerClient = new PartnerClient({ + organizationId: organizationId, + domain: this.cluster, + apiKey: this.api_key, + apiSecret: this.api_secret, + useAutoRenewTimer: false, + logLevel: this.configData.debug === true? "debug": null + }); + + partnerClient.config.oauthClient.setToken(session); + partnerClient.config.oauthClient.token_expires_at = session.access_token_validity; 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)}`); - const renewTokenRes = await partnerConfig.oauthClient.renewAccessToken(session.access_mode === 'offline'); - renewTokenRes.access_token_validity = partnerConfig.oauthClient.token_expires_at; + logger.debug(`Renewing access token for organization ${organizationId}`); + const renewTokenRes = await partnerClient.config.oauthClient.renewAccessToken(session.access_mode === 'offline'); + renewTokenRes.access_token_validity = partnerClient.config.oauthClient.token_expires_at; session.updateToken(renewTokenRes); await SessionStorage.saveSession(session); - logger.debug(`Access token renewed for organization ${organizationId} with response ${logger.safeStringify(renewTokenRes)}`); + logger.debug(`Access token renewed for organization ${organizationId}`); } } - let partnerClient = new PartnerClient(partnerConfig); partnerClient.setExtraHeaders({ 'x-ext-lib-version': `js/${version}` }) diff --git a/express/index.js b/express/index.js index 6a3e1969..b9ef5376 100644 --- a/express/index.js +++ b/express/index.js @@ -5,7 +5,7 @@ const setupRoutes = require("./routes"); const { setupProxyRoutes } = require("./api_routes"); const Session = require("./session/session"); const SessionStorage = require("./session/session_storage"); -const { ApplicationConfig, ApplicationClient } = require("@gofynd/fdk-client-javascript"); +const { ApplicationClient } = require("@gofynd/fdk-client-javascript"); const logger = require('./logger'); function setupFdk(data, syncInitialization) { @@ -34,14 +34,12 @@ function setupFdk(data, syncInitialization) { } async function getApplicationClient(applicationId, applicationToken) { - let applicationConfig = new ApplicationConfig({ + return new ApplicationClient({ applicationID: applicationId, applicationToken: applicationToken, domain: extension.cluster, - logLevel: data.debug === true? "debug": null + logLevel: data.debug === true ? "debug" : null }); - let applicationClient = new ApplicationClient(applicationConfig); - return applicationClient; } async function getPartnerClient(organizationId) { diff --git a/package-lock.json b/package-lock.json index 3790b7e9..6d07fcde 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@gofynd/fdk-client-javascript": "^1.4.13", + "@gofynd/fdk-client-javascript": "^3.4.2", "axios-mock-adapter": "^1.18.1", "body-parser": "^1.19.0", "cookie-parser": "^1.4.5", @@ -34,7 +34,7 @@ "supertest": "^4.0.2" }, "peerDependencies": { - "@gofynd/fdk-client-javascript": ">=1.4.13" + "@gofynd/fdk-client-javascript": ">=3.4.2" } }, "node_modules/@ampproject/remapping": { @@ -409,12 +409,12 @@ } }, "node_modules/@gofynd/fdk-client-javascript": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@gofynd/fdk-client-javascript/-/fdk-client-javascript-1.4.13.tgz", - "integrity": "sha512-r+Yhp4gBd8GDG74CB+GAeqae3cwIc/gvECuzmDYQiTA3nkPuMVM/SCRcsHDxoYVqdh/rbrfykJM9se4L4RCT6w==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@gofynd/fdk-client-javascript/-/fdk-client-javascript-3.4.2.tgz", + "integrity": "sha512-I6teienJceCx3JQJVhUnv4gqsT93X74IE+fOk8zk71O8kmnaMnhscPrYL64XDIOMNC/QXQQItLV7OQ6XnKhs+A==", "dev": true, + "license": "ISC", "dependencies": { - "@gofynd/flick": "^1.0.9", "@gofynd/fp-signature": "^1.0.1", "axios": "^1.6.4", "camelcase": "^6.3.0", @@ -423,27 +423,12 @@ "query-string": "^7.1.3" } }, - "node_modules/@gofynd/flick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gofynd/flick/-/flick-1.1.0.tgz", - "integrity": "sha512-aUvFCaCPrDjH+NIn3v2XXDWiaeC6KjWnD8Bt/IBjxO7Bz2lH4383vX9FlfGW99X0OBAa5TbcDe4o5yZ/zDfLNg==", - "dev": true, - "dependencies": { - "@gofynd/fp-signature": "^1.0.1", - "@types/es6-promise": "^3.3.0", - "@types/ua-parser-js": "0.7.36", - "@types/uuid": "9.0.1", - "axios": "^1.6.7", - "query-string": "^7.1.3", - "ua-parser-js": "^1.0.2", - "uuid": "^8.3.2" - } - }, "node_modules/@gofynd/fp-signature": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@gofynd/fp-signature/-/fp-signature-1.0.1.tgz", - "integrity": "sha512-fcBeJ/+z4Dg3zqS9xFouM9L3ZNd1RI1yGJGJ8PI6YDaS0Hpi4bVIadYuRtLHASGez7vydBcC+hTcpRyOxiqzVw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@gofynd/fp-signature/-/fp-signature-1.0.2.tgz", + "integrity": "sha512-7cDq9nzfHyxAanV3g5MYcDvLwzYIdrzSz5TOpyHfneFvbrYYjkB6+7OktsY8IErHdS+TKt1Emoo9ES/C7eZZpw==", "dev": true, + "license": "ISC", "dependencies": { "crypto-js": "^4.2.0" } @@ -607,16 +592,6 @@ "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", "dev": true }, - "node_modules/@types/es6-promise": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@types/es6-promise/-/es6-promise-3.3.0.tgz", - "integrity": "sha512-ixCIAEkLUKv9movnHKCzx2rzAJgEnSALDXPrOSSwOjWwXFs0ssSZKan+O2e3FExPPCbX+DfA9NcKsbvLuyUlNA==", - "deprecated": "This is a stub types definition for es6-promise (https://github.com/jakearchibald/ES6-Promise). es6-promise provides its own type definitions, so you don't need @types/es6-promise installed!", - "dev": true, - "dependencies": { - "es6-promise": "*" - } - }, "node_modules/@types/node": { "version": "8.10.66", "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", @@ -660,18 +635,6 @@ "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" }, - "node_modules/@types/ua-parser-js": { - "version": "0.7.36", - "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.36.tgz", - "integrity": "sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ==", - "dev": true - }, - "node_modules/@types/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", - "dev": true - }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1360,6 +1323,7 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -1605,12 +1569,6 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -1754,6 +1712,7 @@ "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3381,6 +3340,7 @@ "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", "dev": true, + "license": "MIT", "dependencies": { "decode-uri-component": "^0.2.2", "filter-obj": "^1.1.0", @@ -3868,6 +3828,7 @@ "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3940,6 +3901,7 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -4282,32 +4244,6 @@ "is-typedarray": "^1.0.0" } }, - "node_modules/ua-parser-js": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", - "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "bin": { - "ua-parser-js": "script/cli.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -4951,12 +4887,11 @@ } }, "@gofynd/fdk-client-javascript": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@gofynd/fdk-client-javascript/-/fdk-client-javascript-1.4.13.tgz", - "integrity": "sha512-r+Yhp4gBd8GDG74CB+GAeqae3cwIc/gvECuzmDYQiTA3nkPuMVM/SCRcsHDxoYVqdh/rbrfykJM9se4L4RCT6w==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@gofynd/fdk-client-javascript/-/fdk-client-javascript-3.4.2.tgz", + "integrity": "sha512-I6teienJceCx3JQJVhUnv4gqsT93X74IE+fOk8zk71O8kmnaMnhscPrYL64XDIOMNC/QXQQItLV7OQ6XnKhs+A==", "dev": true, "requires": { - "@gofynd/flick": "^1.0.9", "@gofynd/fp-signature": "^1.0.1", "axios": "^1.6.4", "camelcase": "^6.3.0", @@ -4965,26 +4900,10 @@ "query-string": "^7.1.3" } }, - "@gofynd/flick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gofynd/flick/-/flick-1.1.0.tgz", - "integrity": "sha512-aUvFCaCPrDjH+NIn3v2XXDWiaeC6KjWnD8Bt/IBjxO7Bz2lH4383vX9FlfGW99X0OBAa5TbcDe4o5yZ/zDfLNg==", - "dev": true, - "requires": { - "@gofynd/fp-signature": "^1.0.1", - "@types/es6-promise": "^3.3.0", - "@types/ua-parser-js": "0.7.36", - "@types/uuid": "9.0.1", - "axios": "^1.6.7", - "query-string": "^7.1.3", - "ua-parser-js": "^1.0.2", - "uuid": "^8.3.2" - } - }, "@gofynd/fp-signature": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@gofynd/fp-signature/-/fp-signature-1.0.1.tgz", - "integrity": "sha512-fcBeJ/+z4Dg3zqS9xFouM9L3ZNd1RI1yGJGJ8PI6YDaS0Hpi4bVIadYuRtLHASGez7vydBcC+hTcpRyOxiqzVw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@gofynd/fp-signature/-/fp-signature-1.0.2.tgz", + "integrity": "sha512-7cDq9nzfHyxAanV3g5MYcDvLwzYIdrzSz5TOpyHfneFvbrYYjkB6+7OktsY8IErHdS+TKt1Emoo9ES/C7eZZpw==", "dev": true, "requires": { "crypto-js": "^4.2.0" @@ -5133,15 +5052,6 @@ "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", "dev": true }, - "@types/es6-promise": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@types/es6-promise/-/es6-promise-3.3.0.tgz", - "integrity": "sha512-ixCIAEkLUKv9movnHKCzx2rzAJgEnSALDXPrOSSwOjWwXFs0ssSZKan+O2e3FExPPCbX+DfA9NcKsbvLuyUlNA==", - "dev": true, - "requires": { - "es6-promise": "*" - } - }, "@types/node": { "version": "8.10.66", "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", @@ -5184,18 +5094,6 @@ "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" }, - "@types/ua-parser-js": { - "version": "0.7.36", - "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.36.tgz", - "integrity": "sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ==", - "dev": true - }, - "@types/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", - "dev": true - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -5925,12 +5823,6 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, "escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -7968,12 +7860,6 @@ "is-typedarray": "^1.0.0" } }, - "ua-parser-js": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", - "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", - "dev": true - }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", diff --git a/package.json b/package.json index a4f0fd05..bd08daec 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@gofynd/fdk-client-javascript": "^1.4.13", + "@gofynd/fdk-client-javascript": "^3.4.2", "axios-mock-adapter": "^1.18.1", "body-parser": "^1.19.0", "cookie-parser": "^1.4.5", @@ -53,7 +53,7 @@ "report-dir": "./coverage" }, "peerDependencies": { - "@gofynd/fdk-client-javascript": ">=1.4.13" + "@gofynd/fdk-client-javascript": ">=3.4.2" }, "name": "@gofynd/fdk-extension-javascript", "description": "FDK Extension Helper Library", @@ -63,7 +63,7 @@ "example": "examples" }, "scripts": { - "test": "./node_modules/.bin/nyc node spec.js" + "test": "npx nyc node spec.js" }, "repository": { "type": "git", diff --git a/spec/global.spec.js b/spec/global.spec.js deleted file mode 100644 index ec9cdea1..00000000 --- a/spec/global.spec.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; -// require('../init'); -// global mock import should be always first to work mocking. -// const globalMock = require("./mocks/global.mock"); -const logger = require("./utils/logger"); - -const db = require("./helpers/setup_db"); -const server = require("./helpers/server"); - -beforeAll(async () => { - logger.info("beforeAll:started"); - //jasmine.addMatchers(jsonSchemaMatcher); - console.log(db.redisConnection.status); - if (db.redisConnection.status !== "connecting" && db.redisConnection.status !== "connected") { - await db.connect(); - } - logger.info("beforeAll:completed"); - // done(); -}, 50000); - -afterAll(async () => { - logger.info("afterAll:started"); - // globalMock.restore(); - await db.clearData(); - server.app.close(); - await db.disconnect(); - logger.info("afterAll:completed"); - // done(); -}, 20000); \ No newline at end of file diff --git a/spec/helpers/fdk.js b/spec/helpers/fdk.js index 6a664057..4154c3f6 100644 --- a/spec/helpers/fdk.js +++ b/spec/helpers/fdk.js @@ -1,6 +1,5 @@ const { setupFdk } = require("../../express"); -const { RedisStorage } = require("../../express/storage"); -const { redisConnection } = require("../helpers/setup_db"); +const { MemoryStorage } = require("../../express/storage"); module.exports = (settings) => { return setupFdk({ @@ -12,7 +11,7 @@ module.exports = (settings) => { auth: ()=>{}, uninstall: ()=>{} }, - storage: new RedisStorage(redisConnection, "test_fdk"), + storage: new MemoryStorage("test_fdk"), access_mode: "online", cluster: "http://localdev.fyndx0.de", ...settings diff --git a/spec/helpers/server.js b/spec/helpers/server.js index e1814668..811b640f 100644 --- a/spec/helpers/server.js +++ b/spec/helpers/server.js @@ -4,15 +4,15 @@ const express = require('express'); const cookieParser = require('cookie-parser'); const logger = require('../utils/logger'); const bodyParser = require('body-parser'); -const PORT = 5070; +// const PORT = 5070; -module.exports = function listen(){ +module.exports = function listen(port = 5070){ const app = express(); app.use(cookieParser("ext.session")); app.use(bodyParser.json({ limit: '2mb' })); - const server = app.listen(PORT , async () => { - logger.info("Server started at http://localhost:" + PORT); + const server = app.listen(port , async () => { + logger.info("Server started at http://localhost:" + port); }); server.restApp = app; server.shutdown = function(cb) { diff --git a/spec/helpers/setup_db.js b/spec/helpers/setup_db.js index 4acc498d..1affdc66 100644 --- a/spec/helpers/setup_db.js +++ b/spec/helpers/setup_db.js @@ -1,26 +1,15 @@ -const Redis = require('ioredis'); -const redisConnection = new Redis("localhost"); +// Simple mock for memory storage - no Redis needed +const storage = new Map(); async function clearData() { - const keys = await redisConnection.keys("test_fdk*"); - const promises = []; - for(let key of keys) { - promises.push(redisConnection.del(key)); + // Clear all test data from memory storage + for (const key of storage.keys()) { + if (key.startsWith("test_fdk")) { + storage.delete(key); + } } - await Promise.all(promises); -} - -function connect() { - return redisConnection.connect(); -} - -function disconnect() { - return redisConnection.disconnect(); } module.exports = { - redisConnection, - connect, - disconnect, clearData }; \ No newline at end of file diff --git a/spec/tests/webhooks.spec.js b/spec/tests/webhooks.spec.js index d5c34c38..688738a7 100644 --- a/spec/tests/webhooks.spec.js +++ b/spec/tests/webhooks.spec.js @@ -2,7 +2,7 @@ const fdkHelper = require("../helpers/fdk"); const { clearData } = require("../helpers/setup_db"); -const request = require("../helpers/server")(); +const request = require("../helpers/server")(5071); const axiosMock = require("./../mocks/axios.mock.js"); const { SESSION_COOKIE_NAME } = require("../../express/constants"); const hmacSHA256 = require("crypto-js/hmac-sha256"); diff --git a/spec/tests/webhooksv1.spec.js b/spec/tests/webhooksv1.spec.js index ffcca213..13303619 100644 --- a/spec/tests/webhooksv1.spec.js +++ b/spec/tests/webhooksv1.spec.js @@ -2,7 +2,7 @@ const fdkHelper = require("../helpers/fdk"); const { clearData } = require("../helpers/setup_db"); -const request = require("../helpers/server")(); +const request = require("../helpers/server")(5072); const axiosMock = require("./../mocks/axiosv1.mock.js"); const { SESSION_COOKIE_NAME } = require("../../express/constants"); const hmacSHA256 = require("crypto-js/hmac-sha256");