@tma.js/init-data 0.2.15 → 0.2.16

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.
@@ -1,5 +1,11 @@
1
1
  import type { InitData } from './types.js';
2
2
  /**
3
3
  * Parser used to parse init data, presented as search params.
4
+ * @deprecated Use `parse` method instead.
4
5
  */
5
- export declare const initData: import("@tma.js/parsing").ValueParser<InitData, false, undefined>;
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;
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Known type of chat.
3
+ */
4
+ export type ChatType = 'sender' | 'private' | 'group' | 'supergroup' | 'channel' | string;
1
5
  /**
2
6
  * Describes user information.
3
7
  * @see https://docs.telegram-mini-apps.com/docs/launch-params/init-data#user
@@ -77,16 +81,25 @@ export interface InitData {
77
81
  */
78
82
  authDate: Date;
79
83
  /**
80
- * Date after which a message can be sent via the answerWebAppQuery method.
84
+ * The number of seconds after which a message can be sent via the method answerWebAppQuery.
81
85
  * @see https://core.telegram.org/bots/api#answerwebappquery
82
86
  */
83
- canSendAfter?: Date;
87
+ canSendAfter?: number;
84
88
  /**
85
89
  * An object containing data about the chat where the bot was launched via
86
90
  * the attachment menu. Returned for supergroups, channels and group
87
91
  * chats – only for Web Apps launched via the attachment menu.
88
92
  */
89
93
  chat?: Chat;
