Security News
tea.xyz Spam Plagues npm and RubyGems Package Registries
Tea.xyz, a crypto project aimed at rewarding open source contributions, is once again facing backlash due to an influx of spam packages flooding public package registries.
machine-readable-zone
Advanced tools
Readme
This library helps to generate Machine-readable zone codes. It's implemented with Node.js and TypeScript. It provides both CLI tool and programmatic API.
The project depends on the following technologies and libraries:
Node.js
;TypeScript
;jest
and ts-jest
;ts-node-dev
;tslint
and tslint-config-airbnb
.As you see, there no dependencies but various dev tools.
(These installation instructions would be valid after publishing, so the package name could change).
Let's consider you use Yarn as your package manager. If you use npm, it would pretty easy for you to translate the commands using this cheatsheet.
To install it as a global binary, use the following command:
$ yarn global add machine-readable-zone
To install it as your project dependency, run:
$ yarn add machine-readable-zone
If you have the package installed globally, you can use machine-readable-zone
as binary name. Otherwise keep
in mind that you can use ./node_modules/machine-readable-zone/dist/index.js
or yarn start
(in development mode)
instead of machine-readable-zone
.
$ machine-readable-zone --help
Syntax: machine-readable-zone [options]
Options:
--first-name: [*] First name
--last-name: [*] Last name
--passport-number: [*] Passport number (9 digits)
--country-code: [*] Country code (ISO 3166-1 alpha-3*)
--nationality: [*] Nationality (ISO 3166-1 alpha-3*)
--gender: [*] Sex/gender (M/F)
--valid-until-date: [*] Date of validity (dd.mm.yyyy)
--personal-number: Personal number (14 digits)
--countries Print all the supported countries with codes
--version Print package version
--help Print this help message
Software needs your personal data to generate the code, so please provide it according to the expected formats.
The library exports some methods:
generateMRZ
– the function that actually generates the code. It needs a valid data;generateMRZFromCommandLineArgs
– the function that runs in a command line mode.
It parses and validates the data and generates the code;validateData
– validates the given data according to the schema
(ValidationSchema
type).
If you want to use it, you need to pass a validation schema;ParamsValidationSchema
– the schema that generateMRZFromCommandLineArgs
uses internally.
It's a default one and you can pass it to validateData
.You could use generateMRZ
function to generate a machine-readable zone code.
Please note that this function takes args that have to be already validated.
import { generateMRZ } from 'machine-readable-zone';
const code = generateMRZ({
user: {
firstName: 'Ivan',
lastName: 'Petrov',
passportNumber: '123456789',
countryCode: 'RUS',
nationality: 'RUS',
birthday: '01.02.1983',
gender: 'M',
validUntilDay: '02.03.2028',
personalNumber: '12345678901234',
},
});
// Prints P<RUSPETROV<<IVAN<<<<<<<<<<<<<<<<<<<<<<<<<<<\n1234567897RUS8302010M28030211234567890123454
console.log(code);
A basic validation function is included in library as well. If you're feeling lazy ot just satisfied with library validation results, feel free to use it.
import { validateData } from 'machine-readable-zone';
const validationResult = validateData({
user: {
firstName: '',
lastName: '',
passportNumber: '123456789',
countryCode: 'RUS',
nationality: 'RU',
birthday: '01/02/1983',
gender: 'M',
validUntilDay: '02.03.2028',
personalNumber: '12345678901234',
},
});
/*
* Prints:
* {
* isValid: false,
* errors: [
* { fieldName: 'firstName', error: 'value should non be empty' },
* { fieldName: 'lastName', error: 'value should non be empty' },
* { fieldName: 'nationality', error: 'country RU not found. Did you mean RUS?' },
* { fieldName: 'birthday', error: 'value 01/02/1983 should be an existing date in dd.mm.yyyy format' },
* ],
* }
*/
console.log(validationResult);
The library exposes the following typings:
declare module 'machine-readable-zone' {
export interface UserInfo {
firstName: string;
lastName: string;
passportNumber: string;
countryCode: string;
nationality: string;
birthday: string;
gender: string;
validUntilDay: string;
personalNumber: string;
}
export type CommandLineArgs = string[];
export interface MRZGeneratorArgs {
user: UserInfo;
}
export interface MRZCommandLineArgs extends MRZGeneratorArgs {
version: boolean;
help: boolean;
countries: boolean;
}
export type MRZGenerationResult = string;
type CommandLineArgsMRZGenerator = (args: CommandLineArgs) => void;
type MRZGenerator = (args: MRZGeneratorArgs) => MRZGenerationResult;
interface FieldError {
fieldName: string;
error: string;
}
interface ArgsValidationResult {
isValid: boolean;
errors: FieldError[];
}
type SchemaValidator = (args: MRZGeneratorArgs) => ArgsValidationResult;
type OptionalString = string | null;
type FieldValidationResult = OptionalString;
type Validator = (value: any) => FieldValidationResult;
interface ValidationSchema {
firstName: Validator;
lastName: Validator;
passportNumber: Validator;
countryCode: Validator;
nationality: Validator;
birthday: Validator;
gender: Validator;
validUntilDay: Validator;
personalNumber: Validator;
}
export const generateMRZFromCommandLineArgs: CommandLineArgsMRZGenerator;
export const generateMRZ: MRZGenerator;
export const validateData: SchemaValidator;
export const ParamsValidationSchema: ValidationSchema;
}
It is recommend to manage Node versions with NVM.
After cloning the project, run
$ yarn
to install the project dependencies. Project has only development dependencies: TypeScript, tslint, jest, etc. As the command succeeded, type
$ yarn build
to build the project locally.
Author: Denis Tokarev (@devlato)
License: MIT
FAQs
Machine Readable Zone
The npm package machine-readable-zone receives a total of 181 weekly downloads. As such, machine-readable-zone popularity was classified as not popular.
We found that machine-readable-zone 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
Tea.xyz, a crypto project aimed at rewarding open source contributions, is once again facing backlash due to an influx of spam packages flooding public package registries.
Security News
As cyber threats become more autonomous, AI-powered defenses are crucial for businesses to stay ahead of attackers who can exploit software vulnerabilities at scale.
Security News
UnitedHealth Group disclosed that the ransomware attack on Change Healthcare compromised protected health information for millions in the U.S., with estimated costs to the company expected to reach $1 billion.