diff --git a/e2e/deno/cli.sh b/e2e/deno/cli.sh
index 7d6afda7..e314f000 100755
--- a/e2e/deno/cli.sh
+++ b/e2e/deno/cli.sh
@@ -69,7 +69,7 @@ case "$method" in
if [ -d .jsr-data ]; then
# clean up data from previous runs
docker compose down
- rm -rf .jsr-data
+ sudo rm -rf .jsr-data
fi
mkdir .jsr-data
./cli.sh start
diff --git a/package.json b/package.json
index ff338996..3838a56b 100644
--- a/package.json
+++ b/package.json
@@ -35,7 +35,7 @@
"devDependencies": {
"@commitlint/cli": "17.6.5",
"@commitlint/config-conventional": "17.6.5",
- "@teidesu/slow-types-compiler": "1.0.2",
+ "@teidesu/slow-types-compiler": "1.1.0",
"@types/node": "20.10.0",
"@types/ws": "8.5.4",
"@typescript-eslint/eslint-plugin": "6.4.0",
diff --git a/packages/deno/build.config.cjs b/packages/deno/build.config.cjs
index 17718026..f8e7735c 100644
--- a/packages/deno/build.config.cjs
+++ b/packages/deno/build.config.cjs
@@ -1 +1,12 @@
-module.exports = () => ({ buildCjs: false })
+module.exports = ({ outDir, fs, jsr }) => ({
+ buildCjs: false,
+ final() {
+ if (jsr) {
+ // jsr doesn't support symlinks, so we need to copy the files manually
+ const real = fs.realpathSync(`${outDir}/common-internals-web`)
+ fs.unlinkSync(`${outDir}/common-internals-web`)
+ // console.log(real)
+ fs.cpSync(real, `${outDir}/common-internals-web`, { recursive: true })
+ }
+ },
+})
diff --git a/packages/deno/src/client.ts b/packages/deno/src/client.ts
index 32a03e96..e36e1b21 100644
--- a/packages/deno/src/client.ts
+++ b/packages/deno/src/client.ts
@@ -87,7 +87,8 @@ export class TelegramClient extends TelegramClientBase {
this._rl = createInterface({
// eslint-disable-next-line
input: Readable.fromWeb(Deno.stdin.readable as any),
- output: Writable.fromWeb(Deno.stdout.writable),
+ // eslint-disable-next-line
+ output: Writable.fromWeb(Deno.stdout.writable as any),
})
}
diff --git a/packages/deno/src/utils/crypto.ts b/packages/deno/src/utils/crypto.ts
index 04b7b21b..9c08a6ed 100644
--- a/packages/deno/src/utils/crypto.ts
+++ b/packages/deno/src/utils/crypto.ts
@@ -1,10 +1,10 @@
-/* eslint-disable no-restricted-globals */
import { Buffer } from 'node:buffer'
import { createCipheriv, createHash, createHmac, pbkdf2 } from 'node:crypto'
import { deflateSync, gunzipSync } from 'node:zlib'
import { BaseCryptoProvider, IAesCtr, ICryptoProvider, IEncryptionScheme } from '@mtcute/core/utils.js'
import { getWasmUrl, ige256Decrypt, ige256Encrypt, initSync } from '@mtcute/wasm'
+
// node:crypto is properly implemented in deno, so we can just use it
// largely just copy-pasting from @mtcute/node
diff --git a/packages/deno/src/utils/tcp.ts b/packages/deno/src/utils/tcp.ts
index 0bdcd6ef..848ded1e 100644
--- a/packages/deno/src/utils/tcp.ts
+++ b/packages/deno/src/utils/tcp.ts
@@ -1,4 +1,4 @@
-import EventEmitter from 'events'
+import EventEmitter from 'node:events'
import { IntermediatePacketCodec, IPacketCodec, ITelegramTransport, MtcuteError, TransportState } from '@mtcute/core'
import { BasicDcOption, ICryptoProvider, Logger } from '@mtcute/core/utils.js'
diff --git a/packages/deno/src/worker.ts b/packages/deno/src/worker.ts
index 64e34db3..852a362d 100644
--- a/packages/deno/src/worker.ts
+++ b/packages/deno/src/worker.ts
@@ -1,4 +1,5 @@
-///
+/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
+/* eslint-disable @typescript-eslint/no-unsafe-call */
import { setPlatform } from '@mtcute/core/platform.js'
import {
ClientMessageHandler,
@@ -19,6 +20,10 @@ export type { TelegramWorkerOptions, TelegramWorkerPortOptions, WorkerCustomMeth
let _registered = false
+// thanks deno for this awesome lack of typings
+declare const WorkerGlobalScope: any
+declare const self: any
+
export class TelegramWorker extends TelegramWorkerBase {
registerWorker(handler: WorkerMessageHandler): RespondFn {
if (_registered) {
@@ -31,7 +36,7 @@ export class TelegramWorker extends TelegramWorke
const respond: RespondFn = self.postMessage.bind(self)
// eslint-disable-next-line
- self.addEventListener('message', (message) => handler((message as any).data, respond))
+ self.addEventListener('message', (message: any) => handler(message.data, respond))
return respond
}
diff --git a/packages/web/src/idb/driver.ts b/packages/web/src/idb/driver.ts
index 7a26d5df..73a6d431 100644
--- a/packages/web/src/idb/driver.ts
+++ b/packages/web/src/idb/driver.ts
@@ -1,5 +1,3 @@
-///
-///
import { BaseStorageDriver, MtUnsupportedError } from '@mtcute/core'
import { txToPromise } from './utils.js'
@@ -117,7 +115,8 @@ export class IdbStorageDriver extends BaseStorageDriver {
db.createObjectStore(`${REPO_VERSION_PREFIX}${repo}:${targetVer}`)
}
- for (const key of db.objectStoreNames) {
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ for (const key of db.objectStoreNames as any as string[]) {
if (!key.startsWith(REPO_VERSION_PREFIX)) continue
const [, repo, version] = key.split(':')
@@ -144,7 +143,7 @@ export class IdbStorageDriver extends BaseStorageDriver {
this._pendingWrites = []
this._pendingWritesOses = new Set()
- const tx = this.db.transaction(oses, 'readwrite')
+ const tx = this.db.transaction([...oses], 'readwrite')
const osMap = new Map()
diff --git a/packages/web/src/worker.ts b/packages/web/src/worker.ts
index 23f9dcfc..6d1cf220 100644
--- a/packages/web/src/worker.ts
+++ b/packages/web/src/worker.ts
@@ -1,5 +1,4 @@
-///
-///
+/* eslint-disable @typescript-eslint/no-explicit-any */
import { setPlatform } from '@mtcute/core/platform.js'
import {
ClientMessageHandler,
@@ -20,6 +19,11 @@ export type { TelegramWorkerOptions, TelegramWorkerPortOptions, WorkerCustomMeth
let _registered = false
+// thanks deno for this awesome lack of typings
+declare const WorkerGlobalScope: any
+declare const SharedWorkerGlobalScope: any
+declare const self: any
+
export class TelegramWorker extends TelegramWorkerBase {
registerWorker(handler: WorkerMessageHandler): RespondFn {
if (_registered) {
@@ -37,7 +41,7 @@ export class TelegramWorker extends TelegramWorke
}
}
- self.onconnect = (event) => {
+ self.onconnect = (event: MessageEvent) => {
const port = event.ports[0]
connections.push(port)
@@ -93,7 +97,7 @@ export class TelegramWorker extends TelegramWorke
const respond: RespondFn = self.postMessage.bind(self)
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
- self.addEventListener('message', (message) => handler(message.data, respond))
+ self.addEventListener('message', (message: MessageEvent) => handler(message.data, respond))
return respond
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e52cc9e7..f4902c33 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -19,8 +19,8 @@ importers:
specifier: 17.6.5
version: 17.6.5
'@teidesu/slow-types-compiler':
- specifier: 1.0.2
- version: 1.0.2(typescript@5.4.3)
+ specifier: 1.1.0
+ version: 1.1.0(typescript@5.4.3)
'@types/node':
specifier: 20.10.0
version: 20.10.0
@@ -1467,8 +1467,8 @@ packages:
/@sinclair/typebox@0.27.8:
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
- /@teidesu/slow-types-compiler@1.0.2(typescript@5.4.3):
- resolution: {integrity: sha512-N0e3J/My4t405V5qD2kr6xXwLMlaB+el7bdYKLXJ2yyrLN1eAx4elf6qkeRTF4xy0GoiWrS0gKS0RZfddSOw1w==}
+ /@teidesu/slow-types-compiler@1.1.0(typescript@5.4.3):
+ resolution: {integrity: sha512-+WUHSKh56B32Jk5aJgXf07E2EOkMX1yilvgKLKBCJPFAJZ4xeo1U5aDu3wwHX3lrFl7AiVGXUP+FfuHy8X43BA==}
hasBin: true
peerDependencies:
typescript: ^5.0.0
@@ -1476,6 +1476,7 @@ packages:
arg: 5.0.2
dedent: 1.5.3
eager-async-pool: 1.0.0
+ glob: 10.3.12
gunzip-maybe: 1.4.2
semver: 7.6.0
tar-stream: 3.1.7
@@ -3739,6 +3740,18 @@ packages:
path-scurry: 1.10.1
dev: true
+ /glob@10.3.12:
+ resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+ dependencies:
+ foreground-child: 3.1.1
+ jackspeak: 2.3.6
+ minimatch: 9.0.3
+ minipass: 7.0.4
+ path-scurry: 1.10.2
+ dev: true
+
/glob@7.2.0:
resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
dependencies:
@@ -4607,6 +4620,11 @@ packages:
get-func-name: 2.0.2
dev: true
+ /lru-cache@10.2.2:
+ resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==}
+ engines: {node: 14 || >=16.14}
+ dev: true
+
/lru-cache@6.0.0:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'}
@@ -4852,6 +4870,11 @@ packages:
resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==}
engines: {node: '>=16 || 14 >=14.17'}
+ /minipass@7.0.4:
+ resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ dev: true
+
/minizlib@2.1.2:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
engines: {node: '>= 8'}
@@ -5303,6 +5326,14 @@ packages:
lru-cache: 9.1.2
minipass: 6.0.2
+ /path-scurry@1.10.2:
+ resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ dependencies:
+ lru-cache: 10.2.2
+ minipass: 7.0.4
+ dev: true
+
/path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
diff --git a/scripts/build-package.js b/scripts/build-package.js
index c5898ad6..892304b8 100644
--- a/scripts/build-package.js
+++ b/scripts/build-package.js
@@ -433,6 +433,8 @@ if (buildConfig.buildTs && !IS_JSR) {
for (const [name, decl_] of Object.entries(nodeSpecificApis)) {
if (fileContent.includes(name)) {
+ if (name === 'Buffer' && fileContent.includes('node:buffer')) continue
+
changed = true
const isType = Array.isArray(decl_) && decl_[0] === 'type'
const decl = isType ? decl_[1] : decl_
@@ -547,6 +549,34 @@ if (IS_JSR) {
),
)
+ if (process.env.E2E) {
+ // populate dependencies, if any
+ const depsToPopulate = []
+
+ for (const dep of Object.values(importMap)) {
+ if (!dep.startsWith('jsr:')) continue
+ if (dep.startsWith('jsr:@mtcute/')) continue
+ depsToPopulate.push(dep.slice(4))
+ }
+
+ if (depsToPopulate.length) {
+ console.log('[i] Populating %d dependencies...', depsToPopulate.length)
+ cp.spawnSync('pnpm', [
+ 'exec',
+ 'slow-types-compiler',
+ 'populate',
+ '--downstream',
+ process.env.JSR_URL,
+ '--token',
+ process.env.JSR_TOKEN,
+ '--unstable-create-via-api',
+ ...depsToPopulate,
+ ], {
+ stdio: 'inherit',
+ })
+ }
+ }
+
console.log('[i] Processing with slow-types-compiler...')
const project = stc.createProject()
stc.processPackage(project, denoJson)
diff --git a/scripts/publish.js b/scripts/publish.js
index d3a483f4..f6454788 100644
--- a/scripts/publish.js
+++ b/scripts/publish.js
@@ -1,6 +1,7 @@
const fs = require('fs')
const path = require('path')
const cp = require('child_process')
+const stc = require('@teidesu/slow-types-compiler')
const IS_JSR = process.env.JSR === '1'
const MAIN_REGISTRY = IS_JSR ? 'http://jsr.test/' : 'https://registry.npmjs.org'
@@ -54,30 +55,6 @@ async function checkVersion(name, version) {
return fetchRetry(url).then((r) => r.status === 200)
}
-async function jsrMaybeCreatePackage(name) {
- // check if the package even exists
- const packageMeta = await fetchRetry(`${REGISTRY}api/scopes/mtcute/packages/${name}`)
-
- if (packageMeta.status === 404) {
- console.error('[i] %s does not exist, creating..', name)
-
- const create = await fetchRetry(`${REGISTRY}api/scopes/mtcute/packages`, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- Cookie: `token=${process.env.JSR_TOKEN}`,
- },
- body: JSON.stringify({ package: name }),
- })
-
- if (create.status !== 200) {
- throw new Error(`Failed to create package: ${create.statusText} ${await create.text()}`)
- }
- } else if (packageMeta.status !== 200) {
- throw new Error(`Failed to check package: ${packageMeta.statusText} ${await packageMeta.text()}`)
- }
-}
-
async function publishSinglePackage(name) {
let packageDir = path.join(__dirname, '../packages', name)
@@ -110,7 +87,11 @@ async function publishSinglePackage(name) {
return
}
} else if (IS_JSR && process.env.JSR_TOKEN) {
- await jsrMaybeCreatePackage(name)
+ await stc.jsrMaybeCreatePackage({
+ name: `@mtcute/${name}`,
+ token: process.env.JSR_TOKEN,
+ registry: REGISTRY,
+ })
}
if (IS_JSR) {
@@ -157,7 +138,6 @@ function listPackages() {
.map((d) => d.slice(8))
}
- const stc = require('@teidesu/slow-types-compiler')
packages = stc.determinePublishOrder(map)
console.log('[i] Publishing order:', packages.join(', '))
}