Skip to content

Commit 029f8b1

Browse files
committed
Updated sources
1 parent a4fd090 commit 029f8b1

File tree

8 files changed

+719
-897
lines changed

8 files changed

+719
-897
lines changed

package-lock.json

Lines changed: 500 additions & 705 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "groupdocs-annotation-cloud",
3-
"version": "23.4.0",
3+
"version": "23.12.0",
44
"description": "GroupDocs.Annotation Cloud SDK for Node.js",
55
"homepage": "https://products.groupdocs.cloud/annotation",
66
"author": {
@@ -31,18 +31,21 @@
3131
"build:package": "npm pack"
3232
},
3333
"dependencies": {
34-
"@types/request": "*",
35-
"request": "^2.88.2",
36-
"request-debug": "^0.2.0"
34+
"axios": "1.6.2",
35+
"form-data": "*",
36+
"jsonwebtoken": "9.0.1",
37+
"qs": "6.11.2"
3738
},
3839
"devDependencies": {
3940
"@types/chai": "^4.2.14",
41+
"@types/jsonwebtoken": "9.0.1",
4042
"@types/mocha": "^5.2.7",
4143
"@types/node": "^12.19.15",
44+
"@types/qs": "^6.9.7",
4245
"chai": "^4.2.0",
4346
"mocha": "^10.2.0",
4447
"ts-node": "^8.6.2",
4548
"tslint": "^6.1.0",
46-
"typescript": "^3.7.5"
49+
"typescript": "^5.1.6"
4750
}
4851
}

src/annotation_api.ts

Lines changed: 129 additions & 132 deletions
Large diffs are not rendered by default.

src/api_client.ts

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@
2222
* SOFTWARE.
2323
*/
2424

25-
import request = require("request");
26-
import requestDebug = require("request-debug");
25+
import axios, { AxiosResponse, RawAxiosRequestConfig } from "axios";
2726
import { Configuration } from "./configuration";
2827
import { PackageVersion } from "./package_version";
2928

