Socket
Socket
Sign inDemoInstall

@hubspot/cms-lib

Package Overview
Dependencies
Maintainers
13
Versions
115
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@hubspot/cms-lib - npm Package Compare versions

Comparing version 2.1.1-beta.4 to 2.1.1-beta.5

7

__mocks__/fs-extra.js

@@ -33,2 +33,9 @@ const { MODULE_EXTENSION } = require('../lib/constants');

fs.unlinkSync = () => true;
fs.createWriteStream = jest.fn().mockReturnValue({
on: jest.fn((event, callback) => {
if (event === 'close') {
callback();
}
}),
});
fs.outputFile = jest.fn((dest, data) => {

@@ -35,0 +42,0 @@ return data;

93

__tests__/http.js

@@ -1,2 +0,4 @@

const request = require('request-promise-native');
const requestPN = require('request-promise-native');
const request = require('request');
const fs = require('fs-extra');
const moment = require('moment');

@@ -12,2 +14,4 @@ const { getAndLoadConfigIfNeeded, getPortalConfig } = require('../lib/config');

}));
jest.mock('request');
jest.mock('../lib/config');

@@ -22,2 +26,83 @@ jest.mock('../logger');

});
describe('getOctetStream()', () => {
beforeEach(() => {
getAndLoadConfigIfNeeded.mockReturnValue({
httpTimeout: 1000,
portals: [
{
id: 123,
apiKey: 'abc',
},
],
});
getPortalConfig.mockReturnValue({
id: 123,
apiKey: 'abc',
});
});
it('makes a get request', async () => {
request.get.mockReturnValue({
on: jest.fn((event, callback) => {
if (event === 'response') {
callback({ statusCode: 200 });
}
}),
pipe: jest.fn(),
});
await http.getOctetStream(
123,
{
uri: 'some/endpoint/path',
},
'path/to/local/file'
);
expect(request.get).toHaveBeenCalledWith(
expect.objectContaining({ uri: 'some/endpoint/path' })
);
});
it('fetches a file and attempts to write it', async () => {
request.get.mockReturnValue({
on: jest.fn((event, callback) => {
if (event === 'response') {
callback({ statusCode: 200 });
}
}),
pipe: jest.fn(),
});
await http.getOctetStream(
123,
{
uri: 'some/endpoint/path',
},
'path/to/local/file'
);
expect(fs.createWriteStream).toBeCalledWith('path/to/local/file', {
encoding: 'binary',
});
});
it('fails to fetch a file and does not attempt to write to disk', async () => {
request.get.mockReturnValue({
on: jest.fn((event, callback) => {
if (event === 'response') {
callback({ statusCode: 404 });
}
}),
pipe: jest.fn(),
});
try {
await http.getOctetStream(
123,
{
uri: 'some/nonexistent/path',
},
'path/to/local/file'
);
} catch (e) {
expect(e.statusCode).toBe(404);
expect(fs.createWriteStream).not.toBeCalled();
}
});
});
describe('getRequestOptions()', () => {

@@ -75,3 +160,3 @@ it('constructs baseUrl as expected based on environment', () => {

expect(request.get).toBeCalledWith({
expect(requestPN.get).toBeCalledWith({
baseUrl: `https://api.hubapi.com`,

@@ -114,3 +199,3 @@ uri: 'some/endpoint/path',

expect(request.get).toBeCalledWith({
expect(requestPN.get).toBeCalledWith({
baseUrl: `https://api.hubapi.com`,

@@ -150,3 +235,3 @@ uri: 'some/endpoint/path',

expect(request.get).toBeCalledWith({
expect(requestPN.get).toBeCalledWith({
baseUrl: `https://api.hubapi.com`,

@@ -153,0 +238,0 @@ uri: 'some/endpoint/path',

34

fileMapper.js

@@ -268,25 +268,8 @@ const fs = require('fs-extra');

const { portalId } = input;
const logFsError = err => {
logFileSystemErrorInstance(
err,
new FileSystemErrorContext({
filepath,
portalId,
write: true,
})
);
};
let writeStream;
try {
await fs.ensureFile(filepath);
writeStream = fs.createWriteStream(filepath, { encoding: 'binary' });
} catch (err) {
logFsError(err);
throw err;
}
let node;
try {
node = await fetchFileStream(portalId, srcPath, writeStream, {
const node = await fetchFileStream(portalId, srcPath, filepath, {
qs: getFileMapperApiQueryFromMode(input.mode),
});
await writeUtimes(input, filepath, node);
} catch (err) {

@@ -302,13 +285,2 @@ logApiErrorInstance(

}
return new Promise((resolve, reject) => {
writeStream.on('error', err => {
logFsError(err);
reject(err);
});
writeStream.on('close', async () => {
await writeUtimes(input, filepath, node);
logger.log('Wrote file "%s"', filepath);
resolve(node);
});
});
}

@@ -315,0 +287,0 @@

const request = require('request');
const requestPN = require('request-promise-native');
const fs = require('fs-extra');
const { getPortalConfig } = require('./lib/config');

@@ -7,2 +8,7 @@ const { getRequestOptions } = require('./http/requestOptions');

const { getOauthManager } = require('./oauth');
const { logger } = require('./logger');
const {
FileSystemErrorContext,
logFileSystemErrorInstance,
} = require('./errorHandlers');

@@ -112,6 +118,18 @@ const withOauth = async (portalId, portalConfig, requestOptions) => {

options,
destination
filepath
) => {
const { query, ...rest } = options;
const requestOptions = addQueryParams(rest, query);
const logFsError = err => {
logFileSystemErrorInstance(
err,
new FileSystemErrorContext({
filepath,
portalId,
write: true,
})
);
};
// Using `request` instead of `request-promise` per the docs so

@@ -134,14 +152,22 @@ // the response can be piped.

});
let response;
req
.on('error', reject)
.on('response', r => {
if (r.statusCode >= 200 && r.statusCode < 300) {
response = r;
} else {
reject(r);
}
})
.on('end', () => resolve(response))
.pipe(destination);
req.on('error', reject);
req.on('response', res => {
if (res.statusCode >= 200 && res.statusCode < 300) {
const writeStream = fs.createWriteStream(filepath, {
encoding: 'binary',
});
req.pipe(writeStream);
writeStream.on('error', err => {
logFsError(err);
reject(err);
});
writeStream.on('close', async () => {
logger.log('Wrote file "%s"', filepath);
resolve(res);
});
} else {
reject(res);
}
});
} catch (err) {

@@ -148,0 +174,0 @@ reject(err);

{
"name": "@hubspot/cms-lib",
"version": "2.1.1-beta.4",
"version": "2.1.1-beta.5",
"description": "Library for working with the HubSpot CMS",

@@ -34,3 +34,3 @@ "license": "Apache-2.0",

},
"gitHead": "4d71b65749294b3e3825b0d96e31d943adcd62ee"
"gitHead": "1d963cb5619eb6d7c6f971686fce81c048fd5e0e"
}
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