Explorar o código

Add warning when there is a missing arg in RAW requests.
Fix the api definition file a bit

painor %!s(int64=4) %!d(string=hai) anos
pai
achega
d2bc471d74

+ 1 - 1
gramjs/client/auth.ts

@@ -308,7 +308,7 @@ export async function sendCode(
                 phoneNumber,
                 apiId,
                 apiHash,
-                settings: new Api.CodeSettings(),
+                settings: new Api.CodeSettings({}),
             })
         );
 

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 236 - 114
gramjs/tl/api.d.ts


+ 23 - 7
gramjs/tl/api.js

@@ -50,7 +50,8 @@ class CastError extends Error {
             ". expected " +
             expected +
             " but received " +
-            actual;
+            actual +
+            ".If you think this is a mistake please report it.";
         super(message, ...params);
 
         // Maintains proper stack trace for where our error was thrown (only available on V8)
@@ -232,7 +233,8 @@ function compareType(value, type) {
             correct = bigInt.isInstance(value);
             break;
         case "true":
-            correct = value;
+            // true value is always correct
+            break;
         case "buffer":
             correct = Buffer.isBuffer(value);
             break;
@@ -244,7 +246,7 @@ function compareType(value, type) {
                 typeof value === "number";
             break;
         default:
-            throw new Error("Unknown type." + type);
+            console.error(new Error("Unknown type." + type));
     }
     return correct;
 }
@@ -317,6 +319,10 @@ function createClasses(classesType, params) {
             validate() {
                 for (const arg in argsConfig) {
                     if (argsConfig.hasOwnProperty(arg)) {
+                        if (arg === "flags" || argsConfig[arg].isFlag) {
+                            // we don't care about flags
+                            continue;
+                        }
                         const currentValue = this[arg];
                         this.assertType(arg, argsConfig[arg], currentValue);
                     }
@@ -327,7 +333,12 @@ function createClasses(classesType, params) {
                 let expected;
                 if (object["isVector"]) {
                     if (!isArrayLike(value)) {
-                        throw new CastError(objectName, "array", value);
+                        console.error(
+                            new CastError(objectName, "array", value)
+                        );
+                    }
+                    if (value == undefined) {
+                        value = [];
                     }
                     for (const o of value) {
                         this.assertType(
@@ -370,15 +381,20 @@ function createClasses(classesType, params) {
                     } else {
                         const isCorrectType = compareType(value, expected);
                         if (isCorrectType !== true) {
-                            throw new CastError(objectName, expected, value);
+                            console.error(
+                                new CastError(objectName, expected, value)
+                            );
                         }
                     }
                 }
             }
 
             getBytes() {
-                // this.validate()
-
+                try {
+                    this.validate();
+                } catch (e) {
+                    // feature still in alpha so errors are expected.
+                }
                 const idForBytes = this.CONSTRUCTOR_ID;
                 const c = Buffer.alloc(4);
                 c.writeUInt32LE(idForBytes, 0);

+ 1 - 1
gramjs/tl/core/RPCResult.ts

@@ -30,7 +30,7 @@ export class RPCResult {
             return new RPCResult(
                 msgId,
                 undefined,
-                Api.RpcError.fromReader(reader) as Api.RpcError
+                Api.RpcError.fromReader(reader)
             );
         }
         if (innerCode === GZIPPacked.CONSTRUCTOR_ID) {

+ 2 - 2
gramjs/tl/custom/button.ts

@@ -130,10 +130,10 @@ export class Button {
     }
 
     static clear() {
-        return new Api.ReplyKeyboardHide();
+        return new Api.ReplyKeyboardHide({});
     }
 
     static forceReply() {
-        return new Api.ReplyKeyboardForceReply();
+        return new Api.ReplyKeyboardForceReply({});
     }
 }

+ 21 - 16
gramjs/tl/types-generator/template.js

@@ -36,7 +36,9 @@ module.exports = ({ types, constructors, functions }) => {
                 if (!argKeys.length) {
                     return `export class ${upperFirst(
                         name
-                    )} extends VirtualClass<void> {};`;
+                    )} extends VirtualClass<void> {
+    static fromReader(reader: Reader): ${upperFirst(name)};
+}`;
                 }
 
                 const hasRequiredArgs = argKeys.some(
@@ -45,7 +47,7 @@ module.exports = ({ types, constructors, functions }) => {
                 );
 
                 return `
-      export class ${upperFirst(name)} extends VirtualClass<{
+      export declare class ${upperFirst(name)} extends VirtualClass<{
 ${indent}  ${Object.keys(argsConfig)
                     .map((argName) =>
                         `
@@ -53,7 +55,8 @@ ${indent}  ${Object.keys(argsConfig)
       `.trim()
                     )
                     .join(`\n${indent}  `)}
-${indent}}${!hasRequiredArgs ? " | void" : ""}> {
+${indent}}${!hasRequiredArgs ? "" : ""}> {
+${indent}static fromReader(reader: Reader): ${upperFirst(name)};
 ${indent}  ${Object.keys(argsConfig)
                     .map((argName) =>
                         `
@@ -61,7 +64,7 @@ ${indent}  ${Object.keys(argsConfig)
       `.trim()
                     )
                     .join(`\n${indent}  `)}
-${indent}};`.trim();
+${indent}}`.trim();
             })
             .join(`\n${indent}`);
     }
@@ -72,9 +75,11 @@ ${indent}};`.trim();
                 const argKeys = Object.keys(argsConfig);
 
                 if (!argKeys.length) {
-                    return `export class ${upperFirst(
+                    return `export declare class ${upperFirst(
                         name
-                    )} extends Request<void, ${renderResult(result)}> {};`;
+                    )} extends Request<void, ${renderResult(result)}> {
+    static fromReader(reader: Reader): ${upperFirst(name)};
+}`;
                 }
 
                 const hasRequiredArgs = argKeys.some(
@@ -83,7 +88,7 @@ ${indent}};`.trim();
                 );
 
                 return `
-      export class ${upperFirst(name)} extends Request<Partial<{
+      export declare class ${upperFirst(name)} extends Request<Partial<{
 ${indent}  ${argKeys
                     .map((argName) =>
                         `
@@ -91,15 +96,17 @@ ${indent}  ${argKeys
       `.trim()
                     )
                     .join(`\n${indent}  `)}
-${indent}}${!hasRequiredArgs ? " | void" : ""}>, ${renderResult(result)}> {
+${indent}}${!hasRequiredArgs ? "" : ""}>, ${renderResult(result)}> {
+${indent}static fromReader(reader: Reader): ${upperFirst(name)};
 ${indent}  ${argKeys
                     .map((argName) =>
                         `
+
         ${renderArg(argName, argsConfig[argName])};
       `.trim()
                     )
                     .join(`\n${indent}  `)}
-${indent}};`.trim();
+${indent}}`.trim();
             })
             .join(`\n${indent}`);
     }
@@ -170,10 +177,7 @@ import {EntityLike,MessageIDLike} from "../define";
 
 export namespace Api {
 
-  type AnyClass = new (...args: any[]) => any;
-  type I<T extends AnyClass> = InstanceType<T>;
-  type ValuesOf<T> = T[keyof T];
-  type AnyLiteral = Record<string, any>;
+  type AnyLiteral = Record<string, any> | void;
 
   type Reader = any; // To be defined.
   type Client = any; // To be defined.
@@ -183,12 +187,14 @@ export namespace Api {
   type Type = unknown;
   type Bool = boolean;
   type int = number;
+  type double = number;
+  type float = number;
   type int128 = BigInteger;
   type int256 = BigInteger;
   type long = BigInteger;
   type bytes = Buffer;
 
-  class VirtualClass<Args extends AnyLiteral> {
+  declare class VirtualClass<Args extends AnyLiteral> {
     static CONSTRUCTOR_ID: number;
     static SUBCLASS_OF_ID: number;
     static className: string;
@@ -196,7 +202,6 @@ export namespace Api {
 
     static serializeBytes(data: Buffer | string): Buffer;
     static serializeDate(date: Date | number): Buffer;
-    static fromReader(reader: Reader): VirtualClass<Args>;
 
     getBytes():Buffer;
 
@@ -208,7 +213,7 @@ export namespace Api {
     constructor(args: Args);
   }
 
-  class Request<Args, Response> extends VirtualClass<Partial<Args>> {
+  declare class Request<Args, Response> extends VirtualClass<Partial<Args>> {
     static readResult(reader: Reader): Buffer;
     resolve(client: Client, utils: Utils): Promise<void>;
 

+ 2 - 2
package-lock.json

@@ -1,12 +1,12 @@
 {
   "name": "telegram",
-  "version": "1.6.11",
+  "version": "1.7.0",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "telegram",
-      "version": "1.6.11",
+      "version": "1.7.0",
       "license": "MIT",
       "dependencies": {
         "@cryptography/aes": "^0.1.1",

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "telegram",
-  "version": "1.6.12",
+  "version": "1.7.0",
   "description": "NodeJS MTProto API Telegram client library,",
   "main": "index.js",
   "types": "index.d.ts",

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio