
Research
/Security News
10 npm Typosquatted Packages Deploy Multi-Stage Credential Harvester
Socket researchers found 10 typosquatted npm packages that auto-run on install, show fake CAPTCHAs, fingerprint by IP, and deploy a credential stealer.
@constructor-io/catalog-ingestor
Advanced tools
Package to help ingesting catalog data into Constructor.io ☕️
Constructor.io is an e-commerce first product discovery service that optimizes results using artificial intelligence (including natural language processing, re-ranking to optimize for business metrics, and end user personalization).
This package is a Node.js library for easily ingesting product catalogs into Constructor.io using a strict type system. It is intended for use with partner connections - that is, integrating other systems such as e-commerce platforms or product information management platforms with Constructor.io
If you're looking for a package to consume our API, please use @constructor-io/constructorio-node instead. Alternatively, if you want a JavaScript client for client side (i.e. front end) integrations please use @constructor-io/constructorio-client-javascript.
This package has been deprecated as of February 2024 and will no longer be maintained.
We recommend using our Node.js client instead.
Full API documentation is available on Github Pages
Before you begin, note that this package is intended for use with partner connections. Some credentials are provided by partner connectors while calling this package, so ideally you should be working with a specific partner integration to use this package.
The following credentials are required to use this package:
apiToken - Your Constructor.io API token.apiKey - Your Constructor.io API key.If you need a more general solution, check out our Node.js client.
This package can be installed via npm: npm i @constructor-io/catalog-ingestor. Once installed, simply import or require the package into your repository.
Important: this library should only be used in a server-side context.
You can find this in your Constructor.io dashboard. Contact sales if you'd like to sign up, or support if you believe your company already has an account.
Once imported, an instance of the ingestor can be created as follows:
import { CatalogIngestor } from "@constructor-io/catalog-ingestor";
const catalogIngestor = new CatalogIngestor({
apiToken: "YOUR API TOKEN",
apiKey: "YOUR API KEY",
type: "INGESTION_TYPE"
// Optional parameters
notificationEmail: "your@email.com",
force: false,
});
| Parameter | Required | Type | Description |
|---|---|---|---|
| apiToken | true | string | Your Constructor.io API Token. Please refer to the documentation on how to obtain it. |
| apiKey | true | string | Your Constructor.io API Key. Please refer to the documentation on how to obtain it. |
| type | true | CatalogIngestionType | The type of ingestion to be performed. You can find more details in th section bellow. |
| notificationEmail | false | string | An email to send notifications in case the ingestion fails. |
| force | false | boolean | If true, will force the ingestion to complete even if it invalidates a large amount of records. Defaults to false. |
| section | false | string | The index's section to ingest the catalog into. Defaults to "Products". |
| retainCsvFile | false | boolean | If true, will not delete the resulting CSV file after sending it to constructor - Useful for debugging |
Check out our API docs for more information.
We support full, delta and patch ingestions.
This is handled by the type option passed through the constructor.
Full ingestions replace the entire catalog with the data provided. This is useful for initial catalog ingestion, or when you want to completely replace your catalog with new data.
import { CatalogIngestionType } from "@constructor-io/catalog-ingestor";
const catalogIngestor = new CatalogIngestor({
type: CatalogIngestionType.FULL,
// ...other options
});
Delta ingestions update the catalog with the data provided. This adds new catalog data, or replaces existing data.
import { CatalogIngestionType } from "@constructor-io/catalog-ingestor";
const catalogIngestor = new CatalogIngestor({
type: CatalogIngestionType.DELTA,
// ...other options
});
Patch delta ingestions update the catalog with the data provided. This strictly updates already existing data. Different from the other two types, it support ingesting partial data.
import { CatalogIngestionType } from "@constructor-io/catalog-ingestor";
const catalogIngestor = new CatalogIngestor({
type: CatalogIngestionType.PATCH_DELTA_FAIL,
// ...other options
});
There are three different patch delta ingestion types, and each one handles missing catalog entities with specific rules:
A missing catalog entity is one that is referenced by the ingestion but is not found on the catalog.
| Ingestion Type | If there are any missing entities |
|---|---|
PATCH_DELTA_FAIL | The whole catalog ingestion will be aborted and it's moved into an error state. |
PATCH_DELTA_CREATE | They will be created, and existing entities will have any additional fields appended. This type also needs all required fields present. |
PATCH_DELTA_IGNORE | They will be ignored. |
This package is completely agnostic on how to fetch and transform your data. The only requirement is that you must provide a function that returns a Promise that resolves to the ingestion payload.
It's recommended to fetch & transform your data inside this promise. This way, we're able to identify and report any issues that may have occurred during ingestion.
Finally, to ingest your catalog data you simply need to call the ingest function and pass this promise:
import {
CatalogIngestionPayload,
CatalogIngestionType,
} from "@constructor-io/catalog-ingestor";
const catalogIngestor = new CatalogIngestor({
type: CatalogIngestionType.FULL,
// ...other options
});
async function fetchData(): Promise<ExternalData> {
// TODO: Implement your logic to fetch data here.
return {};
}
function transformData(data: ExternalData): CatalogIngestionPayload {
// TODO: Implement your logic to transform data here.
// As an example, we're just returning static data.
return {
data: {
groups: [
{
parent_id: null,
name: "Shoes",
id: "shoes",
},
],
items: [
{
id: "nike-shoes-brown",
item_name: "Nike Shoes Brown",
image_url: "https://images.nike.com/shoes-brown.jpg",
url: "https://www.nike.com/shoes-brown",
description: "Best shoes",
group_ids: ["shoes"],
active: true,
metadata: [],
keywords: [],
facets: [
{
key: "Color",
value: "Brown",
},
{
key: "Size",
value: ["M", "L", "XL"],
},
],
},
],
variations: [],
},
};
}
await catalogIngestor.ingest(async () => {
const data = await fetchData();
return transformData(data);
});
Here's some useful npm scripts:
npm run lint # run lint on source code and tests
npm run test # run tests
npm run test:cov # run tests with coverage report
npm run generate-docs # output documentation to `./docs` directory
First, install dependencies:
npm i
Then, set up your local environment and fill .env with your credentials:
cp .env.example .env
Don't forget to fill in some test data on src/dev.ts:
data: {
// insert your test data here
groups: [],
items: [],
variations: [],
},
All done! You can now run the ingestor locally:
npm run dev
# Or you can test it using streams
npm run dev:stream
FAQs
Package to help ingesting catalog data into Constructor.io ☕️
We found that @constructor-io/catalog-ingestor demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 8 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Socket researchers found 10 typosquatted npm packages that auto-run on install, show fake CAPTCHAs, fingerprint by IP, and deploy a credential stealer.

Product
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.

Security News
Open source dashboard CNAPulse tracks CVE Numbering Authorities’ publishing activity, highlighting trends and transparency across the CVE ecosystem.