
Security News
Axios Supply Chain Attack Reaches OpenAI macOS Signing Pipeline, Forces Certificate Rotation
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.
types-4-strapi
Advanced tools
Typescript interface generator for Strapi 4 models.
npm i --save-dev types-4-strapi
Add t4s to your scripts:
"scripts": {
"develop": "strapi develop",
"start": "strapi start",
"build": "strapi build",
"strapi": "strapi",
"t4s": "t4s"
}
Then run with:
npm run t4s
npm i -g types-4-strapi
Then run with:
t4s
For some inscrutable reason, Strapi 4 returns objects where all the properties (aside from id) are wrapped into an attributes object. The resulting interfaces will look like this:
{
id: number;
attributes: {
username: string;
email: string;
provider: string;
confirmed: boolean;
blocked: boolean;
createdAt: Date;
updatedAt: Date;
}
}
However, for some even more inscrutable reason, sometimes the same object is returned "flattened", without an attributes object. This is the case, for instance, for the /api/users endpoint, which returns an array of Users with the following structure:
{
id: number;
username: string;
email: string;
provider: string;
confirmed: boolean;
blocked: boolean;
createdAt: Date;
updatedAt: Date;
}
The same "flat" structure is also required when submitting the body of POST and PUT requests. Here is an example using fetch.
// correct
await fetch('https://project.com/api/users', {
method: 'POST',
body: JSON.stringify({
username: 'Jon Snow',
email: 'jon.snow@housestark.com',
}),
});
// incorrect
await fetch('https://project.com/api/users', {
method: 'POST',
body: JSON.stringify({
attributes: {
username: 'Jon Snow',
email: 'jon.snow@housestark.com',
},
}),
});
In these cases, rather than creating completely new types, we recommend that you simply 'extract' the type of the attribute object from the entity's interface using indexed access types.
type UserAttributes = User['attributes'];
await fetch('https://project.com/api/users', {
method: 'POST',
body: {
username: 'Jon Snow',
email: 'jon.snow@housestark.co.uk',
} as UserAttributes
});
If you are using strapi-plugin-transformer to remove the attributes key from all responses, use the following generic transformation type to be able to utilise the interfaces generated by types-4-strapi:
type Transformed<A extends { attributes: any }> = A['attributes'] & {
id: number;
};
Usage:
const response = await fetch('https://project.com/api/users');
const json = await response.json();
const users = json.data as Transformed<User>[];
FAQs
Typescript interface generator for Strapi 4 models
The npm package types-4-strapi receives a total of 39 weekly downloads. As such, types-4-strapi popularity was classified as not popular.
We found that types-4-strapi demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer 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.

Security News
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.

Security News
Open source is under attack because of how much value it creates. It has been the foundation of every major software innovation for the last three decades. This is not the time to walk away from it.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.