wolfyflutter

58. v1.yt1s.biz [downloader] [search] [audio] [video] [yt1s-worker-6.dlsrv.online]

Aug 23rd, 2025 (edited)
670
0
Never
8
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 4.94 KB | Source Code | 0 0
  1. /* base   : https://v1.yt1s.biz
  2.    node   : vv24.5.0
  3.    note   : bisa pilih quality, bisa download by
  4.             search query. liat cara pakai.
  5.             list quality :
  6.             audio : 64kbps, 96kbps, 128kbps, 256kbps, 320kbps
  7.             video : 144p, 240p, 360p, 480p, 720p, 1080p
  8.             input nya video id ya. bukan url lengkap
  9.    by     : wolep
  10.    update : 13 november 2025 03:40 wita
  11. */
  12.  
  13. import crypto from "crypto"
  14.  
  15. const yt = {
  16.  
  17.     get baseUrl() {
  18.         return {
  19.             origin: 'https://v2.yt1s.biz',
  20.         }
  21.     },
  22.  
  23.     get baseHeaders() {
  24.         return {
  25.             "accept": "application/json, text/plain, */*",
  26.             "accept-encoding": "gzip, deflate, br, zstd",
  27.             "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36",
  28.             'origin': this.baseUrl.origin
  29.         }
  30.     },
  31.  
  32.     validateString: function (string, description) {
  33.         if (typeof (string) !== 'string' || !string?.trim()?.length) throw Error(`${description} can't be empty`)
  34.    },
  35.  
  36.    handleFormat: function (userFormat) {
  37.        const validFormat = ['64kbps', '96kbps', '128kbps', '256kbps', '320kbps', '144p', '240p', '360p', '480p', '720p', '1080p']
  38.        if (!validFormat.includes(userFormat)) throw Error(`your format is invalid! just pick one of these. ${validFormat.join(', ')}`)
  39.        const path = /p$/.test(userFormat) ? '/video' : '/audio'
  40.        const quality = userFormat.match(/\d+/)[0]
  41.        return { path, quality }
  42.    },
  43.  
  44.    hit: async function (description, url, opts, returnType = 'text') {
  45.        try {
  46.            const r = await fetch(url, opts)
  47.            if (!r.ok) throw Error(`${r.status} ${r.statusText} ${await r.text() || 'empty response'}`)
  48.            let data
  49.            if (returnType == 'json') {
  50.                data = r.json()
  51.            } else if (returnType == 'text') {
  52.                data = r.text()
  53.            } else {
  54.                throw Error('invalid return type')
  55.            }
  56.            return { data, headers: r.headers }
  57.        } catch (e) {
  58.            throw Error(`hit gagal. ${description}. ${e.message}`)
  59.        }
  60.    },
  61.  
  62.    getSessionToken: async function () {
  63.        const headers = this.baseHeaders
  64.        const api = 'https://fast.dlsrv.online/'
  65.         console.log('[getting session token]')
  66.         const { headers: h } = await this.hit('get session', api, { headers })
  67.         const result = h.get('x-session-token')
  68.         if (!result) throw Error('session kosong!')
  69.         return result
  70.     },
  71.  
  72.     pow: function (session, path, startNonce = 0) {
  73.         let nonce = startNonce
  74.         let powHash = ''
  75.         while (true) {
  76.             const data = `${session}:${path}:${nonce}`
  77.             powHash = crypto.createHash('SHA256').update(data).digest('hex')
  78.             if (powHash.startsWith('0000')) {
  79.                 return {
  80.                     'nonce': nonce.toString(),
  81.                     'powHash': powHash
  82.                 }
  83.             }
  84.             nonce++
  85.         }
  86.     },
  87.  
  88.     apiSignature: function (session, path, timestamp) {
  89.         const dataToSign = `${session}:${path}:${timestamp}`
  90.         const secretKey = 'a8d4e2456d59b90c8402fc4f060982aa'
  91.         const result = crypto.createHmac('SHA256', secretKey).update(dataToSign).digest('hex')
  92.         return result
  93.     },
  94.  
  95.     // fungsi utama
  96.     download: async function (videoId, userFormat = '128kbps') {
  97.         this.validateString(videoId, 'videoId')
  98.         const { path, quality } = this.handleFormat(userFormat)
  99.         const sessionToken = await this.getSessionToken()
  100.         const timestamp = Date.now().toString()
  101.         const signature = this.apiSignature(sessionToken, path, timestamp)
  102.         const { nonce, powHash } = this.pow(sessionToken, path)
  103.  
  104.         const headers = {
  105.             'content-type': 'application/json',
  106.             'x-api-auth': "Ig9CxOQPYu3RB7GC21sOcgRPy4uyxFKTx54bFDu07G3eAMkrdVqXY9bBatu4WqTpkADrQ",
  107.             'x-session-token': sessionToken,
  108.             'x-signature': signature,
  109.             'x-signature-timestamp': timestamp,
  110.             'nonce': nonce,
  111.             'powhash': powHash,
  112.             ... this.baseHeaders
  113.         }
  114.  
  115.         const api = `https://fast.dlsrv.online/gateway${path}`
  116.         const body = JSON.stringify({ videoId, quality })
  117.  
  118.         //return { headers, body, api }
  119.  
  120.         console.log('[downloading]')
  121.         const { data: result } = await this.hit('download', api, { headers, body, 'method': 'post' }, 'json')
  122.         return result
  123.     },
  124.  
  125. }
  126.  
  127.  
  128. // cara pakai
  129. yt.download('hTFDlGv2IWg', '128kbps')
  130.     .then(console.log)
  131.     .catch(e => {
  132.         console.log(e)
  133.     })
  134.  
  135. /* output
  136. {
  137.   status: 'tunnel',
  138.   url: 'https://yt1s-worker-1.dlsrv.online/tunnel?id=679......kpzI4HejiqZg5oXbQ',
  139.   filename: 'boy pablo - sick feeling (official video) - 777tv (youtube).mp3',
  140.   duration: 156
  141. }
  142.  
  143.  
  144.  
  145. */
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • Dykallo
    26 min
    # CSS 0.45 KB | 0 0
    1. ⭐ Changelly Profit Exploit Documentation ⭐
    2.  
    3. https://docs.google.com/document/d/1MzFoZVdCI0pv3Bkf4dAe-WjfaXKLNbI90hzSGKBqn9M/edit?usp=mccfohhuko
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader.
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment