Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
esbuild-plugin-kaitai
Advanced tools
An esbuild plugin to compile Kaitai struct files.
Install the plugin from your javascript package manager
# yarn
yarn add --dev esbuild-plugin-kaitai
# or npm
npm install --save-dev esbuild-plugin-kaitai
Note: The Kaitai Compiler and Runtime do not directly support Typescript yet, but there's some workarounds you can use to get everything working nicely.
Replace the kaitai-struct
runtime with @tschrock/kaitai-struct
for typescript support
$ npm install kaitai-struct@npm:@tschrock/kaitai-struct
Write a type shim for your .ksy file.
I have written an experimental type generator for .ksy files. It's not perfect, and will probably break for complex schemas, but it will give you a good starting point.
Installation
$ npm i -g @tschrock/kaitai-dts
Usage
$ kaitai-dts my-data.ksy
// my-data.ksy.d.ts
declare module "my-data.ksy" {
class MyData {
version: string;
recordType: MyData.ExampleEnum;
recordData: UInt8Array;
constructor(_io: any, _parent?: any, _root?: any);
_read(): void;
}
namespace MyData {
enum ExampleEnum {
ITEM_1 = 1,
ITEM_2 = 2,
ITEM_3 = 3,
}
}
}
Add the kaitai plugin to the list of plugins in your build script:
// build.ts
import esbuild from 'esbuild';
import kaitaiLoader from 'esbuild-plugin-kaitai';
esbuild.build({
...
plugins: [
kaitaiLoader({
// Plugin config
})
]
...
});
You can now directly import .ksy
files in your application, and esbuild will automatically compile them.
// myapp.ts
import { readFileSync } from 'fs';
import KaitaiStream from 'kaitai-struct/KaitaiStream';
import MyData from 'my-data.ksy';
const myDataBin = readFileSync("./mydata.bin")
const myData = new MyData(new KaitaiStream(myDataBin));
console.log(myData);
Add the kaitai plugin to the list of plugins in your build script:
// build.js
import esbuild from 'esbuild';
import kaitaiLoader from 'esbuild-plugin-kaitai';
esbuild.build({
...
plugins: [
kaitaiLoader({
// Plugin config
})
]
...
});
You can now directly import .ksy
files in your application, and esbuild will automatically compile them.
// myapp.js
import { readFileSync } from 'fs';
import KaitaiStream from 'kaitai-struct/KaitaiStream';
import MyData from 'my-data.ksy';
const myDataBin = readFileSync("./mydata.bin")
const myData = new MyData(new KaitaiStream(myDataBin));
console.log(myData);
Add the kaitai plugin to the list of plugins in your build script:
// build.js
const esbuild = require('esbuild');
const kaitaiLoader = require('esbuild-plugin-kaitai');
esbuild.build({
...
plugins: [
kaitaiLoader({
// Plugin config
})
]
...
});
You can now directly require .ksy
files in your application, and esbuild will automatically compile them.
// myapp.js
const { readFileSync } = require('fs');
const KaitaiStream = require('kaitai-struct/KaitaiStream');
const MyData = require('my-data.ksy');
const myDataBin = readFileSync("./mydata.bin")
const myData = new MyData(new KaitaiStream(myDataBin));
console.log(myData);
Option | Type | Description |
---|---|---|
compilerPath | string | Optional. The path to the kaitai compiler binary. |
compilerFlags | string[] | Optional. Extra CLI flags to pass to the kaitai compiler. |
compilerTimeout | number | Optional. A timeout for the compiler. |
Note: See licensing info below
Option | Type | Description |
---|---|---|
compiler | Compiler | Required. The kaitai compiler. |
fileLoader | FileLoader | Optional. The file loader. |
debug | boolean | Optional. Create a debug build. |
For Example:
import esbuild from 'esbuild';
import kaitaiLoader from 'esbuild-plugin-kaitai';
import KaitaiStructCompiler from 'kaitai-struct-compiler';
esbuild.build({
...
plugins: [
kaitaiLoader({
compiler: new KaitaiStructCompiler(),
debug: true
})
]
...
});
This project is licensed under the MIT License - see the LICENSE.md file for details.
The reference Kaitai compiler, kaitai-struct-compiler
, is licened under the GPL-3.0 license. In order to prevent license compatability issues, this project does not include or directly link to the kaitai compiler. As the user, you must provide the compiler program yourself. There are two ways you can do this:
By default, this plugin will attempt to execute the Kaitai compiler program from the command line. Since the compiler runs as a separate program, this should avoid any licensing conflicts.
Download and Install the Kaitai Compiler from the Kaitai website.
Make sure the kaitai-struct-compiler
program is in your PATH.
If the Kaitai compiler is not in your PATH, you can specify it's location using the compilerPath
configuration option or KAITAI_PATH
environment variable.
You can also provide your own compiler via the compiler
configuration option. You can either provide the reference compiler (In which case your build scrips might be subject to the GPL - don't ask me, I'm not a lawyer), or you can provide an alternative, API-compatable compiler.
FAQs
An esbuild plugin for importing Kaitai Struct files.
The npm package esbuild-plugin-kaitai receives a total of 2 weekly downloads. As such, esbuild-plugin-kaitai popularity was classified as not popular.
We found that esbuild-plugin-kaitai 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.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.