feat(core): withParams
method
This commit is contained in:
parent
03c8f24f2f
commit
f7d6e6730b
4 changed files with 99 additions and 33 deletions
|
@ -264,6 +264,8 @@ async function addSingleMethod(state, fileName) {
|
|||
} else if (stmt.kind === ts.SyntaxKind.FunctionDeclaration) {
|
||||
const name = stmt.name.escapedText
|
||||
|
||||
if (checkForFlag(stmt, '@skip')) { continue }
|
||||
|
||||
if (stmt.body && name in state.methods.used) {
|
||||
throwError(
|
||||
stmt.name,
|
||||
|
@ -345,7 +347,6 @@ async function addSingleMethod(state, fileName) {
|
|||
state.methods.used[name] = relPath
|
||||
}
|
||||
|
||||
if (isExported || isDeclare) {
|
||||
const isPrivate = checkForFlag(stmt, '@internal')
|
||||
const isManual = checkForFlag(stmt, '@manual')
|
||||
const isNoemit = checkForFlag(stmt, '@noemit')
|
||||
|
@ -381,7 +382,6 @@ async function addSingleMethod(state, fileName) {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (stmt.kind === ts.SyntaxKind.InterfaceDeclaration) {
|
||||
if (isCopy) {
|
||||
state.copy.push({
|
||||
|
@ -482,6 +482,7 @@ async function main() {
|
|||
if (!items.length) return
|
||||
output.write(`import { ${items.sort().join(', ')} } from '${module}'\n`)
|
||||
})
|
||||
output.write("import { withParams } from './methods/misc/with-params.js'")
|
||||
|
||||
output.write('\n')
|
||||
|
||||
|
@ -518,7 +519,15 @@ on(name: '${type.typeName}', handler: ((upd: ${type.updateType}) => void)): this
|
|||
|
||||
output.write(`
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
on(name: string, handler: (...args: any[]) => void): this\n`)
|
||||
on(name: string, handler: (...args: any[]) => void): this\n
|
||||
|
||||
/**
|
||||
* Wrap this client so that all RPC calls will use the specified parameters.
|
||||
*
|
||||
* @param params Parameters to use
|
||||
* @returns Wrapped client
|
||||
*/
|
||||
withParams(params: RpcCallOptions): this\n`)
|
||||
|
||||
const printer = ts.createPrinter()
|
||||
|
||||
|
@ -703,7 +712,13 @@ on(name: string, handler: (...args: any[]) => void): this\n`)
|
|||
output.write('}\n')
|
||||
|
||||
classContents.forEach((line) => output.write(line + '\n'))
|
||||
|
||||
output.write(` withParams(params: RpcCallOptions): this {
|
||||
return withParams(this, params)
|
||||
}\n`)
|
||||
|
||||
output.write('}\n')
|
||||
|
||||
classProtoDecls.forEach((line) => output.write(line + '\n'))
|
||||
// proxied methods
|
||||
;[
|
||||
|
|
|
@ -7,6 +7,7 @@ import Long from 'long'
|
|||
import { tdFileId } from '@mtcute/file-id'
|
||||
import { tl } from '@mtcute/tl'
|
||||
|
||||
import { RpcCallOptions } from '../network/index.js'
|
||||
import { MaybeArray, MaybePromise, MtUnsupportedError, PartialExcept, PartialOnly } from '../types/index.js'
|
||||
import { BaseTelegramClient, BaseTelegramClientOptions } from './base.js'
|
||||
import { ITelegramClient } from './client.types.js'
|
||||
|
@ -169,6 +170,7 @@ import { unpinAllMessages } from './methods/messages/unpin-all-messages.js'
|
|||
import { unpinMessage } from './methods/messages/unpin-message.js'
|
||||
import { initTakeoutSession } from './methods/misc/init-takeout-session.js'
|
||||
import { _normalizePrivacyRules } from './methods/misc/normalize-privacy-rules.js'
|
||||
import { withParams } from './methods/misc/with-params.js'
|
||||
import { changeCloudPassword } from './methods/password/change-cloud-password.js'
|
||||
import { enableCloudPassword } from './methods/password/enable-cloud-password.js'
|
||||
import { cancelPasswordEmail, resendPasswordEmail, verifyPasswordEmail } from './methods/password/password-email.js'
|
||||
|
@ -313,7 +315,6 @@ import {
|
|||
} from './types/index.js'
|
||||
import { makeParsedUpdateHandler, ParsedUpdateHandlerParams } from './updates/parsed.js'
|
||||
import { StringSessionData } from './utils/string-session.js'
|
||||
|
||||
// from methods/_init.ts
|
||||
// @copy
|
||||
type TelegramClientOptions = (
|
||||
|
@ -512,6 +513,14 @@ export interface TelegramClient extends ITelegramClient {
|
|||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
on(name: string, handler: (...args: any[]) => void): this
|
||||
|
||||
/**
|
||||
* Wrap this client so that all RPC calls will use the specified parameters.
|
||||
*
|
||||
* @param params Parameters to use
|
||||
* @returns Wrapped client
|
||||
*/
|
||||
withParams(params: RpcCallOptions): this
|
||||
/**
|
||||
* Check your Two-Step verification password and log in
|
||||
*
|
||||
|
@ -5177,6 +5186,9 @@ export class TelegramClient extends EventEmitter implements ITelegramClient {
|
|||
}),
|
||||
)
|
||||
}
|
||||
withParams(params: RpcCallOptions): this {
|
||||
return withParams(this, params)
|
||||
}
|
||||
}
|
||||
|
||||
TelegramClient.prototype.checkPassword = function (...args) {
|
||||
|
|
|
@ -5,6 +5,8 @@ import { tdFileId } from '@mtcute/file-id'
|
|||
// @copy
|
||||
import { tl } from '@mtcute/tl'
|
||||
|
||||
// @copy
|
||||
import { RpcCallOptions } from '../../network/index.js'
|
||||
// @copy
|
||||
import { MaybeArray, MaybePromise, MtUnsupportedError, PartialExcept, PartialOnly } from '../../types/index.js'
|
||||
// @copy
|
||||
|
|
37
packages/core/src/highlevel/methods/misc/with-params.ts
Normal file
37
packages/core/src/highlevel/methods/misc/with-params.ts
Normal file
|
@ -0,0 +1,37 @@
|
|||
import { tl } from '@mtcute/tl'
|
||||
|
||||
import { RpcCallOptions } from '../../../network/index.js'
|
||||
import { ITelegramClient } from '../../client.types.js'
|
||||
|
||||
// @skip
|
||||
/**
|
||||
* Wrap a client so that all RPC calls will use the specified parameters.
|
||||
*
|
||||
* @param client Client to wrap
|
||||
* @param params RPC call parameters to use by default
|
||||
* @returns The wrapped client
|
||||
*/
|
||||
export function withParams<T extends ITelegramClient>(client: T, params: RpcCallOptions): T {
|
||||
const wrappedCall = (message: tl.RpcMethod, extraParams?: RpcCallOptions) =>
|
||||
client.call(message, extraParams ? { ...params, ...extraParams } : params)
|
||||
|
||||
const proxy: T = new Proxy<T>(client, {
|
||||
get: (target, prop, receiver) => {
|
||||
if (prop === 'call') {
|
||||
return wrappedCall
|
||||
}
|
||||
|
||||
if (prop === '_client') {
|
||||
// ideally we would wrap it as well, but it's not really needed, since TelegramClient
|
||||
// TelegramClient stores underlying client in _client
|
||||
// itself implements ITelegramClient
|
||||
// very much a hack, but i dont care :D
|
||||
return proxy
|
||||
}
|
||||
|
||||
return Reflect.get(target, prop, receiver)
|
||||
},
|
||||
})
|
||||
|
||||
return proxy
|
||||
}
|
Loading…
Reference in a new issue