94
+ /**
95
+ * The type of chat from which Mini App was opened.
96
+ */
97
+ chatType?: ChatType;
98
+ /**
99
+ * A global identifier indicating the chat from which Mini App was
100
+ * opened. Returned only for applications opened by direct link.
101
+ */
102
+ chatInstance?: string;
90
103
  /**
91
104
  * A hash of all passed parameters, which the bot server can use to
92
105
  * check their validity.
package/dist/index.js CHANGED
@@ -1,36 +1,49 @@
1
- import { json as i, string as o, number as r, boolean as a, searchParams as s, date as e } from "@tma.js/parsing";
2
- function t(l, p) {
1
+ import { string as i, number as s, boolean as l, searchParams as m, date as h, json as u } from "@tma.js/parsing";
2
+ function t(e, p) {
3
3
  return {
4
4
  from: p,
5
- type: l
5
+ type: e
6
6
  };
7
7
  }
8
- const n = i({
9
- firstName: t(o(), "first_name"),
10
- id: r(),
11
- isBot: t(a().optional(), "is_bot"),
12
- isPremium: t(a().optional(), "is_premium"),
13
- lastName: t(o().optional(), "last_name"),
14
- languageCode: t(o().optional(), "language_code"),
15
- photoUrl: t(o().optional(), "photo_url"),
16
- username: o().optional()
17
- }), m = s({
18
- authDate: t(e(), "auth_date"),
19
- hash: o(),
20
- user: n.optional(),
21
- receiver: n.optional(),
22
- chat: i({
23
- id: r(),
24
- type: o(),
25
- title: o(),
26
- photoUrl: t(o().optional(), "photo_url"),
27
- username: o().optional()
28
- }).optional(),
29
- canSendAfter: t(e().optional(), "can_send_after"),
30
- queryId: t(o().optional(), "query_id"),
31
- startParam: t(o().optional(), "start_param")
8
+ const n = i(), a = i().optional(), c = s(), _ = s().optional(), o = l().optional();
9
+ function r() {
10
+ return u({
11
+ firstName: t(n, "first_name"),
12
+ id: c,
13
+ isBot: t(o, "is_bot"),
14
+ isPremium: t(o, "is_premium"),
15
+ lastName: t(a, "last_name"),
16
+ languageCode: t(a, "language_code"),
17
+ photoUrl: t(a, "photo_url"),
18
+ username: a
19
+ });
20
+ }
21
+ function d() {
22
+ return u({
23
+ id: c,
24
+ type: n,
25
+ title: n,
26
+ photoUrl: t(a, "photo_url"),
27
+ username: a
28
+ });
29
+ }
30
+ const f = m({
31
+ authDate: t(h(), "auth_date"),
32
+ hash: n,
33
+ user: r().optional(),
34
+ receiver: r().optional(),
35
+ chat: d().optional(),
36
+ chatType: t(a, "chat_type"),
37
+ chatInstance: t(a, "chat_instance"),
38
+ canSendAfter: t(_, "can_send_after"),
39
+ queryId: t(a, "query_id"),
40
+ startParam: t(a, "start_param")
32
41
  });
42
+ function g(e) {
43
+ return f.parse(e);
44
+ }
33
45
  export {
34
- m as initData
46
+ f as initData,
47
+ g as parse
35
48
  };
36
49
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/parsing.ts"],"sourcesContent":["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 user = json<User>({\n firstName: field(string(), 'first_name'),\n id: number(),\n isBot: field(boolean().optional(), 'is_bot'),\n isPremium: field(boolean().optional(), 'is_premium'),\n lastName: field(string().optional(), 'last_name'),\n languageCode: field(string().optional(), 'language_code'),\n photoUrl: field(string().optional(), 'photo_url'),\n username: string().optional(),\n});\n\n/**\n * Parser used to parse init data, presented as search params.\n */\nexport const initData = searchParams<InitData>({\n authDate: field(date(), 'auth_date'),\n hash: string(),\n user: user.optional(),\n receiver: user.optional(),\n chat: json<InitData['chat']>({\n id: number(),\n type: string(),\n title: string(),\n photoUrl: field(string().optional(), 'photo_url'),\n username: string().optional(),\n }).optional(),\n canSendAfter: field(date().optional(), 'can_send_after'),\n queryId: field(string().optional(), 'query_id'),\n startParam: field(string().optional(), 'start_param'),\n});\n"],"names":["field","parser","from","user","json","string","number","boolean","initData","searchParams","date"],"mappings":";AAYA,SAASA,EAAgCC,GAAWC,GAAe;AAC1D,SAAA;AAAA,IACL,MAAAA;AAAA,IACA,MAAMD;AAAA,EAAA;AAEV;AAEA,MAAME,IAAOC,EAAW;AAAA,EACtB,WAAWJ,EAAMK,EAAO,GAAG,YAAY;AAAA,EACvC,IAAIC,EAAO;AAAA,EACX,OAAON,EAAMO,EAAU,EAAA,SAAA,GAAY,QAAQ;AAAA,EAC3C,WAAWP,EAAMO,EAAU,EAAA,SAAA,GAAY,YAAY;AAAA,EACnD,UAAUP,EAAMK,EAAS,EAAA,SAAA,GAAY,WAAW;AAAA,EAChD,cAAcL,EAAMK,EAAS,EAAA,SAAA,GAAY,eAAe;AAAA,EACxD,UAAUL,EAAMK,EAAS,EAAA,SAAA,GAAY,WAAW;AAAA,EAChD,UAAUA,EAAO,EAAE,SAAS;AAC9B,CAAC,GAKYG,IAAWC,EAAuB;AAAA,EAC7C,UAAUT,EAAMU,EAAK,GAAG,WAAW;AAAA,EACnC,MAAML,EAAO;AAAA,EACb,MAAMF,EAAK,SAAS;AAAA,EACpB,UAAUA,EAAK,SAAS;AAAA,EACxB,MAAMC,EAAuB;AAAA,IAC3B,IAAIE,EAAO;AAAA,IACX,MAAMD,EAAO;AAAA,IACb,OAAOA,EAAO;AAAA,IACd,UAAUL,EAAMK,EAAS,EAAA,SAAA,GAAY,WAAW;AAAA,IAChD,UAAUA,EAAO,EAAE,SAAS;AAAA,EAC7B,CAAA,EAAE,SAAS;AAAA,EACZ,cAAcL,EAAMU,EAAO,EAAA,SAAA,GAAY,gBAAgB;AAAA,EACvD,SAASV,EAAMK,EAAS,EAAA,SAAA,GAAY,UAAU;AAAA,EAC9C,YAAYL,EAAMK,EAAS,EAAA,SAAA,GAAY,aAAa;AACtD,CAAC;"}
1
+ {"version":3,"file":"index.js","sources":["../src/parsing.ts"],"sourcesContent":["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":["field","parser","from","str","string","strOptional","num","number","numOptional","boolOptional","boolean","user","json","chat","initData","searchParams","date","parse","value"],"mappings":";AAYA,SAASA,EAAgCC,GAAWC,GAAe;AAC1D,SAAA;AAAA,IACL,MAAAA;AAAA,IACA,MAAMD;AAAA,EAAA;AAEV;AAEA,MAAME,IAAMC,EAAO,GACbC,IAAcD,IAAS,YACvBE,IAAMC,EAAO,GACbC,IAAcD,IAAS,YACvBE,IAAeC,IAAU;AAE/B,SAASC,IAAO;AACd,SAAOC,EAAW;AAAA,IAChB,WAAWZ,EAAMG,GAAK,YAAY;AAAA,IAClC,IAAIG;AAAA,IACJ,OAAON,EAAMS,GAAc,QAAQ;AAAA,IACnC,WAAWT,EAAMS,GAAc,YAAY;AAAA,IAC3C,UAAUT,EAAMK,GAAa,WAAW;AAAA,IACxC,cAAcL,EAAMK,GAAa,eAAe;AAAA,IAChD,UAAUL,EAAMK,GAAa,WAAW;AAAA,IACxC,UAAUA;AAAA,EAAA,CACX;AACH;AAEA,SAASQ,IAAO;AACd,SAAOD,EAAK;AAAA,IACV,IAAIN;AAAA,IACJ,MAAMH;AAAA,IACN,OAAOA;AAAA,IACP,UAAUH,EAAMK,GAAa,WAAW;AAAA,IACxC,UAAUA;AAAA,EAAA,CACX;AACH;AAMO,MAAMS,IAAWC,EAAuB;AAAA,EAC7C,UAAUf,EAAMgB,EAAK,GAAG,WAAW;AAAA,EACnC,MAAMb;AAAA,EACN,MAAMQ,EAAK,EAAE,SAAS;AAAA,EACtB,UAAUA,EAAK,EAAE,SAAS;AAAA,EAC1B,MAAME,EAAK,EAAE,SAAS;AAAA,EACtB,UAAUb,EAAMK,GAAa,WAAW;AAAA,EACxC,cAAcL,EAAMK,GAAa,eAAe;AAAA,EAChD,cAAcL,EAAMQ,GAAa,gBAAgB;AAAA,EACjD,SAASR,EAAMK,GAAa,UAAU;AAAA,EACtC,YAAYL,EAAMK,GAAa,aAAa;AAC9C,CAAC;AAMM,SAASY,EAAMC,GAA2C;AACxD,SAAAJ,EAAS,MAAMI,CAAK;AAC7B;"}
@@ -1,2 +1,2 @@
1
- (function(o,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("@tma.js/parsing")):typeof define=="function"&&define.amd?define(["exports","@tma.js/parsing"],t):(o=typeof globalThis<"u"?globalThis:o||self,t((o["@tma"]=o["@tma"]||{},o["@tma"]["js/init-data"]={}),o["@tma"]["js/parsing"]))})(this,function(o,t){"use strict";function e(a,r){return{from:r,type:a}}const n=t.json({firstName:e(t.string(),"first_name"),id:t.number(),isBot:e(t.boolean().optional(),"is_bot"),isPremium:e(t.boolean().optional(),"is_premium"),lastName:e(t.string().optional(),"last_name"),languageCode:e(t.string().optional(),"language_code"),photoUrl:e(t.string().optional(),"photo_url"),username:t.string().optional()}),i=t.searchParams({authDate:e(t.date(),"auth_date"),hash:t.string(),user:n.optional(),receiver:n.optional(),chat:t.json({id:t.number(),type:t.string(),title:t.string(),photoUrl:e(t.string().optional(),"photo_url"),username:t.string().optional()}).optional(),canSendAfter:e(t.date().optional(),"can_send_after"),queryId:e(t.string().optional(),"query_id"),startParam:e(t.string().optional(),"start_param")});o.initData=i,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
1
+ (function(n,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("@tma.js/parsing")):typeof define=="function"&&define.amd?define(["exports","@tma.js/parsing"],t):(n=typeof globalThis<"u"?globalThis:n||self,t((n["@tma"]=n["@tma"]||{},n["@tma"]["js/init-data"]={}),n["@tma"]["js/parsing"]))})(this,function(n,t){"use strict";function e(i,f){return{from:f,type:i}}const o=t.string(),a=t.string().optional(),r=t.number(),m=t.number().optional(),s=t.boolean().optional();function u(){return t.json({firstName:e(o,"first_name"),id:r,isBot:e(s,"is_bot"),isPremium:e(s,"is_premium"),lastName:e(a,"last_name"),languageCode:e(a,"language_code"),photoUrl:e(a,"photo_url"),username:a})}function d(){return t.json({id:r,type:o,title:o,photoUrl:e(a,"photo_url"),username:a})}const c=t.searchParams({authDate:e(t.date(),"auth_date"),hash:o,user:u().optional(),receiver:u().optional(),chat:d().optional(),chatType:e(a,"chat_type"),chatInstance:e(a,"chat_instance"),canSendAfter:e(m,"can_send_after"),queryId:e(a,"query_id"),startParam:e(a,"start_param")});function p(i){return c.parse(i)}n.initData=c,n.parse=p,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=index.umd.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.cjs","sources":["../src/parsing.ts"],"sourcesContent":["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 user = json<User>({\n firstName: field(string(), 'first_name'),\n id: number(),\n isBot: field(boolean().optional(), 'is_bot'),\n isPremium: field(boolean().optional(), 'is_premium'),\n lastName: field(string().optional(), 'last_name'),\n languageCode: field(string().optional(), 'language_code'),\n photoUrl: field(string().optional(), 'photo_url'),\n username: string().optional(),\n});\n\n/**\n * Parser used to parse init data, presented as search params.\n */\nexport const initData = searchParams<InitData>({\n authDate: field(date(), 'auth_date'),\n hash: string(),\n user: user.optional(),\n receiver: user.optional(),\n chat: json<InitData['chat']>({\n id: number(),\n type: string(),\n title: string(),\n photoUrl: field(string().optional(), 'photo_url'),\n username: string().optional(),\n }).optional(),\n canSendAfter: field(date().optional(), 'can_send_after'),\n queryId: field(string().optional(), 'query_id'),\n startParam: field(string().optional(), 'start_param'),\n});\n"],"names":["field","parser","from","user","json","string","number","boolean","initData","searchParams","date"],"mappings":"gVAYA,SAASA,EAAgCC,EAAWC,EAAe,CAC1D,MAAA,CACL,KAAAA,EACA,KAAMD,CAAA,CAEV,CAEA,MAAME,EAAOC,EAAAA,KAAW,CACtB,UAAWJ,EAAMK,SAAO,EAAG,YAAY,EACvC,GAAIC,EAAAA,OAAO,EACX,MAAON,EAAMO,EAAAA,QAAU,EAAA,SAAA,EAAY,QAAQ,EAC3C,UAAWP,EAAMO,EAAAA,QAAU,EAAA,SAAA,EAAY,YAAY,EACnD,SAAUP,EAAMK,EAAAA,OAAS,EAAA,SAAA,EAAY,WAAW,EAChD,aAAcL,EAAMK,EAAAA,OAAS,EAAA,SAAA,EAAY,eAAe,EACxD,SAAUL,EAAMK,EAAAA,OAAS,EAAA,SAAA,EAAY,WAAW,EAChD,SAAUA,EAAAA,OAAO,EAAE,SAAS,CAC9B,CAAC,EAKYG,EAAWC,EAAAA,aAAuB,CAC7C,SAAUT,EAAMU,OAAK,EAAG,WAAW,EACnC,KAAML,EAAAA,OAAO,EACb,KAAMF,EAAK,SAAS,EACpB,SAAUA,EAAK,SAAS,EACxB,KAAMC,EAAAA,KAAuB,CAC3B,GAAIE,EAAAA,OAAO,EACX,KAAMD,EAAAA,OAAO,EACb,MAAOA,EAAAA,OAAO,EACd,SAAUL,EAAMK,EAAAA,OAAS,EAAA,SAAA,EAAY,WAAW,EAChD,SAAUA,EAAAA,OAAO,EAAE,SAAS,CAC7B,CAAA,EAAE,SAAS,EACZ,aAAcL,EAAMU,EAAAA,KAAO,EAAA,SAAA,EAAY,gBAAgB,EACvD,QAASV,EAAMK,EAAAA,OAAS,EAAA,SAAA,EAAY,UAAU,EAC9C,WAAYL,EAAMK,EAAAA,OAAS,EAAA,SAAA,EAAY,aAAa,CACtD,CAAC"}
1
+ {"version":3,"file":"index.umd.cjs","sources":["../src/parsing.ts"],"sourcesContent":["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":["field","parser","from","str","string","strOptional","num","number","numOptional","boolOptional","boolean","user","json","chat","initData","searchParams","date","parse","value"],"mappings":"gVAYA,SAASA,EAAgCC,EAAWC,EAAe,CAC1D,MAAA,CACL,KAAAA,EACA,KAAMD,CAAA,CAEV,CAEA,MAAME,EAAMC,EAAO,OAAA,EACbC,EAAcD,EAAAA,SAAS,WACvBE,EAAMC,EAAO,OAAA,EACbC,EAAcD,EAAAA,SAAS,WACvBE,EAAeC,EAAAA,UAAU,WAE/B,SAASC,GAAO,CACd,OAAOC,OAAW,CAChB,UAAWZ,EAAMG,EAAK,YAAY,EAClC,GAAIG,EACJ,MAAON,EAAMS,EAAc,QAAQ,EACnC,UAAWT,EAAMS,EAAc,YAAY,EAC3C,SAAUT,EAAMK,EAAa,WAAW,EACxC,aAAcL,EAAMK,EAAa,eAAe,EAChD,SAAUL,EAAMK,EAAa,WAAW,EACxC,SAAUA,CAAA,CACX,CACH,CAEA,SAASQ,GAAO,CACd,OAAOD,OAAK,CACV,GAAIN,EACJ,KAAMH,EACN,MAAOA,EACP,SAAUH,EAAMK,EAAa,WAAW,EACxC,SAAUA,CAAA,CACX,CACH,CAMa,MAAAS,EAAWC,EAAAA,aAAuB,CAC7C,SAAUf,EAAMgB,OAAK,EAAG,WAAW,EACnC,KAAMb,EACN,KAAMQ,EAAK,EAAE,SAAS,EACtB,SAAUA,EAAK,EAAE,SAAS,EAC1B,KAAME,EAAK,EAAE,SAAS,EACtB,SAAUb,EAAMK,EAAa,WAAW,EACxC,aAAcL,EAAMK,EAAa,eAAe,EAChD,aAAcL,EAAMQ,EAAa,gBAAgB,EACjD,QAASR,EAAMK,EAAa,UAAU,EACtC,WAAYL,EAAMK,EAAa,aAAa,CAC9C,CAAC,EAMM,SAASY,EAAMC,EAA2C,CACxD,OAAAJ,EAAS,MAAMI,CAAK,CAC7B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tma.js/init-data",
3
- "version": "0.2.15",
3
+ "version": "0.2.16",
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",
@@ -37,20 +37,21 @@
37
37
  }
38
38
  },
39
39
  "dependencies": {
40
- "@tma.js/parsing": "0.0.3"
40
+ "@tma.js/parsing": "0.1.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "tsconfig": "0.0.2",
44
44
  "eslint-config-custom": "0.1.0",
45
- "jest-config-custom": "0.1.0",
46
45
  "build-utils": "0.0.0"
47
46
  },
48
47
  "publishConfig": {
49
48
  "access": "public"
50
49
  },
51
50
  "scripts": {
52
- "test": "jest",
53
- "lint": "eslint -c .eslintrc.cjs src/**/* __tests__/**/*",
54
- "build": "vite build"
51
+ "test": "vitest",
52
+ "lint": "eslint -c .eslintrc.cjs src/**/* tests/**/*",
53
+ "typecheck": "tsc --noEmit -p tsconfig.build.json",
54
+ "build": "vite build",
55
+ "rollup": "pnpm run typecheck && pnpm run build"
55
56
  }
56
57
  }
package/src/parsing.ts CHANGED
@@ -17,33 +17,56 @@ function field<P extends AnyParser<any>>(parser: P, from?: string) {
17
17
  };
18
18
  }
19
19
 
20
- const user = json<User>({
21
- firstName: field(string(), 'first_name'),
22
- id: number(),
23
- isBot: field(boolean().optional(), 'is_bot'),
24
- isPremium: field(boolean().optional(), 'is_premium'),
25
- lastName: field(string().optional(), 'last_name'),
26
- languageCode: field(string().optional(), 'language_code'),
27
- photoUrl: field(string().optional(), 'photo_url'),
28
- username: string().optional(),
29
- });
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
+ }
30
48
 
