New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

sgf-gstin-validator

Package Overview
Dependencies
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sgf-gstin-validator - npm Package Compare versions

Comparing version 1.0.3 to 1.0.4

52

dist/gstin-validator.js

@@ -12,2 +12,12 @@ /*

/***/ "?d57b":
/*!******************************!*\
!*** jsonwebtoken (ignored) ***!
\******************************/
/***/ (() => {
eval("/* (ignored) */\n\n//# sourceURL=webpack://sgf-gstin-validator/jsonwebtoken_(ignored)?");
/***/ }),
/***/ "./src/certs.js":

@@ -17,6 +27,6 @@ /*!**********************!*\

\**********************/
/***/ ((module) => {
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("\nmodule.exports = {\n \"einv_prod\": \"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUE3bEpkNjRHM3pkNFdnZmJpTDI2SwpUTGpZNU11WGpQc0dTc2ZPTm13WDlaMUhiSVRLZUZFYVhLSllDZS8yV0xOdnJjV2VmeWsyc1AzVGl0V21YRlRSCkpyQXZ6bG0vRjl0S2ZHbEhpRUZ6aDY1b3NvbEdFL0tkT0l2QnZMWEZ3SjI5dWwzelNtMTdYMS9jbHF4YTZNb3YKaXlzNzNoRHhIYlpaL21wWUxEYXRiNjZ6emdlL0l6c09qZno0enlVRTJWdXM2c2loVUpadzJhN0JwSVBXT1BvTQowVEdTa2Y5L2RxOU9QektCYWtZZlhadkwvaFU4V1lZOXdPSVM3OUdPcXlUY01vN2NBYnN0VHAvZFJabHNldG1FClArZjFQeWk4Q21tNlJlS1UwRzNtdVRUUGdXdE01cjlTei90S2Y0N3hzRkxBZTY5UTJXT21ibEZSWU1pM3RHSVEKSFFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==\",\n \"einv_prod_11092020\": \"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFyeGQ5M3VMRHM4SFRQcWNTUHB4WgpyZjBEYzI5cjNpUHAwYThmaWxqQXllWDRSQUg2bFdtOXFGdDI2Q2NFOEVTWXRtbzFzVnRzd3ZzN1ZINEJqZy9GCkRsUnBkK01uQWxYdXhDaGlqOC92anlBd0U3MXVjTXJtWmh4TThyT1NmUE1MOGZuaVo4dHJyM0k0UjJvNHhXaDYKbm8veFRVdFowMi95VUVYYnBodzNERXVlZnpIRVFuRUYrcXVHamk5cHZHblBPNktybW5yaTlINFdQWTB5c1BRUQpRZDgyYlVaQ2s5WGRoU1pjVy9hbTh3QnVsWW9rSVRSTVZIbGJSWHF1MXBPRm1RTU81b1NweVpVM3BYYnN4K094CklPYzRFRFgwV01hOWFINCtzbnQxOFdBWFZHd0YyQjRmbUJrN0F0bWtGenJUbWJwbXlWcUEzS08ySWp6TVpQdzAKaFFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==\",\n \"einv_sandbox\": \"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF0MFpYOXo2U2tCb1NUZ3NjTmU5WgpYL1dVSzU5WWJzenBaa1ZucGMwem9kdFF5VmRlUzMvS1B2ZFZodUxrWTlvS09XemM2aFFHSjgzWkdqOVJoUHVXCjNsZXhrSWRSL0QrN2pUMUlMQ1ZXa3NIODVrN1JFSm1GenJURUlqcVV5Zmd0dG1TWG0xQ3F0NE1Jc3dWYXVsSUwKRlkzbmo0Ymk2cWNJdExmQ0gxWGtLM2k5V1plOS9nWU5IOU4xYnljNDI3WHk3SldMeFdsajBPdUl2SzFSb2o5QgpKemJNRjVFbjhGRC9LV2RyVlM1TzB5S3VuZ2ljNDRvL0FWc0RuRUF6dkgwRnJqUzJqRDBVeHZnQktFWEZMRmtjCnhRTnFrV0wzbEJUWnJteVpLTkxRUnRISmlFVG9ueFlTTWFUS1FBcnhpSFdnbHM0N1o3Z0hOZm9zeG9LQi9yMy8KSlFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==\"\n};\n\n//# sourceURL=webpack://sgf-gstin-validator/./src/certs.js?");
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"einv_prod\": () => (/* binding */ einv_prod),\n/* harmony export */ \"einv_prod_11092020\": () => (/* binding */ einv_prod_11092020),\n/* harmony export */ \"einv_sandbox\": () => (/* binding */ einv_sandbox)\n/* harmony export */ });\n\n\nconst einv_prod =\"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUE3bEpkNjRHM3pkNFdnZmJpTDI2SwpUTGpZNU11WGpQc0dTc2ZPTm13WDlaMUhiSVRLZUZFYVhLSllDZS8yV0xOdnJjV2VmeWsyc1AzVGl0V21YRlRSCkpyQXZ6bG0vRjl0S2ZHbEhpRUZ6aDY1b3NvbEdFL0tkT0l2QnZMWEZ3SjI5dWwzelNtMTdYMS9jbHF4YTZNb3YKaXlzNzNoRHhIYlpaL21wWUxEYXRiNjZ6emdlL0l6c09qZno0enlVRTJWdXM2c2loVUpadzJhN0JwSVBXT1BvTQowVEdTa2Y5L2RxOU9QektCYWtZZlhadkwvaFU4V1lZOXdPSVM3OUdPcXlUY01vN2NBYnN0VHAvZFJabHNldG1FClArZjFQeWk4Q21tNlJlS1UwRzNtdVRUUGdXdE01cjlTei90S2Y0N3hzRkxBZTY5UTJXT21ibEZSWU1pM3RHSVEKSFFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==\"\nconst einv_prod_11092020 =\"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFyeGQ5M3VMRHM4SFRQcWNTUHB4WgpyZjBEYzI5cjNpUHAwYThmaWxqQXllWDRSQUg2bFdtOXFGdDI2Q2NFOEVTWXRtbzFzVnRzd3ZzN1ZINEJqZy9GCkRsUnBkK01uQWxYdXhDaGlqOC92anlBd0U3MXVjTXJtWmh4TThyT1NmUE1MOGZuaVo4dHJyM0k0UjJvNHhXaDYKbm8veFRVdFowMi95VUVYYnBodzNERXVlZnpIRVFuRUYrcXVHamk5cHZHblBPNktybW5yaTlINFdQWTB5c1BRUQpRZDgyYlVaQ2s5WGRoU1pjVy9hbTh3QnVsWW9rSVRSTVZIbGJSWHF1MXBPRm1RTU81b1NweVpVM3BYYnN4K094CklPYzRFRFgwV01hOWFINCtzbnQxOFdBWFZHd0YyQjRmbUJrN0F0bWtGenJUbWJwbXlWcUEzS08ySWp6TVpQdzAKaFFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==\"\nconst einv_sandbox= \"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF0MFpYOXo2U2tCb1NUZ3NjTmU5WgpYL1dVSzU5WWJzenBaa1ZucGMwem9kdFF5VmRlUzMvS1B2ZFZodUxrWTlvS09XemM2aFFHSjgzWkdqOVJoUHVXCjNsZXhrSWRSL0QrN2pUMUlMQ1ZXa3NIODVrN1JFSm1GenJURUlqcVV5Zmd0dG1TWG0xQ3F0NE1Jc3dWYXVsSUwKRlkzbmo0Ymk2cWNJdExmQ0gxWGtLM2k5V1plOS9nWU5IOU4xYnljNDI3WHk3SldMeFdsajBPdUl2SzFSb2o5QgpKemJNRjVFbjhGRC9LV2RyVlM1TzB5S3VuZ2ljNDRvL0FWc0RuRUF6dkgwRnJqUzJqRDBVeHZnQktFWEZMRmtjCnhRTnFrV0wzbEJUWnJteVpLTkxRUnRISmlFVG9ueFlTTWFUS1FBcnhpSFdnbHM0N1o3Z0hOZm9zeG9LQi9yMy8KSlFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==\"\n\n\n//# sourceURL=webpack://sgf-gstin-validator/./src/certs.js?");

@@ -29,17 +39,7 @@ /***/ }),

