Skip to content

Commit

Permalink
Merge branch 'master' into mfr/restore_support_DeepColdArchive
Browse files Browse the repository at this point in the history
# Conflicts:
#	package-lock.json
  • Loading branch information
孟凡荣 committed Nov 19, 2024
2 parents 971394c + 986b743 commit 4e08a83
Show file tree
Hide file tree
Showing 18 changed files with 291 additions and 2,573 deletions.
13 changes: 11 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,8 @@ All operation use es7 async/await to implement. All api is async function.
- [.copy(name, sourceName[, sourceBucket, options])](#copyname-sourcename-sourcebucket-options)
- [.putMeta(name, meta[, options])](#putmetaname-meta-options)
- [.deleteMulti(names[, options])](#deletemultinames-options)
- [.signatureUrl(name[, options])](#signatureurlname-options)
- [.asyncSignatureUrl(name[, options])](#signatureurlname-options)
- [.signatureUrl(name[, options, strictObjectNameValidation])](#signatureurlname-options-strictobjectnamevalidation)
- [.asyncSignatureUrl(name[, options, strictObjectNameValidation])](#asyncsignatureurlname-options-strictobjectnamevalidation)
- [.signatureUrlV4(method, expires[, request, objectName, additionalHeaders])](#signatureurlv4method-expires-request-objectname-additionalheaders)
- [.putACL(name, acl[, options])](#putaclname-acl-options)
- [.getACL(name[, options])](#getaclname-options)
Expand Down Expand Up @@ -2449,6 +2449,9 @@ Success will return objects list on `objects` properties.
- size {Number} object size, e.g.: `344606`
- storageClass {String} storage class type, e.g.: `Standard`
- owner {Object} object owner, including `id` and `displayName`
- restoreInfo {Object|undefined} The restoration status of the object
- ongoingRequest {Boolean} Whether the restoration is complete
- expireDate {Date|undefined} The time before which the restored object can be read
- prefixes {Array<String>} prefix list
- isTruncated {Boolean} truncate or not
- nextMarker {String} next marker string
Expand Down Expand Up @@ -2515,6 +2518,9 @@ Success will return objects list on `objects` properties.
- size {Number} object size, e.g.: `344606`
- storageClass {String} storage class type, e.g.: `Standard`
- owner {Object|null} object owner, including `id` and `displayName`
- restoreInfo {Object|undefined} The restoration status of the object
- ongoingRequest {Boolean} Whether the restoration is complete
- expireDate {Date|undefined} The time before which the restored object can be read
- prefixes {Array<String>} prefix list
- isTruncated {Boolean} truncate or not
- nextContinuationToken {String} next continuation-token string
Expand Down Expand Up @@ -2595,6 +2601,9 @@ Success will return objects list on `objects` properties.
- versionId {String} object versionId
- storageClass {String} storage class type, e.g.: `Standard`
- owner {Object} object owner, including `id` and `displayName`
- restoreInfo {Object|undefined} The restoration status of the object
- ongoingRequest {Boolean} Whether the restoration is complete
- expireDate {Date|undefined} The time before which the restored object can be read
- deleteMarker {Array<ObjectDeleteMarker>} object delete marker info list
Each `ObjectDeleteMarker`
- name {String} object name on oss
Expand Down
11 changes: 6 additions & 5 deletions lib/browser/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ proto.requestError = async function requestError(result) {
this.debug(message, 'error');
error.message += `\nraw xml: ${message}`;
error.status = result.status;
error.requestId = result.headers['x-oss-request-id'];
error.requestId = result.headers && result.headers['x-oss-request-id'];
return error;
}

Expand All @@ -416,6 +416,7 @@ proto.requestError = async function requestError(result) {
err.requestId = info.RequestId;
err.hostId = info.HostId;
err.serverTime = info.ServerTime;
return err;
};

if (!result.data || !result.data.length) {
Expand All @@ -442,20 +443,20 @@ proto.requestError = async function requestError(result) {
err.name = 'UnknownError';
err.status = result.status;
err.res = result;
const ossErr = result.headers['x-oss-err'];
const ossErr = result.headers && result.headers['x-oss-err'];
if (ossErr) {
const message = atob(ossErr);
await setError(message);
err = await setError(message);
}
}
err.requestId = result.headers['x-oss-request-id'];
err.requestId = result.headers && result.headers['x-oss-request-id'];
err.host = '';
}
} else {
const message = String(result.data);
this.debug('request response error data: %s', message, 'error');

await setError(message);
err = await setError(message);
}

this.debug('generate error %j', err, 'error');
Expand Down
9 changes: 7 additions & 2 deletions lib/browser/object.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const { isBlob } = require('../common/utils/isBlob');
const { isFile } = require('../common/utils/isFile');
const { isBuffer } = require('../common/utils/isBuffer');
const { obj2xml } = require('../common/utils/obj2xml');
const { parseRestoreInfo } = require('../common/utils/parseRestoreInfo');

// var assert = require('assert');

Expand Down Expand Up @@ -191,6 +192,7 @@ proto.list = async function list(query, options) {
if (!Array.isArray(objects)) {
objects = [objects];
}

objects = objects.map(obj => ({
name: obj.Key,
url: that._objectUrl(obj.Key),
Expand All @@ -202,7 +204,8 @@ proto.list = async function list(query, options) {
owner: {
id: obj.Owner.ID,
displayName: obj.Owner.DisplayName
}
},
restoreInfo: parseRestoreInfo(obj.RestoreInfo)
}));
}
let prefixes = result.data.CommonPrefixes || null;
Expand Down Expand Up @@ -245,6 +248,7 @@ proto.listV2 = async function listV2(query, options = {}) {
if (!Array.isArray(objects)) {
objects = [objects];
}

objects = objects.map(obj => {
let owner = null;
if (obj.Owner) {
Expand All @@ -261,7 +265,8 @@ proto.listV2 = async function listV2(query, options = {}) {
type: obj.Type,
size: Number(obj.Size),
storageClass: obj.StorageClass,
owner
owner,
restoreInfo: parseRestoreInfo(obj.RestoreInfo)
};
});
}
Expand Down
11 changes: 6 additions & 5 deletions lib/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ proto.requestError = async function requestError(result) {
debug(message);
error.message += `\nraw xml: ${message}`;
error.status = result.status;
error.requestId = result.headers['x-oss-request-id'];
error.requestId = result.headers && result.headers['x-oss-request-id'];
return error;
}

Expand All @@ -380,6 +380,7 @@ proto.requestError = async function requestError(result) {
err.requestId = info.RequestId;
err.ecCode = info.EC;
err.hostId = info.HostId;
return err;
};

if (result.name === 'ResponseTimeoutError') {
Expand Down Expand Up @@ -409,20 +410,20 @@ proto.requestError = async function requestError(result) {
err.name = 'UnknownError';
err.status = result.status;
err.res = result;
const ossErr = result.headers['x-oss-err'];
const ossErr = result.headers && result.headers['x-oss-err'];
if (ossErr) {
const message = Buffer.from(ossErr, 'base64').toString('utf8');
await setError(message);
err = await setError(message);
}
}
err.requestId = result.headers['x-oss-request-id'];
err.requestId = result.headers && result.headers['x-oss-request-id'];
err.host = '';
}
} else {
const message = String(result.data);
debug('request response error data: %s', message);

await setError(message);
err = await setError(message);
}

debug('generate error %j', err);
Expand Down
4 changes: 3 additions & 1 deletion lib/common/object/getBucketVersions.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
const proto = exports;
const { isObject } = require('../utils/isObject');
const { isArray } = require('../utils/isArray');
const { parseRestoreInfo } = require('../utils/parseRestoreInfo');

proto.getBucketVersions = getBucketVersions;
proto.listObjectVersions = getBucketVersions;
Expand Down Expand Up @@ -43,7 +44,8 @@ async function getBucketVersions(query = {}, options = {}) {
owner: {
id: obj.Owner.ID,
displayName: obj.Owner.DisplayName
}
},
restoreInfo: parseRestoreInfo(obj.RestoreInfo)
}));
}
if (deleteMarker) {
Expand Down
4 changes: 2 additions & 2 deletions lib/common/object/signatureUrlV4.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const proto = exports;
*/
proto.signatureUrlV4 = async function signatureUrlV4(method, expires, request, objectName, additionalHeaders) {
const headers = (request && request.headers) || {};
const queries = { ...((request && request.queries) || {}) };
const queries = Object.assign({}, (request && request.queries) || {});
const date = new Date();
const formattedDate = dateFormat(date, "UTC:yyyymmdd'T'HHMMss'Z'");
const onlyDate = formattedDate.split('T')[0];
Expand Down Expand Up @@ -64,7 +64,7 @@ proto.signatureUrlV4 = async function signatureUrlV4(method, expires, request, o
object: objectName
})
);
signedUrl.query = { ...queries };
signedUrl.query = Object.assign({}, queries);

return signedUrl.format();
};
2 changes: 1 addition & 1 deletion lib/common/signUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ exports.getCanonicalRequest = function getCanonicalRequest(method, request, buck
signContent.push(canonicalHeaders);

// Additional Headers
if (additionalHeaders.length > 0) {
if (additionalHeaders && additionalHeaders.length > 0) {
signContent.push(additionalHeaders.join(';'));
} else {
signContent.push('');
Expand Down
6 changes: 6 additions & 0 deletions lib/common/utils/parseRestoreInfo.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
interface IRestoreInfo {
ongoingRequest: boolean;
expiryDate?: Date;
}
export declare const parseRestoreInfo: (originalRestoreInfo?: string | undefined) => IRestoreInfo | undefined;
export {};
18 changes: 18 additions & 0 deletions lib/common/utils/parseRestoreInfo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
exports.parseRestoreInfo = void 0;
exports.parseRestoreInfo = originalRestoreInfo => {
let tempRestoreInfo;
if (originalRestoreInfo) {
tempRestoreInfo = {
ongoingRequest: originalRestoreInfo.includes('true')
};
if (!tempRestoreInfo.ongoingRequest) {
const matchArray = originalRestoreInfo.match(/expiry-date="(.*)"/);
if (matchArray && matchArray[1]) {
tempRestoreInfo.expiryDate = new Date(matchArray[1]);
}
}
}
return tempRestoreInfo;
};
24 changes: 24 additions & 0 deletions lib/common/utils/parseRestoreInfo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
interface IRestoreInfo {
ongoingRequest: boolean;
expiryDate?: Date;
}

export const parseRestoreInfo = (originalRestoreInfo?: string): IRestoreInfo | undefined => {
let tempRestoreInfo: IRestoreInfo | undefined;

if (originalRestoreInfo) {
tempRestoreInfo = {
ongoingRequest: originalRestoreInfo.includes('true')
};

if (!tempRestoreInfo.ongoingRequest) {
const matchArray = originalRestoreInfo.match(/expiry-date="(.*)"/);

if (matchArray && matchArray[1]) {
tempRestoreInfo.expiryDate = new Date(matchArray[1]);
}
}
}

return tempRestoreInfo;
};
9 changes: 7 additions & 2 deletions lib/object.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ const pump = require('pump');
const { isBuffer } = require('./common/utils/isBuffer');
const { retry } = require('./common/utils/retry');
const { obj2xml } = require('./common/utils/obj2xml');
const { parseRestoreInfo } = require('./common/utils/parseRestoreInfo');

const proto = exports;

Expand Down Expand Up @@ -211,6 +212,7 @@ proto.list = async function list(query, options) {
if (!Array.isArray(objects)) {
objects = [objects];
}

objects = objects.map(obj => ({
name: obj.Key,
url: that._objectUrl(obj.Key),
Expand All @@ -222,7 +224,8 @@ proto.list = async function list(query, options) {
owner: {
id: obj.Owner.ID,
displayName: obj.Owner.DisplayName
}
},
restoreInfo: parseRestoreInfo(obj.RestoreInfo)
}));
}
let prefixes = result.data.CommonPrefixes || null;
Expand Down Expand Up @@ -276,6 +279,7 @@ proto.listV2 = async function listV2(query = {}, options = {}) {
displayName: obj.Owner.DisplayName
};
}

return {
name: obj.Key,
url: that._objectUrl(obj.Key),
Expand All @@ -284,7 +288,8 @@ proto.listV2 = async function listV2(query = {}, options = {}) {
type: obj.Type,
size: Number(obj.Size),
storageClass: obj.StorageClass,
owner
owner,
restoreInfo: parseRestoreInfo(obj.RestoreInfo)
};
});
}
Expand Down
Loading

0 comments on commit 4e08a83

Please sign in to comment.