31
49
  /**
32
50
  * Parser used to parse init data, presented as search params.
51
+ * @deprecated Use `parse` method instead.
33
52
  */
34
53
  export const initData = searchParams<InitData>({
35
54
  authDate: field(date(), 'auth_date'),
36
- hash: string(),
37
- user: user.optional(),
38
- receiver: user.optional(),
39
- chat: json<InitData['chat']>({
40
- id: number(),
41
- type: string(),
42
- title: string(),
43
- photoUrl: field(string().optional(), 'photo_url'),
44
- username: string().optional(),
45
- }).optional(),
46
- canSendAfter: field(date().optional(), 'can_send_after'),
47
- queryId: field(string().optional(), 'query_id'),
48
- startParam: field(string().optional(), 'start_param'),
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'),
49
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
+ }
package/src/types.ts CHANGED
@@ -1,3 +1,14 @@
1
+ /**
2
+ * Known type of chat.
3
+ */
4
+ export type ChatType =
5
+ | 'sender'
6
+ | 'private'
7
+ | 'group'
8
+ | 'supergroup'
9
+ | 'channel'
10
+ | string;
11
+
1
12
  /**
2
13
  * Describes user information.
3
14
  * @see https://docs.telegram-mini-apps.com/docs/launch-params/init-data#user
@@ -91,10 +102,10 @@ export interface InitData {
91
102
  authDate: Date;
92
103
 
93
104
  /**
94
- * Date after which a message can be sent via the answerWebAppQuery method.
105
+ * The number of seconds after which a message can be sent via the method answerWebAppQuery.
95
106
  * @see https://core.telegram.org/bots/api#answerwebappquery
96
107
  */
97
- canSendAfter?: Date;
108
+ canSendAfter?: number;
98
109
 
99
110
  /**
100
111
  * An object containing data about the chat where the bot was launched via
@@ -103,6 +114,17 @@ export interface InitData {
103
114
  */
104
115
  chat?: Chat;
105
116
 
117
+ /**
118
+ * The type of chat from which Mini App was opened.
119
+ */
120
+ chatType?: ChatType;
121
+
122
+ /**
123
+ * A global identifier indicating the chat from which Mini App was
124
+ * opened. Returned only for applications opened by direct link.
125
+ */
126
+ chatInstance?: string;
127
+
106
128
  /**
107
129
  * A hash of all passed parameters, which the bot server can use to
108
130
  * check their validity.