@tma.js/init-data-node 1.2.7 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,31 @@
1
+ import { InitData, InitDataParsed } from '@tma.js/sdk';
2
+ import { ValidateOptions } from '../validate.js';
3
+ import { SignData } from '../types.js';
4
+
5
+ /**
6
+ * Signs specified init data.
7
+ * @param data - init data to sign.
8
+ * @param authDate - date, when this init data should be signed.
9
+ * @param key - private key.
10
+ * @returns Signed init data presented as query parameters.
11
+ */
12
+ export declare function sign(data: SignData, key: string, authDate: Date): string;
13
+ /**
14
+ * Signs specified data with the passed token.
15
+ * @param data - data to sign.
16
+ * @param key - private key.
17
+ * @returns Data sign.
18
+ */
19
+ export declare function signData(data: string, key: string): string;
20
+ /**
21
+ * Validates passed init data.
22
+ * @param value - value to check.
23
+ * @param token - bot secret token.
24
+ * @param options - additional validation options.
25
+ * @throws {TypeError} "auth_date" should present integer
26
+ * @throws {Error} "hash" is empty or not found
27
+ * @throws {Error} "auth_date" is empty or not found
28
+ * @throws {Error} Init data expired
29
+ */
30
+ export declare function validate(value: InitData | InitDataParsed | string | URLSearchParams, token: string, options?: ValidateOptions): void;
31
+ export * from './shared.js';
@@ -0,0 +1,22 @@
1
+ import { createHmac } from "node:crypto";
2
+ import { s as sign$1, a as signData$1, v as validate$1 } from "./index-uL7oQrpu.js";
3
+ import { i, b } from "./index-uL7oQrpu.js";
4
+ function sign(data, key, authDate) {
5
+ return sign$1(data, key, authDate, signData);
6
+ }
7
+ function signData(data, key) {
8
+ return signData$1(data, key, (d, k) => {
9
+ return createHmac("sha256", k).update(d).digest();
10
+ });
11
+ }
12
+ function validate(value, token, options) {
13
+ return validate$1(value, token, signData, options);
14
+ }
15
+ export {
16
+ i as initDataToSearchParams,
17
+ b as parse,
18
+ sign,
19
+ signData,
20
+ validate
21
+ };
22
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sources":["../../src/entries/node.ts"],"sourcesContent":["import { InitData, InitDataParsed } from '@tma.js/sdk';\nimport { createHmac } from 'node:crypto';\n\nimport { sign as baseSign } from '../sign.js';\nimport { signData as baseSignData } from '../signData.js';\nimport { validate as baseValidate } from '../validate.js';\nimport type{ ValidateOptions } from '../validate.js';\nimport type { SignData } from '../types.js';\n\n/**\n * Signs specified init data.\n * @param data - init data to sign.\n * @param authDate - date, when this init data should be signed.\n * @param key - private key.\n * @returns Signed init data presented as query parameters.\n */\nexport function sign(data: SignData, key: string, authDate: Date): string {\n return baseSign(data, key, authDate, signData);\n}\n\n/**\n * Signs specified data with the passed token.\n * @param data - data to sign.\n * @param key - private key.\n * @returns Data sign.\n */\nexport function signData(data: string, key: string): string {\n return baseSignData(data, key, (d, k) => {\n return createHmac('sha256', k).update(d).digest();\n });\n}\n\n/**\n * Validates passed init data.\n * @param value - value to check.\n * @param token - bot secret token.\n * @param options - additional validation options.\n * @throws {TypeError} \"auth_date\" should present integer\n * @throws {Error} \"hash\" is empty or not found\n * @throws {Error} \"auth_date\" is empty or not found\n * @throws {Error} Init data expired\n */\nexport function validate(\n value: InitData | InitDataParsed | string | URLSearchParams,\n token: string,\n options?: ValidateOptions,\n): void {\n return baseValidate(value, token, signData, options);\n}\n\nexport * from './shared.js';\n"],"names":["baseSign","baseSignData","baseValidate"],"mappings":";;;AAgBgB,SAAA,KAAK,MAAgB,KAAa,UAAwB;AACxE,SAAOA,OAAS,MAAM,KAAK,UAAU,QAAQ;AAC/C;AAQgB,SAAA,SAAS,MAAc,KAAqB;AAC1D,SAAOC,WAAa,MAAM,KAAK,CAAC,GAAG,MAAM;AACvC,WAAO,WAAW,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE;EAAO,CACjD;AACH;AAYgB,SAAA,SACd,OACA,OACA,SACM;AACN,SAAOC,WAAa,OAAO,OAAO,UAAU,OAAO;AACrD;"}
@@ -0,0 +1,4 @@
1
+ export { type Chat, type ChatType, type InitDataParsed, parseInitData as parse, type User, } from '@tma.js/sdk';
2
+ export { initDataToSearchParams } from '../initDataToSearchParams.js';
3
+ export type { ValidateOptions } from '../validate.js';
4
+ export type { SignData } from '../types.js';
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const index = require("./index-DihIF0dZ.cjs");
4
+ function sign(data, key, authDate) {
5
+ return index.sign(data, key, authDate, signData);
6
+ }
7
+ async function signData(data, key) {
8
+ return index.signData(data, key, async (d, k) => {
9
+ const encoder = new TextEncoder();
10
+ return Buffer.from(
11
+ await crypto.subtle.sign(
12
+ "HMAC",
13
+ await crypto.subtle.importKey(
14
+ "raw",
15
+ typeof k === "string" ? encoder.encode(k) : k,
16
+ { name: "HMAC", hash: "SHA-256" },
17
+ false,
18
+ ["sign", "verify"]
19
+ ),
20
+ encoder.encode(d)
21
+ )
22
+ );
23
+ });
24
+ }
25
+ async function validate(value, token, options) {
26
+ return index.validate(value, token, signData, options);
27
+ }
28
+ exports.initDataToSearchParams = index.initDataToSearchParams;
29
+ exports.parse = index.as;
30
+ exports.sign = sign;
31
+ exports.signData = signData;
32
+ exports.validate = validate;
33
+ //# sourceMappingURL=web.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.cjs","sources":["../../src/entries/web.ts"],"sourcesContent":["import { InitData, InitDataParsed } from '@tma.js/sdk';\n\nimport { sign as baseSign } from '../sign.js';\nimport { signData as baseSignData } from '../signData.js';\nimport { validate as baseValidate } from '../validate.js';\nimport type{ ValidateOptions } from '../validate.js';\nimport type { SignData } from '../types.js';\n\n/**\n * Signs specified init data.\n * @param data - init data to sign.\n * @param authDate - date, when this init data should be signed.\n * @param key - private key.\n * @returns Signed init data presented as query parameters.\n */\nexport function sign(data: SignData, key: string, authDate: Date): Promise<string> {\n return baseSign(data, key, authDate, signData);\n}\n\n/**\n * Signs specified data with the passed token.\n * @param data - data to sign.\n * @param key - private key.\n * @returns Data sign.\n */\nexport async function signData(data: string, key: string): Promise<string> {\n return baseSignData(data, key, async (d, k) => {\n const encoder = new TextEncoder();\n\n return Buffer.from(\n await crypto.subtle.sign(\n 'HMAC',\n await crypto.subtle.importKey(\n 'raw',\n typeof k === 'string' ? encoder.encode(k) : k,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign', 'verify'],\n ),\n encoder.encode(d),\n ),\n );\n });\n}\n\n/**\n * Validates passed init data.\n * @param value - value to check.\n * @param token - bot secret token.\n * @param options - additional validation options.\n * @throws {TypeError} \"auth_date\" should present integer\n * @throws {Error} \"hash\" is empty or not found\n * @throws {Error} \"auth_date\" is empty or not found\n * @throws {Error} Init data expired\n */\nexport async function validate(\n value: InitData | InitDataParsed | string | URLSearchParams,\n token: string,\n options?: ValidateOptions,\n): Promise<void> {\n return baseValidate(value, token, signData, options);\n}\n\nexport * from './shared.js';\n"],"names":["baseSign","baseSignData","baseValidate"],"mappings":";;;AAegB,SAAA,KAAK,MAAgB,KAAa,UAAiC;AACjF,SAAOA,MAAS,KAAA,MAAM,KAAK,UAAU,QAAQ;AAC/C;AAQsB,eAAA,SAAS,MAAc,KAA8B;AACzE,SAAOC,MAAa,SAAA,MAAM,KAAK,OAAO,GAAG,MAAM;AACvC,UAAA,UAAU,IAAI;AAEpB,WAAO,OAAO;AAAA,MACZ,MAAM,OAAO,OAAO;AAAA,QAClB;AAAA,QACA,MAAM,OAAO,OAAO;AAAA,UAClB;AAAA,UACA,OAAO,MAAM,WAAW,QAAQ,OAAO,CAAC,IAAI;AAAA,UAC5C,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,UAChC;AAAA,UACA,CAAC,QAAQ,QAAQ;AAAA,QACnB;AAAA,QACA,QAAQ,OAAO,CAAC;AAAA,MAClB;AAAA,IAAA;AAAA,EACF,CACD;AACH;AAYsB,eAAA,SACpB,OACA,OACA,SACe;AACf,SAAOC,MAAa,SAAA,OAAO,OAAO,UAAU,OAAO;AACrD;;;;;;"}
@@ -0,0 +1,31 @@
1
+ import { InitData, InitDataParsed } from '@tma.js/sdk';
2
+ import { ValidateOptions } from '../validate.js';
3
+ import { SignData } from '../types.js';
4
+
5
+ /**
6
+ * Signs specified init data.
7
+ * @param data - init data to sign.
8
+ * @param authDate - date, when this init data should be signed.
9
+ * @param key - private key.
10
+ * @returns Signed init data presented as query parameters.
11
+ */
12
+ export declare function sign(data: SignData, key: string, authDate: Date): Promise<string>;
13
+ /**
14
+ * Signs specified data with the passed token.
15
+ * @param data - data to sign.
16
+ * @param key - private key.
17
+ * @returns Data sign.
18
+ */
19
+ export declare function signData(data: string, key: string): Promise<string>;
20
+ /**
21
+ * Validates passed init data.
22
+ * @param value - value to check.
23
+ * @param token - bot secret token.
24
+ * @param options - additional validation options.
25
+ * @throws {TypeError} "auth_date" should present integer
26
+ * @throws {Error} "hash" is empty or not found
27
+ * @throws {Error} "auth_date" is empty or not found
28
+ * @throws {Error} Init data expired
29
+ */
30
+ export declare function validate(value: InitData | InitDataParsed | string | URLSearchParams, token: string, options?: ValidateOptions): Promise<void>;
31
+ export * from './shared.js';
@@ -0,0 +1,34 @@
1
+ import { s as sign$1, a as signData$1, v as validate$1 } from "./index-uL7oQrpu.js";
2
+ import { i, b } from "./index-uL7oQrpu.js";
3
+ function sign(data, key, authDate) {
4
+ return sign$1(data, key, authDate, signData);
5
+ }
6
+ async function signData(data, key) {
7
+ return signData$1(data, key, async (d, k) => {
8
+ const encoder = new TextEncoder();
9
+ return Buffer.from(
10
+ await crypto.subtle.sign(
11
+ "HMAC",
12
+ await crypto.subtle.importKey(
13
+ "raw",
14
+ typeof k === "string" ? encoder.encode(k) : k,
15
+ { name: "HMAC", hash: "SHA-256" },
16
+ false,
17
+ ["sign", "verify"]
18
+ ),
19
+ encoder.encode(d)
20
+ )
21
+ );
22
+ });
23
+ }
24
+ async function validate(value, token, options) {
25
+ return validate$1(value, token, signData, options);
26
+ }
27
+ export {
28
+ i as initDataToSearchParams,
29
+ b as parse,
30
+ sign,
31
+ signData,
32
+ validate
33
+ };
34
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sources":["../../src/entries/web.ts"],"sourcesContent":["import { InitData, InitDataParsed } from '@tma.js/sdk';\n\nimport { sign as baseSign } from '../sign.js';\nimport { signData as baseSignData } from '../signData.js';\nimport { validate as baseValidate } from '../validate.js';\nimport type{ ValidateOptions } from '../validate.js';\nimport type { SignData } from '../types.js';\n\n/**\n * Signs specified init data.\n * @param data - init data to sign.\n * @param authDate - date, when this init data should be signed.\n * @param key - private key.\n * @returns Signed init data presented as query parameters.\n */\nexport function sign(data: SignData, key: string, authDate: Date): Promise<string> {\n return baseSign(data, key, authDate, signData);\n}\n\n/**\n * Signs specified data with the passed token.\n * @param data - data to sign.\n * @param key - private key.\n * @returns Data sign.\n */\nexport async function signData(data: string, key: string): Promise<string> {\n return baseSignData(data, key, async (d, k) => {\n const encoder = new TextEncoder();\n\n return Buffer.from(\n await crypto.subtle.sign(\n 'HMAC',\n await crypto.subtle.importKey(\n 'raw',\n typeof k === 'string' ? encoder.encode(k) : k,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign', 'verify'],\n ),\n encoder.encode(d),\n ),\n );\n });\n}\n\n/**\n * Validates passed init data.\n * @param value - value to check.\n * @param token - bot secret token.\n * @param options - additional validation options.\n * @throws {TypeError} \"auth_date\" should present integer\n * @throws {Error} \"hash\" is empty or not found\n * @throws {Error} \"auth_date\" is empty or not found\n * @throws {Error} Init data expired\n */\nexport async function validate(\n value: InitData | InitDataParsed | string | URLSearchParams,\n token: string,\n options?: ValidateOptions,\n): Promise<void> {\n return baseValidate(value, token, signData, options);\n}\n\nexport * from './shared.js';\n"],"names":["baseSign","baseSignData","baseValidate"],"mappings":";;AAegB,SAAA,KAAK,MAAgB,KAAa,UAAiC;AACjF,SAAOA,OAAS,MAAM,KAAK,UAAU,QAAQ;AAC/C;AAQsB,eAAA,SAAS,MAAc,KAA8B;AACzE,SAAOC,WAAa,MAAM,KAAK,OAAO,GAAG,MAAM;AACvC,UAAA,UAAU,IAAI;AAEpB,WAAO,OAAO;AAAA,MACZ,MAAM,OAAO,OAAO;AAAA,QAClB;AAAA,QACA,MAAM,OAAO,OAAO;AAAA,UAClB;AAAA,UACA,OAAO,MAAM,WAAW,QAAQ,OAAO,CAAC,IAAI;AAAA,UAC5C,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,UAChC;AAAA,UACA,CAAC,QAAQ,QAAQ;AAAA,QACnB;AAAA,QACA,QAAQ,OAAO,CAAC;AAAA,MAClB;AAAA,IAAA;AAAA,EACF,CACD;AACH;AAYsB,eAAA,SACpB,OACA,OACA,SACe;AACf,SAAOC,WAAa,OAAO,OAAO,UAAU,OAAO;AACrD;"}
@@ -1,4 +1,3 @@
1
1
  import { InitDataParsed } from '@tma.js/sdk';
2
- import { URLSearchParams } from 'node:url';
3
2
 
4
3
  export declare function initDataToSearchParams({ chat, receiver, user, ...data }: Partial<InitDataParsed>): URLSearchParams;
package/dist/sign.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ import { SignData, SignDataAsyncFn, SignDataSyncFn } from './types.js';
2
+
3
+ /**
4
+ * Signs specified init data.
5
+ * @param data - init data to sign.
6
+ * @param authDate - date, when this init data should be signed.
7
+ * @param key - private key.
8
+ * @param signData - function signing data.
9
+ * @returns Signed init data presented as query parameters.
10
+ */
11
+ export declare function sign(data: SignData, key: string, authDate: Date, signData: SignDataSyncFn): string;
12
+ /**
13
+ * Signs specified init data.
14
+ * @param data - init data to sign.
15
+ * @param authDate - date, when this init data should be signed.
16
+ * @param key - private key.
17
+ * @param signData - function signing data.
18
+ * @returns Signed init data presented as query parameters.
19
+ */
20
+ export declare function sign(data: SignData, key: string, authDate: Date, signData: SignDataAsyncFn): Promise<string>;
@@ -0,0 +1,17 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /**
3
+ * Signs specified data with the passed token.
4
+ * @param data - data to sign.
5
+ * @param key - private key.
6
+ * @param createHmac - function to create HMAC-SHA256.
7
+ * @returns Data sign.
8
+ */
9
+ export declare function signData(data: string, key: string, createHmac: (data: string, key: string | Buffer) => Buffer): string;
10
+ /**
11
+ * Signs specified data with the passed token.
12
+ * @param data - data to sign.
13
+ * @param key - private key.
14
+ * @param createHmac - function to create HMAC-SHA256.
15
+ * @returns Data sign.
16
+ */
17
+ export declare function signData(data: string, key: string, createHmac: (data: string, key: string | Buffer) => Promise<Buffer>): Promise<string>;
@@ -0,0 +1,10 @@
1
+ import { InitDataParsed } from '@tma.js/sdk';
2
+
3
+ export interface SignData extends Omit<InitDataParsed, 'authDate' | 'hash'> {
4
+ }
5
+ export interface SignDataSyncFn {
6
+ (data: string, key: string): string;
7
+ }
8
+ export interface SignDataAsyncFn {
9
+ (data: string, key: string): Promise<string>;
10
+ }
@@ -0,0 +1,39 @@
1
+ import { InitData, InitDataParsed } from '@tma.js/sdk';
2
+ import { SignDataAsyncFn, SignDataSyncFn } from './types.js';
3
+
4
+ export interface ValidateOptions {
5
+ /**
6
+ * Time in seconds which states, how long from creation time init data is considered valid.
7
+ *
8
+ * In other words, in case when authDate + expiresIn is before current time, init data is
9
+ * recognized as expired.
10
+ *
11
+ * In case this value is equal to 0, the function does not check init data expiration.
12
+ * @default 86400 (1 day)
13
+ */
14
+ expiresIn?: number;
15
+ }
16
+ /**
17
+ * Validates passed init data.
18
+ * @param value - value to check.
19
+ * @param token - bot secret token.
20
+ * @param signData - function signing data.
21
+ * @param options - additional validation options.
22
+ * @throws {TypeError} "auth_date" should present integer
23
+ * @throws {Error} "hash" is empty or not found
24
+ * @throws {Error} "auth_date" is empty or not found
25
+ * @throws {Error} Init data expired
26
+ */
27
+ export declare function validate(value: InitData | InitDataParsed | string | URLSearchParams, token: string, signData: SignDataSyncFn, options?: ValidateOptions): void | never;
28
+ /**
29
+ * Validates passed init data.
30
+ * @param value - value to check.
31
+ * @param token - bot secret token.
32
+ * @param signData - function signing data.
33
+ * @param options - additional validation options.
34
+ * @throws {TypeError} "auth_date" should present integer
35
+ * @throws {Error} "hash" is empty or not found
36
+ * @throws {Error} "auth_date" is empty or not found
37
+ * @throws {Error} Init data expired
38
+ */
39
+ export declare function validate(value: InitData | InitDataParsed | string | URLSearchParams, token: string, signData: SignDataAsyncFn, options?: ValidateOptions): Promise<void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tma.js/init-data-node",
3
- "version": "1.2.7",
3
+ "version": "1.3.0",
4
4
  "description": "TypeScript Node library to operate with Telegram init data.",
5
5
  "author": "Vladislav Kibenko <wolfram.deus@gmail.com>",
6
6
  "homepage": "https://github.com/Telegram-Mini-Apps/tma.js#readme",
@@ -24,15 +24,21 @@
24
24
  "files": [
25
25
  "dist"
26
26
  ],
27
- "main": "./dist/index.cjs",
28
- "module": "./dist/index.js",
29
- "types": "./dist/dts/index.d.ts",
27
+ "main": "./dist/entries/node.cjs",
28
+ "module": "./dist/entries/node.js",
29
+ "types": "./dist/entries/node.d.ts",
30
30
  "exports": {
31
31
  ".": {
32
- "types": "./dist/dts/index.d.ts",
33
- "import": "./dist/index.js",
34
- "require": "./dist/index.cjs",
35
- "default": "./dist/index.cjs"
32
+ "types": "./dist/entries/node.d.ts",
33
+ "import": "./dist/entries/node.js",
34
+ "require": "./dist/entries/node.cjs",
35
+ "default": "./dist/entries/node.cjs"
36
+ },
37
+ "./web": {
38
+ "types": "./dist/entries/web.d.ts",
39
+ "import": "./dist/entries/web.js",
40
+ "require": "./dist/entries/web.cjs",
41
+ "default": "./dist/entries/web.cjs"
36
42
  }
37
43
  },
38
44
  "devDependencies": {
@@ -43,13 +49,15 @@
43
49
  "access": "public"
44
50
  },
45
51
  "dependencies": {
46
- "@tma.js/sdk": "^2.5.0"
52
+ "@tma.js/sdk": "^2.5.1"
47
53
  },
48
54
  "scripts": {
49
55
  "test": "vitest --run",
50
56
  "lint": "cd ../.. && eslint packages/init-data-node/src --ignore-pattern **/*.test.ts",
51
57
  "lint:fix": "pnpm run lint --fix",
52
58
  "typecheck": "tsc --noEmit",
53
- "build": "vite build"
59
+ "build:node": "vite build --ssr src/entries/node.ts",
60
+ "build:web": "vite build --ssr src/entries/web.ts",
61
+ "build": "rimraf dist && pnpm run build:node && pnpm run build:web"
54
62
  }
55
63
  }
@@ -1,5 +0,0 @@
1
- export { sign } from './sign.js';
2
- export { signData } from './signData.js';
3
- export type { SignData } from './types.js';
4
- export { validate, type ValidateOptions } from './validate.js';
5
- export { type Chat, type ChatType, type InitDataParsed, parseInitData as parse, type User, } from '@tma.js/sdk';
@@ -1,10 +0,0 @@
1
- import { SignData } from './types.js';
2
-
3
- /**
4
- * Signs specified init data.
5
- * @param data - init data to sign.
6
- * @param authDate - date, when this init data should be signed.
7
- * @param token - bot token.
8
- * @returns Signed init data presented as query parameters.
9
- */
10
- export declare function sign(data: SignData, token: string, authDate: Date): string;
@@ -1,7 +0,0 @@
1
- /**
2
- * Signs specified data with the passed token.
3
- * @param data - data to sign.
4
- * @param token - bot token.
5
- * @returns Data sign.
6
- */
7
- export declare function signData(data: string, token: string): string;
@@ -1,4 +0,0 @@
1
- import { InitDataParsed } from '@tma.js/sdk';
2
-
3
- export interface SignData extends Omit<InitDataParsed, 'authDate' | 'hash'> {
4
- }
@@ -1,26 +0,0 @@
1
- import { URLSearchParams } from 'node:url';
2
- import { InitData, InitDataParsed } from '@tma.js/sdk';
3
-
4
- export interface ValidateOptions {
5
- /**
6
- * Time in seconds which states, how long from creation time init data is considered valid.
7
- *
8
- * In other words, in case, when authDate + expiresIn is before current time, init data
9
- * recognized as expired.
10
- *
11
- * In case, this value is equal to 0, function does not check init data expiration.
12
- * @default 86400 (1 day)
13
- */
14
- expiresIn?: number;
15
- }
16
- /**
17
- * Validates passed init data.
18
- * @param value - value to check.
19
- * @param token - bot secret token.
20
- * @param options - additional validation options.
21
- * @throws {TypeError} "auth_date" should present integer
22
- * @throws {Error} "hash" is empty or not found
23
- * @throws {Error} "auth_date" is empty or not found
24
- * @throws {Error} Init data expired
25
- */
26
- export declare function validate(value: InitData | InitDataParsed | string | URLSearchParams, token: string, options?: ValidateOptions): void;
package/dist/index.cjs DELETED
@@ -1,4 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("node:crypto"),m=require("node:url");function _(t,e){return S.createHmac("sha256",S.createHmac("sha256","WebAppData").update(e).digest()).update(t).digest().toString("hex")}function $(t){const e={};for(const n in t){const r=t[n];r!==void 0&&(e[n]=r)}return e}function v(t){return t?JSON.stringify({added_to_attachment_menu:t.addedToAttachmentMenu,allows_write_to_pm:t.allowsWriteToPm,first_name:t.firstName,id:t.id,is_bot:t.isBot,is_premium:t.isPremium,language_code:t.languageCode,last_name:t.lastName,photo_url:t.photoUrl,username:t.username}):void 0}function D({chat:t,receiver:e,user:n,...r}){var o;return new m.URLSearchParams($({auth_date:r.authDate?(+r.authDate/1e3|0).toString():void 0,can_send_after:(o=r.canSendAfter)==null?void 0:o.toString(),chat:t?JSON.stringify({id:t.id,type:t.type,title:t.title,photo_url:t.type,username:t.username}):void 0,chat_instance:r.chatInstance,chat_type:r.chatType||void 0,hash:r.hash,query_id:r.queryId,receiver:v(e),start_param:r.startParam||void 0,user:v(n)}))}function q(t,e,n){const r=D({...t,authDate:n}),o=[...r.entries()].map(([i,u])=>`${i}=${u}`).sort();return r.append("hash",_(o.join(`
2
- `),e)),r.toString()}function R(t,e,n={}){let r,o;const i=[];if(new m.URLSearchParams(typeof t=="string"||t instanceof m.URLSearchParams?t:D(t)).forEach((s,l)=>{if(l==="hash"){o=s;return}if(l==="auth_date"){const b=parseInt(s,10);if(Number.isNaN(b))throw new TypeError('"auth_date" should present integer');r=new Date(b*1e3)}i.push(`${l}=${s}`)}),!o)throw new Error('"hash" is empty or not found');if(!r)throw new Error('"auth_date" is empty or not found');const{expiresIn:u=86400}=n;if(u>0&&+r+u*1e3<Date.now())throw new Error("Init data expired");if(i.sort(),_(i.join(`
3
- `),e)!==o)throw new Error("Signature is invalid")}class y extends Error{constructor(e,n,r){super(n,{cause:r}),this.type=e,Object.setPrototypeOf(this,y.prototype)}}function g(t,e,n){return new y(t,e,n)}const T="ERR_UNEXPECTED_TYPE",E="ERR_PARSE";function d(){return g(T,"Value has unexpected type")}class w{constructor(e,n,r){this.parser=e,this.isOptional=n,this.type=r}parse(e){if(!(this.isOptional&&e===void 0))try{return this.parser(e)}catch(n){throw g(E,`Unable to parse value${this.type?` as ${this.type}`:""}`,n)}}optional(){return this.isOptional=!0,this}}function h(t,e){return()=>new w(t,!1,e)}const c=h(t=>{if(typeof t=="boolean")return t;const e=String(t);if(e==="1"||e==="true")return!0;if(e==="0"||e==="false")return!1;throw d()},"boolean");function N(t,e){const n={};for(const r in t){const o=t[r];if(!o)continue;let i,u;if(typeof o=="function"||"parse"in o)i=r,u=typeof o=="function"?o:o.parse.bind(o);else{const{type:s}=o;i=o.from||r,u=typeof s=="function"?s:s.parse.bind(s)}try{const s=u(e(i));s!==void 0&&(n[r]=s)}catch(s){throw g(E,`Unable to parse field "${r}"`,s)}}return n}function U(t){let e=t;if(typeof e=="string"&&(e=JSON.parse(e)),typeof e!="object"||e===null||Array.isArray(e))throw d();return e}function p(t,e){return new w(n=>{const r=U(n);return N(t,o=>r[o])},!1,e)}const f=h(t=>{if(typeof t=="number")return t;if(typeof t=="string"){const e=Number(t);if(!Number.isNaN(e))return e}throw d()},"number");function O(t){return/^#[\da-f]{6}$/i.test(t)}function x(t){return/^#[\da-f]{3}$/i.test(t)}function I(t){const e=t.replace(/\s/g,"").toLowerCase();if(O(e))return e;if(x(e)){let r="#";for(let o=0;o<3;o+=1)r+=e[1+o].repeat(2);return r}const n=e.match(/^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/)||e.match(/^rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),\d{1,3}\)$/);if(!n)throw new Error(`Value "${t}" does not satisfy any of known RGB formats.`);return n.slice(1).reduce((r,o)=>{const i=parseInt(o,10).toString(16);return r+(i.length===1?"0":"")+i},"#")}const a=h(t=>{if(typeof t=="string"||typeof t=="number")return t.toString();throw d()},"string"),A=h(t=>I(a().parse(t)),"rgb");p({req_id:a(),data:t=>t===null?t:a().optional().parse(t)}),p({req_id:a(),result:t=>t,error:a().optional()}),p({slug:a(),status:a()}),p({status:a()}),p({data:a().optional()}),p({theme_params:t=>{const e=A().optional();return Object.entries(U(t)).reduce((n,[r,o])=>(n[r]=e.parse(o),n),{})}}),p({height:f(),width:t=>t==null?window.innerWidth:f().parse(t),is_state_stable:c(),is_expanded:c()}),p({status:a()});const L=h(t=>t instanceof Date?t:new Date(f().parse(t)*1e3),"Date");function j(t,e){return new w(n=>{if(typeof n!="string"&&!(n instanceof URLSearchParams))throw d();const r=typeof n=="string"?new URLSearchParams(n):n;return N(t,o=>{const i=r.get(o);return i===null?void 0:i})},!1,e)}const C=p({id:f(),type:a(),title:a(),photoUrl:{type:a().optional(),from:"photo_url"},username:a().optional()},"Chat").optional(),P=p({addedToAttachmentMenu:{type:c().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:c().optional(),from:"allows_write_to_pm"},firstName:{type:a(),from:"first_name"},id:f(),isBot:{type:c().optional(),from:"is_bot"},isPremium:{type:c().optional(),from:"is_premium"},languageCode:{type:a().optional(),from:"language_code"},lastName:{type:a().optional(),from:"last_name"},photoUrl:{type:a().optional(),from:"photo_url"},username:a().optional()},"User").optional();function W(){return j({authDate:{type:L(),from:"auth_date"},canSendAfter:{type:f().optional(),from:"can_send_after"},chat:C,chatInstance:{type:a().optional(),from:"chat_instance"},chatType:{type:a().optional(),from:"chat_type"},hash:a(),queryId:{type:a().optional(),from:"query_id"},receiver:P,startParam:{type:a().optional(),from:"start_param"},user:P},"InitData")}function B(t){return W().parse(t)}exports.parse=B;exports.sign=q;exports.signData=_;exports.validate=R;
4
- //# sourceMappingURL=index.cjs.map