\**********************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"isValidGSTNumber\": () => (/* binding */ isValidGSTNumber)\n/* harmony export */ });\n/* module decorator */ module = __webpack_require__.hmd(module);\n\n\nvar jwt = __webpack_require__(/*! jsonwebtoken */ \"?d57b\");\nvar certs = __webpack_require__(/*! ./certs */ \"./src/certs.js\");\n\nfunction calcCheckSum(gstin) {\n var GSTN_CODEPOINT_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n var factor = 2;\n var sum = 0;\n var checkCodePoint = 0;\n var mod = GSTN_CODEPOINT_CHARS.length;\n var i;\n\n for (i = gstin.length - 2; i >= 0; i--) {\n var codePoint = -1;\n for (var j = 0; j < GSTN_CODEPOINT_CHARS.length; j++) {\n if (GSTN_CODEPOINT_CHARS[j] === gstin[i]) {\n codePoint = j;\n }\n }\n var digit = factor * codePoint;\n factor = factor === 2 ? 1 : 2;\n digit = Math.floor(digit / mod) + (digit % mod);\n sum += digit;\n }\n checkCodePoint = (mod - (sum % mod)) % mod;\n return GSTN_CODEPOINT_CHARS[checkCodePoint];\n}\n\n// GSTIN Regex validation result\nfunction validatePattern(gstin) {\n // eslint-disable-next-line max-len\n var gstinRegexPattern = /^([0-2][0-9]|[3][0-8])[A-Z]{3}[ABCFGHLJPTK][A-Z]\\d{4}[A-Z][A-Z0-9][Z][A-Z0-9]$/;\n return gstinRegexPattern.test(gstin);\n}\n\nfunction isValidGSTNumber(gstin) {\n gstin = gstin.toUpperCase();\n if (gstin.length !== 15) {\n return false;\n }\n if (validatePattern(gstin)) {\n return gstin[14] === calcCheckSum(gstin.toUpperCase());\n }\n return false;\n}\n\nfunction getInfo(gstin) {\n var states = [\n {\n state_name: 'Andaman and Nicobar Islands',\n state_code: '35',\n state_shortcode: 'AN',\n },\n { state_name: 'Andhra Pradesh', state_code: '28', state_shortcode: 'AP' },\n {\n state_name: 'Andhra Pradesh (New)',\n state_code: '37',\n state_shortcode: 'AD',\n },\n {\n state_name: 'Arunachal Pradesh',\n state_code: '12',\n state_shortcode: 'AR',\n },\n { state_name: 'Assam', state_code: '18', state_shortcode: 'AS' },\n { state_name: 'Bihar', state_code: '10', state_shortcode: 'BH' },\n { state_name: 'Chandigarh', state_code: '04', state_shortcode: 'CH' },\n { state_name: 'Chattisgarh', state_code: '22', state_shortcode: 'CT' },\n {\n state_name: 'Dadra and Nagar Haveli',\n state_code: '26',\n state_shortcode: 'DN',\n },\n { state_name: 'Daman and Diu', state_code: '25', state_shortcode: 'DD' },\n { state_name: 'Delhi', state_code: '07', state_shortcode: 'DL' },\n { state_name: 'Goa', state_code: '30', state_shortcode: 'GA' },\n { state_name: 'Gujarat', state_code: '24', state_shortcode: 'GJ' },\n { state_name: 'Haryana', state_code: '06', state_shortcode: 'HR' },\n { state_name: 'Himachal Pradesh', state_code: '02', state_shortcode: 'HP' },\n {\n state_name: 'Jammu and Kashmir',\n state_code: '01',\n state_shortcode: 'JK',\n },\n { state_name: 'Jharkhand', state_code: '20', state_shortcode: 'JH' },\n { state_name: 'Karnataka', state_code: '29', state_shortcode: 'KA' },\n { state_name: 'Kerala', state_code: '32', state_shortcode: 'KL' },\n { state_name: 'Ladakh', state_code: '38', state_shortcode: 'LA' },\n {\n state_name: 'Lakshadweep Islands',\n state_code: '31',\n state_shortcode: 'LD',\n },\n { state_name: 'Madhya Pradesh', state_code: '23', state_shortcode: 'MP' },\n { state_name: 'Maharashtra', state_code: '27', state_shortcode: 'MH' },\n { state_name: 'Manipur', state_code: '14', state_shortcode: 'MN' },\n { state_name: 'Meghalaya', state_code: '17', state_shortcode: 'ME' },\n { state_name: 'Mizoram', state_code: '15', state_shortcode: 'MI' },\n { state_name: 'Nagaland', state_code: '13', state_shortcode: 'NL' },\n { state_name: 'Odisha', state_code: '21', state_shortcode: 'OR' },\n { state_name: 'Pondicherry', state_code: '34', state_shortcode: 'PY' },\n { state_name: 'Punjab', state_code: '03', state_shortcode: 'PB' },\n { state_name: 'Rajasthan', state_code: '08', state_shortcode: 'RJ' },\n { state_name: 'Sikkim', state_code: '11', state_shortcode: 'SK' },\n { state_name: 'Tamil Nadu', state_code: '33', state_shortcode: 'TN' },\n { state_name: 'Telangana', state_code: '36', state_shortcode: 'TS' },\n { state_name: 'Tripura', state_code: '16', state_shortcode: 'TR' },\n { state_name: 'Uttar Pradesh', state_code: '09', state_shortcode: 'UP' },\n { state_name: 'Uttarakhand', state_code: '05', state_shortcode: 'UT' },\n { state_name: 'West Bengal', state_code: '19', state_shortcode: 'WB' },\n ];\n\n var panTypes = [\n { code: 'C', pan_type: 'Company' },\n { code: 'P', pan_type: 'Person' },\n { code: 'H', pan_type: 'HUF (Hindu Undivided Family)' },\n { code: 'F', pan_type: 'Firm' },\n { code: 'A', pan_type: 'Association of Persons (AOP)' },\n { code: 'T', pan_type: 'AOP (Trust)' },\n { code: 'B', pan_type: 'Body of Individuals (BOI)' },\n { code: 'L', pan_type: 'Local Authority' },\n { code: 'J', pan_type: 'Artificial Juridical Person ' },\n { code: 'G', pan_type: 'Government' },\n ];\n\n gstin = gstin.toUpperCase();\n\n if (!isValidGSTNumber(gstin)) return 'Invalid GSTIN';\n\n var state = states.find(function(o) {\n return o.state_code === gstin.slice(0, 2);\n });\n var info_msg =\n 'The GSTIN ' +\n gstin +\n ' is entity #' +\n parseInt(gstin.slice(12, 13), 36) +\n ' belonging to ' +\n panTypes.find(function(o) {\n return o.code === gstin[5];\n }).pan_type +\n ' whose PAN is ' +\n gstin.slice(2, 12) +\n ' registered in ' +\n state.state_name +\n ' (' +\n state.state_shortcode +\n ')';\n return info_msg;\n}\n\nfunction getCert(certname) {\n if (certname === undefined) {\n certname = 'einv_prod';\n }\n if (certname.endsWith('.pem')) {\n certname = certname.replace('.pem', '');\n }\n // get public key\n var buf = Buffer.from(certs[certname], 'base64');\n return buf.toString();\n}\n\n// This function is to validate a eInvoice QR\nfunction validateEInvoiceSignedQR(qrText, publickey) {\n var cert = getCert(publickey);\n try {\n var decodedQR = jwt.verify(qrText, cert, {issuer: 'NIC'});\n } catch (err) {\n throw new Error('Signature Verification Failed!');\n }\n return decodedQR;\n}\n\nfunction validateSignedInvoice(signedInvoiceJWT, publickey) {\n var cert = getCert(publickey);\n try {\n var invoice = jwt.verify(signedInvoiceJWT, cert, {issuer: 'NIC'});\n } catch (err) {\n throw new Error('Signature Verification Failed!');\n }\n return invoice;\n\n}\n\nmodule.exports = {\n isValidGSTNumber: isValidGSTNumber ,\n\n ValidateGSTIN: function(gstin) {\n gstin = gstin.toUpperCase();\n if (gstin.length !== 15) {\n return 'Enter a valid 15 character GSTIN';\n }\n if (!validatePattern(gstin)) {\n return 'Invalid GSTIN format';\n } else {\n if (gstin.toUpperCase()[14] !== calcCheckSum(gstin.toUpperCase())) {\n return 'Invalid checksum character in GSTIN';\n } else return 'Valid GSTIN';\n }\n },\n\n validateEInvoiceSignedQR: validateEInvoiceSignedQR,\n\n validateSignedInvoice: validateSignedInvoice,\n\n getGSTINInfo: getInfo,\n};\n\n\n//# sourceURL=webpack://sgf-gstin-validator/./src/index.js?");
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ValidateGSTIN\": () => (/* binding */ ValidateGSTIN),\n/* harmony export */ \"isValidGSTNumber\": () => (/* binding */ isValidGSTNumber),\n/* harmony export */ \"validateEInvoiceSignedQR\": () => (/* binding */ validateEInvoiceSignedQR),\n/* harmony export */ \"validateSignedInvoice\": () => (/* binding */ validateSignedInvoice)\n/* harmony export */ });\n/* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonwebtoken */ \"?d57b\");\n/* harmony import */ var _certs_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./certs.js */ \"./src/certs.js\");\n\n\n\n\n\nfunction calcCheckSum(gstin) {\n var GSTN_CODEPOINT_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n var factor = 2;\n var sum = 0;\n var checkCodePoint = 0;\n var mod = GSTN_CODEPOINT_CHARS.length;\n var i;\n\n for (i = gstin.length - 2; i >= 0; i--) {\n var codePoint = -1;\n for (var j = 0; j < GSTN_CODEPOINT_CHARS.length; j++) {\n if (GSTN_CODEPOINT_CHARS[j] === gstin[i]) {\n codePoint = j;\n }\n }\n var digit = factor * codePoint;\n factor = factor === 2 ? 1 : 2;\n digit = Math.floor(digit / mod) + (digit % mod);\n sum += digit;\n }\n checkCodePoint = (mod - (sum % mod)) % mod;\n return GSTN_CODEPOINT_CHARS[checkCodePoint];\n}\n\n// GSTIN Regex validation result\nfunction validatePattern(gstin) {\n // eslint-disable-next-line max-len\n var gstinRegexPattern = /^([0-2][0-9]|[3][0-8])[A-Z]{3}[ABCFGHLJPTK][A-Z]\\d{4}[A-Z][A-Z0-9][Z][A-Z0-9]$/;\n return gstinRegexPattern.test(gstin);\n}\n\nfunction isValidGSTNumber(gstin) {\n gstin = gstin.toUpperCase();\n if (gstin.length !== 15) {\n return false;\n }\n if (validatePattern(gstin)) {\n return gstin[14] === calcCheckSum(gstin.toUpperCase());\n }\n return false;\n}\n\nfunction getInfo(gstin) {\n var states = [\n {\n state_name: 'Andaman and Nicobar Islands',\n state_code: '35',\n state_shortcode: 'AN',\n },\n { state_name: 'Andhra Pradesh', state_code: '28', state_shortcode: 'AP' },\n {\n state_name: 'Andhra Pradesh (New)',\n state_code: '37',\n state_shortcode: 'AD',\n },\n {\n state_name: 'Arunachal Pradesh',\n state_code: '12',\n state_shortcode: 'AR',\n },\n { state_name: 'Assam', state_code: '18', state_shortcode: 'AS' },\n { state_name: 'Bihar', state_code: '10', state_shortcode: 'BH' },\n { state_name: 'Chandigarh', state_code: '04', state_shortcode: 'CH' },\n { state_name: 'Chattisgarh', state_code: '22', state_shortcode: 'CT' },\n {\n state_name: 'Dadra and Nagar Haveli',\n state_code: '26',\n state_shortcode: 'DN',\n },\n { state_name: 'Daman and Diu', state_code: '25', state_shortcode: 'DD' },\n { state_name: 'Delhi', state_code: '07', state_shortcode: 'DL' },\n { state_name: 'Goa', state_code: '30', state_shortcode: 'GA' },\n { state_name: 'Gujarat', state_code: '24', state_shortcode: 'GJ' },\n { state_name: 'Haryana', state_code: '06', state_shortcode: 'HR' },\n { state_name: 'Himachal Pradesh', state_code: '02', state_shortcode: 'HP' },\n {\n state_name: 'Jammu and Kashmir',\n state_code: '01',\n state_shortcode: 'JK',\n },\n { state_name: 'Jharkhand', state_code: '20', state_shortcode: 'JH' },\n { state_name: 'Karnataka', state_code: '29', state_shortcode: 'KA' },\n { state_name: 'Kerala', state_code: '32', state_shortcode: 'KL' },\n { state_name: 'Ladakh', state_code: '38', state_shortcode: 'LA' },\n {\n state_name: 'Lakshadweep Islands',\n state_code: '31',\n state_shortcode: 'LD',\n },\n { state_name: 'Madhya Pradesh', state_code: '23', state_shortcode: 'MP' },\n { state_name: 'Maharashtra', state_code: '27', state_shortcode: 'MH' },\n { state_name: 'Manipur', state_code: '14', state_shortcode: 'MN' },\n { state_name: 'Meghalaya', state_code: '17', state_shortcode: 'ME' },\n { state_name: 'Mizoram', state_code: '15', state_shortcode: 'MI' },\n { state_name: 'Nagaland', state_code: '13', state_shortcode: 'NL' },\n { state_name: 'Odisha', state_code: '21', state_shortcode: 'OR' },\n { state_name: 'Pondicherry', state_code: '34', state_shortcode: 'PY' },\n { state_name: 'Punjab', state_code: '03', state_shortcode: 'PB' },\n { state_name: 'Rajasthan', state_code: '08', state_shortcode: 'RJ' },\n { state_name: 'Sikkim', state_code: '11', state_shortcode: 'SK' },\n { state_name: 'Tamil Nadu', state_code: '33', state_shortcode: 'TN' },\n { state_name: 'Telangana', state_code: '36', state_shortcode: 'TS' },\n { state_name: 'Tripura', state_code: '16', state_shortcode: 'TR' },\n { state_name: 'Uttar Pradesh', state_code: '09', state_shortcode: 'UP' },\n { state_name: 'Uttarakhand', state_code: '05', state_shortcode: 'UT' },\n { state_name: 'West Bengal', state_code: '19', state_shortcode: 'WB' },\n ];\n\n var panTypes = [\n { code: 'C', pan_type: 'Company' },\n { code: 'P', pan_type: 'Person' },\n { code: 'H', pan_type: 'HUF (Hindu Undivided Family)' },\n { code: 'F', pan_type: 'Firm' },\n { code: 'A', pan_type: 'Association of Persons (AOP)' },\n { code: 'T', pan_type: 'AOP (Trust)' },\n { code: 'B', pan_type: 'Body of Individuals (BOI)' },\n { code: 'L', pan_type: 'Local Authority' },\n { code: 'J', pan_type: 'Artificial Juridical Person ' },\n { code: 'G', pan_type: 'Government' },\n ];\n\n gstin = gstin.toUpperCase();\n\n if (!isValidGSTNumber(gstin)) return 'Invalid GSTIN';\n\n var state = states.find(function(o) {\n return o.state_code === gstin.slice(0, 2);\n });\n var info_msg =\n 'The GSTIN ' +\n gstin +\n ' is entity #' +\n parseInt(gstin.slice(12, 13), 36) +\n ' belonging to ' +\n panTypes.find(function(o) {\n return o.code === gstin[5];\n }).pan_type +\n ' whose PAN is ' +\n gstin.slice(2, 12) +\n ' registered in ' +\n state.state_name +\n ' (' +\n state.state_shortcode +\n ')';\n return info_msg;\n}\n\nfunction getCert(certname) {\n if (certname === undefined) {\n certname = 'einv_prod';\n }\n if (certname.endsWith('.pem')) {\n certname = certname.replace('.pem', '');\n }\n // get public key\n var buf = Buffer.from(_certs_js__WEBPACK_IMPORTED_MODULE_1__[certname], 'base64');\n return buf.toString();\n}\n\n// This function is to validate a eInvoice QR\nfunction validateEInvoiceSignedQR(qrText, publickey) {\n var cert = getCert(publickey);\n try {\n var decodedQR = jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__.verify(qrText, cert, {issuer: 'NIC'});\n } catch (err) {\n throw new Error('Signature Verification Failed!');\n }\n return decodedQR;\n}\n\nfunction validateSignedInvoice(signedInvoiceJWT, publickey) {\n var cert = getCert(publickey);\n try {\n var invoice = jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__.verify(signedInvoiceJWT, cert, {issuer: 'NIC'});\n } catch (err) {\n throw new Error('Signature Verification Failed!');\n }\n return invoice;\n\n}\n\nfunction ValidateGSTIN(gstin) {\n gstin = gstin.toUpperCase();\n if (gstin.length !== 15) {\n return 'Enter a valid 15 character GSTIN';\n }\n if (!validatePattern(gstin)) {\n return 'Invalid GSTIN format';\n } else {\n if (gstin.toUpperCase()[14] !== calcCheckSum(gstin.toUpperCase())) {\n return 'Invalid checksum character in GSTIN';\n } else return 'Valid GSTIN';\n }\n}\n\n/*module.exports = {\n isValidGSTNumber: isValidGSTNumber ,\n\n ValidateGSTIN: ,\n\n validateEInvoiceSignedQR: validateEInvoiceSignedQR,\n\n validateSignedInvoice: validateSignedInvoice,\n\n getGSTINInfo: getInfo,\n};*/\n\n\n//# sourceURL=webpack://sgf-gstin-validator/./src/index.js?");
/***/ }),
/***/ "?d57b":
/*!******************************!*\
!*** jsonwebtoken (ignored) ***!
\******************************/
/***/ (() => {
eval("/* (ignored) */\n\n//# sourceURL=webpack://sgf-gstin-validator/jsonwebtoken_(ignored)?");
/***/ })

