box-node-sdk
Version:
Official SDK for Box Platform APIs
103 lines (98 loc) • 3.06 kB
text/typescript
import { SerializedData } from '../serialization/json';
import { GeneratedCodeError } from '../internal/errors';
import { utilLib } from '../internal/utils';
import { DataSanitizer } from '../internal/logging';
export class BoxSdkError extends GeneratedCodeError {
readonly timestamp?: string;
readonly error?: Error;
constructor(fields: Pick<BoxSdkError, 'message' | 'timestamp' | 'error'>) {
super(fields);
this.name = 'BoxSdkError';
this.timestamp = fields.timestamp;
this.error = fields.error;
Object.setPrototypeOf(this, BoxSdkError.prototype);
}
}
export interface RequestInfo {
readonly contentType?: string;
readonly method: string;
readonly url: string;
readonly queryParams: {
readonly [key: string]: string;
};
readonly headers: {
readonly [key: string]: string;
};
readonly body?: any;
}
export interface ResponseInfo {
readonly statusCode: number;
readonly headers: {
readonly [key: string]: string;
};
readonly body?: SerializedData;
readonly rawBody?: string;
readonly code?: string;
readonly contextInfo?: {
readonly [key: string]: any;
};
readonly requestId?: string;
readonly helpUrl?: string;
}
export class BoxApiError extends BoxSdkError {
readonly requestInfo!: RequestInfo;
readonly responseInfo!: ResponseInfo;
readonly dataSanitizer: DataSanitizer = new DataSanitizer({});
constructor(
fields: Pick<
BoxApiError,
'message' | 'timestamp' | 'error' | 'requestInfo' | 'responseInfo'
> &
Partial<Pick<BoxApiError, 'dataSanitizer'>>,
) {
super(fields);
this.name = 'BoxApiError';
this.requestInfo = fields.requestInfo;
this.responseInfo = fields.responseInfo;
if (fields.dataSanitizer) {
this.dataSanitizer = fields.dataSanitizer;
}
Object.setPrototypeOf(this, BoxApiError.prototype);
}
[utilLib.inspect.custom]() {
return this.toString();
}
toString(): string {
return JSON.stringify(this.toJSON(), null, 2);
}
toJSON() {
return {
name: this.name,
message: this.message,
timestamp: this.timestamp,
error: this.error,
requestInfo: {
method: this.requestInfo.method,
url: this.requestInfo.url,
queryParams: this.requestInfo.queryParams,
headers: this.dataSanitizer.sanitizeHeaders(this.requestInfo.headers),
body:
typeof this.requestInfo.body === 'string'
? this.dataSanitizer.sanitizeStringBody(
this.requestInfo.body,
this.requestInfo.contentType,
)
: this.requestInfo.body,
},
responseInfo: {
statusCode: this.responseInfo.statusCode,
headers: this.dataSanitizer.sanitizeHeaders(this.responseInfo.headers),
body: this.dataSanitizer.sanitizeBody(this.responseInfo.body),
code: this.responseInfo.code,
contextInfo: this.responseInfo.contextInfo,
requestId: this.responseInfo.requestId,
helpUrl: this.responseInfo.helpUrl,
},
};
}
}