New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@music-metadata/s3

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@music-metadata/s3 - npm Package Compare versions

Comparing version 0.5.1 to 0.6.0

31

lib/index.d.ts
import * as S3 from 'aws-sdk/clients/s3';
import { AWSError, Request } from 'aws-sdk';
import { IOptions, IAudioMetadata } from 'music-metadata/lib/type';
import { IS3Options } from '@tokenizer/s3';
export { IPicture, IAudioMetadata, IOptions, ITag, INativeTagDict } from 'music-metadata/lib/type';
interface IS3Options extends IOptions {
/**
* Flag to disable chunked transfer, use conventional HTTPS stream instead
*/
disableChunked?: boolean;
interface IMMS3Options extends IOptions, IS3Options {
}
export declare class MMS3Client {
private s3;
constructor(s3: S3);
/**
* Do a ranged request, this method will be called by streaming-http-token-reader
* @param objRequest
* @param range
*/
getRangedRequest(objRequest: S3.Types.GetObjectRequest, range: number[]): Request<S3.Types.GetObjectOutput, AWSError>;
/**
* Retrieve metadata from Amazon S3 object
* @param objRequest S3 object request
* @param options music-metadata options
*/
parseS3Object(objRequest: S3.Types.GetObjectRequest, options?: IS3Options): Promise<IAudioMetadata>;
}
/**
* Retrieve metadata from Amazon S3 object
* @param objRequest S3 object request
* @param options music-metadata options
* @return Metadata
*/
export declare function parseS3Object(s3: S3, objRequest: S3.Types.GetObjectRequest, options?: IMMS3Options): Promise<IAudioMetadata>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const core_1 = require("music-metadata/lib/core");
const range_1 = require("@tokenizer/range");
const s3_1 = require("@tokenizer/s3");
const mm = require("music-metadata/lib/core");
/**
* Use S3-client to execute actual HTTP-requests.
* Retrieve metadata from Amazon S3 object
* @param objRequest S3 object request
* @param options music-metadata options
* @return Metadata
*/
class S3Request {
constructor(s3client, objRequest) {
this.s3client = s3client;
this.objRequest = objRequest;
}
async getResponse(method, range) {
return this.s3client.getRangedRequest(this.objRequest, range).promise().then(data => {
return {
contentLength: data.ContentLength,
contentType: data.ContentType,
contentRange: range_1.parseContentRange(data.ContentRange),
arrayBuffer: async () => {
return data.Body;
}
};
});
}
async function parseS3Object(s3, objRequest, options) {
const s3Tokenizer = await s3_1.makeTokenizer(s3, objRequest, options);
return mm.parseFromTokenizer(s3Tokenizer, options);
}
class MMS3Client {
constructor(s3) {
this.s3 = s3;
}
/**
* Do a ranged request, this method will be called by streaming-http-token-reader
* @param objRequest
* @param range
*/
getRangedRequest(objRequest, range) {
const rangedRequest = Object.assign({}, objRequest); // Copy request
rangedRequest.Range = `bytes=${range[0]}-${range[1]}`;
return this.s3.getObject(rangedRequest);
}
/**
* Retrieve metadata from Amazon S3 object
* @param objRequest S3 object request
* @param options music-metadata options
*/
async parseS3Object(objRequest, options) {
if (options && options.disableChunked) {
const info = await this.getRangedRequest(objRequest, [0, 0]).promise();
const stream = this.s3
.getObject(objRequest)
.createReadStream();
return core_1.parseStream(stream, info.ContentType, options);
}
else {
const s3Request = new S3Request(this, objRequest);
const rangeRequestTokenizer = new range_1.RangeRequestTokenizer(s3Request, {
avoidHeadRequests: true
});
await rangeRequestTokenizer.init();
return core_1.parseFromTokenizer(rangeRequestTokenizer, rangeRequestTokenizer.contentType, options);
}
}
}
exports.MMS3Client = MMS3Client;
exports.parseS3Object = parseS3Object;
//# sourceMappingURL=index.js.map
{
"name": "@music-metadata/s3",
"version": "0.5.1",
"version": "0.6.0",
"description": "Extension for music-metadata to read metadata from audio files on Amazon S3 storage",

@@ -45,7 +45,7 @@ "main": "lib/index.js",

"dependencies": {
"@tokenizer/range": "^0.1.0",
"music-metadata": "^5.3.1"
"@tokenizer/s3": "^0.1.1",
"music-metadata": "^6.0.1"
},
"devDependencies": {
"aws-sdk": "^2.528.0",
"aws-sdk": "^2.596.0",
"chai": "^4.2.0",

@@ -55,4 +55,4 @@ "del-cli": "^3.0.0",

"tslint": "^5.20.1",
"typescript": "^3.6.4"
"typescript": "^3.7.4"
}
}

@@ -7,2 +7,3 @@ [![Build Status](https://travis-ci.org/Borewit/music-metadata-s3.svg?branch=master)](https://travis-ci.org/Borewit/music-metadata-s3)

[![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/Borewit/music-metadata-s3.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/Borewit/music-metadata-s3/context:javascript)
[![DeepScan grade](https://deepscan.io/api/teams/5165/projects/8528/branches/103408/badge/grade.svg)](https://deepscan.io/dashboard#view=project&tid=5165&pid=8528&bid=103408)

@@ -13,4 +14,5 @@ # @music-metadata/s3

The magic of this module is, it is able to extract the metadata from your audio files, without downloading and parsing the entire file.
Using [@tokenizer/range](https://github.com/Borewit/tokenizer-range), it partial downloads the files, just accessing the chunks holding the metadata.
This module is integrating [@tokenizer/s3](https://github.com/Borewit/tokenizer-s3), for reading from the S3 cloud, and using [music-metadata](https://github.com/Borewit/music-metadata) to parse the audio file.
## Installation

@@ -25,3 +27,3 @@ ```shell script

```js
const { MMS3Client } = require('@music-metadata/s3');
const { parseS3Object } = require('@music-metadata/s3');
const S3 = require('aws-sdk/clients/s3');

@@ -32,7 +34,6 @@

const s3 = new S3();
const mmS3client = new MMS3Client(s3); // Pass S3 client to music-metadata-S3-client
console.log('Parsing...');
try {
const data = await mmS3client.parseS3Object({
const data = await parseS3Object(s3, {
Bucket: 'your-bucket',

@@ -51,3 +52,3 @@ Key: 'My audio files/01 - My audio track.flac'

```js
const { MMS3Client } = require('@music-metadata/s3');
const { parseS3Object } = require('@music-metadata/s3');
const S3 = require('aws-sdk/clients/s3');

@@ -58,7 +59,6 @@

const s3 = new S3();
const mmS3client = new MMS3Client(s3); // Pass S3 client to music-metadata-S3-client
console.log('Parsing...');
try {
const data = await mmS3client.parseS3Object({
const data = await parseS3Object(s3, {
Bucket: 'your-bucket',

@@ -84,1 +84,5 @@ Key: 'My audio files/01 - My audio track.flac'

Other options are inherited from [music-metadata](https://github.com/Borewit/music-metadata#options)
## Dependency graph
![dependency graph](https://i.imgur.com/j9JFnfZ.png)
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc