@tma.js/init-data 0.2.18 → 0.2.19
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.
- package/dist/dts/chat.d.ts +10 -0
- package/dist/dts/index.d.ts +5 -1
- package/dist/dts/initData.d.ts +5 -0
- package/dist/dts/parse.d.ts +6 -0
- package/dist/dts/serialize.d.ts +6 -0
- package/dist/dts/user.d.ts +5 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.iife.js +1 -1
- package/dist/index.iife.js.map +1 -1
- package/dist/index.mjs +124 -40
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/chat.ts +17 -0
- package/src/index.ts +5 -1
- package/src/initData.ts +41 -0
- package/src/parse.ts +10 -0
- package/src/serialize.ts +77 -0
- package/src/user.ts +37 -0
- package/dist/dts/parsing.d.ts +0 -11
- package/src/parsing.ts +0 -72
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns parser used to parse chat data.
|
|
3
|
+
*/
|
|
4
|
+
export declare function chat(): import("@tma.js/parsing").ValueParser<{
|
|
5
|
+
id: number;
|
|
6
|
+
type: string;
|
|
7
|
+
title: string;
|
|
8
|
+
photoUrl: import("@tma.js/parsing").ParseResult<string, true>;
|
|
9
|
+
username: import("@tma.js/parsing").ParseResult<string, true>;
|
|
10
|
+
}, false>;
|
package/dist/dts/index.d.ts
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("@tma.js/parsing");function g(){return t.json({id:t.number(),type:t.string(),title:t.string(),photoUrl:{type:t.string().optional(),from:"photo_url"},username:t.string().optional()})}function f(){return t.json({firstName:{type:t.string(),from:"first_name"},id:t.number(),isBot:{type:t.boolean().optional(),from:"is_bot"},isPremium:{type:t.boolean().optional(),from:"is_premium"},lastName:{type:t.string().optional(),from:"last_name"},languageCode:{type:t.string().optional(),from:"language_code"},photoUrl:{type:t.string().optional(),from:"photo_url"},username:t.string().optional()})}function _(){return t.searchParams({authDate:{type:t.date(),from:"auth_date"},canSendAfter:{type:t.number().optional(),from:"can_send_after"},chat:g().optional(),chatInstance:{type:t.string().optional(),from:"chat_instance"},chatType:{type:t.string().optional(),from:"chat_type"},hash:t.string(),queryId:{type:t.string().optional(),from:"query_id"},receiver:f().optional(),startParam:{type:t.string().optional(),from:"start_param"},user:f().optional()})}function b(r){return _().parse(r)}function o(r,n,a){a!==void 0&&r.set(n,a)}function h(r,n,a){if(a===void 0)return;const{photoUrl:s,firstName:p,lastName:u,isPremium:m,languageCode:c,isBot:l,...i}=a;r.set(n,JSON.stringify({...i,photo_url:s,first_name:p,last_name:u,is_premium:m,language_code:c,is_bot:l}))}function P(r){const{chat:n,chatType:a,chatInstance:s,hash:p,user:u,queryId:m,receiver:c,startParam:l,canSendAfter:i,authDate:y}=r,e=new URLSearchParams;if(e.set("auth_date",(y.getTime()/1e3).toString()),o(e,"chat_instance",s),o(e,"chat_type",a),o(e,"hash",p),o(e,"query_id",m),h(e,"receiver",c),o(e,"start_param",l),h(e,"user",u),n){const{photoUrl:d,...S}=n;e.set("chat",JSON.stringify({...S,photo_url:d}))}return i&&e.set("can_send_after",i.toString()),e.toString()}exports.chat=g;exports.initData=_;exports.parse=b;exports.serialize=P;exports.user=f;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/chat.ts","../src/user.ts","../src/initData.ts","../src/parse.ts","../src/serialize.ts"],"sourcesContent":["import { json, number, string } from '@tma.js/parsing';\n\n/**\n * Returns parser used to parse chat data.\n */\nexport function chat() {\n return json({\n id: number(),\n type: string(),\n title: string(),\n photoUrl: {\n type: string().optional(),\n from: 'photo_url',\n },\n username: string().optional(),\n });\n}\n","import { json, string, boolean, number } from '@tma.js/parsing';\n\nimport type { User } from './types.js';\n\n/**\n * Returns parser used to parse user data.\n */\nexport function user() {\n return json<User>({\n firstName: {\n type: string(),\n from: 'first_name',\n },\n id: number(),\n isBot: {\n type: boolean().optional(),\n from: 'is_bot',\n },\n isPremium: {\n type: boolean().optional(),\n from: 'is_premium',\n },\n lastName: {\n type: string().optional(),\n from: 'last_name',\n },\n languageCode: {\n type: string().optional(),\n from: 'language_code',\n },\n photoUrl: {\n type: string().optional(),\n from: 'photo_url',\n },\n username: string().optional(),\n });\n}\n","import { string, number, date, searchParams } from '@tma.js/parsing';\n\nimport { user } from './user.js';\nimport { chat } from './chat.js';\nimport type { InitData } from './types.js';\n\n/**\n * Returns parser used to parse init data, presented as search params.\n */\nexport function initData() {\n return searchParams<InitData>({\n authDate: {\n type: date(),\n from: 'auth_date',\n },\n canSendAfter: {\n type: number().optional(),\n from: 'can_send_after',\n },\n chat: chat().optional(),\n chatInstance: {\n type: string().optional(),\n from: 'chat_instance',\n },\n chatType: {\n type: string().optional(),\n from: 'chat_type',\n },\n hash: string(),\n queryId: {\n type: string().optional(),\n from: 'query_id',\n },\n receiver: user().optional(),\n startParam: {\n type: string().optional(),\n from: 'start_param',\n },\n user: user().optional(),\n });\n}\n","import { initData } from './initData.js';\nimport type { InitData } from './types.js';\n\n/**\n * Parses incoming value as init data.\n * @param value - value to parse.\n */\nexport function parse(value: unknown): InitData {\n return initData().parse(value);\n}\n","import type { InitData, User } from './types.js';\n\nfunction setString(params: URLSearchParams, key: string, value: string | undefined) {\n if (value === undefined) {\n return;\n }\n params.set(key, value);\n}\n\nfunction setUser(params: URLSearchParams, key: string, value: User | undefined) {\n if (value === undefined) {\n return;\n }\n const {\n photoUrl,\n firstName,\n lastName,\n isPremium,\n languageCode,\n isBot,\n ...rest\n } = value;\n\n params.set(key, JSON.stringify({\n ...rest,\n photo_url: photoUrl,\n first_name: firstName,\n last_name: lastName,\n is_premium: isPremium,\n language_code: languageCode,\n is_bot: isBot,\n }));\n}\n\n/**\n * Converts init data to its initial representation.\n * @param value - init data.\n */\nexport function serialize(value: InitData): string {\n const {\n chat,\n chatType,\n chatInstance,\n hash,\n user,\n queryId,\n receiver,\n startParam,\n canSendAfter,\n authDate,\n } = value;\n\n const params = new URLSearchParams();\n\n params.set('auth_date', (authDate.getTime() / 1000).toString());\n setString(params, 'chat_instance', chatInstance);\n setString(params, 'chat_type', chatType);\n setString(params, 'hash', hash);\n setString(params, 'query_id', queryId);\n setUser(params, 'receiver', receiver);\n setString(params, 'start_param', startParam);\n setUser(params, 'user', user);\n\n if (chat) {\n const { photoUrl, ...rest } = chat;\n params.set('chat', JSON.stringify({\n ...rest,\n photo_url: photoUrl,\n }));\n }\n\n if (canSendAfter) {\n params.set('can_send_after', canSendAfter.toString());\n }\n\n return params.toString();\n}\n"],"names":["chat","json","number","string","user","boolean","initData","searchParams","date","parse","value","setString","params","key","setUser","photoUrl","firstName","lastName","isPremium","languageCode","isBot","rest","serialize","chatType","chatInstance","hash","queryId","receiver","startParam","canSendAfter","authDate"],"mappings":"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"}
|
package/dist/index.iife.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
this.tmajs=this.tmajs||{};this.tmajs.initData=function(
|
|
1
|
+
this.tmajs=this.tmajs||{};this.tmajs.initData=function(y){"use strict";class u extends Error{constructor(e,{type:o,error:a,field:r}={}){super(`Unable to parse ${r?`field "${r}"`:"value"} as ${o}`,{cause:{value:e,error:a}}),Object.setPrototypeOf(this,u.prototype)}}class w{constructor(e,o,a){this.parser=e,this.isOptional=o,this.isEmpty=a}parse(e){return this.isOptional&&this.isEmpty(e)?void 0:this.parser(e)}optional(){return this.isOptional=!0,this}}function b(t){return t===void 0}function m(){return new TypeError("Does not have any of expected types")}function _(t,{isEmpty:e=b}={}){return function({isEmpty:o=e}={}){return new w(t,!1,o)}}function N(t,e,o){const a={};for(const r in t){const n=t[r];if(!n)continue;let s,c;if("type"in n){const{type:f}=n;s=n.from||r,c=typeof f=="function"?f:f.parse.bind(f)}else s=r,c=typeof n=="function"?n:n.parse.bind(n);let h;const l=e(s);try{h=c(l)}catch(f){throw new u(l,{field:s,type:o,error:f})}h!==void 0&&(a[r]=h)}return a}const v=_(t=>{if(typeof t=="boolean")return t;throw new u(t,{type:"boolean",error:m()})}),g=_(t=>{if(typeof t=="number")return t;if(typeof t=="string"){const e=Number(t);if(!Number.isNaN(e))return e}throw new u(t,{type:"number",error:m()})}),E=g(),j=_(t=>{if(t instanceof Date)return t;try{return new Date(E.parse(t)*1e3)}catch(e){throw new u(t,{type:"Date",error:e})}});function P(t,e={}){const{type:o,isEmpty:a=b}=e;return new w(r=>{let n=r;if(typeof n=="string")try{n=JSON.parse(n)}catch(s){throw new u(r,{type:o,error:s})}if(typeof n!="object"||n===null||Array.isArray(n))throw new u(r,{type:o,error:m()});return N(t,s=>n[s])},!1,a)}const i=_(t=>{if(typeof t=="string"||typeof t=="number")return t.toString();throw new u(t,{type:"string",error:m()})});i();function T(t,e={}){const{type:o,isEmpty:a=b}=e;return new w(r=>{if(typeof r!="string"&&!(r instanceof URLSearchParams))throw new u(r,{type:o,error:m()});const n=typeof r=="string"?new URLSearchParams(r):r;return N(t,s=>{const c=n.get(s);return c===null?void 0:c})},!1,a)}function U(){return P({id:g(),type:i(),title:i(),photoUrl:{type:i().optional(),from:"photo_url"},username:i().optional()})}function S(){return P({firstName:{type:i(),from:"first_name"},id:g(),isBot:{type:v().optional(),from:"is_bot"},isPremium:{type:v().optional(),from:"is_premium"},lastName:{type:i().optional(),from:"last_name"},languageCode:{type:i().optional(),from:"language_code"},photoUrl:{type:i().optional(),from:"photo_url"},username:i().optional()})}function D(){return T({authDate:{type:j(),from:"auth_date"},canSendAfter:{type:g().optional(),from:"can_send_after"},chat:U().optional(),chatInstance:{type:i().optional(),from:"chat_instance"},chatType:{type:i().optional(),from:"chat_type"},hash:i(),queryId:{type:i().optional(),from:"query_id"},receiver:S().optional(),startParam:{type:i().optional(),from:"start_param"},user:S().optional()})}function q(t){return D().parse(t)}function d(t,e,o){o!==void 0&&t.set(e,o)}function O(t,e,o){if(o===void 0)return;const{photoUrl:a,firstName:r,lastName:n,isPremium:s,languageCode:c,isBot:h,...l}=o;t.set(e,JSON.stringify({...l,photo_url:a,first_name:r,last_name:n,is_premium:s,language_code:c,is_bot:h}))}function A(t){const{chat:e,chatType:o,chatInstance:a,hash:r,user:n,queryId:s,receiver:c,startParam:h,canSendAfter:l,authDate:f}=t,p=new URLSearchParams;if(p.set("auth_date",(f.getTime()/1e3).toString()),d(p,"chat_instance",a),d(p,"chat_type",o),d(p,"hash",r),d(p,"query_id",s),O(p,"receiver",c),d(p,"start_param",h),O(p,"user",n),e){const{photoUrl:I,...R}=e;p.set("chat",JSON.stringify({...R,photo_url:I}))}return l&&p.set("can_send_after",l.toString()),p.toString()}return y.chat=U,y.initData=D,y.parse=q,y.serialize=A,y.user=S,Object.defineProperty(y,Symbol.toStringTag,{value:"Module"}),y}({});
|
|
2
2
|
//# sourceMappingURL=index.iife.js.map
|
package/dist/index.iife.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.iife.js","sources":["../../parsing/dist/index.mjs","../src/parsing.ts"],"sourcesContent":["var g = Object.defineProperty;\nvar l = (r, t, e) => t in r ? g(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;\nvar d = (r, t, e) => (l(r, typeof t != \"symbol\" ? t + \"\" : t, e), e);\nimport { toRGB as A } from \"@tma.js/colors\";\nclass i extends Error {\n constructor(t, { type: e, error: o, field: n } = {}) {\n super(`Unable to parse ${n ? `field \"${n}\"` : \"value\"} as ${e}`, {\n cause: { value: t, error: o }\n }), Object.setPrototypeOf(this, i.prototype);\n }\n}\nclass u {\n constructor(t, e, o) {\n this.parser = t, this.isOptional = e, this.isEmpty = o;\n }\n parse(t) {\n return this.isOptional && this.isEmpty(t) ? void 0 : this.parser(t);\n }\n optional() {\n return this.isOptional = !0, this;\n }\n}\nfunction E(r) {\n if (Array.isArray(r))\n return r;\n if (typeof r == \"string\")\n try {\n const t = JSON.parse(r);\n if (Array.isArray(t))\n return t;\n } catch {\n }\n throw new i(r, { type: \"array\" });\n}\nclass O extends u {\n constructor(e, o, n) {\n super(E, o, n);\n d(this, \"itemParser\");\n this.itemParser = typeof e == \"function\" ? e : e.parse.bind(e);\n }\n parse(e) {\n const o = super.parse(e);\n return o === void 0 ? o : o.map(this.itemParser);\n }\n of(e) {\n return this.itemParser = typeof e == \"function\" ? e : e.parse.bind(e), this;\n }\n}\nfunction h(r) {\n return r === void 0;\n}\nfunction D() {\n return new O((r) => r, !1, h);\n}\nfunction f() {\n return new TypeError(\"Does not have any of expected types\");\n}\nfunction y(r, { isEmpty: t = h } = {}) {\n return function({ isEmpty: o = t } = {}) {\n return new u(r, !1, o);\n };\n}\nfunction b(r, t, e) {\n const o = {};\n for (const n in r) {\n const s = r[n];\n if (!s)\n continue;\n let a, p;\n if (\"type\" in s) {\n const { type: c } = s;\n a = s.from || n, p = typeof c == \"function\" ? c : c.parse.bind(c);\n } else\n a = n, p = typeof s == \"function\" ? s : s.parse.bind(s);\n let w;\n const m = t(a);\n try {\n w = p(m);\n } catch (c) {\n throw new i(m, {\n field: a,\n type: e,\n error: c\n });\n }\n w !== void 0 && (o[n] = w);\n }\n return o;\n}\nconst G = y((r) => {\n if (typeof r == \"boolean\")\n return r;\n throw new i(r, { type: \"boolean\", error: f() });\n}), V = y((r) => {\n if (typeof r == \"number\")\n return r;\n if (typeof r == \"string\") {\n const t = Number(r);\n if (!Number.isNaN(t))\n return t;\n }\n throw new i(r, { type: \"number\", error: f() });\n}), N = V(), R = y((r) => {\n if (r instanceof Date)\n return r;\n try {\n return new Date(N.parse(r) * 1e3);\n } catch (t) {\n throw new i(r, { type: \"Date\", error: t });\n }\n});\nfunction U(r, t = {}) {\n const {\n type: e,\n isEmpty: o = h\n } = t;\n return new u((n) => {\n let s = n;\n if (typeof s == \"string\")\n try {\n s = JSON.parse(s);\n } catch (a) {\n throw new i(n, { type: e, error: a });\n }\n if (typeof s != \"object\" || s === null || Array.isArray(s))\n throw new i(n, { type: e, error: f() });\n return b(r, (a) => s[a]);\n }, !1, o);\n}\nconst P = y((r) => {\n if (typeof r == \"string\" || typeof r == \"number\")\n return r.toString();\n throw new i(r, { type: \"string\", error: f() });\n}), S = P(), B = y((r) => {\n try {\n return A(S.parse(r));\n } catch (t) {\n throw new i(r, { type: \"RGB\", error: t });\n }\n});\nfunction $(r, t = {}) {\n const {\n type: e,\n isEmpty: o = h\n } = t;\n return new u((n) => {\n if (typeof n != \"string\" && !(n instanceof URLSearchParams))\n throw new i(n, { type: e, error: f() });\n const s = typeof n == \"string\" ? new URLSearchParams(n) : n;\n return b(r, (a) => {\n const p = s.get(a);\n return p === null ? void 0 : p;\n });\n }, !1, o);\n}\nexport {\n O as ArrayValueParser,\n i as ParsingError,\n u as ValueParser,\n D as array,\n G as boolean,\n y as createValueParserGen,\n R as date,\n U as json,\n V as number,\n B as rgb,\n $ as searchParams,\n P as string\n};\n//# sourceMappingURL=index.mjs.map\n","import {\n searchParams,\n json,\n string,\n number,\n boolean,\n date,\n type AnyParser,\n} from '@tma.js/parsing';\n\nimport type { InitData, User } from './types.js';\n\nfunction field<P extends AnyParser<any>>(parser: P, from?: string) {\n return {\n from,\n type: parser,\n };\n}\n\nconst str = string();\nconst strOptional = string().optional();\nconst num = number();\nconst numOptional = number().optional();\nconst boolOptional = boolean().optional();\n\nfunction user() {\n return json<User>({\n firstName: field(str, 'first_name'),\n id: num,\n isBot: field(boolOptional, 'is_bot'),\n isPremium: field(boolOptional, 'is_premium'),\n lastName: field(strOptional, 'last_name'),\n languageCode: field(strOptional, 'language_code'),\n photoUrl: field(strOptional, 'photo_url'),\n username: strOptional,\n });\n}\n\nfunction chat() {\n return json({\n id: num,\n type: str,\n title: str,\n photoUrl: field(strOptional, 'photo_url'),\n username: strOptional,\n });\n}\n\n/**\n * Parser used to parse init data, presented as search params.\n * @deprecated Use `parse` method instead.\n */\nexport const initData = searchParams<InitData>({\n authDate: field(date(), 'auth_date'),\n hash: str,\n user: user().optional(),\n receiver: user().optional(),\n chat: chat().optional(),\n chatType: field(strOptional, 'chat_type'),\n chatInstance: field(strOptional, 'chat_instance'),\n canSendAfter: field(numOptional, 'can_send_after'),\n queryId: field(strOptional, 'query_id'),\n startParam: field(strOptional, 'start_param'),\n});\n\n/**\n * Parses incoming value as init data.\n * @param value - value to parse.\n */\nexport function parse(value: string | URLSearchParams): InitData {\n return initData.parse(value);\n}\n"],"names":["i","t","e","o","n","u","h","r","f","y","b","s","a","p","c","w","m","G","V","N","R","U","P","$","field","parser","from","str","string","strOptional","num","number","numOptional","boolOptional","boolean","user","json","chat","initData","searchParams","date","parse","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.iife.js","sources":["../../parsing/dist/index.mjs","../src/chat.ts","../src/user.ts","../src/initData.ts","../src/parse.ts","../src/serialize.ts"],"sourcesContent":["var g = Object.defineProperty;\nvar l = (r, t, e) => t in r ? g(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;\nvar d = (r, t, e) => (l(r, typeof t != \"symbol\" ? t + \"\" : t, e), e);\nimport { toRGB as A } from \"@tma.js/colors\";\nclass i extends Error {\n constructor(t, { type: e, error: o, field: n } = {}) {\n super(`Unable to parse ${n ? `field \"${n}\"` : \"value\"} as ${e}`, {\n cause: { value: t, error: o }\n }), Object.setPrototypeOf(this, i.prototype);\n }\n}\nclass u {\n constructor(t, e, o) {\n this.parser = t, this.isOptional = e, this.isEmpty = o;\n }\n parse(t) {\n return this.isOptional && this.isEmpty(t) ? void 0 : this.parser(t);\n }\n optional() {\n return this.isOptional = !0, this;\n }\n}\nfunction E(r) {\n if (Array.isArray(r))\n return r;\n if (typeof r == \"string\")\n try {\n const t = JSON.parse(r);\n if (Array.isArray(t))\n return t;\n } catch {\n }\n throw new i(r, { type: \"array\" });\n}\nclass O extends u {\n constructor(e, o, n) {\n super(E, o, n);\n d(this, \"itemParser\");\n this.itemParser = typeof e == \"function\" ? e : e.parse.bind(e);\n }\n parse(e) {\n const o = super.parse(e);\n return o === void 0 ? o : o.map(this.itemParser);\n }\n of(e) {\n return this.itemParser = typeof e == \"function\" ? e : e.parse.bind(e), this;\n }\n}\nfunction h(r) {\n return r === void 0;\n}\nfunction D() {\n return new O((r) => r, !1, h);\n}\nfunction f() {\n return new TypeError(\"Does not have any of expected types\");\n}\nfunction y(r, { isEmpty: t = h } = {}) {\n return function({ isEmpty: o = t } = {}) {\n return new u(r, !1, o);\n };\n}\nfunction b(r, t, e) {\n const o = {};\n for (const n in r) {\n const s = r[n];\n if (!s)\n continue;\n let a, p;\n if (\"type\" in s) {\n const { type: c } = s;\n a = s.from || n, p = typeof c == \"function\" ? c : c.parse.bind(c);\n } else\n a = n, p = typeof s == \"function\" ? s : s.parse.bind(s);\n let w;\n const m = t(a);\n try {\n w = p(m);\n } catch (c) {\n throw new i(m, {\n field: a,\n type: e,\n error: c\n });\n }\n w !== void 0 && (o[n] = w);\n }\n return o;\n}\nconst G = y((r) => {\n if (typeof r == \"boolean\")\n return r;\n throw new i(r, { type: \"boolean\", error: f() });\n}), V = y((r) => {\n if (typeof r == \"number\")\n return r;\n if (typeof r == \"string\") {\n const t = Number(r);\n if (!Number.isNaN(t))\n return t;\n }\n throw new i(r, { type: \"number\", error: f() });\n}), N = V(), R = y((r) => {\n if (r instanceof Date)\n return r;\n try {\n return new Date(N.parse(r) * 1e3);\n } catch (t) {\n throw new i(r, { type: \"Date\", error: t });\n }\n});\nfunction U(r, t = {}) {\n const {\n type: e,\n isEmpty: o = h\n } = t;\n return new u((n) => {\n let s = n;\n if (typeof s == \"string\")\n try {\n s = JSON.parse(s);\n } catch (a) {\n throw new i(n, { type: e, error: a });\n }\n if (typeof s != \"object\" || s === null || Array.isArray(s))\n throw new i(n, { type: e, error: f() });\n return b(r, (a) => s[a]);\n }, !1, o);\n}\nconst P = y((r) => {\n if (typeof r == \"string\" || typeof r == \"number\")\n return r.toString();\n throw new i(r, { type: \"string\", error: f() });\n}), S = P(), B = y((r) => {\n try {\n return A(S.parse(r));\n } catch (t) {\n throw new i(r, { type: \"RGB\", error: t });\n }\n});\nfunction $(r, t = {}) {\n const {\n type: e,\n isEmpty: o = h\n } = t;\n return new u((n) => {\n if (typeof n != \"string\" && !(n instanceof URLSearchParams))\n throw new i(n, { type: e, error: f() });\n const s = typeof n == \"string\" ? new URLSearchParams(n) : n;\n return b(r, (a) => {\n const p = s.get(a);\n return p === null ? void 0 : p;\n });\n }, !1, o);\n}\nexport {\n O as ArrayValueParser,\n i as ParsingError,\n u as ValueParser,\n D as array,\n G as boolean,\n y as createValueParserGen,\n R as date,\n U as json,\n V as number,\n B as rgb,\n $ as searchParams,\n P as string\n};\n//# sourceMappingURL=index.mjs.map\n","import { json, number, string } from '@tma.js/parsing';\n\n/**\n * Returns parser used to parse chat data.\n */\nexport function chat() {\n return json({\n id: number(),\n type: string(),\n title: string(),\n photoUrl: {\n type: string().optional(),\n from: 'photo_url',\n },\n username: string().optional(),\n });\n}\n","import { json, string, boolean, number } from '@tma.js/parsing';\n\nimport type { User } from './types.js';\n\n/**\n * Returns parser used to parse user data.\n */\nexport function user() {\n return json<User>({\n firstName: {\n type: string(),\n from: 'first_name',\n },\n id: number(),\n isBot: {\n type: boolean().optional(),\n from: 'is_bot',\n },\n isPremium: {\n type: boolean().optional(),\n from: 'is_premium',\n },\n lastName: {\n type: string().optional(),\n from: 'last_name',\n },\n languageCode: {\n type: string().optional(),\n from: 'language_code',\n },\n photoUrl: {\n type: string().optional(),\n from: 'photo_url',\n },\n username: string().optional(),\n });\n}\n","import { string, number, date, searchParams } from '@tma.js/parsing';\n\nimport { user } from './user.js';\nimport { chat } from './chat.js';\nimport type { InitData } from './types.js';\n\n/**\n * Returns parser used to parse init data, presented as search params.\n */\nexport function initData() {\n return searchParams<InitData>({\n authDate: {\n type: date(),\n from: 'auth_date',\n },\n canSendAfter: {\n type: number().optional(),\n from: 'can_send_after',\n },\n chat: chat().optional(),\n chatInstance: {\n type: string().optional(),\n from: 'chat_instance',\n },\n chatType: {\n type: string().optional(),\n from: 'chat_type',\n },\n hash: string(),\n queryId: {\n type: string().optional(),\n from: 'query_id',\n },\n receiver: user().optional(),\n startParam: {\n type: string().optional(),\n from: 'start_param',\n },\n user: user().optional(),\n });\n}\n","import { initData } from './initData.js';\nimport type { InitData } from './types.js';\n\n/**\n * Parses incoming value as init data.\n * @param value - value to parse.\n */\nexport function parse(value: unknown): InitData {\n return initData().parse(value);\n}\n","import type { InitData, User } from './types.js';\n\nfunction setString(params: URLSearchParams, key: string, value: string | undefined) {\n if (value === undefined) {\n return;\n }\n params.set(key, value);\n}\n\nfunction setUser(params: URLSearchParams, key: string, value: User | undefined) {\n if (value === undefined) {\n return;\n }\n const {\n photoUrl,\n firstName,\n lastName,\n isPremium,\n languageCode,\n isBot,\n ...rest\n } = value;\n\n params.set(key, JSON.stringify({\n ...rest,\n photo_url: photoUrl,\n first_name: firstName,\n last_name: lastName,\n is_premium: isPremium,\n language_code: languageCode,\n is_bot: isBot,\n }));\n}\n\n/**\n * Converts init data to its initial representation.\n * @param value - init data.\n */\nexport function serialize(value: InitData): string {\n const {\n chat,\n chatType,\n chatInstance,\n hash,\n user,\n queryId,\n receiver,\n startParam,\n canSendAfter,\n authDate,\n } = value;\n\n const params = new URLSearchParams();\n\n params.set('auth_date', (authDate.getTime() / 1000).toString());\n setString(params, 'chat_instance', chatInstance);\n setString(params, 'chat_type', chatType);\n setString(params, 'hash', hash);\n setString(params, 'query_id', queryId);\n setUser(params, 'receiver', receiver);\n setString(params, 'start_param', startParam);\n setUser(params, 'user', user);\n\n if (chat) {\n const { photoUrl, ...rest } = chat;\n params.set('chat', JSON.stringify({\n ...rest,\n photo_url: photoUrl,\n }));\n }\n\n if (canSendAfter) {\n params.set('can_send_after', canSendAfter.toString());\n }\n\n return params.toString();\n}\n"],"names":["i","t","e","o","n","u","h","r","f","y","b","s","a","p","c","w","m","G","V","N","R","U","P","$","chat","json","number","string","user","boolean","initData","searchParams","date","parse","value","setString","params","key","setUser","photoUrl","firstName","lastName","isPremium","languageCode","isBot","rest","serialize","chatType","chatInstance","hash","queryId","receiver","startParam","canSendAfter","authDate"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,49 +1,133 @@
|
|
|
1
|
-
import {
|
|
2
|
-
function
|
|
3
|
-
return {
|
|
4
|
-
|
|
5
|
-
type:
|
|
6
|
-
|
|
1
|
+
import { json as d, number as l, string as t, boolean as h, searchParams as P, date as U } from "@tma.js/parsing";
|
|
2
|
+
function b() {
|
|
3
|
+
return d({
|
|
4
|
+
id: l(),
|
|
5
|
+
type: t(),
|
|
6
|
+
title: t(),
|
|
7
|
+
photoUrl: {
|
|
8
|
+
type: t().optional(),
|
|
9
|
+
from: "photo_url"
|
|
10
|
+
},
|
|
11
|
+
username: t().optional()
|
|
12
|
+
});
|
|
7
13
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
function _() {
|
|
15
|
+
return d({
|
|
16
|
+
firstName: {
|
|
17
|
+
type: t(),
|
|
18
|
+
from: "first_name"
|
|
19
|
+
},
|
|
20
|
+
id: l(),
|
|
21
|
+
isBot: {
|
|
22
|
+
type: h().optional(),
|
|
23
|
+
from: "is_bot"
|
|
24
|
+
},
|
|
25
|
+
isPremium: {
|
|
26
|
+
type: h().optional(),
|
|
27
|
+
from: "is_premium"
|
|
28
|
+
},
|
|
29
|
+
lastName: {
|
|
30
|
+
type: t().optional(),
|
|
31
|
+
from: "last_name"
|
|
32
|
+
},
|
|
33
|
+
languageCode: {
|
|
34
|
+
type: t().optional(),
|
|
35
|
+
from: "language_code"
|
|
36
|
+
},
|
|
37
|
+
photoUrl: {
|
|
38
|
+
type: t().optional(),
|
|
39
|
+
from: "photo_url"
|
|
40
|
+
},
|
|
41
|
+
username: t().optional()
|
|
19
42
|
});
|
|
20
43
|
}
|
|
21
|
-
function
|
|
22
|
-
return
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
44
|
+
function q() {
|
|
45
|
+
return P({
|
|
46
|
+
authDate: {
|
|
47
|
+
type: U(),
|
|
48
|
+
from: "auth_date"
|
|
49
|
+
},
|
|
50
|
+
canSendAfter: {
|
|
51
|
+
type: l().optional(),
|
|
52
|
+
from: "can_send_after"
|
|
53
|
+
},
|
|
54
|
+
chat: b().optional(),
|
|
55
|
+
chatInstance: {
|
|
56
|
+
type: t().optional(),
|
|
57
|
+
from: "chat_instance"
|
|
58
|
+
},
|
|
59
|
+
chatType: {
|
|
60
|
+
type: t().optional(),
|
|
61
|
+
from: "chat_type"
|
|
62
|
+
},
|
|
63
|
+
hash: t(),
|
|
64
|
+
queryId: {
|
|
65
|
+
type: t().optional(),
|
|
66
|
+
from: "query_id"
|
|
67
|
+
},
|
|
68
|
+
receiver: _().optional(),
|
|
69
|
+
startParam: {
|
|
70
|
+
type: t().optional(),
|
|
71
|
+
from: "start_param"
|
|
72
|
+
},
|
|
73
|
+
user: _().optional()
|
|
28
74
|
});
|
|
29
75
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
76
|
+
function v(a) {
|
|
77
|
+
return q().parse(a);
|
|
78
|
+
}
|
|
79
|
+
function n(a, o, r) {
|
|
80
|
+
r !== void 0 && a.set(o, r);
|
|
81
|
+
}
|
|
82
|
+
function y(a, o, r) {
|
|
83
|
+
if (r === void 0)
|
|
84
|
+
return;
|
|
85
|
+
const {
|
|
86
|
+
photoUrl: s,
|
|
87
|
+
firstName: p,
|
|
88
|
+
lastName: m,
|
|
89
|
+
isPremium: u,
|
|
90
|
+
languageCode: c,
|
|
91
|
+
isBot: f,
|
|
92
|
+
...i
|
|
93
|
+
} = r;
|
|
94
|
+
a.set(o, JSON.stringify({
|
|
95
|
+
...i,
|
|
96
|
+
photo_url: s,
|
|
97
|
+
first_name: p,
|
|
98
|
+
last_name: m,
|
|
99
|
+
is_premium: u,
|
|
100
|
+
language_code: c,
|
|
101
|
+
is_bot: f
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
function D(a) {
|
|
105
|
+
const {
|
|
106
|
+
chat: o,
|
|
107
|
+
chatType: r,
|
|
108
|
+
chatInstance: s,
|
|
109
|
+
hash: p,
|
|
110
|
+
user: m,
|
|
111
|
+
queryId: u,
|
|
112
|
+
receiver: c,
|
|
113
|
+
startParam: f,
|
|
114
|
+
canSendAfter: i,
|
|
115
|
+
authDate: g
|
|
116
|
+
} = a, e = new URLSearchParams();
|
|
117
|
+
if (e.set("auth_date", (g.getTime() / 1e3).toString()), n(e, "chat_instance", s), n(e, "chat_type", r), n(e, "hash", p), n(e, "query_id", u), y(e, "receiver", c), n(e, "start_param", f), y(e, "user", m), o) {
|
|
118
|
+
const { photoUrl: S, ...N } = o;
|
|
119
|
+
e.set("chat", JSON.stringify({
|
|
120
|
+
...N,
|
|
121
|
+
photo_url: S
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
124
|
+
return i && e.set("can_send_after", i.toString()), e.toString();
|
|
44
125
|
}
|
|
45
126
|
export {
|
|
46
|
-
|
|
47
|
-
|
|
127
|
+
b as chat,
|
|
128
|
+
q as initData,
|
|
129
|
+
v as parse,
|
|
130
|
+
D as serialize,
|
|
131
|
+
_ as user
|
|
48
132
|
};
|
|
49
133
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/chat.ts","../src/user.ts","../src/initData.ts","../src/parse.ts","../src/serialize.ts"],"sourcesContent":["import { json, number, string } from '@tma.js/parsing';\n\n/**\n * Returns parser used to parse chat data.\n */\nexport function chat() {\n return json({\n id: number(),\n type: string(),\n title: string(),\n photoUrl: {\n type: string().optional(),\n from: 'photo_url',\n },\n username: string().optional(),\n });\n}\n","import { json, string, boolean, number } from '@tma.js/parsing';\n\nimport type { User } from './types.js';\n\n/**\n * Returns parser used to parse user data.\n */\nexport function user() {\n return json<User>({\n firstName: {\n type: string(),\n from: 'first_name',\n },\n id: number(),\n isBot: {\n type: boolean().optional(),\n from: 'is_bot',\n },\n isPremium: {\n type: boolean().optional(),\n from: 'is_premium',\n },\n lastName: {\n type: string().optional(),\n from: 'last_name',\n },\n languageCode: {\n type: string().optional(),\n from: 'language_code',\n },\n photoUrl: {\n type: string().optional(),\n from: 'photo_url',\n },\n username: string().optional(),\n });\n}\n","import { string, number, date, searchParams } from '@tma.js/parsing';\n\nimport { user } from './user.js';\nimport { chat } from './chat.js';\nimport type { InitData } from './types.js';\n\n/**\n * Returns parser used to parse init data, presented as search params.\n */\nexport function initData() {\n return searchParams<InitData>({\n authDate: {\n type: date(),\n from: 'auth_date',\n },\n canSendAfter: {\n type: number().optional(),\n from: 'can_send_after',\n },\n chat: chat().optional(),\n chatInstance: {\n type: string().optional(),\n from: 'chat_instance',\n },\n chatType: {\n type: string().optional(),\n from: 'chat_type',\n },\n hash: string(),\n queryId: {\n type: string().optional(),\n from: 'query_id',\n },\n receiver: user().optional(),\n startParam: {\n type: string().optional(),\n from: 'start_param',\n },\n user: user().optional(),\n });\n}\n","import { initData } from './initData.js';\nimport type { InitData } from './types.js';\n\n/**\n * Parses incoming value as init data.\n * @param value - value to parse.\n */\nexport function parse(value: unknown): InitData {\n return initData().parse(value);\n}\n","import type { InitData, User } from './types.js';\n\nfunction setString(params: URLSearchParams, key: string, value: string | undefined) {\n if (value === undefined) {\n return;\n }\n params.set(key, value);\n}\n\nfunction setUser(params: URLSearchParams, key: string, value: User | undefined) {\n if (value === undefined) {\n return;\n }\n const {\n photoUrl,\n firstName,\n lastName,\n isPremium,\n languageCode,\n isBot,\n ...rest\n } = value;\n\n params.set(key, JSON.stringify({\n ...rest,\n photo_url: photoUrl,\n first_name: firstName,\n last_name: lastName,\n is_premium: isPremium,\n language_code: languageCode,\n is_bot: isBot,\n }));\n}\n\n/**\n * Converts init data to its initial representation.\n * @param value - init data.\n */\nexport function serialize(value: InitData): string {\n const {\n chat,\n chatType,\n chatInstance,\n hash,\n user,\n queryId,\n receiver,\n startParam,\n canSendAfter,\n authDate,\n } = value;\n\n const params = new URLSearchParams();\n\n params.set('auth_date', (authDate.getTime() / 1000).toString());\n setString(params, 'chat_instance', chatInstance);\n setString(params, 'chat_type', chatType);\n setString(params, 'hash', hash);\n setString(params, 'query_id', queryId);\n setUser(params, 'receiver', receiver);\n setString(params, 'start_param', startParam);\n setUser(params, 'user', user);\n\n if (chat) {\n const { photoUrl, ...rest } = chat;\n params.set('chat', JSON.stringify({\n ...rest,\n photo_url: photoUrl,\n }));\n }\n\n if (canSendAfter) {\n params.set('can_send_after', canSendAfter.toString());\n }\n\n return params.toString();\n}\n"],"names":["chat","json","number","string","user","boolean","initData","searchParams","date","parse","value","setString","params","key","setUser","photoUrl","firstName","lastName","isPremium","languageCode","isBot","rest","serialize","chatType","chatInstance","hash","queryId","receiver","startParam","canSendAfter","authDate"],"mappings":";AAKO,SAASA,IAAO;AACrB,SAAOC,EAAK;AAAA,IACV,IAAIC,EAAO;AAAA,IACX,MAAMC,EAAO;AAAA,IACb,OAAOA,EAAO;AAAA,IACd,UAAU;AAAA,MACR,MAAMA,EAAO,EAAE,SAAS;AAAA,MACxB,MAAM;AAAA,IACR;AAAA,IACA,UAAUA,EAAO,EAAE,SAAS;AAAA,EAAA,CAC7B;AACH;ACTO,SAASC,IAAO;AACrB,SAAOH,EAAW;AAAA,IAChB,WAAW;AAAA,MACT,MAAME,EAAO;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,IAAID,EAAO;AAAA,IACX,OAAO;AAAA,MACL,MAAMG,EAAQ,EAAE,SAAS;AAAA,MACzB,MAAM;AAAA,IACR;AAAA,IACA,WAAW;AAAA,MACT,MAAMA,EAAQ,EAAE,SAAS;AAAA,MACzB,MAAM;AAAA,IACR;AAAA,IACA,UAAU;AAAA,MACR,MAAMF,EAAO,EAAE,SAAS;AAAA,MACxB,MAAM;AAAA,IACR;AAAA,IACA,cAAc;AAAA,MACZ,MAAMA,EAAO,EAAE,SAAS;AAAA,MACxB,MAAM;AAAA,IACR;AAAA,IACA,UAAU;AAAA,MACR,MAAMA,EAAO,EAAE,SAAS;AAAA,MACxB,MAAM;AAAA,IACR;AAAA,IACA,UAAUA,EAAO,EAAE,SAAS;AAAA,EAAA,CAC7B;AACH;AC3BO,SAASG,IAAW;AACzB,SAAOC,EAAuB;AAAA,IAC5B,UAAU;AAAA,MACR,MAAMC,EAAK;AAAA,MACX,MAAM;AAAA,IACR;AAAA,IACA,cAAc;AAAA,MACZ,MAAMN,EAAO,EAAE,SAAS;AAAA,MACxB,MAAM;AAAA,IACR;AAAA,IACA,MAAMF,EAAK,EAAE,SAAS;AAAA,IACtB,cAAc;AAAA,MACZ,MAAMG,EAAO,EAAE,SAAS;AAAA,MACxB,MAAM;AAAA,IACR;AAAA,IACA,UAAU;AAAA,MACR,MAAMA,EAAO,EAAE,SAAS;AAAA,MACxB,MAAM;AAAA,IACR;AAAA,IACA,MAAMA,EAAO;AAAA,IACb,SAAS;AAAA,MACP,MAAMA,EAAO,EAAE,SAAS;AAAA,MACxB,MAAM;AAAA,IACR;AAAA,IACA,UAAUC,EAAK,EAAE,SAAS;AAAA,IAC1B,YAAY;AAAA,MACV,MAAMD,EAAO,EAAE,SAAS;AAAA,MACxB,MAAM;AAAA,IACR;AAAA,IACA,MAAMC,EAAK,EAAE,SAAS;AAAA,EAAA,CACvB;AACH;ACjCO,SAASK,EAAMC,GAA0B;AACvC,SAAAJ,EAAW,EAAA,MAAMI,CAAK;AAC/B;ACPA,SAASC,EAAUC,GAAyBC,GAAaH,GAA2B;AAClF,EAAIA,MAAU,UAGPE,EAAA,IAAIC,GAAKH,CAAK;AACvB;AAEA,SAASI,EAAQF,GAAyBC,GAAaH,GAAyB;AAC9E,MAAIA,MAAU;AACZ;AAEI,QAAA;AAAA,IACJ,UAAAK;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC;AAAA,IACA,OAAAC;AAAA,IACA,GAAGC;AAAA,EACD,IAAAX;AAEG,EAAAE,EAAA,IAAIC,GAAK,KAAK,UAAU;AAAA,IAC7B,GAAGQ;AAAA,IACH,WAAWN;AAAA,IACX,YAAYC;AAAA,IACZ,WAAWC;AAAA,IACX,YAAYC;AAAA,IACZ,eAAeC;AAAA,IACf,QAAQC;AAAA,EACT,CAAA,CAAC;AACJ;AAMO,SAASE,EAAUZ,GAAyB;AAC3C,QAAA;AAAA,IACJ,MAAAV;AAAA,IACA,UAAAuB;AAAA,IACA,cAAAC;AAAA,IACA,MAAAC;AAAA,IACA,MAAArB;AAAA,IACA,SAAAsB;AAAA,IACA,UAAAC;AAAA,IACA,YAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,EACE,IAAApB,GAEEE,IAAS,IAAI;AAWnB,MATAA,EAAO,IAAI,cAAckB,EAAS,YAAY,KAAM,UAAU,GACpDnB,EAAAC,GAAQ,iBAAiBY,CAAY,GACrCb,EAAAC,GAAQ,aAAaW,CAAQ,GAC7BZ,EAAAC,GAAQ,QAAQa,CAAI,GACpBd,EAAAC,GAAQ,YAAYc,CAAO,GAC7BZ,EAAAF,GAAQ,YAAYe,CAAQ,GAC1BhB,EAAAC,GAAQ,eAAegB,CAAU,GACnCd,EAAAF,GAAQ,QAAQR,CAAI,GAExBJ,GAAM;AACR,UAAM,EAAE,UAAAe,GAAU,GAAGM,EAAA,IAASrB;AACvB,IAAAY,EAAA,IAAI,QAAQ,KAAK,UAAU;AAAA,MAChC,GAAGS;AAAA,MACH,WAAWN;AAAA,IACZ,CAAA,CAAC;AAAA,EACJ;AAEA,SAAIc,KACFjB,EAAO,IAAI,kBAAkBiB,EAAa,SAAU,CAAA,GAG/CjB,EAAO;AAChB;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tma.js/init-data",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.19",
|
|
4
4
|
"description": "Frontend TypeScript library to make work with Web Apps init data easier.",
|
|
5
5
|
"author": "Vladislav Kibenko <wolfram.deus@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/Telegram-Mini-Apps/tma.js#readme",
|
package/src/chat.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { json, number, string } from '@tma.js/parsing';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Returns parser used to parse chat data.
|
|
5
|
+
*/
|
|
6
|
+
export function chat() {
|
|
7
|
+
return json({
|
|
8
|
+
id: number(),
|
|
9
|
+
type: string(),
|
|
10
|
+
title: string(),
|
|
11
|
+
photoUrl: {
|
|
12
|
+
type: string().optional(),
|
|
13
|
+
from: 'photo_url',
|
|
14
|
+
},
|
|
15
|
+
username: string().optional(),
|
|
16
|
+
});
|
|
17
|
+
}
|
package/src/index.ts
CHANGED
package/src/initData.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { string, number, date, searchParams } from '@tma.js/parsing';
|
|
2
|
+
|
|
3
|
+
import { user } from './user.js';
|
|
4
|
+
import { chat } from './chat.js';
|
|
5
|
+
import type { InitData } from './types.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Returns parser used to parse init data, presented as search params.
|
|
9
|
+
*/
|
|
10
|
+
export function initData() {
|
|
11
|
+
return searchParams<InitData>({
|
|
12
|
+
authDate: {
|
|
13
|
+
type: date(),
|
|
14
|
+
from: 'auth_date',
|
|
15
|
+
},
|
|
16
|
+
canSendAfter: {
|
|
17
|
+
type: number().optional(),
|
|
18
|
+
from: 'can_send_after',
|
|
19
|
+
},
|
|
20
|
+
chat: chat().optional(),
|
|
21
|
+
chatInstance: {
|
|
22
|
+
type: string().optional(),
|
|
23
|
+
from: 'chat_instance',
|
|
24
|
+
},
|
|
25
|
+
chatType: {
|
|
26
|
+
type: string().optional(),
|
|
27
|
+
from: 'chat_type',
|
|
28
|
+
},
|
|
29
|
+
hash: string(),
|
|
30
|
+
queryId: {
|
|
31
|
+
type: string().optional(),
|
|
32
|
+
from: 'query_id',
|
|
33
|
+
},
|
|
34
|
+
receiver: user().optional(),
|
|
35
|
+
startParam: {
|
|
36
|
+
type: string().optional(),
|
|
37
|
+
from: 'start_param',
|
|
38
|
+
},
|
|
39
|
+
user: user().optional(),
|
|
40
|
+
});
|
|
41
|
+
}
|
package/src/parse.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { initData } from './initData.js';
|
|
2
|
+
import type { InitData } from './types.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Parses incoming value as init data.
|
|
6
|
+
* @param value - value to parse.
|
|
7
|
+
*/
|
|
8
|
+
export function parse(value: unknown): InitData {
|
|
9
|
+
return initData().parse(value);
|
|
10
|
+
}
|
package/src/serialize.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { InitData, User } from './types.js';
|
|
2
|
+
|
|
3
|
+
function setString(params: URLSearchParams, key: string, value: string | undefined) {
|
|
4
|
+
if (value === undefined) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
params.set(key, value);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function setUser(params: URLSearchParams, key: string, value: User | undefined) {
|
|
11
|
+
if (value === undefined) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const {
|
|
15
|
+
photoUrl,
|
|
16
|
+
firstName,
|
|
17
|
+
lastName,
|
|
18
|
+
isPremium,
|
|
19
|
+
languageCode,
|
|
20
|
+
isBot,
|
|
21
|
+
...rest
|
|
22
|
+
} = value;
|
|
23
|
+
|
|
24
|
+
params.set(key, JSON.stringify({
|
|
25
|
+
...rest,
|
|
26
|
+
photo_url: photoUrl,
|
|
27
|
+
first_name: firstName,
|
|
28
|
+
last_name: lastName,
|
|
29
|
+
is_premium: isPremium,
|
|
30
|
+
language_code: languageCode,
|
|
31
|
+
is_bot: isBot,
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Converts init data to its initial representation.
|
|
37
|
+
* @param value - init data.
|
|
38
|
+
*/
|
|
39
|
+
export function serialize(value: InitData): string {
|
|
40
|
+
const {
|
|
41
|
+
chat,
|
|
42
|
+
chatType,
|
|
43
|
+
chatInstance,
|
|
44
|
+
hash,
|
|
45
|
+
user,
|
|
46
|
+
queryId,
|
|
47
|
+
receiver,
|
|
48
|
+
startParam,
|
|
49
|
+
canSendAfter,
|
|
50
|
+
authDate,
|
|
51
|
+
} = value;
|
|
52
|
+
|
|
53
|
+
const params = new URLSearchParams();
|
|
54
|
+
|
|
55
|
+
params.set('auth_date', (authDate.getTime() / 1000).toString());
|
|
56
|
+
setString(params, 'chat_instance', chatInstance);
|
|
57
|
+
setString(params, 'chat_type', chatType);
|
|
58
|
+
setString(params, 'hash', hash);
|
|
59
|
+
setString(params, 'query_id', queryId);
|
|
60
|
+
setUser(params, 'receiver', receiver);
|
|
61
|
+
setString(params, 'start_param', startParam);
|
|
62
|
+
setUser(params, 'user', user);
|
|
63
|
+
|
|
64
|
+
if (chat) {
|
|
65
|
+
const { photoUrl, ...rest } = chat;
|
|
66
|
+
params.set('chat', JSON.stringify({
|
|
67
|
+
...rest,
|
|
68
|
+
photo_url: photoUrl,
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (canSendAfter) {
|
|
73
|
+
params.set('can_send_after', canSendAfter.toString());
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return params.toString();
|
|
77
|
+
}
|
package/src/user.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { json, string, boolean, number } from '@tma.js/parsing';
|
|
2
|
+
|
|
3
|
+
import type { User } from './types.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns parser used to parse user data.
|
|
7
|
+
*/
|
|
8
|
+
export function user() {
|
|
9
|
+
return json<User>({
|
|
10
|
+
firstName: {
|
|
11
|
+
type: string(),
|
|
12
|
+
from: 'first_name',
|
|
13
|
+
},
|
|
14
|
+
id: number(),
|
|
15
|
+
isBot: {
|
|
16
|
+
type: boolean().optional(),
|
|
17
|
+
from: 'is_bot',
|
|
18
|
+
},
|
|
19
|
+
isPremium: {
|
|
20
|
+
type: boolean().optional(),
|
|
21
|
+
from: 'is_premium',
|
|
22
|
+
},
|
|
23
|
+
lastName: {
|
|
24
|
+
type: string().optional(),
|
|
25
|
+
from: 'last_name',
|
|
26
|
+
},
|
|
27
|
+
languageCode: {
|
|
28
|
+
type: string().optional(),
|
|
29
|
+
from: 'language_code',
|
|
30
|
+
},
|
|
31
|
+
photoUrl: {
|
|
32
|
+
type: string().optional(),
|
|
33
|
+
from: 'photo_url',
|
|
34
|
+
},
|
|
35
|
+
username: string().optional(),
|
|
36
|
+
});
|
|
37
|
+
}
|
package/dist/dts/parsing.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { InitData } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Parser used to parse init data, presented as search params.
|
|
4
|
-
* @deprecated Use `parse` method instead.
|
|
5
|
-
*/
|
|
6
|
-
export declare const initData: import("@tma.js/parsing").ValueParser<InitData, false>;
|
|
7
|
-
/**
|
|
8
|
-
* Parses incoming value as init data.
|
|
9
|
-
* @param value - value to parse.
|
|
10
|
-
*/
|
|
11
|
-
export declare function parse(value: string | URLSearchParams): InitData;
|
package/src/parsing.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
searchParams,
|
|
3
|
-
json,
|
|
4
|
-
string,
|
|
5
|
-
number,
|
|
6
|
-
boolean,
|
|
7
|
-
date,
|
|
8
|
-
type AnyParser,
|
|
9
|
-
} from '@tma.js/parsing';
|
|
10
|
-
|
|
11
|
-
import type { InitData, User } from './types.js';
|
|
12
|
-
|
|
13
|
-
function field<P extends AnyParser<any>>(parser: P, from?: string) {
|
|
14
|
-
return {
|
|
15
|
-
from,
|
|
16
|
-
type: parser,
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const str = string();
|
|
21
|
-
const strOptional = string().optional();
|
|
22
|
-
const num = number();
|
|
23
|
-
const numOptional = number().optional();
|
|
24
|
-
const boolOptional = boolean().optional();
|
|
25
|
-
|
|
26
|
-
function user() {
|
|
27
|
-
return json<User>({
|
|
28
|
-
firstName: field(str, 'first_name'),
|
|
29
|
-
id: num,
|
|
30
|
-
isBot: field(boolOptional, 'is_bot'),
|
|
31
|
-
isPremium: field(boolOptional, 'is_premium'),
|
|
32
|
-
lastName: field(strOptional, 'last_name'),
|
|
33
|
-
languageCode: field(strOptional, 'language_code'),
|
|
34
|
-
photoUrl: field(strOptional, 'photo_url'),
|
|
35
|
-
username: strOptional,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function chat() {
|
|
40
|
-
return json({
|
|
41
|
-
id: num,
|
|
42
|
-
type: str,
|
|
43
|
-
title: str,
|
|
44
|
-
photoUrl: field(strOptional, 'photo_url'),
|
|
45
|
-
username: strOptional,
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Parser used to parse init data, presented as search params.
|
|
51
|
-
* @deprecated Use `parse` method instead.
|
|
52
|
-
*/
|
|
53
|
-
export const initData = searchParams<InitData>({
|
|
54
|
-
authDate: field(date(), 'auth_date'),
|
|
55
|
-
hash: str,
|
|
56
|
-
user: user().optional(),
|
|
57
|
-
receiver: user().optional(),
|
|
58
|
-
chat: chat().optional(),
|
|
59
|
-
chatType: field(strOptional, 'chat_type'),
|
|
60
|
-
chatInstance: field(strOptional, 'chat_instance'),
|
|
61
|
-
canSendAfter: field(numOptional, 'can_send_after'),
|
|
62
|
-
queryId: field(strOptional, 'query_id'),
|
|
63
|
-
startParam: field(strOptional, 'start_param'),
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Parses incoming value as init data.
|
|
68
|
-
* @param value - value to parse.
|
|
69
|
-
*/
|
|
70
|
-
export function parse(value: string | URLSearchParams): InitData {
|
|
71
|
-
return initData.parse(value);
|
|
72
|
-
}
|