Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
@imgix/contentful
Advanced tools
Browse for, select, and insert image assets into your content quickly and easily via the imgix Image Manager.
A Contentful app that integrates with imgix's Image Manager. Browse, search, and insert image assets into your content quickly and easily. Simplify your content editing workflow within Contentful and empower your developers with imgix’s powerful image rendering and optimization service.
The app can be installed to your Contentful workspace via the marketplace.
If running locally, the app can be installed via npm:
npm install @imgix/contentful
npm run start
Upon installation, configure the app using an API key generated via the imgix Dashboard. Ensure that the generated key has the following permissions: Sources
and Image Manager Browse
.
Following the instructions on the screen, enter in the API key and press Verify
. If the key is valid, you will receive a notification that the key has been successfully verified. If verification fails, you will need to ensure that the key was entered correctly.
The configuration page surfaces the option for users to select pre-existing content fields that are compatible with the imgix app. Note that the app is configured to integrate with JSON object
fields only, therefore only fields of this type will be displayed. Users may prefer this method over selecting individual fields manually for each applicable content model.
Of the many content types that users can choose from, imgix specifically integrates with the JSON object
. Please note that if you are currently using a Media
content type for images, you will need to create a new field of type JSON object
to integrate the app with.
Designate a field to use imgix on by navigating to that field’s Appearance tab and selecting the app. This step can be skipped if you already assigned the app directly to the desired field(s).
From any instance of a field using the imgix app, a modal can be opened to browse images by imgix source. First, select a desired source to browse images from. Using any of the pagination buttons, navigate each page of assets to choose from. After selecting an image, it can be inserted to the field via the Add image
button. Additionally, there are options to replace an image, or clear a selection from the field altogether.
The imgix app enables users to conduct a keyword search across assets in a source. Using the search box near the top of the modal will execute a search across multiple pre-determined fields: file origin path, image tags, and categories. To learn more about these fields, see our Image Manager documentation.
Once the content is published, developers can query the src
of the selected image, returned as a string, via the Contentful API. The example below demonstrates this using GraphQL, but this can be done independent of any specific tool.
query MyQuery {
allContentfulArticle {
nodes {
avatar {
src
}
bannerImage {
src
}
}
}
}
returns something similar to:
{
"data": {
"allContentfulArticle": {
"nodes": [
{
"avatar": {
"src": "https://fourbottle.imgix.net/heroes/pourover.jpg"
},
"bannerImage": {
"src": "https://fourbottle.imgix.net/heroes/light-scatter.jpg"
}
}
]
}
},
"extensions": {}
}
Developers can leverage the power of imgix's rendering API downstream from where the image was selected in Contentful. We recommend piping the value of the src
field of the image through to one of imgix's SDKs. The example below builds on the previous one by passing the image src
through to @imgix/gatsby component:
import React from 'react';
import { graphql } from 'gatsby';
import { ImgixGatsbyImage } from '@imgix/gatsby';
export default function Page({ data }) {
return data.allContentfulArticle.nodes.map(({ node }) => (
<ImgixGatsbyImage
src={node.avatar.src}
imgixParams={{
auto: 'format,compress',
crop: 'faces,edges',
}}
layout="constrained"
width={350}
aspectRatio={16 / 9}
sizes="(min-width: 1024px) calc(30vw - 128px), (min-width: 768px) calc(50vw - 100px), calc(100vw - 70px)"
alt="An imgix-served image from Contentful"
/>
));
}
export const query = graphql`
query MyQuery {
allContentfulArticle {
nodes {
avatar {
src
}
}
}
}
`;
Users may also access metadata associated with an image via the attributes
field. Refer to the imgix documentation to learn more about the various types of metadata available on images and how to use them.
query MyQuery {
allContentfulArticle {
nodes {
bannerImage {
src
attributes {
analyzed_content_warnings
analyzed_faces
analyzed_tags
color_model
color_profile
content_type
custom_fields
date_created
date_modified
dpi_height
dpi_width
face_count
file_size
has_frames
media_height
media_kind
media_width
origin_path
source_id
tags
uploaded_by_api
warning_adult
warning_medical
warning_racy
warning_spoof
warning_violence
}
}
}
}
}
returns something similar to:
{
"data": {
"allContentfulArticle": {
"nodes": [
{
"bannerImage": {
"src": "https://fourbottle.imgix.net/heroes/woman-stirring.jpg",
"attributes": {
"analyzed_content_warnings": true,
"analyzed_faces": true,
"analyzed_tags": true,
"color_model": "RGB",
"color_profile": "c2",
"content_type": "image/jpeg",
"custom_fields": "\"\"",
"date_created": 1625796011,
"date_modified": 1642786873,
"dpi_height": 72,
"dpi_width": 72,
"face_count": 1,
"file_size": 3411741,
"has_frames": false,
"media_height": 4000,
"media_kind": "IMAGE",
"media_width": 6000,
"origin_path": "/heroes/woman-stirring.jpg",
"source_id": "5f73d9798d5327eb5194d54a",
"tags": "{\"Arm\":0.9448454976081848,\"Cup\":0.8950006365776062,\"Drinkware\":0.9177042841911316,\"Glasses\":0.9809675216674805,\"Hand\":0.9596579074859619,\"Joint\":0.9762823581695557,\"Photograph\":0.94278883934021,\"Shoulder\":0.9465579986572266,\"Tableware\":0.949840784072876,\"Vision care\":0.9289617538452148}",
"uploaded_by_api": false,
"warning_adult": 1,
"warning_medical": 1,
"warning_racy": 2,
"warning_spoof": 1,
"warning_violence": 1
}
}
}
]
}
}
}
Note: Certain fields under attributes
are returned as strings to provide better resiliency when used with GraphQL. Therefore, these fields (custom_fields
, tags
, colors.dominant_colors
) will need to be parsed back into JSON objects after being queried. The example below demonstrates how to do this:
export default function Page({ data }) {
return data.allContentfulArticle.edges.map(({ node }) => (
<div className="p-4 lg:w-1/3 md:w-1/2 sm:w-full">
<ImgixGatsbyImage
src={node.bannerImage.src}
imgixParams={{
auto: 'format,compress',
crop: 'faces,edges',
}}
layout="constrained"
width={350}
aspectRatio={16 / 9}
sizes="(min-width: 1024px) calc(30vw - 128px), (min-width: 768px) calc(50vw - 100px), calc(100vw - 70px)"
alt="An imgix-served image from Contentful"
/>
{node.bannerImage.attributes.custom_fields ? (
Object.entries(
JSON.parse(node.bannerImage.attributes.custom_fields),
).map(([key, value]) => (
<p>
{key}: {value}
</p>
))
) : (
<br></br>
)}
{Object.entries(
JSON.parse(node.bannerImage.attributes.colors.dominant_colors),
).map(([key, value]) => (
<p>
{key}: {value}
</p>
))}
{Object.entries(JSON.parse(node.bannerImage.attributes.tags)).map(
([key, value]) => (
<p>
{key}: {value}
</p>
),
)}
</div>
));
}
export const query = graphql`
{
allContentfulArticle {
edges {
node {
bannerImage {
src
attributes {
custom_fields
colors {
dominant_colors
}
tags
}
}
}
}
}
}
`;
1.2.2 (2022-04-13)
FAQs
Browse for, select, and insert image assets into your content quickly and easily via the imgix Asset Manager.
The npm package @imgix/contentful receives a total of 0 weekly downloads. As such, @imgix/contentful popularity was classified as not popular.
We found that @imgix/contentful demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 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 uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.