@@ -33,7 +32,7 @@ import { PackageVersion } from "./package_version";
3332
* @param config Configuration
3433
* @param skipAuth If enabled, auth is not applied to request
3534
*/
36-
export async function invokeApiMethod(requestOptions: request.Options, config: Configuration, skipAuth?: boolean): Promise<request.RequestResponse> {
35+
export async function invokeApiMethod(requestOptions: RawAxiosRequestConfig, config: Configuration, skipAuth?: boolean): Promise<AxiosResponse> {
3736
return await invokeApiMethodInternal(requestOptions, config, skipAuth);
3837
}
3938

@@ -64,14 +63,14 @@ export function addQueryParameterToUrl(url, queryParameters, parameterName, para
6463
* @param config Configuration
6564
* @param skipAuth If enabled, auth is not applied to request
6665
*/
67-
async function invokeApiMethodInternal(requestOptions: request.Options, config: Configuration, skipAuth?: boolean): Promise<request.RequestResponse> {
68-
if (config.debugging === true) {
69-
requestDebug(request, (type, data) => {
70-
const toLog = {};
71-
toLog[type] = data;
72-
console.log(JSON.stringify(toLog, undefined, 2));
73-
});
74-
}
66+
async function invokeApiMethodInternal(requestOptions: RawAxiosRequestConfig, config: Configuration, skipAuth?: boolean): Promise<AxiosResponse> {
67+
// if (config.debugging === true) {
68+
// requestDebug(request, (type, data) => {
69+
// const toLog = {};
70+
// toLog[type] = data;
71+
// console.log(JSON.stringify(toLog, undefined, 2));
72+
// });
73+
// }
7574

7675
if (!requestOptions.headers) {
7776
requestOptions.headers = {};
@@ -85,36 +84,37 @@ async function invokeApiMethodInternal(requestOptions: request.Options, config:
8584
await auth.applyToRequest(requestOptions, config);
8685
}
8786

88-
return new Promise<request.RequestResponse>((resolve, reject) => {
89-
request(requestOptions, async (error, response) => {
90-
if (error) {
91-
reject(error);
87+
return new Promise<AxiosResponse>((resolve, reject) => {
88+
axios(requestOptions)
89+
.then((response) => {
90+
if (response.status >= 200 && response.status <= 299) {
91+
resolve(response);
9292
} else {
93-
if (response.statusCode >= 200 && response.statusCode <= 299) {
94-
resolve(response);
95-
} else {
96-
try {
97-
let bodyContent = response.body;
98-
if (bodyContent instanceof Buffer) {
99-
bodyContent = JSON.parse(bodyContent.toString("utf8"));
100-
}
101-
if (bodyContent.error) {
102-
if (bodyContent.error.message) {
103-
reject({ message: bodyContent.error.message, code: bodyContent.error.code });
104-
} else {
105-
reject({ message: bodyContent.error, code: response.statusCode });
106-
}
107-
} else {
108-
if (bodyContent.message) {
109-
reject({ message: bodyContent.message, code: bodyContent.code });
110-
} else {
111-
reject({ message: bodyContent, code: response.statusCode });
112-
}
113-
}
114-
} catch (error) {
115-
reject({ message: "Error while parse server error: " + error });
93+
reject({ message: response.data, code: response.status });
94+
}
95+
})
96+
.catch((error: any) => {
97+
try {
98+
const response = error.response;
99+
let bodyContent = response.data;
100+
if (bodyContent instanceof Buffer) {
101+
bodyContent = JSON.parse(bodyContent.toString("utf8"));
102+
}
103+
if (bodyContent.error) {
104+
if (bodyContent.error.message) {
105+
reject({ message: bodyContent.error.message, code: bodyContent.error.code });
106+
} else {
107+
reject({ message: bodyContent.error, code: response.status });
116108
}
109+
} else {
110+
if (bodyContent.message) {
111+
reject({ message: bodyContent.message, code: bodyContent.code });
112+
} else {
113+
reject({ message: bodyContent, code: response.status });
114+
}
117115
}
116+
} catch (error) {
117+
reject({ message: "Error while parse server error: " + error });
118118
}
119119
});
120120
});

src/api_error.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
/**
2626
* Describes API error.
2727
*/
28+
// tslint:disable: completed-docs
2829
export class ApiError {
2930

3031
/**

src/auth.ts

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
* SOFTWARE.
2323
*/
2424

25-
import request = require("request");
25+
import jwt = require("jsonwebtoken");
26+
import { RawAxiosRequestConfig } from "axios";
2627
import { invokeApiMethod } from "./api_client";
2728
import { Configuration } from "./configuration";
29+
import qs = require("qs");
2830

2931
/**
3032
* Authentication logic for api calls
@@ -33,7 +35,7 @@ export interface IAuthentication {
3335
/**
3436
* Apply authentication settings to header and query params.
3537
*/
36-
applyToRequest(requestOptions: request.Options, configuration: Configuration): void;
38+
applyToRequest(requestOptions: RawAxiosRequestConfig, configuration: Configuration): void;
3739

3840
}
3941

@@ -46,8 +48,8 @@ export class OAuth implements IAuthentication {
4648
/**
4749
* Apply authentication settings to header and query params
4850
*/
49-
public async applyToRequest(requestOptions: request.Options, configuration: Configuration): Promise<void> {
50-
if (this.accessToken == null) {
51+
public async applyToRequest(requestOptions: RawAxiosRequestConfig, configuration: Configuration): Promise<void> {
52+
if (this.accessToken == null || !this.isTokenValid()) {
5153
await this._requestToken(configuration);
5254
}
5355

@@ -59,19 +61,43 @@ export class OAuth implements IAuthentication {
5961
}
6062

6163
private async _requestToken(configuration: Configuration): Promise<void> {
62-
const requestOptions: request.Options = {
63-
method: "POST",
64-
json: true,
65-
uri: configuration.apiBaseUrl + "/connect/token",
66-
form: {
67-
grant_type: "client_credentials",
68-
client_id: configuration.appSid,
69-
client_secret: configuration.appKey,
70-
},
64+
const requestOptions: RawAxiosRequestConfig = {
65+
method: "post",
66+
headers: { "content-type": "application/x-www-form-urlencoded" },
67+
maxBodyLength: Infinity,
68+
url: configuration.apiBaseUrl + "/connect/token",
69+
data : qs.stringify({
70+
grant_type: "client_credentials",
71+
client_id: configuration.appSid,
72+
client_secret: configuration.appKey,
73+
}),
7174
};
72-
75+
7376
const response = await invokeApiMethod(requestOptions, configuration, true);
74-
this.accessToken = response.body.access_token;
77+
this.accessToken = response.data.access_token;
78+
7579
return Promise.resolve();
7680
}
81+
82+
private isTokenValid() {
83+
try {
84+
const decodedToken = jwt.decode(this.accessToken) as jwt.JwtPayload;
85+
86+
if (!decodedToken) {
87+
console.log("Invalid token.");
88+
return;
89+
}
90+
91+
const expirationTime = decodedToken.exp;
92+
const currentTime = Math.floor(Date.now() / 1000);
93+
94+
if (currentTime <= expirationTime) {
95+
return true;
96+
} else {
97+
return false;
98+
}
99+
} catch (error) {
100+
return false;
101+
}
102+
}
77103
}

src/package_version.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@
2525
/**
2626
* Package version
2727
*/
28-
export const PackageVersion: string = "23.4.0";
28+
export const PackageVersion: string = "23.12.0";

src/serializer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ export class Serializer {
132132
}
133133

134134
private static findCorrectType(data: any, expectedType: string) {
135-
if (data === undefined || data === null) {
135+
if (data === undefined) {
136136
return expectedType;
137137
} else if (primitives.indexOf(expectedType.toLowerCase()) !== -1) {
138138
return expectedType;

0 commit comments

Comments
 (0)