@tma.js/init-data 0.2.19 → 0.2.20

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/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  [code-badge]: https://img.shields.io/badge/source-black?logo=github
6
6
 
7
- [docs-link]: https://docs.telegram-mini-apps.com/docs/libraries/tma-js-init-data
7
+ [docs-link]: https://docs.telegram-mini-apps.com/packages/typescript/tma-js-init-data/about
8
8
 
9
9
  [docs-badge]: https://img.shields.io/badge/documentation-blue?logo=gitbook&logoColor=white
10
10
 
@@ -20,9 +20,9 @@
20
20
  [![docs-badge]][docs-link]
21
21
  [![code-badge]][code-link]
22
22
 
23
- Package providing utilities connected with Telegram Web Apps init data. It
23
+ Package providing utilities connected with Telegram Mini Apps init data. It
24
24
  allows init data parsing, works in browser only.
25
25
 
26
26
  This library is a part of TypeScript packages ecosystem around Telegram Web
27
27
  Apps. You can learn more about this package in this
28
- [documentation](https://docs.telegram-mini-apps.com/docs/libraries/tma-js-init-data).
28
+ [documentation][docs-link].
@@ -3,10 +3,17 @@
3
3
  */
4
4
  export type ChatType = 'sender' | 'private' | 'group' | 'supergroup' | 'channel' | string;
5
5
  /**
6
- * Describes user information.
7
- * @see https://docs.telegram-mini-apps.com/docs/launch-params/init-data#user
6
+ * Describes Telegram Mini Apps [User](https://docs.telegram-mini-apps.com/launch-parameters/init-data#user) type.
8
7
  */
9
8
  export interface User {
9
+ /**
10
+ * True, if this user added the bot to the attachment menu.
11
+ */
12
+ addedToAttachmentMenu?: boolean;
13
+ /**
14
+ * True, if this user allowed the bot to message them.
15
+ */
16
+ allowsWriteToPm?: boolean;
10
17
  /**
11
18
  * First name of the user or bot.
12
19
  */
@@ -29,14 +36,13 @@ export interface User {
29
36
  */
30
37
  lastName?: string;
31
38
  /**
32
- * IETF language tag of the user's language. Returns in user field only.
33
- * TODO: Specify expected values.
34
- * @see https://en.wikipedia.org/wiki/IETF_language_tag
39
+ * [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag) of the user's language.
40
+ * Returns in user field only.
35
41
  */
36
42
  languageCode?: string;
37
43
  /**
38
44
  * URL of the user’s profile photo. The photo can be in .jpeg or .svg
39
- * formats. Only returned for Web Apps launched from the attachment menu.
45
+ * formats. Only returned for Mini Apps launched from the attachment menu.
40
46
  */
41
47
  photoUrl?: string;
42
48
  /**
@@ -45,8 +51,7 @@ export interface User {
45
51
  username?: string;
46
52
  }
47
53
  /**
48
- * Describes chat information.
49
- * @see https://docs.telegram-mini-apps.com/docs/launch-params/init-data#chat
54
+ * Describes Telegram Mini Apps [Chat](https://docs.telegram-mini-apps.com/launch-parameters/init-data#chat) type.
50
55
  */
51
56
  export interface Chat {
52
57
  /**
@@ -55,7 +60,7 @@ export interface Chat {
55
60
  id: number;
56
61
  /**
57
62
  * URL of the chat’s photo. The photo can be in .jpeg or .svg formats.
58
- * Only returned for Web Apps launched from the attachment menu.
63
+ * Only returned for Mini Apps launched from the attachment menu.
59
64
  */
60
65
  photoUrl?: string;
61
66
  /**
@@ -72,8 +77,8 @@ export interface Chat {
72
77
  username?: string;
73
78
  }
74
79
  /**
75
- * Describes parsed initial data sent from Web App.
76
- * @see https://docs.telegram-mini-apps.com/docs/launch-params/init-data#parameters-list
80
+ * Describes Telegram Mini Apps [InitData](https://docs.telegram-mini-apps.com/launch-parameters/init-data#parameters-list)
81
+ * type.
77
82
  */
78
83
  export interface InitData {
79
84
  /**
@@ -81,14 +86,13 @@ export interface InitData {
81
86
  */
82
87
  authDate: Date;
83
88
  /**
84
- * The number of seconds after which a message can be sent via the method answerWebAppQuery.
85
- * @see https://core.telegram.org/bots/api#answerwebappquery
89
+ * The number of seconds after which a message can be sent via the method [answerWebAppQuery](https://core.telegram.org/bots/api#answerwebappquery).
86
90
  */
87
91
  canSendAfter?: number;
88
92
  /**
89
93
  * An object containing data about the chat where the bot was launched via
90
94
  * the attachment menu. Returned for supergroups, channels and group
91
- * chats – only for Web Apps launched via the attachment menu.
95
+ * chats – only for Mini Apps launched via the attachment menu.
92
96
  */
93
97
  chat?: Chat;
94
98
  /**
@@ -102,28 +106,24 @@ export interface InitData {
102
106
  chatInstance?: string;
103
107
  /**
104
108
  * A hash of all passed parameters, which the bot server can use to
105
- * check their validity.
106
- *
107
- * @see https://core.telegram.org/bots/webapps#validating-data-received-via-the-web-app
109
+ * check their [validity](https://core.telegram.org/bots/webapps#validating-data-received-via-the-web-app).
108
110
  */
109
111
  hash: string;
110
112
  /**
111
- * A unique identifier for the Web App session, required for sending
112
- * messages via the answerWebAppQuery method.
113
- *
114
- * @see https://core.telegram.org/bots/api#answerwebappquery
113
+ * A unique identifier for the Mini App session, required for sending
114
+ * messages via the [answerWebAppQuery](https://core.telegram.org/bots/api#answerwebappquery) method.
115
115
  */
116
116
  queryId?: string;
117
117
  /**
118
118
  * An object containing data about the chat partner of the current user in
119
119
  * the chat where the bot was launched via the attachment menu.
120
- * Returned only for private chats and only for Web Apps launched
120
+ * Returned only for private chats and only for Mini Apps launched
121
121
  * via the attachment menu.
122
122
  */
123
123
  receiver?: User;
124
124
  /**
125
- * The value of the startattach parameter, passed via link. Only returned for
126
- * Web Apps when launched from the attachment menu via link.
125
+ * The value of the `startattach` parameter, passed via link. Only returned for
126
+ * Mini Apps when launched from the attachment menu via link.
127
127
  */
128
128
  startParam?: string;
129
129
  /**
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
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;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("@tma.js/parsing");function _(){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({addedToAttachmentMenu:{type:t.boolean().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:t.boolean().optional(),from:"allows_write_to_pm"},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"},languageCode:{type:t.string().optional(),from:"language_code"},lastName:{type:t.string().optional(),from:"last_name"},photoUrl:{type:t.string().optional(),from:"photo_url"},username:t.string().optional()})}function g(){return t.searchParams({authDate:{type:t.date(),from:"auth_date"},canSendAfter:{type:t.number().optional(),from:"can_send_after"},chat:_().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 S(r){return g().parse(r)}function n(r,o,a){a!==void 0&&r.set(o,a)}function h(r,o,a){if(a===void 0)return;const{photoUrl:s,firstName:p,lastName:m,isPremium:u,languageCode:l,isBot:c,...i}=a;r.set(o,JSON.stringify({...i,photo_url:s,first_name:p,last_name:m,is_premium:u,language_code:l,is_bot:c}))}function P(r){const{chat:o,chatType:a,chatInstance:s,hash:p,user:m,queryId:u,receiver:l,startParam:c,canSendAfter:i,authDate:y}=r,e=new URLSearchParams;if(e.set("auth_date",(y.getTime()/1e3).toString()),n(e,"chat_instance",s),n(e,"chat_type",a),n(e,"hash",p),n(e,"query_id",u),h(e,"receiver",l),n(e,"start_param",c),h(e,"user",m),o){const{photoUrl:d,...b}=o;e.set("chat",JSON.stringify({...b,photo_url:d}))}return i&&e.set("can_send_after",i.toString()),e.toString()}exports.chat=_;exports.initData=g;exports.parse=S;exports.serialize=P;exports.user=f;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
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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"}
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 addedToAttachmentMenu: {\n type: boolean().optional(),\n from: 'added_to_attachment_menu',\n },\n allowsWriteToPm: {\n type: boolean().optional(),\n from: 'allows_write_to_pm',\n },\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 languageCode: {\n type: string().optional(),\n from: 'language_code',\n },\n lastName: {\n type: string().optional(),\n from: 'last_name',\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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"}
@@ -1,2 +1,2 @@
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}({});
1
+ this.tmajs=this.tmajs||{};this.tmajs.initData=function(y){"use strict";class u extends Error{constructor(e,{type:n,error:i,field:r}={}){super(`Unable to parse ${r?`field "${r}"`:"value"} as ${n}`,{cause:{value:e,error:i}}),Object.setPrototypeOf(this,u.prototype)}}class b{constructor(e,n,i){this.parser=e,this.isOptional=n,this.isEmpty=i}parse(e){return this.isOptional&&this.isEmpty(e)?void 0:this.parser(e)}optional(){return this.isOptional=!0,this}}function S(t){return t===void 0}function h(){return new TypeError("Does not have any of expected types")}function _(t,{isEmpty:e=S}={}){return function({isEmpty:n=e}={}){return new b(t,!1,n)}}function v(t,e,n){const i={};for(const r in t){const o=t[r];if(!o)continue;let s,c;if("type"in o){const{type:f}=o;s=o.from||r,c=typeof f=="function"?f:f.parse.bind(f)}else s=r,c=typeof o=="function"?o:o.parse.bind(o);let l;const m=e(s);try{l=c(m)}catch(f){throw new u(m,{field:s,type:n,error:f})}l!==void 0&&(i[r]=l)}return i}const w=_(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 new u(t,{type:"boolean",error:h()})}),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:h()})}),E=g(),T=_(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 O(t,e={}){const{type:n,isEmpty:i=S}=e;return new b(r=>{let o=r;if(typeof o=="string")try{o=JSON.parse(o)}catch(s){throw new u(r,{type:n,error:s})}if(typeof o!="object"||o===null||Array.isArray(o))throw new u(r,{type:n,error:h()});return v(t,s=>o[s])},!1,i)}const a=_(t=>{if(typeof t=="string"||typeof t=="number")return t.toString();throw new u(t,{type:"string",error:h()})});a();function j(t,e={}){const{type:n,isEmpty:i=S}=e;return new b(r=>{if(typeof r!="string"&&!(r instanceof URLSearchParams))throw new u(r,{type:n,error:h()});const o=typeof r=="string"?new URLSearchParams(r):r;return v(t,s=>{const c=o.get(s);return c===null?void 0:c})},!1,i)}function P(){return O({id:g(),type:a(),title:a(),photoUrl:{type:a().optional(),from:"photo_url"},username:a().optional()})}function N(){return O({addedToAttachmentMenu:{type:w().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:w().optional(),from:"allows_write_to_pm"},firstName:{type:a(),from:"first_name"},id:g(),isBot:{type:w().optional(),from:"is_bot"},isPremium:{type:w().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()})}function U(){return j({authDate:{type:T(),from:"auth_date"},canSendAfter:{type:g().optional(),from:"can_send_after"},chat:P().optional(),chatInstance:{type:a().optional(),from:"chat_instance"},chatType:{type:a().optional(),from:"chat_type"},hash:a(),queryId:{type:a().optional(),from:"query_id"},receiver:N().optional(),startParam:{type:a().optional(),from:"start_param"},user:N().optional()})}function A(t){return U().parse(t)}function d(t,e,n){n!==void 0&&t.set(e,n)}function D(t,e,n){if(n===void 0)return;const{photoUrl:i,firstName:r,lastName:o,isPremium:s,languageCode:c,isBot:l,...m}=n;t.set(e,JSON.stringify({...m,photo_url:i,first_name:r,last_name:o,is_premium:s,language_code:c,is_bot:l}))}function q(t){const{chat:e,chatType:n,chatInstance:i,hash:r,user:o,queryId:s,receiver:c,startParam:l,canSendAfter:m,authDate:f}=t,p=new URLSearchParams;if(p.set("auth_date",(f.getTime()/1e3).toString()),d(p,"chat_instance",i),d(p,"chat_type",n),d(p,"hash",r),d(p,"query_id",s),D(p,"receiver",c),d(p,"start_param",l),D(p,"user",o),e){const{photoUrl:I,...R}=e;p.set("chat",JSON.stringify({...R,photo_url:I}))}return m&&p.set("can_send_after",m.toString()),p.toString()}return y.chat=P,y.initData=U,y.parse=A,y.serialize=q,y.user=N,Object.defineProperty(y,Symbol.toStringTag,{value:"Module"}),y}({});
2
2
  //# sourceMappingURL=index.iife.js.map
@@ -1 +1 @@
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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"}
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 S 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 S((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, c;\n if (\"type\" in s) {\n const { type: p } = s;\n a = s.from || n, c = typeof p == \"function\" ? p : p.parse.bind(p);\n } else\n a = n, c = typeof s == \"function\" ? s : s.parse.bind(s);\n let w;\n const m = t(a);\n try {\n w = c(m);\n } catch (p) {\n throw new i(m, {\n field: a,\n type: e,\n error: p\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 const t = String(r);\n if (t === \"1\" || t === \"true\")\n return !0;\n if (t === \"0\" || t === \"false\")\n return !1;\n throw new i(r, { type: \"boolean\", error: f() });\n}), O = 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}), V = O(), R = y((r) => {\n if (r instanceof Date)\n return r;\n try {\n return new Date(V.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 N = y((r) => {\n if (typeof r == \"string\" || typeof r == \"number\")\n return r.toString();\n throw new i(r, { type: \"string\", error: f() });\n}), P = N(), B = y((r) => {\n try {\n return A(P.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 c = s.get(a);\n return c === null ? void 0 : c;\n });\n }, !1, o);\n}\nexport {\n S 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 O as number,\n B as rgb,\n $ as searchParams,\n N 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 addedToAttachmentMenu: {\n type: boolean().optional(),\n from: 'added_to_attachment_menu',\n },\n allowsWriteToPm: {\n type: boolean().optional(),\n from: 'allows_write_to_pm',\n },\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 languageCode: {\n type: string().optional(),\n from: 'language_code',\n },\n lastName: {\n type: string().optional(),\n from: 'last_name',\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","w","G","O","V","R","U","N","$","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,7 +1,7 @@
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() {
1
+ import { json as d, number as h, string as t, boolean as s, searchParams as N, date as U } from "@tma.js/parsing";
2
+ function T() {
3
3
  return d({
4
- id: l(),
4
+ id: h(),
5
5
  type: t(),
6
6
  title: t(),
7
7
  photoUrl: {
@@ -13,27 +13,35 @@ function b() {
13
13
  }
14
14
  function _() {
15
15
  return d({
16
+ addedToAttachmentMenu: {
17
+ type: s().optional(),
18
+ from: "added_to_attachment_menu"
19
+ },
20
+ allowsWriteToPm: {
21
+ type: s().optional(),
22
+ from: "allows_write_to_pm"
23
+ },
16
24
  firstName: {
17
25
  type: t(),
18
26
  from: "first_name"
19
27
  },
20
- id: l(),
28
+ id: h(),
21
29
  isBot: {
22
- type: h().optional(),
30
+ type: s().optional(),
23
31
  from: "is_bot"
24
32
  },
25
33
  isPremium: {
26
- type: h().optional(),
34
+ type: s().optional(),
27
35
  from: "is_premium"
28
36
  },
29
- lastName: {
30
- type: t().optional(),
31
- from: "last_name"
32
- },
33
37
  languageCode: {
34
38
  type: t().optional(),
35
39
  from: "language_code"
36
40
  },
41
+ lastName: {
42
+ type: t().optional(),
43
+ from: "last_name"
44
+ },
37
45
  photoUrl: {
38
46
  type: t().optional(),
39
47
  from: "photo_url"
@@ -41,17 +49,17 @@ function _() {
41
49
  username: t().optional()
42
50
  });
43
51
  }
44
- function q() {
45
- return P({
52
+ function b() {
53
+ return N({
46
54
  authDate: {
47
55
  type: U(),
48
56
  from: "auth_date"
49
57
  },
50
58
  canSendAfter: {
51
- type: l().optional(),
59
+ type: h().optional(),
52
60
  from: "can_send_after"
53
61
  },
54
- chat: b().optional(),
62
+ chat: T().optional(),
55
63
  chatInstance: {
56
64
  type: t().optional(),
57
65
  from: "chat_instance"
@@ -73,61 +81,61 @@ function q() {
73
81
  user: _().optional()
74
82
  });
75
83
  }
76
- function v(a) {
77
- return q().parse(a);
84
+ function w(a) {
85
+ return b().parse(a);
78
86
  }
79
- function n(a, o, r) {
80
- r !== void 0 && a.set(o, r);
87
+ function n(a, r, o) {
88
+ o !== void 0 && a.set(r, o);
81
89
  }
82
- function y(a, o, r) {
83
- if (r === void 0)
90
+ function y(a, r, o) {
91
+ if (o === void 0)
84
92
  return;
85
93
  const {
86
- photoUrl: s,
87
- firstName: p,
88
- lastName: m,
89
- isPremium: u,
90
- languageCode: c,
94
+ photoUrl: p,
95
+ firstName: m,
96
+ lastName: u,
97
+ isPremium: c,
98
+ languageCode: l,
91
99
  isBot: f,
92
100
  ...i
93
- } = r;
94
- a.set(o, JSON.stringify({
101
+ } = o;
102
+ a.set(r, JSON.stringify({
95
103
  ...i,
96
- photo_url: s,
97
- first_name: p,
98
- last_name: m,
99
- is_premium: u,
100
- language_code: c,
104
+ photo_url: p,
105
+ first_name: m,
106
+ last_name: u,
107
+ is_premium: c,
108
+ language_code: l,
101
109
  is_bot: f
102
110
  }));
103
111
  }
104
- function D(a) {
112
+ function I(a) {
105
113
  const {
106
- chat: o,
107
- chatType: r,
108
- chatInstance: s,
109
- hash: p,
110
- user: m,
111
- queryId: u,
112
- receiver: c,
114
+ chat: r,
115
+ chatType: o,
116
+ chatInstance: p,
117
+ hash: m,
118
+ user: u,
119
+ queryId: c,
120
+ receiver: l,
113
121
  startParam: f,
114
122
  canSendAfter: i,
115
123
  authDate: g
116
124
  } = 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;
125
+ if (e.set("auth_date", (g.getTime() / 1e3).toString()), n(e, "chat_instance", p), n(e, "chat_type", o), n(e, "hash", m), n(e, "query_id", c), y(e, "receiver", l), n(e, "start_param", f), y(e, "user", u), r) {
126
+ const { photoUrl: S, ...P } = r;
119
127
  e.set("chat", JSON.stringify({
120
- ...N,
128
+ ...P,
121
129
  photo_url: S
122
130
  }));
123
131
  }
124
132
  return i && e.set("can_send_after", i.toString()), e.toString();
125
133
  }
126
134
  export {
127
- b as chat,
128
- q as initData,
129
- v as parse,
130
- D as serialize,
135
+ T as chat,
136
+ b as initData,
137
+ w as parse,
138
+ I as serialize,
131
139
  _ as user
132
140
  };
133
141
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
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":"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"}
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 addedToAttachmentMenu: {\n type: boolean().optional(),\n from: 'added_to_attachment_menu',\n },\n allowsWriteToPm: {\n type: boolean().optional(),\n from: 'allows_write_to_pm',\n },\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 languageCode: {\n type: string().optional(),\n from: 'language_code',\n },\n lastName: {\n type: string().optional(),\n from: 'last_name',\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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tma.js/init-data",
3
- "version": "0.2.19",
4
- "description": "Frontend TypeScript library to make work with Web Apps init data easier.",
3
+ "version": "0.2.20",
4
+ "description": "Frontend TypeScript library to make work with Mini 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",
7
7
  "repository": {
@@ -37,7 +37,7 @@
37
37
  }
38
38
  },
39
39
  "dependencies": {
40
- "@tma.js/parsing": "0.1.2"
40
+ "@tma.js/parsing": "0.1.3"
41
41
  },
42
42
  "devDependencies": {
43
43
  "tsconfig": "0.0.2",
package/src/types.ts CHANGED
@@ -10,10 +10,19 @@ export type ChatType =
10
10
  | string;
11
11
 
12
12
  /**
13
- * Describes user information.
14
- * @see https://docs.telegram-mini-apps.com/docs/launch-params/init-data#user
13
+ * Describes Telegram Mini Apps [User](https://docs.telegram-mini-apps.com/launch-parameters/init-data#user) type.
15
14
  */
16
15
  export interface User {
16
+ /**
17
+ * True, if this user added the bot to the attachment menu.
18
+ */
19
+ addedToAttachmentMenu?: boolean;
20
+
21
+ /**
22
+ * True, if this user allowed the bot to message them.
23
+ */
24
+ allowsWriteToPm?: boolean;
25
+
17
26
  /**
18
27
  * First name of the user or bot.
19
28
  */
@@ -41,15 +50,14 @@ export interface User {
41
50
  lastName?: string;
42
51
 
43
52
  /**
44
- * IETF language tag of the user's language. Returns in user field only.
45
- * TODO: Specify expected values.
46
- * @see https://en.wikipedia.org/wiki/IETF_language_tag
53
+ * [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag) of the user's language.
54
+ * Returns in user field only.
47
55
  */
48
56
  languageCode?: string;
49
57
 
50
58
  /**
51
59
  * URL of the user’s profile photo. The photo can be in .jpeg or .svg
52
- * formats. Only returned for Web Apps launched from the attachment menu.
60
+ * formats. Only returned for Mini Apps launched from the attachment menu.
53
61
  */
54
62
  photoUrl?: string;
55
63
 
@@ -60,8 +68,7 @@ export interface User {
60
68
  }
61
69
 
62
70
  /**
63
- * Describes chat information.
64
- * @see https://docs.telegram-mini-apps.com/docs/launch-params/init-data#chat
71
+ * Describes Telegram Mini Apps [Chat](https://docs.telegram-mini-apps.com/launch-parameters/init-data#chat) type.
65
72
  */
66
73
  export interface Chat {
67
74
  /**
@@ -71,7 +78,7 @@ export interface Chat {
71
78
 
72
79
  /**
73
80
  * URL of the chat’s photo. The photo can be in .jpeg or .svg formats.
74
- * Only returned for Web Apps launched from the attachment menu.
81
+ * Only returned for Mini Apps launched from the attachment menu.
75
82
  */
76
83
  photoUrl?: string;
77
84
 
@@ -92,8 +99,8 @@ export interface Chat {
92
99
  }
93
100
 
94
101
  /**
95
- * Describes parsed initial data sent from Web App.
96
- * @see https://docs.telegram-mini-apps.com/docs/launch-params/init-data#parameters-list
102
+ * Describes Telegram Mini Apps [InitData](https://docs.telegram-mini-apps.com/launch-parameters/init-data#parameters-list)
103
+ * type.
97
104
  */
98
105
  export interface InitData {
99
106
  /**
@@ -102,15 +109,14 @@ export interface InitData {
102
109
  authDate: Date;
103
110
 
104
111
  /**
105
- * The number of seconds after which a message can be sent via the method answerWebAppQuery.
106
- * @see https://core.telegram.org/bots/api#answerwebappquery
112
+ * The number of seconds after which a message can be sent via the method [answerWebAppQuery](https://core.telegram.org/bots/api#answerwebappquery).
107
113
  */
108
114
  canSendAfter?: number;
109
115
 
110
116
  /**
111
117
  * An object containing data about the chat where the bot was launched via
112
118
  * the attachment menu. Returned for supergroups, channels and group
113
- * chats – only for Web Apps launched via the attachment menu.
119
+ * chats – only for Mini Apps launched via the attachment menu.
114
120
  */
115
121
  chat?: Chat;
116
122
 
@@ -127,31 +133,27 @@ export interface InitData {
127
133
 
128
134
  /**
129
135
  * A hash of all passed parameters, which the bot server can use to
130
- * check their validity.
131
- *
132
- * @see https://core.telegram.org/bots/webapps#validating-data-received-via-the-web-app
136
+ * check their [validity](https://core.telegram.org/bots/webapps#validating-data-received-via-the-web-app).
133
137
  */
134
138
  hash: string;
135
139
 
136
140
  /**
137
- * A unique identifier for the Web App session, required for sending
138
- * messages via the answerWebAppQuery method.
139
- *
140
- * @see https://core.telegram.org/bots/api#answerwebappquery
141
+ * A unique identifier for the Mini App session, required for sending
142
+ * messages via the [answerWebAppQuery](https://core.telegram.org/bots/api#answerwebappquery) method.
141
143
  */
142
144
  queryId?: string;
143
145
 
144
146
  /**
145
147
  * An object containing data about the chat partner of the current user in
146
148
  * the chat where the bot was launched via the attachment menu.
147
- * Returned only for private chats and only for Web Apps launched
149
+ * Returned only for private chats and only for Mini Apps launched
148
150
  * via the attachment menu.
149
151
  */
150
152
  receiver?: User;
151
153
 
152
154
  /**
153
- * The value of the startattach parameter, passed via link. Only returned for
154
- * Web Apps when launched from the attachment menu via link.
155
+ * The value of the `startattach` parameter, passed via link. Only returned for
156
+ * Mini Apps when launched from the attachment menu via link.
155
157
  */
156
158
  startParam?: string;
157
159
 
package/src/user.ts CHANGED
@@ -7,6 +7,14 @@ import type { User } from './types.js';
7
7
  */
8
8
  export function user() {
9
9
  return json<User>({
10
+ addedToAttachmentMenu: {
11
+ type: boolean().optional(),
12
+ from: 'added_to_attachment_menu',
13
+ },
14
+ allowsWriteToPm: {
15
+ type: boolean().optional(),
16
+ from: 'allows_write_to_pm',
17
+ },
10
18
  firstName: {
11
19
  type: string(),
12
20
  from: 'first_name',
@@ -20,14 +28,14 @@ export function user() {
20
28
  type: boolean().optional(),
21
29
  from: 'is_premium',
22
30
  },
23
- lastName: {
24
- type: string().optional(),
25
- from: 'last_name',
26
- },
27
31
  languageCode: {
28
32
  type: string().optional(),
29
33
  from: 'language_code',
30
34
  },
35
+ lastName: {
36
+ type: string().optional(),
37
+ from: 'last_name',
38
+ },
31
39
  photoUrl: {
32
40
  type: string().optional(),
33
41
  from: 'photo_url',