- Updated dev dependencies:
mocha to 11.7.5, eslint to 10.0.3
- Updated dependency:
rock-req to 5.2.1
- Added support for Localhost Minio as S3 storage: It is possible to define the URL "http://localhost:80" when entering S3 credentials. While trailing slashes at the end of the URL are permitted, their use is not recommended.
- Updade dev dependencies
- Added for SWIFT storage only: When calling the 'connection' function, you can now specify the interface (admin/public/internal) in the Swift configuration. This ensures that the SDK picks the correct endpoints from the Swift server, preventing inconsistencies. Example of auth configuration for Swift with interface:
const swift = storageSDK([{
username : 'user',
password : 'password',
authUrl : 'url',
region : 'region',
interface : 'admin' // or public, or internal
}]);
- Updated dependency "aws4" version from "1.12.0" to "1.13.2"
- Updated dev dependency "mocha/eslint/nock"
- Lint code with new eslint configuration
- S3 and Swift
deleteFiles improved: For the second argument, you must provide a list of files, it can be:
- A list of String, each string is the filename: ["file1.png", "file2.docx"]
- Or a list of objects with
key as attribute for the filename: [{"key": "file1.png"}, {"key": "file2.docx"}]
- Or a list of objects with
name as attribute for the filename: [{"name": "file1.png"}, {"name": "file2.docx"}]
- NEW Or a list of objects with a custom key for filenames, you must define
fileNameKey as option (third argument). Usage example with a custom key name:
const files = [
{ filename: 'invoice-1.pdf'},
{ filename: 'contract-2021.docx'},
]
storage.deleteFiles('bucket-name', files, { fileNameKey: "filename" }, (err, resp) => {
})
- S3 methods patched: A request can only request one time each region.
- Fixed SWIFT authentication: the
region value is case insensitive, it can be GRA or gra.
- New major version to make S3 and Swift methods identical (function arguments and callback functions)
- SWIFT Breaking changes:
- All callback function are returning now
(err, resp) => {}. The resp object contains { body, headers, statusCode }
- Updated
listFiles: On success, the JSON body is automatically converted into a Javascript Object. If the body returned is not application/json, the raw body is returned.
- Added: Container aliases are now supported for all methods
- SWIFT New methods:
deleteFiles to bulk delete files
headBucket to determine if a bucket (container) exists and you have permission to access it
listBucket to return a list of all buckets (containers) owned by the authenticated sender of the request. On success, the JSON body is automatically converted into a Javascript Object. If the body returned is not application/json, the raw body is returned.
setRockReqDefaults to configure the HTTP client
- SWIFT Code change: important refactoring
- SWIFT updated:
- The authentication object does not require the
tenantName attribute anymore, it is now optional.
swift.uploadFile: The 3rd argument accepts a function returning a ReadStream, in addition to the Buffer and the absolute path of the file
- Updated dev npm packages:
eslint to 8.45.0
nock to =13.3.2
- Patched
s3.deleteFiles: the XML body includes object names without encoding. Previously, objects with special character was encoded (encodeURIComponent), and S3 did not delete them.
- Patched
s3.setFileMetadata: Bucket aliases are now supported and are not generating a 403 error anymore.
- Patched rock-req options initialisation
- Updated package
rock-req to 5.1.3
- Updated to a singleton pattern: the
require('tiny-storage-client')({ config-S3-or-SWIFT }) return a new storage instance. Meaning, existing instances are not overwritten anymore when creating a new one.
- Updated package
rock-req to 5.1.2
- Patched loading module
xmlToJson.js
- Updated setting defaults of rock-req by propagating the object instead of assigning.
- Updated package
rock-req to 5.1.1
- Added the possibility to set defaults rock-req values:
- Added function
setRockReqDefaults and getRockReqDefaults
- Or create the global variable
global.rockReqConf, it must be initialised before calling require('tiny-storage-client')
- Added for all S3 methods: the options argument can takes the option
requestOptions object, it will be merged into the HTTP request options. Example to upload a file: storage.uploadFile('bucket', 'file.pdf', Buffer.from(fileXml), { requestOptions: { tenantId: 200, headers: { "custom-option" : true } } }, (err, resp) => {})
- Replaced
simple-get by rock-req package (0 deps, bench: 21797 req/s and streams fully tested)
- To download a file as stream, you have to provide an
output function as option. The output function must return the output stream, and it is invoked by rock-req for every request and retries. If something goes wrong, the Writable stream is destroyed automatically, and the error can be captured with 'error' event or stream.finished. When the callback is called, the streamed is finised.
The stream:true boolean options to get an HTTP response a Stream is removed, and replaced by the output: () => { return OutputStream } option (Explained above).
- Fixed Bucket aliases generating a false AWS4 signature
- Removed unused code
- Updated documentation
- the
request function accept an option stream:true to get the HTTP response as a stream, instead of a content as Buffer, such as: request(method, path, { headers, queries, body, stream: true }, (err, resp) => {}).
- Removed
debug package
- Add function to create custom request to the object storage. Prototype:
request(method, path, { headers, queries, body }, (err, body, headers) => {}). The base URL requests by default the account, passing an empty string will request the account details. For container requests, pass the container name, such as: /{container}. For file requests, pass the container and the file, such as: /{container}/{filename}. Object Storage Swift API specification: https://docs.openstack.org/api-ref/object-store/
- Add function
setFileMetadata to create or replace object metadata
- Add function
getFileMetadata to get an object metadata
- Updated package
debug to 4.3.4
- Updated package
simple-get to 4.0.1
- Fixed the
downloadFile callback function, the third argument is now always returning the response header of the request.
- Added
setLogFunction used to Override the log function. It takes to arguments: message as a string, level as a string and can be: info/warning/error. Example to use:
storage.setLogFunction((message, level) => {
console.log(`${level} : ${message}`);
})
- Fixed
connection fallback on error & add tests
- Fixed
uploadFile: return the response body if an error occurs
- Added parallel tests
- Fix the automatic fallback when multiple clients are using all functions in parallel
- Renamed
getFiles function to listFiles
- Renamed
writeFile function to uploadFile
- Renamed
readFile function to downloadFile
- Added: Pass a list of object storage credential to the constructor, the sdk will automatically connect to another storage if something goes wrong (Server or DNS not responding, timeout, error 500, too many redirection, and more...)
- Added: the method
uploadFile accepts a new optionnal fourth argument option: { queries: { temp_url_expires: '1440619048' }, headers: { X-Object-Meta-LocationOrigin: 'Paris/France' }. List of query parameters and headers: https://docs.openstack.org/api-ref/object-store/?expanded=create-or-replace-object-detail#create-or-replace-object
- Updated
writeFile function : it can take a Buffer as an argument
- Methods to interact with the OVH Object Storage:
- writeFile: upload a file
- readFile: download a file
- deleteFile: delete a file
- a new authentication token is requested when the authentication token is not valid during a request