hexo/node_modules/ali-oss/lib/common/bucket/putBucketInventory.ts

85 lines
2.4 KiB
TypeScript

import { checkBucketName } from '../utils/checkBucketName';
import { obj2xml } from '../utils/obj2xml';
type Field = 'Size | LastModifiedDate | ETag | StorageClass | IsMultipartUploaded | EncryptionStatus';
interface Inventory {
id: string;
isEnabled: true | false;
prefix?: string;
OSSBucketDestination: {
format: 'CSV';
accountId: string;
rolename: string;
bucket: string;
prefix?: string;
encryption?:
| { 'SSE-OSS': '' }
| {
'SSE-KMS': {
keyId: string;
};
};
};
frequency: 'Daily' | 'Weekly';
includedObjectVersions: 'Current' | 'All';
optionalFields?: {
field?: Field[];
};
}
/**
* putBucketInventory
* @param {String} bucketName - bucket name
* @param {Inventory} inventory
* @param {Object} options
*/
export async function putBucketInventory(this: any, bucketName: string, inventory: Inventory, options: any = {}) {
const subres: any = Object.assign({ inventory: '', inventoryId: inventory.id }, options.subres);
checkBucketName(bucketName);
const { OSSBucketDestination, optionalFields, includedObjectVersions } = inventory;
const destinationBucketPrefix = 'acs:oss:::';
const rolePrefix = `acs:ram::${OSSBucketDestination.accountId}:role/`;
const paramXMLObj: any = {
InventoryConfiguration: {
Id: inventory.id,
IsEnabled: inventory.isEnabled,
Filter: {
Prefix: inventory.prefix || ''
},
Destination: {
OSSBucketDestination: {
Format: OSSBucketDestination.format,
AccountId: OSSBucketDestination.accountId,
RoleArn: `${rolePrefix}${OSSBucketDestination.rolename}`,
Bucket: `${destinationBucketPrefix}${OSSBucketDestination.bucket}`,
Prefix: OSSBucketDestination.prefix || '',
Encryption: OSSBucketDestination.encryption || ''
}
},
Schedule: {
Frequency: inventory.frequency
},
IncludedObjectVersions: includedObjectVersions,
OptionalFields: {
Field: optionalFields?.field || []
}
}
};
const paramXML = obj2xml(paramXMLObj, {
headers: true,
firstUpperCase: true
});
const params = this._bucketRequestParams('PUT', bucketName, subres, options);
params.successStatuses = [200];
params.mime = 'xml';
params.content = paramXML;
const result = await this.request(params);
return {
status: result.status,
res: result.res
};
}