@@ -61,4 +61,4 @@

/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ id: moduleId,
/******/ loaded: false,
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}

@@ -70,5 +70,2 @@ /******/ };

/******/
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/
/******/ // Return the exports of the module

@@ -91,17 +88,2 @@ /******/ return module.exports;

/******/
/******/ /* webpack/runtime/harmony module decorator */
/******/ (() => {
/******/ __webpack_require__.hmd = (module) => {
/******/ module = Object.create(module);
/******/ if (!module.children) module.children = [];
/******/ Object.defineProperty(module, 'exports', {
/******/ enumerable: true,
/******/ set: () => {
/******/ throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);
/******/ }
/******/ });
/******/ return module;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */

@@ -127,3 +109,3 @@ /******/ (() => {

/******/ // Load entry module and return exports
/******/ // This entry module is referenced by other modules so it can't be inlined
/******/ // This entry module can't be inlined because the eval devtool is used.
/******/ var __webpack_exports__ = __webpack_require__("./src/index.js");

@@ -130,0 +112,0 @@ /******/

{
"name": "sgf-gstin-validator",
"version": "1.0.3",
"version": "1.0.4",
"description": "Module to validate GSTIN and verify Signed QR of GST eInvoice",
"main": "dist/gstin-validator.js",
"type": "module",
"scripts": {
"test": "mocha src/index.test.js",
"test-coverage": "nyc mocha src/index.test.js",
"build": "npx webpack --config webpack.config.js",
"build": "npx webpack --config webpack.config.cjs",
"dist": "uglifyjs dist/gstin-validator.js -o dist/gstin-validator.min.js",

@@ -18,4 +19,3 @@ "pack-certs": "node scripts/pack_certs.js"

"files": [
"dist",
"src/certs"
"dist"
],

@@ -35,2 +35,3 @@ "keywords": [

"devDependencies": {
"@babel/plugin-transform-modules-commonjs": "^7.17.9",
"chai": "^4.3.4",

@@ -37,0 +38,0 @@ "eslint": "^7.32.0",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc