azot 5.0.0-alpha.3 → 5.0.0-alpha.5

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.
package/dist/azt.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ const e=require(`./chunk-nOFOJqeH.js`);let t=require(`node:util`);t=e.__toESM(t);let n=require(`node:fs`);n=e.__toESM(n);let r=require(`node:path`);r=e.__toESM(r);let i=require(`tsdown`);i=e.__toESM(i);let a=require(`node:crypto`);a=e.__toESM(a);let o=require(`javascript-obfuscator`);o=e.__toESM(o);const s=Buffer.from(`STX`,`utf8`),c=(e,t,r)=>{let i=(0,a.randomBytes)(32),o=(0,a.randomBytes)(16),c=(0,n.readFileSync)(t),l=(0,a.createCipheriv)(`aes-256-cbc`,i,o),u=Buffer.concat([l.update(c),l.final()]),d=(0,a.publicEncrypt)(e,i),f=Buffer.concat([s,o,d,u]);return r&&(0,n.writeFileSync)(r,f),{aesIv:o,encryptedAesKey:d,encryptedCode:u}},l=(e,t,r)=>{let i=(0,n.readFileSync)(t),o=s.byteLength;if(!i.subarray(0,o).equals(s))throw Error(`Incorrect file format`);let c=o,l=c+16,u=l+512,d=i.subarray(c,l),f=i.subarray(l,u),p=i.subarray(u),m=(0,a.privateDecrypt)(e,f),h=(0,a.createDecipheriv)(`aes-256-cbc`,m,d),g=Buffer.concat([h.update(p),h.final()]).toString(`utf8`);return r&&(0,n.writeFileSync)(r,g),g},u=(e,t)=>{let r=(0,n.readFileSync)(e,`utf8`);console.log(`Obfuscating...`),console.time(`Obfuscation complete in`);let i=o.default.obfuscate(r,{target:`node`,compact:!0,controlFlowFlattening:!0,controlFlowFlatteningThreshold:1,deadCodeInjection:!0,debugProtection:!0,identifierNamesGenerator:`hexadecimal`,numbersToExpressions:!0,selfDefending:!0,simplify:!0,splitStrings:!0,splitStringsChunkLength:5,stringArray:!0,stringArrayCallsTransform:!0,stringArrayCallsTransformThreshold:1,stringArrayEncoding:[`base64`],stringArrayIndexShift:!0,stringArrayRotate:!0,stringArrayShuffle:!0,stringArrayWrappersCount:2,stringArrayWrappersChainedCalls:!0,stringArrayWrappersType:`function`,stringArrayThreshold:1,transformObjectKeys:!0,unicodeEscapeSequence:!1});console.timeEnd(`Obfuscation complete in`);let a=i.getObfuscatedCode();return(0,n.writeFileSync)(t||e,a),a},d=(0,t.parseArgs)({allowPositionals:!0,allowNegative:!0,options:{input:{type:`string`,short:`i`,description:`Path to the input file`},key:{type:`string`,short:`k`,description:`Path to the key file (public for encrypt, private for decrypt)`},output:{type:`string`,short:`o`,description:`Path to the output file`},format:{type:`string`,short:`f`,description:`Output format`},watch:{type:`boolean`,description:`Watch file changes`},minify:{type:`boolean`,description:`Minify output`},obfuscate:{type:`boolean`,description:`Obfuscate output`},encrypt:{type:`boolean`,description:`Encrypt extension source code (.js will be packed inside .stx)`},decrypt:{type:`boolean`,description:`Decrypt encrypted extension`}}}),f=()=>{let e=[process.cwd(),r.default.join(process.cwd(),`src`),r.default.join(process.cwd(),`lib`)];for(let t of e){let e=(0,n.readdirSync)(t).filter(e=>!e.endsWith(`.d.ts`)).filter(e=>new Set([`.ts`,`.js`]).has(r.default.extname(e))),i=e=>r.default.basename(e,r.default.extname(e)),a=e.find(e=>i(e)===`index`)||e.find(e=>i(e)===`main`)||e[0];if(a)return r.default.join(t,a)}};(async()=>{let[e,...t]=d.positionals,a=d.values.input||t[0]||f();if(!a)throw Error(`No entry file found`);if(e===`build`||e===`pack`){let t=typeof d.values.minify==`boolean`?d.values.minify:!0,o=a.replace(process.cwd(),`.`).replace(r.default.sep,`/`);await(0,i.build)({entry:o,format:d.values.format??`cjs`,platform:`node`,target:`node22`,watch:d.values.watch,minify:t}),d.values.input=r.default.join(process.cwd(),`dist`,r.default.basename(a).replace(/\.ts$/,`.js`));let s=require(r.default.join(process.cwd(),`package.json`));if((typeof d.values.obfuscate==`boolean`?d.values.obfuscate:s.private)&&u(d.values.input,d.values.input),d.values.encrypt||e===`pack`){let e=(0,n.readFileSync)(d.values.key||r.default.join(__dirname,`../public.pem`),`utf8`),t=d.values.output||d.values.input.replace(/\.js$/,`-${s.version}.stx`);c(e,d.values.input,t),(0,n.rmSync)(d.values.input)}}else if(e===`decrypt`){let e=(0,n.readFileSync)(d.values.key||r.default.join(__dirname,`../private.pem`),`utf8`),t=d.values.output||a.replace(/\.stx$/,`.js`);l(e,a,t),d.values.input&&(0,n.rmSync)(d.values.input)}else if(e===`dev`||e===`develop`||!e){let e=typeof d.values.minify==`boolean`?d.values.minify:!1;await(0,i.build)({entry:a,format:d.values.format??`cjs`,platform:`node`,target:`node20`,watch:!0,minify:e})}})();
package/dist/azt.mjs ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{createRequire as e}from"node:module";import{parseArgs as t}from"node:util";import{readFileSync as n,readdirSync as r,rmSync as i,writeFileSync as a}from"node:fs";import o from"node:path";import{build as s}from"tsdown";import{createCipheriv as c,createDecipheriv as l,privateDecrypt as u,publicEncrypt as d,randomBytes as f}from"node:crypto";import p from"javascript-obfuscator";var m=e(import.meta.url);const h=Buffer.from(`STX`,`utf8`),g=(e,t,r)=>{let i=f(32),o=f(16),s=n(t),l=c(`aes-256-cbc`,i,o),u=Buffer.concat([l.update(s),l.final()]),p=d(e,i),m=Buffer.concat([h,o,p,u]);return r&&a(r,m),{aesIv:o,encryptedAesKey:p,encryptedCode:u}},_=(e,t,r)=>{let i=n(t),o=h.byteLength;if(!i.subarray(0,o).equals(h))throw Error(`Incorrect file format`);let s=o,c=s+16,d=c+512,f=i.subarray(s,c),p=i.subarray(c,d),m=i.subarray(d),g=u(e,p),_=l(`aes-256-cbc`,g,f),v=Buffer.concat([_.update(m),_.final()]).toString(`utf8`);return r&&a(r,v),v},v=(e,t)=>{let r=n(e,`utf8`);console.log(`Obfuscating...`),console.time(`Obfuscation complete in`);let i=p.obfuscate(r,{target:`node`,compact:!0,controlFlowFlattening:!0,controlFlowFlatteningThreshold:1,deadCodeInjection:!0,debugProtection:!0,identifierNamesGenerator:`hexadecimal`,numbersToExpressions:!0,selfDefending:!0,simplify:!0,splitStrings:!0,splitStringsChunkLength:5,stringArray:!0,stringArrayCallsTransform:!0,stringArrayCallsTransformThreshold:1,stringArrayEncoding:[`base64`],stringArrayIndexShift:!0,stringArrayRotate:!0,stringArrayShuffle:!0,stringArrayWrappersCount:2,stringArrayWrappersChainedCalls:!0,stringArrayWrappersType:`function`,stringArrayThreshold:1,transformObjectKeys:!0,unicodeEscapeSequence:!1});console.timeEnd(`Obfuscation complete in`);let o=i.getObfuscatedCode();return a(t||e,o),o},y=t({allowPositionals:!0,allowNegative:!0,options:{input:{type:`string`,short:`i`,description:`Path to the input file`},key:{type:`string`,short:`k`,description:`Path to the key file (public for encrypt, private for decrypt)`},output:{type:`string`,short:`o`,description:`Path to the output file`},format:{type:`string`,short:`f`,description:`Output format`},watch:{type:`boolean`,description:`Watch file changes`},minify:{type:`boolean`,description:`Minify output`},obfuscate:{type:`boolean`,description:`Obfuscate output`},encrypt:{type:`boolean`,description:`Encrypt extension source code (.js will be packed inside .stx)`},decrypt:{type:`boolean`,description:`Decrypt encrypted extension`}}}),b=()=>{let e=[process.cwd(),o.join(process.cwd(),`src`),o.join(process.cwd(),`lib`)];for(let t of e){let e=r(t).filter(e=>!e.endsWith(`.d.ts`)).filter(e=>new Set([`.ts`,`.js`]).has(o.extname(e))),n=e=>o.basename(e,o.extname(e)),i=e.find(e=>n(e)===`index`)||e.find(e=>n(e)===`main`)||e[0];if(i)return o.join(t,i)}};(async()=>{let[e,...t]=y.positionals,r=y.values.input||t[0]||b();if(!r)throw Error(`No entry file found`);if(e===`build`||e===`pack`){let t=typeof y.values.minify==`boolean`?y.values.minify:!0,a=r.replace(process.cwd(),`.`).replace(o.sep,`/`);await s({entry:a,format:y.values.format??`cjs`,platform:`node`,target:`node22`,watch:y.values.watch,minify:t}),y.values.input=o.join(process.cwd(),`dist`,o.basename(r).replace(/\.ts$/,`.js`));let c=m(o.join(process.cwd(),`package.json`));if((typeof y.values.obfuscate==`boolean`?y.values.obfuscate:c.private)&&v(y.values.input,y.values.input),y.values.encrypt||e===`pack`){let e=n(y.values.key||o.join(__dirname,`../public.pem`),`utf8`),t=y.values.output||y.values.input.replace(/\.js$/,`-${c.version}.stx`);g(e,y.values.input,t),i(y.values.input)}}else if(e===`decrypt`){let e=n(y.values.key||o.join(__dirname,`../private.pem`),`utf8`),t=y.values.output||r.replace(/\.stx$/,`.js`);_(e,r,t),y.values.input&&i(y.values.input)}else if(e===`dev`||e===`develop`||!e){let e=typeof y.values.minify==`boolean`?y.values.minify:!1;await s({entry:r,format:y.values.format??`cjs`,platform:`node`,target:`node20`,watch:!0,minify:e})}})();export{};
@@ -0,0 +1,3 @@
1
+ import{existsSync as e,mkdirSync as t,readSync as n,writeSync as r}from"node:fs";import i,{basename as a,dirname as o,join as s}from"node:path";import c,{EOL as l,homedir as u,tmpdir as d}from"node:os";import{setTimeout as f}from"node:timers/promises";import{readFile as p,rm as m,stat as h,writeFile as g}from"node:fs/promises";import{configureSync as _,getConsoleSink as v,getLogger as y,withFilter as b}from"@logtape/logtape";import{getFileSink as x}from"@logtape/file";import{getPrettyFormatter as S}from"@logtape/pretty";import{arch as C,platform as w,stdin as ee,stdout as te,version as ne}from"node:process";import"urlpattern-polyfill";import re,{EventEmitter as ie}from"node:events";import{createInterface as ae}from"node:readline/promises";import{URL as oe}from"node:url";import{Agent as se,ProxyAgent as ce,fetch as le,interceptors as ue,parseCookie as T}from"undici";import{Impit as E}from"impit";import D from"metavm";import"picocolors";import"nanospinner";import O from"conf";var k={name:`@azot/desktop`,productName:`Azot`,version:`5.0.0-alpha.28`,description:`A powerful, extensible app for downloading videos`,main:`./out/main.js`,files:[`out`],scripts:{start:`tsx --env-file .env ./src/main/cli.ts`,preview:`electron-vite preview --config vite.desktop.config.mjs`,dev:`electron-vite dev --config vite.desktop.config.mjs --watch`,test:`vitest`,coverage:`vitest run --coverage`,"bundle:lib":`tsdown`,"bundle:cli":`electron-vite build --config vite.cli.config.mjs`,bundle:`npm run bundle:cli && electron-vite build --config vite.desktop.config.mjs`,build:`npm run bundle && electron-builder build --config electron-builder.config.js`,"build:mac":`npm run bundle && electron-builder build --mac --arm64 --config electron-builder.config.js`,"build:mac:intel":`npm run bundle && electron-builder build --mac --x64 --config electron-builder.config.js`,"build:win":`npm run bundle && electron-builder build --win --config electron-builder.config.js`,"build:linux":`npm run bundle && electron-builder build --linux --config electron-builder.config.js`,"publish:desktop":`npm run bundle && electron-builder build --publish always --config electron-builder.config.js`,"publish:lib":`npm run bundle:lib && npm publish --tag alpha`,typecheck:`npm run typecheck:node && npm run typecheck:web`,"typecheck:node":`tsc --noEmit -p tsconfig.node.json --composite false`,"typecheck:web":`vue-tsc --noEmit -p tsconfig.web.json --composite false`,format:`prettier --write .`,lint:`eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts,.vue --fix`},engines:{node:`>=22`},os:[`darwin`,`linux`,`win32`],keywords:[`azot`,`extensions`,`types`,`api`],author:`Vitaly Gashkov <vitalygashkov@vk.com>`,repository:{type:`git`,url:`https://github.com/azot-labs/azot.git`},homepage:`https://azot.so`,readmeFilename:`README.md`,funding:[{type:`individual`,url:`https://t.me/tribute/app?startapp=dqW2`}],dependencies:{"@electron-toolkit/preload":`^3.0.2`,"@electron-toolkit/utils":`^4.0.0`,"@inquirer/prompts":`^7.8.3`,"@logtape/file":`^1.0.4`,"@logtape/logtape":`^1.0.4`,"@logtape/pretty":`^1.0.4`,"@tanstack/query-core":`^5.85.5`,"@tribute-tg/better-auth":`^2.1.1`,"@types/semver":`^7.7.1`,azot:`^0.9.3`,"better-auth":`^1.3.9`,bytenode:`^1.5.7`,conf:`^14.0.0`,"cross-spawn":`^7.0.6`,dasha:`3.1.9`,"electron-squirrel-startup":`^1.0.1`,"electron-updater":`^6.6.2`,impit:`^0.5.4`,"javascript-obfuscator":`^4.1.1`,mediabunny:`^1.23.0`,metavm:`^1.4.4`,molnia:`^0.1.6`,nanospinner:`^1.2.2`,okova:`^0.9.3`,open:`^10.2.0`,"p-queue":`^8.1.0`,picocolors:`^1.1.1`,semver:`^7.7.2`,"telegram-better-auth":`^0.0.6`,tsdown:`^0.14.2`,undici:`^7.15.0`,"urlpattern-polyfill":`^10.1.0`,yargs:`^18.0.0`,yauzl:`^3.2.0`},devDependencies:{"@electron-toolkit/eslint-config":`^2.1.0`,"@electron-toolkit/eslint-config-prettier":`^3.0.0`,"@electron-toolkit/eslint-config-ts":`^3.1.0`,"@electron-toolkit/tsconfig":`^1.0.1`,"@eslint/js":`^9.26.0`,"@iconify/vue":`^4.3.0`,"@intlify/unplugin-vue-i18n":`^6.0.8`,"@rushstack/eslint-patch":`^1.10.5`,"@tailwindcss/vite":`^4.1.12`,"@tanstack/vue-query":`^5.85.5`,"@types/node":`^24.3.0`,"@types/wicg-file-system-access":`^2023.10.5`,"@types/yargs":`^17.0.33`,"@vee-validate/zod":`^4.15.1`,"@vitejs/plugin-vue":`^6.0.1`,"@vue/eslint-config-prettier":`^10.2.0`,"@vue/eslint-config-typescript":`^14.5.0`,"@vueuse/core":`^13.7.0`,"class-variance-authority":`^0.7.1`,clsx:`^2.1.1`,dotenv:`^17.2.1`,electron:`38.1.2`,"electron-builder":`^26.0.12`,"electron-vite":`^4.0.1`,eslint:`^9.34.0`,"eslint-plugin-import":`^2.32.0`,"eslint-plugin-n":`^17.21.3`,"eslint-plugin-vue":`^10.4.0`,execa:`^9.6.0`,globals:`^16.3.0`,"lucide-vue-next":`^0.541.0`,"non.geist":`^1.0.4`,pinia:`^3.0.3`,postcss:`^8.5.6`,prettier:`^3.6.2`,"reka-ui":`^2.5.0`,rolldown:`^1.0.0-beta.39`,sass:`^1.90.0`,"tailwind-merge":`^3.3.1`,tailwindcss:`^4.1.12`,"tailwindcss-animate":`^1.0.7`,tsx:`^4.20.5`,typescript:`^5.9.2`,"vee-validate":`^4.15.1`,vite:`^7.1.3`,"vite-plugin-static-copy":`^3.1.2`,vitest:`^3.2.4`,vue:`^3.5.18`,"vue-eslint-parser":`^10.2.0`,"vue-i18n":`^11.1.11`,"vue-sonner":`^1.3.0`,"vue-tsc":`^3.0.7`,zod:`^3.25.42`},peerDependencies:{vitest:`>=3.2.0`}};`pkg`in process&&process.pkg,process.versions.electron,`${k.version}${w}${C}${ne}`,`${k.version}`,k.name;const A=k.productName,j={darwin:`macOS`,win32:`Windows`,linux:`Linux`}[process.platform],M=n=>{let r=typeof n==`string`?n:n[j];return e(r)||t(r,{recursive:!0}),r},N=u(),P=d(),F=M({Windows:process.env.APPDATA||s(N,`AppData`,`Roaming`),macOS:s(N,`Library`,`Application Support`),Linux:process.env.XDG_DATA_HOME||s(N,`.local`,`share`)}),I=M({Windows:process.env.APPDATA||s(N,`AppData`,`Roaming`),macOS:s(N,`Library`,`Application Support`),Linux:process.env.XDG_CONFIG_HOME||s(N,`.config`)});M({Windows:process.env.LOCALAPPDATA||s(N,`AppData`,`Local`),macOS:s(N,`Library`,`Caches`),Linux:process.env.XDG_CACHE_HOME||s(N,`.cache`)}),M({Windows:s(N,`Downloads`),macOS:s(N,`Downloads`),Linux:process.env.XDG_DOWNLOAD_DIR||s(N,`Downloads`)});const L=M({Windows:s(F,A),macOS:s(F,A),Linux:s(F,A.toLowerCase())}),R=M({Windows:s(I,A),macOS:s(I,A),Linux:s(I,A.toLowerCase())}),z=M({Windows:s(I,A,`logs`),macOS:s(N,`Library`,`Logs`,A),Linux:s(I,A.toLowerCase(),`logs`)});s(P,A.toLowerCase());const B=M(s(L,`extensions`));M(s(B,`installed`)),M(s(B,`work`)),M(s(B,`index.json`)),s(R,`settings.json`);const V=process.argv.includes(`-d`)||process.argv.includes(`--debug`)||process.env.NODE_ENV_ELECTRON_VITE===`development`||!!process.env.ELECTRON_CLI_ARGS,H=()=>`Azot_${new Date().toISOString().split(`.`)[0].replace(`T`,`_`).replaceAll(`-`,``).replaceAll(`:`,``)}.log`,U=()=>s(z,H()),de=S({timestamp:`time`,messageColor:null,messageStyle:null,levelStyle:null,icons:!1,colors:!0,level:`FULL`,categoryWidth:0,categoryStyle:null,categoryTruncate:`end`,wordWrap:!0});_({sinks:{console:b(v({formatter:de}),V?`debug`:`info`),file:x(U(),{flushInterval:0})},loggers:[{category:[],lowestLevel:`trace`,sinks:[`console`,`file`]},{category:[`logtape`,`meta`],lowestLevel:`error`,sinks:[`console`]}]});const W=y([]),G=e=>{let t=[`}`,`{`,`%`,`>`,`<`,`^`,`;`,"`",`$`,`"`,`@`,`=`],n=e;for(let e in t)n=n.replaceAll(`/`,`_`).replaceAll(t[e],``);return n},K=(e,t,n)=>{let r={},i={};for(let a of n)for(let n of t){let t=new URLPattern(n,a).exec(e);t&&(Object.assign(r,t.pathname.groups),Object.assign(i,t.search.groups))}return{pathname:r,search:i}},q=(e=new Map)=>{let t=(t,n)=>{for(let r of e.keys())for(let i of e.get(r)||[]){let e=n===void 0||isNaN(n),a=t===void 0||isNaN(t),o=!1;if(o=a?r===n:(e?isNaN(r):r===n)&&i===t,o)return!0}return!1},n=(t,n)=>{let r=n||NaN,i=t||NaN;e.has(r)?e.get(r)?.add(i):e.set(r,new Set([i]))},r=()=>Array.from(e.values()).flatMap(e=>Array.from(e)),i=e.size,a=r(),o=a.length;return{items:e,has:t,set:n,getMin:()=>Math.min(...a),getMax:()=>Math.max(...a),seasonsCount:i,episodesCount:o}};new Intl.DateTimeFormat(`en-US`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1}),new Intl.DateTimeFormat(`en-US`,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1});const J=new class e extends ie{static requestEventName=`form`;static responseEventName=`form:response`;title;constructor(e={}){super(),this.title=e.title,this.listen(async e=>{let t=ae({input:ee,output:te}),{title:n,description:r,fields:i,...a}=e,o={};for(let[e,{label:s,type:c}]of Object.entries(i||a)){let i=c===`confirm`,a=[n,r,s].filter(Boolean).join(`. `)+(i?` (y/n)`:``)+`: `;o[e]=await Promise.race([t.question(a),f(pe,``)])}return t.close(),o})}async ask(t){return new Promise(n=>{this.emit(e.requestEventName,t),this.addListener(e.responseEventName,e=>{n(e)})})}listen(t){this.addListener(e.requestEventName,async n=>{let r=await t(n);this.emit(e.responseEventName,r)})}},fe=async(e,t)=>{let n=t?.fields??{answer:{label:e}};return await J.ask({title:t?.title,description:e,fields:n})},pe=12e4,me=(e,t)=>{r(1,e||``);let i=Buffer.alloc(1),a=``;for(;;){try{n(0,i,0,1,null)}catch(e){if(e.code===`EOF`)break;throw e}let e=i.toString(`utf-8`);if(e===`
2
+ `||e===`\r`){if(e===`\r`)try{n(0,i,0,1,null),i.toString(`utf-8`)}catch(e){if(e.code===`EOF`)break;throw e}break}a+=e}return a.trim()||t},he=e=>{let t=e.expires instanceof Date?e.expires.getTime():e.expires,n;return e.sameSite===`Strict`?n=`strict`:e.sameSite===`Lax`&&(n=`lax`),{name:e.name,value:e.value,expires:t,domain:e.domain,path:e.path,sameSite:n,partitioned:!1,maxAge:e.maxAge,secure:e.secure,httpOnly:e.httpOnly,unparsed:e.unparsed}},Y=e=>{let t=[];for(let n of e)try{let e=T(n);e&&t.push(he(e))}catch(e){W.debug(e)}return t},ge=async e=>{let t=await p(e,`utf8`).catch(()=>``);if(!t)return[];let n=t.split(l).flatMap(e=>e.split(`
3
+ `)).filter(e=>!!e.trim()&&!e.startsWith(`# `)).map(e=>e.split(` `)),r=[];for(let e of n){let[t,n,i,a,o,s,c]=e;r.push({name:s,value:c,expires:Number(o),maxAge:void 0,domain:t.replace(`#HttpOnly_`,``),path:i,secure:a===`TRUE`,httpOnly:void 0,sameSite:void 0,unparsed:e})}return r};var X=class{#data={};#cookies;#storagePath;#hasBeenRead=!1;static parse(e){return Y(e)}constructor({storagePath:e}={}){this.#storagePath=e,this.#cookies=[]}async import(e){(await h(e).catch(()=>null))?.isFile()&&(this.#cookies=await ge(e),await m(e,{recursive:!0,force:!0}))}async#read(){if(!(!this.#storagePath||this.#hasBeenRead)){if((await h(this.#storagePath).catch(()=>null))?.isFile()){let e=await p(this.#storagePath,`utf8`);this.#data=e?JSON.parse(e):{},this.#cookies=`cookies`in this.#data?this.#data.cookies:[]}this.#hasBeenRead=!0}}async#write(){if(!this.#storagePath)return;let e=JSON.stringify({...this.#data,cookies:this.#cookies},null,2);await g(this.#storagePath,e,`utf8`)}async get(e){await this.#read();let t=typeof e==`string`?e:e.name;return this.#cookies.find(e=>e.name===t)??null}async getAll(e){if(await this.#read(),!e)return this.#cookies;let t=typeof e==`string`?e:e.name;return this.#cookies.filter(e=>e.name===t)??null}async set(e){await this.#read(),this.#cookies=this.#cookies.filter(t=>!(t.name===e.name&&t.domain===e.domain)),this.#cookies.push(e),await this.#write()}async delete(e){if(await this.#read(),!e)this.#cookies=[];else{let t=typeof e==`string`?e:e.name;this.#cookies=this.#cookies.filter(e=>e.name!==t)}}toString(){return this.#cookies.map(e=>`${e.name}=${e.value}`).join(`; `)}},Z=class{#impit;#agent;cookieStore;headers;#retryThreshold;#retryDelayMs;#failures=new Map;constructor(e={}){this.headers=new Headers,this.#retryThreshold=3,this.#retryDelayMs=1500,this.configure(e)}configure({proxyUrl:e,allowH2:t=!0,maxRedirections:n=3,maxRetries:r=3,cookieStore:i}={}){this.cookieStore=i??this.cookieStore??new X,this.#impit=new E({browser:`chrome`,ignoreTlsErrors:!0,proxyUrl:e,followRedirects:!0,maxRedirects:n});let{redirect:a,retry:o}=ue;e?this.#agent=new ce({uri:e,allowH2:t}).compose(a({maxRedirections:n}),o({maxRetries:r})):this.#agent=new se({allowH2:t}).compose(a({maxRedirections:n}),o({maxRetries:r}))}get retries(){return this.#retryThreshold}async fetch(e,t={}){let n=t.headers&&(t.headers instanceof Headers?t.headers.has(`User-Agent`):`User-Agent`in t.headers||`user-agent`in t.headers),r=this.appendHeaders(t?.headers||{}),i=await this.cookieStore.getAll(),a=i.filter(t=>!t.domain||new oe(e).hostname.includes(t.domain));for(let e of i)a.find(t=>t.name===e.name)||e.domain||a.push(e);let o=a.map(e=>`${e.name}=${e.value}`).join(`; `);r.has(`cookie`)?r.get(`cookie`)||r.delete(`cookie`):r.set(`cookie`,o);let s={...t,body:t?.body,headers:r};t&&(t.headers=r);let c=await(n?le(e,{...s,dispatcher:this.#agent}):this.withRetry(this.#impit.fetch.bind(this.#impit),e,s)),l=c.headers.getSetCookie();return l&&await this.setCookies(l),c}async withRetry(e,t,n){try{let r=await e(t.toString(),n),i=r.status===401,a=r.status>=300&&r.status<=399;return!(r.status>=200&&r.status<=299||a||i)&&this.#hasAttempts(t)?(await this.#nextRetry(t),W.debug(await r.text()),W.debug(String(r.status)),this.withRetry(e,t,n)):r}catch(r){let i=r;if(W.debug(i.stack),W.debug({input:t,init:{method:n?.method,headers:n?.headers,body:`...`}}),!this.#hasAttempts(t))throw r;return await this.#nextRetry(t),this.withRetry(e,t,n)}}async setCookies(e){let t=[];if(typeof e==`string`){let[n]=Y([e]);n&&t.push(n)}else if(Array.isArray(e)&&typeof e.at(0)==`string`){let n=Y(e);t.push(...n)}else Array.isArray(e)&&typeof e[0]!=`string`&&t.push(...e);if(!(!t||!t?.length))for(let e of t)await this.cookieStore.set(e)}appendHeaders(e){let t=new Headers(this.headers);for(let[n,r]of Object.entries(e))t.set(n,r);return t}#hasAttempts(e){return this.#getFailuresCount(e)<=this.#retryThreshold}#getFailuresCount(e){return this.#failures.get(e)||1}#addFailure(e){this.#failures.set(e,this.#getFailuresCount(e)+1)}async#nextRetry(e){let t=this.#getFailuresCount(e);t&&await new Promise(e=>setTimeout(e,this.#retryDelayMs)),this.#addFailure(e),W.debug(`Retry ${t}/${this.#retryThreshold}: ${String(e)}`)}setHeader(e,t){this.headers.set(e,t)}removeHeader(e){this.headers.delete(e)}setRetryCount(e){e>1&&(this.#retryThreshold=e)}};new Z;const{COMMON_CONTEXT:_e}=D,ve=(e,t=`Eval`,n)=>{try{return D.createScript(t,e,n)}catch(t){return console.debug(t),console.debug(e),console.error(`Syntax Error: ${t.message}`),null}},Q=(e,t=1)=>{if(Array.isArray(e)||typeof e==`string`){let n=[];for(let r=1;r<=t;r++)n.push(e[Math.floor(Math.random()*e.length)]);return n}else return[]},ye=e=>new(`default`in O?O.default:O)(e);var be=class{#store;constructor(e){this.#store=ye({cwd:o(e),configName:a(e,`.json`)})}get length(){return Object.keys(this.#store.store).length}clear(){this.#store.clear()}getItem(e){return this.#store.get(e)??null}key(e){return Object.keys(this.#store.store).at(e)??null}removeItem(e){this.#store.delete(e)}setItem(e,t){this.#store.set(e,t)}};const xe=new re,$=()=>{switch(c.type()){case`Darwin`:return`macOS`;case`Windows_NT`:return`Windows`;default:return`Linux`}};Object.defineProperties(Uint8Array.prototype,{toBase64:{value:function(){return Buffer.from(this).toString(`base64`)},writable:!0,configurable:!0},toHex:{value:function(){return Buffer.from(this).toString(`hex`)},writable:!0,configurable:!0}}),Object.defineProperties(Uint8Array,{fromBase64:{value:function(e){return new Uint8Array(Buffer.from(e,`base64`))},writable:!0,configurable:!0},fromHex:{value:function(e){return new Uint8Array(Buffer.from(e,`hex`))},writable:!0,configurable:!0}});const Se=new Map([[24,[`Sequoia`,`15`]],[23,[`Sonoma`,`14`]],[22,[`Ventura`,`13`]],[21,[`Monterey`,`12`]],[20,[`Big Sur`,`11`]],[19,[`Catalina`,`10.15`]],[18,[`Mojave`,`10.14`]],[17,[`High Sierra`,`10.13`]],[16,[`Sierra`,`10.12`]],[15,[`El Capitan`,`10.11`]],[14,[`Yosemite`,`10.10`]],[13,[`Mavericks`,`10.9`]],[12,[`Mountain Lion`,`10.8`]],[11,[`Lion`,`10.7`]],[10,[`Snow Leopard`,`10.6`]],[9,[`Leopard`,`10.5`]],[8,[`Tiger`,`10.4`]],[7,[`Panther`,`10.3`]],[6,[`Jaguar`,`10.2`]],[5,[`Puma`,`10.1`]]]),Ce=()=>{let e=Number(c.release().split(`.`)[0]),[t,n]=Se.get(e)||[`Unknown`,``];return{name:t,version:n}},we=()=>{switch($()){case`macOS`:return Ce().version;case`Windows`:return c.release();case`Linux`:return c.release()}},Te=()=>{let e=[{brand:`Azot`,version:k.version.split(`.`).slice(0,2).join(`.`)},{brand:`Node.js`,version:process.version.replace(`v`,``).split(`.`).slice(0,1).join(`.`)}];return{mobile:!1,platform:$(),brands:e,getHighEntropyValues:async t=>{let n={mobile:!1,platform:$(),brands:e};return t.includes(`architecture`)&&(n.architecture=c.arch()),t.includes(`platform`)&&(n.platform=$()),t.includes(`platformVersion`)&&(n.platformVersion=we()),t.includes(`fullVersionList`)&&(n.fullVersionList=[{brand:`Azot`,version:k.version},{brand:`Node.js`,version:process.version}]),n}}},Ee=({name:e=`extension`,dir:t=process.cwd(),title:n}={})=>{let r=M(s(t,e)),i=new be(s(r,`storage.json`)),a=new X({storagePath:s(r,`cookies.json`)}),o=new Z({cookieStore:a}),c=(e,t,n)=>e.split(t)[1]?.split(n)[0]?.trim(),l={sanitizeString:G,execUrlPatterns:K,extendEpisodes:q,between:c,getRandomElements:Q},u={defineExtension:e=>e,version:k.version,input:fe,sleep:f,sanitizeString:G,execUrlPatterns:K,extendEpisodes:q,between:c,getRandomElements:Q,utils:l,prompt:async e=>(!e.title&&n&&(e.title=n[0].toUpperCase()+n.slice(1)),await J.ask(e))};class d{get cookie(){return a.toString()}}let p={fetch:o.fetch.bind(o),Response,Request,Headers,AbortController,AbortSignal,URL,URLSearchParams,URLPattern,Blob,structuredClone,btoa,atob,TextEncoder,TextDecoder,Uint8Array,crypto,console:{log:console.log,info:W.info.bind(W),warn:W.warn.bind(W),error:(...e)=>{xe.emit(`error`,{message:e[0]}),W.error(...e)},trace:W.trace.bind(W),debug:W.debug.bind(W)},prompt:me,alert:e=>{W.warn(e)},Event,EventTarget,localStorage:i,cookieStore:a,document:new d,eval:e=>ve(e)?.exports,navigator:{appName:`Azot`,appVersion:k.version,platform:process.platform,userAgentData:Te()}};return{http:o,question:J,common:l,Streamyx:u,Azot:u,window:p,...p}};export{Ee as createContext};
@@ -0,0 +1,3 @@
1
+ const e=require(`./chunk-nOFOJqeH.js`);let t=require(`node:fs`);t=e.__toESM(t);let n=require(`node:path`);n=e.__toESM(n);let r=require(`node:os`);r=e.__toESM(r);let i=require(`node:timers/promises`);i=e.__toESM(i);let a=require(`node:fs/promises`);a=e.__toESM(a);let o=require(`@logtape/logtape`);o=e.__toESM(o);let s=require(`@logtape/file`);s=e.__toESM(s);let c=require(`@logtape/pretty`);c=e.__toESM(c);let l=require(`node:process`);l=e.__toESM(l),require(`urlpattern-polyfill`);let u=require(`node:events`);u=e.__toESM(u);let d=require(`node:readline/promises`);d=e.__toESM(d);let f=require(`node:url`);f=e.__toESM(f);let p=require(`undici`);p=e.__toESM(p);let m=require(`impit`);m=e.__toESM(m);let h=require(`metavm`);h=e.__toESM(h),require(`picocolors`),require(`nanospinner`);let g=require(`conf`);g=e.__toESM(g);var ee=`@azot/desktop`,_=`Azot`,v=`5.0.0-alpha.28`,y=`A powerful, extensible app for downloading videos`,b=`./out/main.js`,x=[`out`],S={start:`tsx --env-file .env ./src/main/cli.ts`,preview:`electron-vite preview --config vite.desktop.config.mjs`,dev:`electron-vite dev --config vite.desktop.config.mjs --watch`,test:`vitest`,coverage:`vitest run --coverage`,"bundle:lib":`tsdown`,"bundle:cli":`electron-vite build --config vite.cli.config.mjs`,bundle:`npm run bundle:cli && electron-vite build --config vite.desktop.config.mjs`,build:`npm run bundle && electron-builder build --config electron-builder.config.js`,"build:mac":`npm run bundle && electron-builder build --mac --arm64 --config electron-builder.config.js`,"build:mac:intel":`npm run bundle && electron-builder build --mac --x64 --config electron-builder.config.js`,"build:win":`npm run bundle && electron-builder build --win --config electron-builder.config.js`,"build:linux":`npm run bundle && electron-builder build --linux --config electron-builder.config.js`,"publish:desktop":`npm run bundle && electron-builder build --publish always --config electron-builder.config.js`,"publish:lib":`npm run bundle:lib && npm publish --tag alpha`,typecheck:`npm run typecheck:node && npm run typecheck:web`,"typecheck:node":`tsc --noEmit -p tsconfig.node.json --composite false`,"typecheck:web":`vue-tsc --noEmit -p tsconfig.web.json --composite false`,format:`prettier --write .`,lint:`eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts,.vue --fix`},C={node:`>=22`},te=[`darwin`,`linux`,`win32`],ne=[`azot`,`extensions`,`types`,`api`],re=`Vitaly Gashkov <vitalygashkov@vk.com>`,ie={type:`git`,url:`https://github.com/azot-labs/azot.git`},ae=`https://azot.so`,w=`README.md`,oe=[{type:`individual`,url:`https://t.me/tribute/app?startapp=dqW2`}],se={"@electron-toolkit/preload":`^3.0.2`,"@electron-toolkit/utils":`^4.0.0`,"@inquirer/prompts":`^7.8.3`,"@logtape/file":`^1.0.4`,"@logtape/logtape":`^1.0.4`,"@logtape/pretty":`^1.0.4`,"@tanstack/query-core":`^5.85.5`,"@tribute-tg/better-auth":`^2.1.1`,"@types/semver":`^7.7.1`,azot:`^0.9.3`,"better-auth":`^1.3.9`,bytenode:`^1.5.7`,conf:`^14.0.0`,"cross-spawn":`^7.0.6`,dasha:`3.1.9`,"electron-squirrel-startup":`^1.0.1`,"electron-updater":`^6.6.2`,impit:`^0.5.4`,"javascript-obfuscator":`^4.1.1`,mediabunny:`^1.23.0`,metavm:`^1.4.4`,molnia:`^0.1.6`,nanospinner:`^1.2.2`,okova:`^0.9.3`,open:`^10.2.0`,"p-queue":`^8.1.0`,picocolors:`^1.1.1`,semver:`^7.7.2`,"telegram-better-auth":`^0.0.6`,tsdown:`^0.14.2`,undici:`^7.15.0`,"urlpattern-polyfill":`^10.1.0`,yargs:`^18.0.0`,yauzl:`^3.2.0`},ce={"@electron-toolkit/eslint-config":`^2.1.0`,"@electron-toolkit/eslint-config-prettier":`^3.0.0`,"@electron-toolkit/eslint-config-ts":`^3.1.0`,"@electron-toolkit/tsconfig":`^1.0.1`,"@eslint/js":`^9.26.0`,"@iconify/vue":`^4.3.0`,"@intlify/unplugin-vue-i18n":`^6.0.8`,"@rushstack/eslint-patch":`^1.10.5`,"@tailwindcss/vite":`^4.1.12`,"@tanstack/vue-query":`^5.85.5`,"@types/node":`^24.3.0`,"@types/wicg-file-system-access":`^2023.10.5`,"@types/yargs":`^17.0.33`,"@vee-validate/zod":`^4.15.1`,"@vitejs/plugin-vue":`^6.0.1`,"@vue/eslint-config-prettier":`^10.2.0`,"@vue/eslint-config-typescript":`^14.5.0`,"@vueuse/core":`^13.7.0`,"class-variance-authority":`^0.7.1`,clsx:`^2.1.1`,dotenv:`^17.2.1`,electron:`38.1.2`,"electron-builder":`^26.0.12`,"electron-vite":`^4.0.1`,eslint:`^9.34.0`,"eslint-plugin-import":`^2.32.0`,"eslint-plugin-n":`^17.21.3`,"eslint-plugin-vue":`^10.4.0`,execa:`^9.6.0`,globals:`^16.3.0`,"lucide-vue-next":`^0.541.0`,"non.geist":`^1.0.4`,pinia:`^3.0.3`,postcss:`^8.5.6`,prettier:`^3.6.2`,"reka-ui":`^2.5.0`,rolldown:`^1.0.0-beta.39`,sass:`^1.90.0`,"tailwind-merge":`^3.3.1`,tailwindcss:`^4.1.12`,"tailwindcss-animate":`^1.0.7`,tsx:`^4.20.5`,typescript:`^5.9.2`,"vee-validate":`^4.15.1`,vite:`^7.1.3`,"vite-plugin-static-copy":`^3.1.2`,vitest:`^3.2.4`,vue:`^3.5.18`,"vue-eslint-parser":`^10.2.0`,"vue-i18n":`^11.1.11`,"vue-sonner":`^1.3.0`,"vue-tsc":`^3.0.7`,zod:`^3.25.42`},le={vitest:`>=3.2.0`},T={name:ee,productName:_,version:v,description:y,main:b,files:x,scripts:S,engines:C,os:te,keywords:ne,author:re,repository:ie,homepage:ae,readmeFilename:w,funding:oe,dependencies:se,devDependencies:ce,peerDependencies:le};const ue=`pkg`in process&&process.pkg!==void 0,E=!!process.versions.electron&&!1,D=!E,de=`v${T.version} ${l.platform}-${l.arch} node-${l.version}`,fe=`v${T.version}`,pe=T.name,O=T.productName,k={darwin:`macOS`,win32:`Windows`,linux:`Linux`},A=k[process.platform],j=e=>{let n=typeof e==`string`?e:e[A];return(0,t.existsSync)(n)||(0,t.mkdirSync)(n,{recursive:!0}),n},M=(0,r.homedir)(),N=(0,r.tmpdir)(),P=j({Windows:process.env.APPDATA||(0,n.join)(M,`AppData`,`Roaming`),macOS:(0,n.join)(M,`Library`,`Application Support`),Linux:process.env.XDG_DATA_HOME||(0,n.join)(M,`.local`,`share`)}),F=j({Windows:process.env.APPDATA||(0,n.join)(M,`AppData`,`Roaming`),macOS:(0,n.join)(M,`Library`,`Application Support`),Linux:process.env.XDG_CONFIG_HOME||(0,n.join)(M,`.config`)}),me=j({Windows:process.env.LOCALAPPDATA||(0,n.join)(M,`AppData`,`Local`),macOS:(0,n.join)(M,`Library`,`Caches`),Linux:process.env.XDG_CACHE_HOME||(0,n.join)(M,`.cache`)}),he=j({Windows:(0,n.join)(M,`Downloads`),macOS:(0,n.join)(M,`Downloads`),Linux:process.env.XDG_DOWNLOAD_DIR||(0,n.join)(M,`Downloads`)}),I=j({Windows:(0,n.join)(P,O),macOS:(0,n.join)(P,O),Linux:(0,n.join)(P,O.toLowerCase())}),L=j({Windows:(0,n.join)(F,O),macOS:(0,n.join)(F,O),Linux:(0,n.join)(F,O.toLowerCase())}),R=j({Windows:(0,n.join)(F,O,`logs`),macOS:(0,n.join)(M,`Library`,`Logs`,O),Linux:(0,n.join)(F,O.toLowerCase(),`logs`)}),ge=(0,n.join)(N,O.toLowerCase()),z=j((0,n.join)(I,`extensions`)),_e=j((0,n.join)(z,`installed`)),ve=j((0,n.join)(z,`work`)),ye=j((0,n.join)(z,`index.json`)),be=(0,n.join)(L,`settings.json`),B=process.argv.includes(`-d`)||process.argv.includes(`--debug`)||process.env.NODE_ENV_ELECTRON_VITE===`development`||!!process.env.ELECTRON_CLI_ARGS,V=()=>`Azot_${new Date().toISOString().split(`.`)[0].replace(`T`,`_`).replaceAll(`-`,``).replaceAll(`:`,``)}.log`,xe=()=>(0,n.join)(R,V()),H=(0,c.getPrettyFormatter)({timestamp:`time`,messageColor:null,messageStyle:null,levelStyle:null,icons:!1,colors:!0,level:`FULL`,categoryWidth:0,categoryStyle:null,categoryTruncate:`end`,wordWrap:!0});(0,o.configureSync)({sinks:{console:(0,o.withFilter)((0,o.getConsoleSink)({formatter:H}),B?`debug`:`info`),file:(0,s.getFileSink)(xe(),{flushInterval:0})},loggers:[{category:[],lowestLevel:`trace`,sinks:[`console`,`file`]},{category:[`logtape`,`meta`],lowestLevel:`error`,sinks:[`console`]}]});const U=(0,o.getLogger)([]),W=e=>{let t=[`}`,`{`,`%`,`>`,`<`,`^`,`;`,"`",`$`,`"`,`@`,`=`],n=e;for(let e in t)n=n.replaceAll(`/`,`_`).replaceAll(t[e],``);return n},G=(e,t,n)=>{let r={},i={};for(let a of n)for(let n of t){let t=new URLPattern(n,a).exec(e);t&&(Object.assign(r,t.pathname.groups),Object.assign(i,t.search.groups))}return{pathname:r,search:i}},K=(e=new Map)=>{let t=(t,n)=>{for(let r of e.keys())for(let i of e.get(r)||[]){let e=n===void 0||isNaN(n),a=t===void 0||isNaN(t),o=!1;if(o=a?r===n:(e?isNaN(r):r===n)&&i===t,o)return!0}return!1},n=(t,n)=>{let r=n||NaN,i=t||NaN;e.has(r)?e.get(r)?.add(i):e.set(r,new Set([i]))},r=()=>Array.from(e.values()).flatMap(e=>Array.from(e)),i=e.size,a=r(),o=a.length;return{items:e,has:t,set:n,getMin:()=>Math.min(...a),getMax:()=>Math.max(...a),seasonsCount:i,episodesCount:o}},Se=new Intl.DateTimeFormat(`en-US`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1}),Ce=new Intl.DateTimeFormat(`en-US`,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1});var we=class e extends u.EventEmitter{static requestEventName=`form`;static responseEventName=`form:response`;title;constructor(e={}){super(),this.title=e.title,D&&this.listen(async e=>{let t=(0,d.createInterface)({input:l.stdin,output:l.stdout}),{title:n,description:r,fields:a,...o}=e,s={};for(let[e,{label:c,type:l}]of Object.entries(a||o)){let a=l===`confirm`,o=[n,r,c].filter(Boolean).join(`. `)+(a?` (y/n)`:``)+`: `;s[e]=await Promise.race([t.question(o),(0,i.setTimeout)(Ee,``)])}return t.close(),s})}async ask(t){return new Promise(n=>{this.emit(e.requestEventName,t),this.addListener(e.responseEventName,e=>{n(e)})})}listen(t){this.addListener(e.requestEventName,async n=>{let r=await t(n);this.emit(e.responseEventName,r)})}};const q=new we,Te=async(e,t)=>{let n=t?.fields??{answer:{label:e}};return await q.ask({title:t?.title,description:e,fields:n})},Ee=12e4,De=(e,n)=>{(0,t.writeSync)(1,e||``);let r=Buffer.alloc(1),i=``;for(;;){try{(0,t.readSync)(0,r,0,1,null)}catch(e){if(e.code===`EOF`)break;throw e}let e=r.toString(`utf-8`);if(e===`
2
+ `||e===`\r`){if(e===`\r`)try{(0,t.readSync)(0,r,0,1,null),r.toString(`utf-8`)}catch(e){if(e.code===`EOF`)break;throw e}break}i+=e}return i.trim()||n},Oe=e=>{let t=e.expires instanceof Date?e.expires.getTime():e.expires,n;return e.sameSite===`Strict`?n=`strict`:e.sameSite===`Lax`&&(n=`lax`),{name:e.name,value:e.value,expires:t,domain:e.domain,path:e.path,sameSite:n,partitioned:!1,maxAge:e.maxAge,secure:e.secure,httpOnly:e.httpOnly,unparsed:e.unparsed}},J=e=>{let t=[];for(let n of e)try{let e=(0,p.parseCookie)(n);e&&t.push(Oe(e))}catch(e){U.debug(e)}return t},ke=async e=>{let t=await(0,a.readFile)(e,`utf8`).catch(()=>``);if(!t)return[];let n=t.split(r.EOL).flatMap(e=>e.split(`
3
+ `)).filter(e=>!!e.trim()&&!e.startsWith(`# `)).map(e=>e.split(` `)),i=[];for(let e of n){let[t,n,r,a,o,s,c]=e;i.push({name:s,value:c,expires:Number(o),maxAge:void 0,domain:t.replace(`#HttpOnly_`,``),path:r,secure:a===`TRUE`,httpOnly:void 0,sameSite:void 0,unparsed:e})}return i};var Y=class{#data={};#cookies;#storagePath;#hasBeenRead=!1;static parse(e){return J(e)}constructor({storagePath:e}={}){this.#storagePath=e,this.#cookies=[]}async import(e){(await(0,a.stat)(e).catch(()=>null))?.isFile()&&(this.#cookies=await ke(e),await(0,a.rm)(e,{recursive:!0,force:!0}))}async#read(){if(!(!this.#storagePath||this.#hasBeenRead)){if((await(0,a.stat)(this.#storagePath).catch(()=>null))?.isFile()){let e=await(0,a.readFile)(this.#storagePath,`utf8`);this.#data=e?JSON.parse(e):{},this.#cookies=`cookies`in this.#data?this.#data.cookies:[]}this.#hasBeenRead=!0}}async#write(){if(!this.#storagePath)return;let e=JSON.stringify({...this.#data,cookies:this.#cookies},null,2);await(0,a.writeFile)(this.#storagePath,e,`utf8`)}async get(e){await this.#read();let t=typeof e==`string`?e:e.name;return this.#cookies.find(e=>e.name===t)??null}async getAll(e){if(await this.#read(),!e)return this.#cookies;let t=typeof e==`string`?e:e.name;return this.#cookies.filter(e=>e.name===t)??null}async set(e){await this.#read(),this.#cookies=this.#cookies.filter(t=>!(t.name===e.name&&t.domain===e.domain)),this.#cookies.push(e),await this.#write()}async delete(e){if(await this.#read(),!e)this.#cookies=[];else{let t=typeof e==`string`?e:e.name;this.#cookies=this.#cookies.filter(e=>e.name!==t)}}toString(){return this.#cookies.map(e=>`${e.name}=${e.value}`).join(`; `)}},X=class{#impit;#agent;cookieStore;headers;#retryThreshold;#retryDelayMs;#failures=new Map;constructor(e={}){this.headers=new Headers,this.#retryThreshold=3,this.#retryDelayMs=1500,this.configure(e)}configure({proxyUrl:e,allowH2:t=!0,maxRedirections:n=3,maxRetries:r=3,cookieStore:i}={}){this.cookieStore=i??this.cookieStore??new Y,this.#impit=new m.Impit({browser:`chrome`,ignoreTlsErrors:!0,proxyUrl:e,followRedirects:!0,maxRedirects:n});let{redirect:a,retry:o}=p.interceptors;e?this.#agent=new p.ProxyAgent({uri:e,allowH2:t}).compose(a({maxRedirections:n}),o({maxRetries:r})):this.#agent=new p.Agent({allowH2:t}).compose(a({maxRedirections:n}),o({maxRetries:r}))}get retries(){return this.#retryThreshold}async fetch(e,t={}){let n=t.headers&&(t.headers instanceof Headers?t.headers.has(`User-Agent`):`User-Agent`in t.headers||`user-agent`in t.headers),r=this.appendHeaders(t?.headers||{}),i=await this.cookieStore.getAll(),a=i.filter(t=>!t.domain||new f.URL(e).hostname.includes(t.domain));for(let e of i)a.find(t=>t.name===e.name)||e.domain||a.push(e);let o=a.map(e=>`${e.name}=${e.value}`).join(`; `);r.has(`cookie`)?r.get(`cookie`)||r.delete(`cookie`):r.set(`cookie`,o);let s={...t,body:t?.body,headers:r};t&&(t.headers=r);let c=await(n?(0,p.fetch)(e,{...s,dispatcher:this.#agent}):this.withRetry(this.#impit.fetch.bind(this.#impit),e,s)),l=c.headers.getSetCookie();return l&&await this.setCookies(l),c}async withRetry(e,t,n){try{let r=await e(t.toString(),n),i=r.status===401,a=r.status>=300&&r.status<=399;return!(r.status>=200&&r.status<=299||a||i)&&this.#hasAttempts(t)?(await this.#nextRetry(t),U.debug(await r.text()),U.debug(String(r.status)),this.withRetry(e,t,n)):r}catch(r){let i=r;if(U.debug(i.stack),U.debug({input:t,init:{method:n?.method,headers:n?.headers,body:`...`}}),!this.#hasAttempts(t))throw r;return await this.#nextRetry(t),this.withRetry(e,t,n)}}async setCookies(e){let t=[];if(typeof e==`string`){let[n]=J([e]);n&&t.push(n)}else if(Array.isArray(e)&&typeof e.at(0)==`string`){let n=J(e);t.push(...n)}else Array.isArray(e)&&typeof e[0]!=`string`&&t.push(...e);if(!(!t||!t?.length))for(let e of t)await this.cookieStore.set(e)}appendHeaders(e){let t=new Headers(this.headers);for(let[n,r]of Object.entries(e))t.set(n,r);return t}#hasAttempts(e){return this.#getFailuresCount(e)<=this.#retryThreshold}#getFailuresCount(e){return this.#failures.get(e)||1}#addFailure(e){this.#failures.set(e,this.#getFailuresCount(e)+1)}async#nextRetry(e){let t=this.#getFailuresCount(e);t&&await new Promise(e=>setTimeout(e,this.#retryDelayMs)),this.#addFailure(e),U.debug(`Retry ${t}/${this.#retryThreshold}: ${String(e)}`)}setHeader(e,t){this.headers.set(e,t)}removeHeader(e){this.headers.delete(e)}setRetryCount(e){e>1&&(this.#retryThreshold=e)}};const Ae=new X,{COMMON_CONTEXT:je}=h.default,Me=(e,t=`Eval`,n)=>{try{return h.default.createScript(t,e,n)}catch(t){return console.debug(t),console.debug(e),console.error(`Syntax Error: ${t.message}`),null}},Z=(e,t=1)=>{if(Array.isArray(e)||typeof e==`string`){let n=[];for(let r=1;r<=t;r++)n.push(e[Math.floor(Math.random()*e.length)]);return n}else return[]},Ne=e=>new(`default`in g.default?g.default.default:g.default)(e);var Pe=class{#store;constructor(e){this.#store=Ne({cwd:(0,n.dirname)(e),configName:(0,n.basename)(e,`.json`)})}get length(){return Object.keys(this.#store.store).length}clear(){this.#store.clear()}getItem(e){return this.#store.get(e)??null}key(e){return Object.keys(this.#store.store).at(e)??null}removeItem(e){this.#store.delete(e)}setItem(e,t){this.#store.set(e,t)}};const Fe=new u.default,Q=()=>{switch(r.default.type()){case`Darwin`:return`macOS`;case`Windows_NT`:return`Windows`;default:return`Linux`}};Object.defineProperties(Uint8Array.prototype,{toBase64:{value:function(){return Buffer.from(this).toString(`base64`)},writable:!0,configurable:!0},toHex:{value:function(){return Buffer.from(this).toString(`hex`)},writable:!0,configurable:!0}}),Object.defineProperties(Uint8Array,{fromBase64:{value:function(e){return new Uint8Array(Buffer.from(e,`base64`))},writable:!0,configurable:!0},fromHex:{value:function(e){return new Uint8Array(Buffer.from(e,`hex`))},writable:!0,configurable:!0}});const Ie=new Map([[24,[`Sequoia`,`15`]],[23,[`Sonoma`,`14`]],[22,[`Ventura`,`13`]],[21,[`Monterey`,`12`]],[20,[`Big Sur`,`11`]],[19,[`Catalina`,`10.15`]],[18,[`Mojave`,`10.14`]],[17,[`High Sierra`,`10.13`]],[16,[`Sierra`,`10.12`]],[15,[`El Capitan`,`10.11`]],[14,[`Yosemite`,`10.10`]],[13,[`Mavericks`,`10.9`]],[12,[`Mountain Lion`,`10.8`]],[11,[`Lion`,`10.7`]],[10,[`Snow Leopard`,`10.6`]],[9,[`Leopard`,`10.5`]],[8,[`Tiger`,`10.4`]],[7,[`Panther`,`10.3`]],[6,[`Jaguar`,`10.2`]],[5,[`Puma`,`10.1`]]]),Le=()=>{let e=Number(r.default.release().split(`.`)[0]),[t,n]=Ie.get(e)||[`Unknown`,``];return{name:t,version:n}},Re=()=>{switch(Q()){case`macOS`:return Le().version;case`Windows`:return r.default.release();case`Linux`:return r.default.release()}},ze=()=>{let e=[{brand:`Azot`,version:T.version.split(`.`).slice(0,2).join(`.`)},{brand:`Node.js`,version:process.version.replace(`v`,``).split(`.`).slice(0,1).join(`.`)}];return{mobile:!1,platform:Q(),brands:e,getHighEntropyValues:async t=>{let n={mobile:!1,platform:Q(),brands:e};return t.includes(`architecture`)&&(n.architecture=r.default.arch()),t.includes(`platform`)&&(n.platform=Q()),t.includes(`platformVersion`)&&(n.platformVersion=Re()),t.includes(`fullVersionList`)&&(n.fullVersionList=[{brand:`Azot`,version:T.version},{brand:`Node.js`,version:process.version}]),n}}},$=({name:e=`extension`,dir:t=process.cwd(),title:r}={})=>{let a=j((0,n.join)(t,e)),o=new Pe((0,n.join)(a,`storage.json`)),s=new Y({storagePath:(0,n.join)(a,`cookies.json`)}),c=new X({cookieStore:s}),l=(e,t,n)=>e.split(t)[1]?.split(n)[0]?.trim(),u={sanitizeString:W,execUrlPatterns:G,extendEpisodes:K,between:l,getRandomElements:Z},d={defineExtension:e=>e,version:T.version,input:Te,sleep:i.setTimeout,sanitizeString:W,execUrlPatterns:G,extendEpisodes:K,between:l,getRandomElements:Z,utils:u,prompt:async e=>(!e.title&&r&&(e.title=r[0].toUpperCase()+r.slice(1)),await q.ask(e))};class f{get cookie(){return s.toString()}}let p={fetch:c.fetch.bind(c),Response,Request,Headers,AbortController,AbortSignal,URL,URLSearchParams,URLPattern,Blob,structuredClone,btoa,atob,TextEncoder,TextDecoder,Uint8Array,crypto,console:{log:console.log,info:U.info.bind(U),warn:U.warn.bind(U),error:(...e)=>{Fe.emit(`error`,{message:e[0]}),U.error(...e)},trace:U.trace.bind(U),debug:U.debug.bind(U)},prompt:De,alert:e=>{U.warn(e)},Event,EventTarget,localStorage:o,cookieStore:s,document:new f,eval:e=>Me(e)?.exports,navigator:{appName:`Azot`,appVersion:T.version,platform:process.platform,userAgentData:ze()}};return{http:c,question:q,common:u,Streamyx:d,Azot:d,window:p,...p}};Object.defineProperty(exports,`createContext`,{enumerable:!0,get:function(){return $}});
@@ -0,0 +1 @@
1
+ const e=require(`./context-DtwTOZVR.js`);exports.createContext=e.createContext;
@@ -0,0 +1 @@
1
+ import{createContext as e}from"./context-DHWGgddt.mjs";export{e as createContext};
@@ -1 +1 @@
1
- const e=`Streamyx`in globalThis?globalThis.Streamyx:{},t=`Azot`in globalThis?globalThis.Azot:{};if(!globalThis.Azot&&globalThis.Streamyx&&(globalThis.Azot=globalThis.Streamyx),globalThis.Azot&&!globalThis.Azot.input){let e=async(e,t)=>{let n=t?.fields??{answer:{label:e}},r=await globalThis.Azot.prompt.ask({title:t?.title,description:e,fields:n});return r};globalThis.Azot.input=e}var n={...e,...t};module.exports=n;
1
+ const e=`Streamyx`in globalThis?globalThis.Streamyx:{},t=`Azot`in globalThis?globalThis.Azot:{};if(!globalThis.Azot&&globalThis.Streamyx&&(globalThis.Azot=globalThis.Streamyx),globalThis.Azot&&!globalThis.Azot.input){let e=async(e,t)=>{let n=t?.fields??{answer:{label:e}};return await globalThis.Azot.prompt.ask({title:t?.title,description:e,fields:n})};globalThis.Azot.input=e}var n={...e,...t};module.exports=n;
@@ -1 +1 @@
1
- const e=`Streamyx`in globalThis?globalThis.Streamyx:{},t=`Azot`in globalThis?globalThis.Azot:{};if(!globalThis.Azot&&globalThis.Streamyx&&(globalThis.Azot=globalThis.Streamyx),globalThis.Azot&&!globalThis.Azot.input){let e=async(e,t)=>{let n=t?.fields??{answer:{label:e}},r=await globalThis.Azot.prompt.ask({title:t?.title,description:e,fields:n});return r};globalThis.Azot.input=e}var n={...e,...t};export{n as default};
1
+ const e=`Streamyx`in globalThis?globalThis.Streamyx:{},t=`Azot`in globalThis?globalThis.Azot:{};if(!globalThis.Azot&&globalThis.Streamyx&&(globalThis.Azot=globalThis.Streamyx),globalThis.Azot&&!globalThis.Azot.input){let e=async(e,t)=>{let n=t?.fields??{answer:{label:e}};return await globalThis.Azot.prompt.ask({title:t?.title,description:e,fields:n})};globalThis.Azot.input=e}var n={...e,...t};export{n as default};
package/dist/vitest.js ADDED
@@ -0,0 +1 @@
1
+ const e=require(`./chunk-nOFOJqeH.js`),t=require(`./context-DtwTOZVR.js`);let n=require(`vitest`);n=e.__toESM(n),n.vi.mock(`azot`,()=>{let e=t.createContext();return Object.entries(e).forEach(([e,t])=>{n.vi.stubGlobal(e,t)}),e.Azot});
@@ -1 +1 @@
1
- import{createContext as e}from"./context-DTSYpvwR.mjs";import{vi as t}from"vitest";t.mock(`azot`,()=>{let n=e();return Object.entries(n).forEach(([e,n])=>{t.stubGlobal(e,n)}),n.Azot});export{};
1
+ import{createContext as e}from"./context-DHWGgddt.mjs";import{vi as t}from"vitest";t.mock(`azot`,()=>{let n=e();return Object.entries(n).forEach(([e,n])=>{t.stubGlobal(e,n)}),n.Azot});export{};
package/package.json CHANGED
@@ -1,159 +1,88 @@
1
1
  {
2
2
  "name": "azot",
3
- "productName": "Azot",
4
- "version": "5.0.0-alpha.3",
5
- "main": "./out/main.js",
3
+ "version": "5.0.0-alpha.5",
4
+ "description": "Build extensions for Azot with Node.js",
5
+ "homepage": "https://developers.azot.so",
6
+ "main": "./dist/main.js",
6
7
  "types": "./types/main.d.ts",
7
8
  "exports": {
8
9
  ".": {
9
10
  "types": "./types/main.d.ts",
10
- "import": "./out/main.js",
11
- "require": "./out/main.js"
11
+ "import": "./dist/main.js",
12
+ "require": "./dist/main.js"
12
13
  },
13
14
  "./context": {
14
15
  "types": "./types/context.d.ts",
15
- "import": "./out/context.js",
16
- "require": "./out/context.js"
16
+ "import": "./dist/context.js",
17
+ "require": "./dist/context.js"
17
18
  },
18
19
  "./vitest": {
19
- "import": "./out/vitest.mjs",
20
- "require": "./out/vitest.js"
20
+ "import": "./dist/vitest.mjs",
21
+ "require": "./dist/vitest.js"
21
22
  }
22
23
  },
23
24
  "bin": {
24
- "azt": "out/azt.js"
25
+ "azt": "./dist/cli.js"
25
26
  },
26
27
  "files": [
27
- "out",
28
- "azot.d.ts",
29
- "types",
30
- ".npmrc"
28
+ "dist",
29
+ "types"
31
30
  ],
32
- "author": "Vitaly Gashkov <vitalygashkov@vk.com>",
33
- "description": "A powerful, extensible app for downloading videos",
34
- "repository": {
35
- "type": "git",
36
- "url": "https://github.com/azot-labs/azot.git"
37
- },
38
- "homepage": "https://azot.so",
39
31
  "scripts": {
40
- "start": "tsx --env-file .env ./src/main/cli.ts",
41
- "preview": "electron-vite preview --config vite.desktop.config.mjs",
42
- "dev": "electron-vite dev --config vite.desktop.config.mjs --watch",
43
- "test": "vitest",
44
- "coverage": "vitest run --coverage",
45
- "bundle:lib": "tsdown",
46
- "bundle:cli": "electron-vite build --config vite.cli.config.mjs",
47
- "bundle": "npm run bundle:cli && electron-vite build --config vite.desktop.config.mjs",
48
- "build": "npm run bundle && electron-builder build --config electron-builder.config.js",
49
- "build:mac": "npm run bundle && electron-builder build --mac --config electron-builder.config.js",
50
- "build:win": "npm run bundle && electron-builder build --win --config electron-builder.config.js",
51
- "build:linux": "npm run bundle && electron-builder build --linux --config electron-builder.config.js",
52
- "publish:desktop": "npm run bundle && electron-builder build --publish always --config electron-builder.config.js",
53
- "publish:lib": "npm run bundle:lib && npm publish --tag alpha",
54
- "typecheck": "npm run typecheck:node && npm run typecheck:web",
55
- "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
56
- "typecheck:web": "vue-tsc --noEmit -p tsconfig.web.json --composite false",
57
- "format": "prettier --write .",
58
- "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts,.vue --fix"
32
+ "dev": "tsdown --watch",
33
+ "build": "tsdown",
34
+ "lint": "eslint . && prettier --check .",
35
+ "fix": "eslint . --fix && prettier --write ."
59
36
  },
60
- "engines": {
61
- "node": "22"
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "git+https://github.com/azot-labs/extensions.git"
62
40
  },
63
- "os": [
64
- "darwin",
65
- "linux",
66
- "win32"
41
+ "keywords": [
42
+ "azot",
43
+ "extensions",
44
+ "types",
45
+ "api"
67
46
  ],
47
+ "bugs": {
48
+ "url": "https://github.com/azot-labs/extensions/issues",
49
+ "email": "vitalygashkov@vk.com"
50
+ },
51
+ "author": "Vitaly Gashkov <vitalygashkov@vk.com>",
52
+ "license": "MIT",
53
+ "readmeFilename": "README.md",
68
54
  "funding": [
69
55
  {
70
56
  "type": "individual",
71
57
  "url": "https://t.me/tribute/app?startapp=dqW2"
72
58
  }
73
59
  ],
60
+ "engines": {
61
+ "node": ">=22"
62
+ },
74
63
  "dependencies": {
75
- "@electron-toolkit/preload": "^3.0.2",
76
- "@electron-toolkit/utils": "^4.0.0",
77
- "@inquirer/prompts": "^7.8.3",
78
- "@logtape/file": "^1.0.4",
79
- "@logtape/logtape": "^1.0.4",
80
- "@logtape/pretty": "^1.0.4",
81
- "@tanstack/query-core": "^5.85.5",
82
- "@tribute-tg/better-auth": "^1.0.9",
83
- "better-auth": "^1.3.7",
84
- "bytenode": "^1.5.7",
85
- "conf": "^14.0.0",
86
- "cross-spawn": "^7.0.6",
87
- "dasha": "3.1.8",
88
- "electron-squirrel-startup": "^1.0.1",
89
- "electron-updater": "^6.6.2",
64
+ "@logtape/file": "^1.1.1",
65
+ "@logtape/logtape": "^1.1.1",
66
+ "@logtape/pretty": "^1.1.1",
67
+ "conf": "^15.0.2",
90
68
  "impit": "^0.5.4",
91
69
  "javascript-obfuscator": "^4.1.1",
92
- "metavm": "^1.4.4",
93
- "molnia": "^0.1.5",
70
+ "metavm": "^1.4.5",
94
71
  "nanospinner": "^1.2.2",
95
- "okova": "^0.9.3",
96
- "p-queue": "^8.1.0",
97
- "picocolors": "^1.1.1",
98
- "tsdown": "^0.14.2",
99
- "undici": "^7.15.0",
100
- "urlpattern-polyfill": "^10.1.0",
101
- "yargs": "^18.0.0",
102
- "yauzl": "^3.2.0"
72
+ "tsdown": "^0.15.6",
73
+ "undici": "^7.16.0",
74
+ "urlpattern-polyfill": "^10.1.0"
103
75
  },
104
76
  "devDependencies": {
105
- "@electron-toolkit/eslint-config": "^2.1.0",
106
- "@electron-toolkit/eslint-config-prettier": "^3.0.0",
107
- "@electron-toolkit/eslint-config-ts": "^3.1.0",
108
- "@electron-toolkit/tsconfig": "^1.0.1",
109
- "@eslint/js": "^9.26.0",
110
- "@iconify/vue": "^4.3.0",
111
- "@intlify/unplugin-vue-i18n": "^6.0.8",
112
- "@rushstack/eslint-patch": "^1.10.5",
113
- "@tailwindcss/vite": "^4.1.12",
114
- "@tanstack/vue-query": "^5.85.5",
115
- "@types/node": "^24.3.0",
116
- "@types/wicg-file-system-access": "^2023.10.5",
117
- "@types/yargs": "^17.0.33",
118
- "@vee-validate/zod": "^4.15.1",
119
- "@vitejs/plugin-vue": "^6.0.1",
120
- "@vue/eslint-config-prettier": "^10.2.0",
121
- "@vue/eslint-config-typescript": "^14.5.0",
122
- "@vueuse/core": "^13.7.0",
123
- "class-variance-authority": "^0.7.1",
124
- "clsx": "^2.1.1",
125
- "dotenv": "^17.2.1",
126
- "electron": "37.3.1",
127
- "electron-builder": "^26.0.12",
128
- "electron-vite": "^4.0.0",
129
- "eslint": "^9.34.0",
130
- "eslint-plugin-import": "^2.32.0",
131
- "eslint-plugin-n": "^17.21.3",
132
- "eslint-plugin-vue": "^10.4.0",
133
- "execa": "^9.6.0",
134
- "globals": "^16.3.0",
135
- "lucide-vue-next": "^0.541.0",
136
- "non.geist": "^1.0.4",
137
- "pinia": "^3.0.3",
138
- "postcss": "^8.5.6",
77
+ "@eslint/js": "^9.37.0",
78
+ "@types/node": "^24.7.0",
79
+ "dasha": "^3.1.9",
80
+ "eslint": "^9.37.0",
81
+ "eslint-config-prettier": "^10.1.8",
82
+ "eslint-plugin-prettier": "^5.5.4",
83
+ "globals": "^16.4.0",
139
84
  "prettier": "^3.6.2",
140
- "reka-ui": "^2.4.1",
141
- "sass": "^1.90.0",
142
- "tailwind-merge": "^3.3.1",
143
- "tailwindcss": "^4.1.12",
144
- "tailwindcss-animate": "^1.0.7",
145
- "tsx": "^4.20.5",
146
- "typescript": "^5.9.2",
147
- "vee-validate": "^4.15.1",
148
- "vite": "^7.1.3",
149
- "vite-plugin-static-copy": "^3.1.2",
150
- "vitest": "^3.2.4",
151
- "vue": "^3.5.18",
152
- "vue-eslint-parser": "^10.2.0",
153
- "vue-i18n": "^11.1.11",
154
- "vue-sonner": "^1.3.0",
155
- "vue-tsc": "^3.0.6",
156
- "zod": "^3.25.42"
85
+ "typescript": "^5.9.3"
157
86
  },
158
87
  "peerDependencies": {
159
88
  "vitest": ">=3.2.0"
@@ -86,7 +86,7 @@ export type Options = {
86
86
  skipSubtitles?: boolean;
87
87
  skipMux?: boolean;
88
88
 
89
- experimentalSelectTracks?: boolean;
89
+ select?: boolean;
90
90
 
91
91
  episodes?: Map<number, Set<number>>;
92
92
  retry?: number;
package/out/azt.js DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- const e=require(`./chunk-nOFOJqeH.js`),t=e.__toESM(require(`node:util`)),n=e.__toESM(require(`node:fs`)),r=e.__toESM(require(`node:path`)),i=e.__toESM(require(`tsdown`)),a=e.__toESM(require(`node:crypto`)),o=e.__toESM(require(`javascript-obfuscator`)),s=Buffer.from(`STX`,`utf8`),c=(e,t,r)=>{let i=(0,a.randomBytes)(32),o=(0,a.randomBytes)(16),c=(0,n.readFileSync)(t),l=(0,a.createCipheriv)(`aes-256-cbc`,i,o),u=Buffer.concat([l.update(c),l.final()]),d=(0,a.publicEncrypt)(e,i),f=Buffer.concat([s,o,d,u]);return r&&(0,n.writeFileSync)(r,f),{aesIv:o,encryptedAesKey:d,encryptedCode:u}},l=(e,t,r)=>{let i=(0,n.readFileSync)(t),o=s.byteLength,c=i.subarray(0,o);if(!c.equals(s))throw Error(`Incorrect file format`);let l=o,u=l+16,d=u+512,f=i.subarray(l,u),p=i.subarray(u,d),m=i.subarray(d),h=(0,a.privateDecrypt)(e,p),g=(0,a.createDecipheriv)(`aes-256-cbc`,h,f),_=Buffer.concat([g.update(m),g.final()]),v=_.toString(`utf8`);return r&&(0,n.writeFileSync)(r,v),v},u=(e,t)=>{let r=(0,n.readFileSync)(e,`utf8`);console.log(`Obfuscating...`),console.time(`Obfuscation complete in`);let i=o.default.obfuscate(r,{target:`node`,compact:!0,controlFlowFlattening:!0,controlFlowFlatteningThreshold:1,deadCodeInjection:!0,debugProtection:!0,identifierNamesGenerator:`hexadecimal`,numbersToExpressions:!0,selfDefending:!0,simplify:!0,splitStrings:!0,splitStringsChunkLength:5,stringArray:!0,stringArrayCallsTransform:!0,stringArrayCallsTransformThreshold:1,stringArrayEncoding:[`base64`],stringArrayIndexShift:!0,stringArrayRotate:!0,stringArrayShuffle:!0,stringArrayWrappersCount:2,stringArrayWrappersChainedCalls:!0,stringArrayWrappersType:`function`,stringArrayThreshold:1,transformObjectKeys:!0,unicodeEscapeSequence:!1});console.timeEnd(`Obfuscation complete in`);let a=i.getObfuscatedCode();return(0,n.writeFileSync)(t||e,a),a},d=(0,t.parseArgs)({allowPositionals:!0,allowNegative:!0,options:{input:{type:`string`,short:`i`,description:`Path to the input file`},key:{type:`string`,short:`k`,description:`Path to the key file (public for encrypt, private for decrypt)`},output:{type:`string`,short:`o`,description:`Path to the output file`},format:{type:`string`,short:`f`,description:`Output format`},watch:{type:`boolean`,description:`Watch file changes`},minify:{type:`boolean`,description:`Minify output`},obfuscate:{type:`boolean`,description:`Obfuscate output`},encrypt:{type:`boolean`,description:`Encrypt extension source code (.js will be packed inside .stx)`},decrypt:{type:`boolean`,description:`Decrypt encrypted extension`}}}),f=()=>{let e=[process.cwd(),r.default.join(process.cwd(),`src`),r.default.join(process.cwd(),`lib`)];for(let t of e){let e=(0,n.readdirSync)(t),i=e.filter(e=>!e.endsWith(`.d.ts`)).filter(e=>new Set([`.ts`,`.js`]).has(r.default.extname(e))),a=e=>r.default.basename(e,r.default.extname(e)),o=i.find(e=>a(e)===`index`)||i.find(e=>a(e)===`main`)||i[0];if(o)return r.default.join(t,o)}};(async()=>{let[e,...t]=d.positionals,a=d.values.input||t[0]||f();if(!a)throw Error(`No entry file found`);if(e===`build`||e===`pack`){let t=typeof d.values.minify==`boolean`?d.values.minify:!0;await(0,i.build)({entry:a,format:d.values.format??`cjs`,platform:`node`,target:`node22`,watch:d.values.watch,minify:t}),d.values.input=r.default.join(process.cwd(),`dist`,r.default.basename(a).replace(/\.ts$/,`.js`));let o=require(r.default.join(process.cwd(),`package.json`)),s=typeof d.values.obfuscate==`boolean`,l=s?d.values.obfuscate:o.private;l&&u(d.values.input,d.values.input);let f=d.values.encrypt||e===`pack`;if(f){let e=(0,n.readFileSync)(d.values.key||r.default.join(__dirname,`../public.pem`),`utf8`),t=d.values.output||d.values.input.replace(/\.js$/,`-${o.version}.stx`);c(e,d.values.input,t),(0,n.rmSync)(d.values.input)}}else if(e===`decrypt`){let e=(0,n.readFileSync)(d.values.key||r.default.join(__dirname,`../private.pem`),`utf8`),t=d.values.output||a.replace(/\.stx$/,`.js`);l(e,a,t),d.values.input&&(0,n.rmSync)(d.values.input)}else if(e===`dev`||e===`develop`||!e){let e=typeof d.values.minify==`boolean`?d.values.minify:!1;await(0,i.build)({entry:a,format:d.values.format??`cjs`,platform:`node`,target:`node20`,watch:!0,minify:e})}})();
package/out/azt.mjs DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{createRequire as e}from"node:module";import{parseArgs as t}from"node:util";import{readFileSync as n,readdirSync as r,rmSync as i,writeFileSync as a}from"node:fs";import o from"node:path";import{build as s}from"tsdown";import{createCipheriv as c,createDecipheriv as l,privateDecrypt as u,publicEncrypt as d,randomBytes as f}from"node:crypto";import p from"javascript-obfuscator";var m=e(import.meta.url);const h=Buffer.from(`STX`,`utf8`),g=(e,t,r)=>{let i=f(32),o=f(16),s=n(t),l=c(`aes-256-cbc`,i,o),u=Buffer.concat([l.update(s),l.final()]),p=d(e,i),m=Buffer.concat([h,o,p,u]);return r&&a(r,m),{aesIv:o,encryptedAesKey:p,encryptedCode:u}},_=(e,t,r)=>{let i=n(t),o=h.byteLength,s=i.subarray(0,o);if(!s.equals(h))throw Error(`Incorrect file format`);let c=o,d=c+16,f=d+512,p=i.subarray(c,d),m=i.subarray(d,f),g=i.subarray(f),_=u(e,m),v=l(`aes-256-cbc`,_,p),y=Buffer.concat([v.update(g),v.final()]),b=y.toString(`utf8`);return r&&a(r,b),b},v=(e,t)=>{let r=n(e,`utf8`);console.log(`Obfuscating...`),console.time(`Obfuscation complete in`);let i=p.obfuscate(r,{target:`node`,compact:!0,controlFlowFlattening:!0,controlFlowFlatteningThreshold:1,deadCodeInjection:!0,debugProtection:!0,identifierNamesGenerator:`hexadecimal`,numbersToExpressions:!0,selfDefending:!0,simplify:!0,splitStrings:!0,splitStringsChunkLength:5,stringArray:!0,stringArrayCallsTransform:!0,stringArrayCallsTransformThreshold:1,stringArrayEncoding:[`base64`],stringArrayIndexShift:!0,stringArrayRotate:!0,stringArrayShuffle:!0,stringArrayWrappersCount:2,stringArrayWrappersChainedCalls:!0,stringArrayWrappersType:`function`,stringArrayThreshold:1,transformObjectKeys:!0,unicodeEscapeSequence:!1});console.timeEnd(`Obfuscation complete in`);let o=i.getObfuscatedCode();return a(t||e,o),o},y=t({allowPositionals:!0,allowNegative:!0,options:{input:{type:`string`,short:`i`,description:`Path to the input file`},key:{type:`string`,short:`k`,description:`Path to the key file (public for encrypt, private for decrypt)`},output:{type:`string`,short:`o`,description:`Path to the output file`},format:{type:`string`,short:`f`,description:`Output format`},watch:{type:`boolean`,description:`Watch file changes`},minify:{type:`boolean`,description:`Minify output`},obfuscate:{type:`boolean`,description:`Obfuscate output`},encrypt:{type:`boolean`,description:`Encrypt extension source code (.js will be packed inside .stx)`},decrypt:{type:`boolean`,description:`Decrypt encrypted extension`}}}),b=()=>{let e=[process.cwd(),o.join(process.cwd(),`src`),o.join(process.cwd(),`lib`)];for(let t of e){let e=r(t),n=e.filter(e=>!e.endsWith(`.d.ts`)).filter(e=>new Set([`.ts`,`.js`]).has(o.extname(e))),i=e=>o.basename(e,o.extname(e)),a=n.find(e=>i(e)===`index`)||n.find(e=>i(e)===`main`)||n[0];if(a)return o.join(t,a)}};(async()=>{let[e,...t]=y.positionals,r=y.values.input||t[0]||b();if(!r)throw Error(`No entry file found`);if(e===`build`||e===`pack`){let t=typeof y.values.minify==`boolean`?y.values.minify:!0;await s({entry:r,format:y.values.format??`cjs`,platform:`node`,target:`node22`,watch:y.values.watch,minify:t}),y.values.input=o.join(process.cwd(),`dist`,o.basename(r).replace(/\.ts$/,`.js`));let a=m(o.join(process.cwd(),`package.json`)),c=typeof y.values.obfuscate==`boolean`,l=c?y.values.obfuscate:a.private;l&&v(y.values.input,y.values.input);let u=y.values.encrypt||e===`pack`;if(u){let e=n(y.values.key||o.join(__dirname,`../public.pem`),`utf8`),t=y.values.output||y.values.input.replace(/\.js$/,`-${a.version}.stx`);g(e,y.values.input,t),i(y.values.input)}}else if(e===`decrypt`){let e=n(y.values.key||o.join(__dirname,`../private.pem`),`utf8`),t=y.values.output||r.replace(/\.stx$/,`.js`);_(e,r,t),y.values.input&&i(y.values.input)}else if(e===`dev`||e===`develop`||!e){let e=typeof y.values.minify==`boolean`?y.values.minify:!1;await s({entry:r,format:y.values.format??`cjs`,platform:`node`,target:`node20`,watch:!0,minify:e})}})();export{};
@@ -1,3 +0,0 @@
1
- import{existsSync as e,mkdirSync as t,readSync as n,writeSync as r}from"node:fs";import i,{basename as a,dirname as o,join as s}from"node:path";import c,{EOL as l,homedir as u,tmpdir as d}from"node:os";import{setTimeout as f}from"node:timers/promises";import{readFile as p,rm as m,stat as h,writeFile as g}from"node:fs/promises";import{configureSync as te,getConsoleSink as ne,getLogger as re,withFilter as ie}from"@logtape/logtape";import{getFileSink as ae}from"@logtape/file";import{getPrettyFormatter as oe}from"@logtape/pretty";import{arch as se,platform as ce,stdin as le,stdout as ue,version as de}from"node:process";import"urlpattern-polyfill";import{EventEmitter as fe}from"node:events";import{createInterface as pe}from"node:readline/promises";import{URL as me}from"node:url";import{Agent as he,ProxyAgent as ge,fetch as _e,interceptors as ve,parseCookie as ye}from"undici";import{Impit as _}from"impit";import v from"metavm";import"picocolors";import"nanospinner";import y from"conf";var b=`azot`,x=`Azot`,S=`5.0.0-alpha.3`,C=`./out/main.js`,w=`./types/main.d.ts`,exports={".":{types:`./types/main.d.ts`,import:`./out/main.js`,require:`./out/main.js`},"./context":{types:`./types/context.d.ts`,import:`./out/context.js`,require:`./out/context.js`},"./vitest":{import:`./out/vitest.mjs`,require:`./out/vitest.js`}},T={azt:`out/azt.js`},E=[`out`,`azot.d.ts`,`types`,`.npmrc`],D=`Vitaly Gashkov <vitalygashkov@vk.com>`,O=`A powerful, extensible app for downloading videos`,k={type:`git`,url:`https://github.com/azot-labs/azot.git`},A=`https://azot.so`,j={start:`tsx --env-file .env ./src/main/cli.ts`,preview:`electron-vite preview --config vite.desktop.config.mjs`,dev:`electron-vite dev --config vite.desktop.config.mjs --watch`,test:`vitest`,coverage:`vitest run --coverage`,"bundle:lib":`tsdown`,"bundle:cli":`electron-vite build --config vite.cli.config.mjs`,bundle:`npm run bundle:cli && electron-vite build --config vite.desktop.config.mjs`,build:`npm run bundle && electron-builder build --config electron-builder.config.js`,"build:mac":`npm run bundle && electron-builder build --mac --config electron-builder.config.js`,"build:win":`npm run bundle && electron-builder build --win --config electron-builder.config.js`,"build:linux":`npm run bundle && electron-builder build --linux --config electron-builder.config.js`,"publish:desktop":`npm run bundle && electron-builder build --publish always --config electron-builder.config.js`,"publish:lib":`npm run bundle:lib && npm publish --tag alpha`,typecheck:`npm run typecheck:node && npm run typecheck:web`,"typecheck:node":`tsc --noEmit -p tsconfig.node.json --composite false`,"typecheck:web":`vue-tsc --noEmit -p tsconfig.web.json --composite false`,format:`prettier --write .`,lint:`eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts,.vue --fix`},M={node:`22`},N=[`darwin`,`linux`,`win32`],P=[{type:`individual`,url:`https://t.me/tribute/app?startapp=dqW2`}],F={"@electron-toolkit/preload":`^3.0.2`,"@electron-toolkit/utils":`^4.0.0`,"@inquirer/prompts":`^7.8.3`,"@logtape/file":`^1.0.4`,"@logtape/logtape":`^1.0.4`,"@logtape/pretty":`^1.0.4`,"@tanstack/query-core":`^5.85.5`,"@tribute-tg/better-auth":`^1.0.9`,"better-auth":`^1.3.7`,bytenode:`^1.5.7`,conf:`^14.0.0`,"cross-spawn":`^7.0.6`,dasha:`3.1.8`,"electron-squirrel-startup":`^1.0.1`,"electron-updater":`^6.6.2`,impit:`^0.5.4`,"javascript-obfuscator":`^4.1.1`,metavm:`^1.4.4`,molnia:`^0.1.5`,nanospinner:`^1.2.2`,okova:`^0.9.3`,"p-queue":`^8.1.0`,picocolors:`^1.1.1`,tsdown:`^0.14.2`,undici:`^7.15.0`,"urlpattern-polyfill":`^10.1.0`,yargs:`^18.0.0`,yauzl:`^3.2.0`},be={"@electron-toolkit/eslint-config":`^2.1.0`,"@electron-toolkit/eslint-config-prettier":`^3.0.0`,"@electron-toolkit/eslint-config-ts":`^3.1.0`,"@electron-toolkit/tsconfig":`^1.0.1`,"@eslint/js":`^9.26.0`,"@iconify/vue":`^4.3.0`,"@intlify/unplugin-vue-i18n":`^6.0.8`,"@rushstack/eslint-patch":`^1.10.5`,"@tailwindcss/vite":`^4.1.12`,"@tanstack/vue-query":`^5.85.5`,"@types/node":`^24.3.0`,"@types/wicg-file-system-access":`^2023.10.5`,"@types/yargs":`^17.0.33`,"@vee-validate/zod":`^4.15.1`,"@vitejs/plugin-vue":`^6.0.1`,"@vue/eslint-config-prettier":`^10.2.0`,"@vue/eslint-config-typescript":`^14.5.0`,"@vueuse/core":`^13.7.0`,"class-variance-authority":`^0.7.1`,clsx:`^2.1.1`,dotenv:`^17.2.1`,electron:`37.3.1`,"electron-builder":`^26.0.12`,"electron-vite":`^4.0.0`,eslint:`^9.34.0`,"eslint-plugin-import":`^2.32.0`,"eslint-plugin-n":`^17.21.3`,"eslint-plugin-vue":`^10.4.0`,execa:`^9.6.0`,globals:`^16.3.0`,"lucide-vue-next":`^0.541.0`,"non.geist":`^1.0.4`,pinia:`^3.0.3`,postcss:`^8.5.6`,prettier:`^3.6.2`,"reka-ui":`^2.4.1`,sass:`^1.90.0`,"tailwind-merge":`^3.3.1`,tailwindcss:`^4.1.12`,"tailwindcss-animate":`^1.0.7`,tsx:`^4.20.5`,typescript:`^5.9.2`,"vee-validate":`^4.15.1`,vite:`^7.1.3`,"vite-plugin-static-copy":`^3.1.2`,vitest:`^3.2.4`,vue:`^3.5.18`,"vue-eslint-parser":`^10.2.0`,"vue-i18n":`^11.1.11`,"vue-sonner":`^1.3.0`,"vue-tsc":`^3.0.6`,zod:`^3.25.42`},xe={vitest:`>=3.2.0`},I={name:b,productName:x,version:S,main:C,types:w,exports,bin:T,files:E,author:D,description:O,repository:k,homepage:A,scripts:j,engines:M,os:N,funding:P,dependencies:F,devDependencies:be,peerDependencies:xe};`pkg`in process&&process.pkg;const Se=!!process.versions.electron&&!1,Ce=!Se;`${I.version}${ce}${se}${de}`,`${I.version}`,I.name;const L=I.productName,we={darwin:`macOS`,win32:`Windows`,linux:`Linux`},Te=we[process.platform],R=n=>{let r=typeof n==`string`?n:n[Te];return e(r)||t(r,{recursive:!0}),r},z=u(),Ee=d(),B=R({Windows:process.env.APPDATA||s(z,`AppData`,`Roaming`),macOS:s(z,`Library`,`Application Support`),Linux:process.env.XDG_DATA_HOME||s(z,`.local`,`share`)}),V=R({Windows:process.env.APPDATA||s(z,`AppData`,`Roaming`),macOS:s(z,`Library`,`Application Support`),Linux:process.env.XDG_CONFIG_HOME||s(z,`.config`)});R({Windows:process.env.LOCALAPPDATA||s(z,`AppData`,`Local`),macOS:s(z,`Library`,`Caches`),Linux:process.env.XDG_CACHE_HOME||s(z,`.cache`)}),R({Windows:s(z,`Downloads`),macOS:s(z,`Downloads`),Linux:process.env.XDG_DOWNLOAD_DIR||s(z,`Downloads`)});const De=R({Windows:s(B,L),macOS:s(B,L),Linux:s(B,L.toLowerCase())}),Oe=R({Windows:s(V,L),macOS:s(V,L),Linux:s(V,L.toLowerCase())}),ke=R({Windows:s(V,L,`logs`),macOS:s(z,`Library`,`Logs`,L),Linux:s(V,L.toLowerCase(),`logs`)});s(Ee,L.toLowerCase());const H=R(s(De,`extensions`));R(s(H,`installed`)),R(s(H,`work`)),s(Oe,`settings.json`);const Ae=process.argv.includes(`-d`)||process.argv.includes(`--debug`)||process.env.NODE_ENV_ELECTRON_VITE===`development`||!!process.env.ELECTRON_CLI_ARGS,je=()=>{let e=new Date().toISOString().split(`.`)[0].replace(`T`,`_`).replaceAll(`-`,``).replaceAll(`:`,``);return`Azot_${e}.log`},Me=()=>s(ke,je()),Ne=oe({timestamp:`time`,levelStyle:null,icons:!1,colors:!0,level:`FULL`,categoryWidth:0,categoryStyle:null,categoryTruncate:`end`,wordWrap:!0});te({sinks:{console:ie(ne({formatter:Ne}),Ae?`debug`:`info`),file:ae(Me(),{flushInterval:0})},loggers:[{category:[],lowestLevel:`trace`,sinks:[`console`,`file`]},{category:[`logtape`,`meta`],lowestLevel:`error`,sinks:[`console`]}]});const U=re([]),W=e=>{let t=[`}`,`{`,`%`,`>`,`<`,`^`,`;`,"`",`$`,`"`,`@`,`=`],n=e;for(let e in t)n=n.replaceAll(`/`,`_`).replaceAll(t[e],``);return n},G=(e,t,n)=>{let r={},i={};for(let a of n)for(let n of t){let t=new URLPattern(n,a),o=t.exec(e);o&&(Object.assign(r,o.pathname.groups),Object.assign(i,o.search.groups))}return{pathname:r,search:i}},K=(e=new Map)=>{let t=(t,n)=>{for(let r of e.keys())for(let i of e.get(r)||[]){let e=n===void 0||isNaN(n),a=t===void 0||isNaN(t),o=!1;if(o=a?r===n:(e?isNaN(r):r===n)&&i===t,o)return!0}return!1},n=(t,n)=>{let r=n||NaN,i=t||NaN;e.has(r)?e.get(r)?.add(i):e.set(r,new Set([i]))},r=()=>Array.from(e.values()).flatMap(e=>Array.from(e)),i=e.size,a=r(),o=a.length,s=()=>Math.min(...a),c=()=>Math.max(...a);return{items:e,has:t,set:n,getMin:s,getMax:c,seasonsCount:i,episodesCount:o}};new Intl.DateTimeFormat(`en-US`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1}),new Intl.DateTimeFormat(`en-US`,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1});var Pe=class e extends fe{static{this.requestEventName=`form`}static{this.responseEventName=`form:response`}constructor(){super(),Ce&&this.listen(async e=>{let t=pe({input:le,output:ue}),{title:n,description:r,fields:i,...a}=e,o={};for(let[e,{label:s,type:c}]of Object.entries(i||a)){let i=c===`confirm`,a=[n,r,s].filter(Boolean).join(`. `)+(i?` (y/n)`:``)+`: `,l=await Promise.race([t.question(a),f(J,``)]);o[e]=l}return t.close(),o})}async ask(t){let n=new Promise(n=>{this.emit(e.requestEventName,t),this.addListener(e.responseEventName,e=>{n(e)})});return n}listen(t){this.addListener(e.requestEventName,async n=>{let r=await t(n);this.emit(e.responseEventName,r)})}};const q=new Pe,Fe=async(e,t)=>{let n=t?.fields??{answer:{label:e}},r=await q.ask({title:t?.title,description:e,fields:n});return r},J=12e4,Ie=(e,t)=>{r(1,e||``);let i=Buffer.alloc(1),a=``;for(;;){try{n(0,i,0,1,null)}catch(e){if(e.code===`EOF`)break;throw e}let e=i.toString(`utf-8`);if(e===`
2
- `||e===`\r`){if(e===`\r`)try{n(0,i,0,1,null),i.toString(`utf-8`)}catch(e){if(e.code===`EOF`)break;throw e}break}a+=e}return a.trim()||t},Le=e=>{let t=e.expires instanceof Date?e.expires.getTime():e.expires,n;return e.sameSite===`Strict`?n=`strict`:e.sameSite===`Lax`&&(n=`lax`),{name:e.name,value:e.value,expires:t,domain:e.domain,path:e.path,sameSite:n,partitioned:!1,maxAge:e.maxAge,secure:e.secure,httpOnly:e.httpOnly,unparsed:e.unparsed}},Y=e=>{let t=[];for(let n of e)try{let e=ye(n);e&&t.push(Le(e))}catch(e){U.debug(e)}return t},Re=async e=>{let t=await p(e,`utf8`).catch(()=>``);if(!t)return[];let n=t.split(l).flatMap(e=>e.split(`
3
- `)),r=n.filter(e=>!!e.trim()&&!e.startsWith(`# `)),i=r.map(e=>e.split(` `)),a=[];for(let e of i){let[t,n,r,i,o,s,c]=e;a.push({name:s,value:c,expires:Number(o),maxAge:void 0,domain:t.replace(`#HttpOnly_`,``),path:r,secure:i===`TRUE`,httpOnly:void 0,sameSite:void 0,unparsed:e})}return a};var X=class{#data={};#cookies;#storagePath;#hasBeenRead=!1;static parse(e){return Y(e)}constructor({storagePath:e}={}){this.#storagePath=e,this.#cookies=[]}async import(e){let t=await h(e).catch(()=>null);t?.isFile()&&(this.#cookies=await Re(e),await m(e,{recursive:!0,force:!0}))}async#read(){if(!this.#storagePath||this.#hasBeenRead)return;let e=await h(this.#storagePath).catch(()=>null);if(e?.isFile()){let e=await p(this.#storagePath,`utf8`);this.#data=e?JSON.parse(e):{},this.#cookies=`cookies`in this.#data?this.#data.cookies:[]}this.#hasBeenRead=!0}async#write(){if(!this.#storagePath)return;let e=JSON.stringify({...this.#data,cookies:this.#cookies},null,2);await g(this.#storagePath,e,`utf8`)}async get(e){await this.#read();let t=typeof e==`string`?e:e.name;return this.#cookies.find(e=>e.name===t)??null}async getAll(e){if(await this.#read(),!e)return this.#cookies;let t=typeof e==`string`?e:e.name;return this.#cookies.filter(e=>e.name===t)??null}async set(e){await this.#read(),this.#cookies=this.#cookies.filter(t=>!(t.name===e.name&&t.domain===e.domain)),this.#cookies.push(e),await this.#write()}async delete(e){if(await this.#read(),!e)this.#cookies=[];else{let t=typeof e==`string`?e:e.name;this.#cookies=this.#cookies.filter(e=>e.name!==t)}}toString(){return this.#cookies.map(e=>`${e.name}=${e.value}`).join(`; `)}},Z=class{#impit;#agent;#retryThreshold;#retryDelayMs;#failures=new Map;constructor(e={}){this.headers=new Headers,this.#retryThreshold=3,this.#retryDelayMs=1500,this.configure(e)}configure({proxyUrl:e,allowH2:t=!0,maxRedirections:n=3,maxRetries:r=3,cookieStore:i}={}){this.cookieStore=i??this.cookieStore??new X,this.#impit=new _({browser:`chrome`,ignoreTlsErrors:!0,proxyUrl:e,followRedirects:!0,maxRedirects:n});let{redirect:a,retry:o}=ve;e?this.#agent=new ge({uri:e,allowH2:t}).compose(a({maxRedirections:n}),o({maxRetries:r})):this.#agent=new he({allowH2:t}).compose(a({maxRedirections:n}),o({maxRetries:r}))}get retries(){return this.#retryThreshold}async fetch(e,t={}){let n=t.headers&&(t.headers instanceof Headers?t.headers.has(`User-Agent`):`User-Agent`in t.headers),r=this.appendHeaders(t?.headers||{}),i=await this.cookieStore.getAll(),a=i.filter(t=>!t.domain||new me(e).hostname.includes(t.domain));for(let e of i){let t=a.find(t=>t.name===e.name);if(t)continue;e.domain||a.push(e)}let o=a.map(e=>`${e.name}=${e.value}`).join(`; `);r.has(`cookie`)?r.get(`cookie`)||r.delete(`cookie`):r.set(`cookie`,o);let s={...t,body:t?.body,headers:r};t&&(t.headers=r);let c=await(n?_e(e,{...s,dispatcher:this.#agent}):this.withRetry(this.#impit.fetch.bind(this.#impit),e,s)),l=c.headers.getSetCookie();return l&&await this.setCookies(l),c}async withRetry(e,t,n){try{let r=await e(t,n),i=r.status>=300&&r.status<=399,a=r.status>=200&&r.status<=299||i;return!a&&this.#hasAttempts(t)?(await this.#nextRetry(t),U.debug(await r.text()),U.debug(String(r.status)),this.withRetry(e,t,n)):r}catch(r){let i=r;if(U.debug(i.stack),U.debug({input:t,init:{method:n?.method,headers:n?.headers,body:`...`}}),!this.#hasAttempts(t))throw r;return await this.#nextRetry(t),this.withRetry(e,t,n)}}async setCookies(e){let t=[];if(typeof e==`string`){let[n]=Y([e]);n&&t.push(n)}else if(Array.isArray(e)&&typeof e.at(0)==`string`){let n=Y(e);t.push(...n)}else Array.isArray(e)&&typeof e[0]!=`string`&&t.push(...e);if(!(!t||!t?.length))for(let e of t)await this.cookieStore.set(e)}appendHeaders(e){let t=new Headers(this.headers);for(let[n,r]of Object.entries(e))t.set(n,r);return t}#hasAttempts(e){return this.#getFailuresCount(e)<=this.#retryThreshold}#getFailuresCount(e){return this.#failures.get(e)||1}#addFailure(e){this.#failures.set(e,this.#getFailuresCount(e)+1)}async#nextRetry(e){let t=this.#getFailuresCount(e);t&&await new Promise(e=>setTimeout(e,this.#retryDelayMs)),this.#addFailure(e),U.debug(`Retry ${t}/${this.#retryThreshold}: ${String(e)}`)}setHeader(e,t){this.headers.set(e,t)}removeHeader(e){this.headers.delete(e)}setRetryCount(e){e>1&&(this.#retryThreshold=e)}};new Z;const{COMMON_CONTEXT:ze}=v,Be=(e,t=`Eval`)=>{try{let n=v.createScript(t,e);return n}catch(e){return console.error(`Syntax Error: ${e.message}`),null}},Q=(e,t=1)=>{if(Array.isArray(e)||typeof e==`string`){let n=[];for(let r=1;r<=t;r++)n.push(e[Math.floor(Math.random()*e.length)]);return n}else return[]},Ve=e=>{let t=`default`in y?y.default:y;return new t(e)};var He=class{#store;constructor({storagePath:e}){this.#store=Ve({cwd:o(e),configName:a(e,`.json`)})}get length(){return Object.keys(this.#store.store).length}clear(){this.#store.clear()}getItem(e){return this.#store.get(e)??null}key(e){return Object.keys(this.#store.store).at(e)??null}removeItem(e){this.#store.delete(e)}setItem(e,t){this.#store.set(e,t)}};const $=()=>{switch(c.type()){case`Darwin`:return`macOS`;case`Windows_NT`:return`Windows`;default:return`Linux`}};Object.defineProperties(Uint8Array.prototype,{toBase64:{value:function(){return Buffer.from(this).toString(`base64`)},writable:!0,configurable:!0},toHex:{value:function(){return Buffer.from(this).toString(`hex`)},writable:!0,configurable:!0}}),Object.defineProperties(Uint8Array,{fromBase64:{value:function(e){return new Uint8Array(Buffer.from(e,`base64`))},writable:!0,configurable:!0},fromHex:{value:function(e){return new Uint8Array(Buffer.from(e,`hex`))},writable:!0,configurable:!0}});const Ue=new Map([[24,[`Sequoia`,`15`]],[23,[`Sonoma`,`14`]],[22,[`Ventura`,`13`]],[21,[`Monterey`,`12`]],[20,[`Big Sur`,`11`]],[19,[`Catalina`,`10.15`]],[18,[`Mojave`,`10.14`]],[17,[`High Sierra`,`10.13`]],[16,[`Sierra`,`10.12`]],[15,[`El Capitan`,`10.11`]],[14,[`Yosemite`,`10.10`]],[13,[`Mavericks`,`10.9`]],[12,[`Mountain Lion`,`10.8`]],[11,[`Lion`,`10.7`]],[10,[`Snow Leopard`,`10.6`]],[9,[`Leopard`,`10.5`]],[8,[`Tiger`,`10.4`]],[7,[`Panther`,`10.3`]],[6,[`Jaguar`,`10.2`]],[5,[`Puma`,`10.1`]]]),We=()=>{let e=Number(c.release().split(`.`)[0]),[t,n]=Ue.get(e)||[`Unknown`,``];return{name:t,version:n}},Ge=()=>{switch($()){case`macOS`:return We().version;case`Windows`:return c.release();case`Linux`:return c.release()}},Ke=()=>{let e=[{brand:`Azot`,version:I.version.split(`.`).slice(0,2).join(`.`)},{brand:`Node.js`,version:process.version.replace(`v`,``).split(`.`).slice(0,1).join(`.`)}];return{mobile:!1,platform:$(),brands:e,getHighEntropyValues:async t=>{let n={mobile:!1,platform:$(),brands:e};return t.includes(`architecture`)&&(n.architecture=c.arch()),t.includes(`platform`)&&(n.platform=$()),t.includes(`platformVersion`)&&(n.platformVersion=Ge()),t.includes(`fullVersionList`)&&(n.fullVersionList=[{brand:`Azot`,version:I.version},{brand:`Node.js`,version:process.version}]),n}}},qe=({name:e=`extension`,dir:t=process.cwd()}={})=>{let n=R(s(t,e)),r=new He({storagePath:s(n,`storage.json`)}),i=new X({storagePath:s(n,`cookies.json`)}),a=new Z({cookieStore:i}),o=(e,t,n)=>e.split(t)[1]?.split(n)[0]?.trim(),c={sanitizeString:W,execUrlPatterns:G,extendEpisodes:K,between:o,getRandomElements:Q},l={defineExtension:e=>e,version:I.version,input:Fe,sleep:f,sanitizeString:W,execUrlPatterns:G,extendEpisodes:K,between:o,getRandomElements:Q,utils:c,prompt:q.ask.bind(q)};class u{get cookie(){return i.toString()}}let d={fetch:a.fetch.bind(a),Response,Request,Headers,AbortController,AbortSignal,URL,URLSearchParams,URLPattern,Blob,structuredClone,btoa,atob,TextEncoder,TextDecoder,Uint8Array,crypto,console:Object.assign(U,{log:console.log}),prompt:Ie,alert:e=>{U.warn(e)},Event,EventTarget,localStorage:r,cookieStore:i,document:new u,eval:e=>Be(e)?.exports,navigator:{appName:`Azot`,appVersion:I.version,platform:process.platform,userAgentData:Ke()}},p={http:a,question:q,common:c,Streamyx:l,Azot:l,window:d,...d};return p};export{qe as createContext};
@@ -1,3 +0,0 @@
1
- const e=require(`./chunk-nOFOJqeH.js`),t=e.__toESM(require(`node:fs`)),n=e.__toESM(require(`node:path`)),r=e.__toESM(require(`node:os`)),i=e.__toESM(require(`node:timers/promises`)),a=e.__toESM(require(`node:fs/promises`)),o=e.__toESM(require(`@logtape/logtape`)),s=e.__toESM(require(`@logtape/file`)),c=e.__toESM(require(`@logtape/pretty`)),l=e.__toESM(require(`node:process`));require(`urlpattern-polyfill`);const u=e.__toESM(require(`node:events`)),d=e.__toESM(require(`node:readline/promises`)),f=e.__toESM(require(`node:url`)),p=e.__toESM(require(`undici`)),m=e.__toESM(require(`impit`)),h=e.__toESM(require(`metavm`));require(`picocolors`),require(`nanospinner`);const g=e.__toESM(require(`conf`));var _=`azot`,v=`Azot`,y=`5.0.0-alpha.3`,ee=`./out/main.js`,te=`./types/main.d.ts`,ne={".":{types:`./types/main.d.ts`,import:`./out/main.js`,require:`./out/main.js`},"./context":{types:`./types/context.d.ts`,import:`./out/context.js`,require:`./out/context.js`},"./vitest":{import:`./out/vitest.mjs`,require:`./out/vitest.js`}},re={azt:`out/azt.js`},ie=[`out`,`azot.d.ts`,`types`,`.npmrc`],b=`Vitaly Gashkov <vitalygashkov@vk.com>`,x=`A powerful, extensible app for downloading videos`,S={type:`git`,url:`https://github.com/azot-labs/azot.git`},C=`https://azot.so`,w={start:`tsx --env-file .env ./src/main/cli.ts`,preview:`electron-vite preview --config vite.desktop.config.mjs`,dev:`electron-vite dev --config vite.desktop.config.mjs --watch`,test:`vitest`,coverage:`vitest run --coverage`,"bundle:lib":`tsdown`,"bundle:cli":`electron-vite build --config vite.cli.config.mjs`,bundle:`npm run bundle:cli && electron-vite build --config vite.desktop.config.mjs`,build:`npm run bundle && electron-builder build --config electron-builder.config.js`,"build:mac":`npm run bundle && electron-builder build --mac --config electron-builder.config.js`,"build:win":`npm run bundle && electron-builder build --win --config electron-builder.config.js`,"build:linux":`npm run bundle && electron-builder build --linux --config electron-builder.config.js`,"publish:desktop":`npm run bundle && electron-builder build --publish always --config electron-builder.config.js`,"publish:lib":`npm run bundle:lib && npm publish --tag alpha`,typecheck:`npm run typecheck:node && npm run typecheck:web`,"typecheck:node":`tsc --noEmit -p tsconfig.node.json --composite false`,"typecheck:web":`vue-tsc --noEmit -p tsconfig.web.json --composite false`,format:`prettier --write .`,lint:`eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts,.vue --fix`},ae={node:`22`},oe=[`darwin`,`linux`,`win32`],se=[{type:`individual`,url:`https://t.me/tribute/app?startapp=dqW2`}],ce={"@electron-toolkit/preload":`^3.0.2`,"@electron-toolkit/utils":`^4.0.0`,"@inquirer/prompts":`^7.8.3`,"@logtape/file":`^1.0.4`,"@logtape/logtape":`^1.0.4`,"@logtape/pretty":`^1.0.4`,"@tanstack/query-core":`^5.85.5`,"@tribute-tg/better-auth":`^1.0.9`,"better-auth":`^1.3.7`,bytenode:`^1.5.7`,conf:`^14.0.0`,"cross-spawn":`^7.0.6`,dasha:`3.1.8`,"electron-squirrel-startup":`^1.0.1`,"electron-updater":`^6.6.2`,impit:`^0.5.4`,"javascript-obfuscator":`^4.1.1`,metavm:`^1.4.4`,molnia:`^0.1.5`,nanospinner:`^1.2.2`,okova:`^0.9.3`,"p-queue":`^8.1.0`,picocolors:`^1.1.1`,tsdown:`^0.14.2`,undici:`^7.15.0`,"urlpattern-polyfill":`^10.1.0`,yargs:`^18.0.0`,yauzl:`^3.2.0`},le={"@electron-toolkit/eslint-config":`^2.1.0`,"@electron-toolkit/eslint-config-prettier":`^3.0.0`,"@electron-toolkit/eslint-config-ts":`^3.1.0`,"@electron-toolkit/tsconfig":`^1.0.1`,"@eslint/js":`^9.26.0`,"@iconify/vue":`^4.3.0`,"@intlify/unplugin-vue-i18n":`^6.0.8`,"@rushstack/eslint-patch":`^1.10.5`,"@tailwindcss/vite":`^4.1.12`,"@tanstack/vue-query":`^5.85.5`,"@types/node":`^24.3.0`,"@types/wicg-file-system-access":`^2023.10.5`,"@types/yargs":`^17.0.33`,"@vee-validate/zod":`^4.15.1`,"@vitejs/plugin-vue":`^6.0.1`,"@vue/eslint-config-prettier":`^10.2.0`,"@vue/eslint-config-typescript":`^14.5.0`,"@vueuse/core":`^13.7.0`,"class-variance-authority":`^0.7.1`,clsx:`^2.1.1`,dotenv:`^17.2.1`,electron:`37.3.1`,"electron-builder":`^26.0.12`,"electron-vite":`^4.0.0`,eslint:`^9.34.0`,"eslint-plugin-import":`^2.32.0`,"eslint-plugin-n":`^17.21.3`,"eslint-plugin-vue":`^10.4.0`,execa:`^9.6.0`,globals:`^16.3.0`,"lucide-vue-next":`^0.541.0`,"non.geist":`^1.0.4`,pinia:`^3.0.3`,postcss:`^8.5.6`,prettier:`^3.6.2`,"reka-ui":`^2.4.1`,sass:`^1.90.0`,"tailwind-merge":`^3.3.1`,tailwindcss:`^4.1.12`,"tailwindcss-animate":`^1.0.7`,tsx:`^4.20.5`,typescript:`^5.9.2`,"vee-validate":`^4.15.1`,vite:`^7.1.3`,"vite-plugin-static-copy":`^3.1.2`,vitest:`^3.2.4`,vue:`^3.5.18`,"vue-eslint-parser":`^10.2.0`,"vue-i18n":`^11.1.11`,"vue-sonner":`^1.3.0`,"vue-tsc":`^3.0.6`,zod:`^3.25.42`},T={vitest:`>=3.2.0`},E={name:_,productName:v,version:y,main:ee,types:te,exports:ne,bin:re,files:ie,author:b,description:x,repository:S,homepage:C,scripts:w,engines:ae,os:oe,funding:se,dependencies:ce,devDependencies:le,peerDependencies:T};const ue=`pkg`in process&&process.pkg!==void 0,D=!!process.versions.electron&&!1,O=!D,de=`v${E.version} ${l.platform}-${l.arch} node-${l.version}`,fe=`v${E.version}`,pe=E.name,k=E.productName,A={darwin:`macOS`,win32:`Windows`,linux:`Linux`},j=A[process.platform],M=e=>{let n=typeof e==`string`?e:e[j];return(0,t.existsSync)(n)||(0,t.mkdirSync)(n,{recursive:!0}),n},N=(0,r.homedir)(),P=(0,r.tmpdir)(),F=M({Windows:process.env.APPDATA||(0,n.join)(N,`AppData`,`Roaming`),macOS:(0,n.join)(N,`Library`,`Application Support`),Linux:process.env.XDG_DATA_HOME||(0,n.join)(N,`.local`,`share`)}),I=M({Windows:process.env.APPDATA||(0,n.join)(N,`AppData`,`Roaming`),macOS:(0,n.join)(N,`Library`,`Application Support`),Linux:process.env.XDG_CONFIG_HOME||(0,n.join)(N,`.config`)}),me=M({Windows:process.env.LOCALAPPDATA||(0,n.join)(N,`AppData`,`Local`),macOS:(0,n.join)(N,`Library`,`Caches`),Linux:process.env.XDG_CACHE_HOME||(0,n.join)(N,`.cache`)}),he=M({Windows:(0,n.join)(N,`Downloads`),macOS:(0,n.join)(N,`Downloads`),Linux:process.env.XDG_DOWNLOAD_DIR||(0,n.join)(N,`Downloads`)}),L=M({Windows:(0,n.join)(F,k),macOS:(0,n.join)(F,k),Linux:(0,n.join)(F,k.toLowerCase())}),R=M({Windows:(0,n.join)(I,k),macOS:(0,n.join)(I,k),Linux:(0,n.join)(I,k.toLowerCase())}),z=M({Windows:(0,n.join)(I,k,`logs`),macOS:(0,n.join)(N,`Library`,`Logs`,k),Linux:(0,n.join)(I,k.toLowerCase(),`logs`)}),ge=(0,n.join)(P,k.toLowerCase()),B=M((0,n.join)(L,`extensions`)),_e=M((0,n.join)(B,`installed`)),ve=M((0,n.join)(B,`work`)),ye=(0,n.join)(R,`settings.json`),V=process.argv.includes(`-d`)||process.argv.includes(`--debug`)||process.env.NODE_ENV_ELECTRON_VITE===`development`||!!process.env.ELECTRON_CLI_ARGS,be=()=>{let e=new Date().toISOString().split(`.`)[0].replace(`T`,`_`).replaceAll(`-`,``).replaceAll(`:`,``);return`Azot_${e}.log`},H=()=>(0,n.join)(z,be()),U=(0,c.getPrettyFormatter)({timestamp:`time`,levelStyle:null,icons:!1,colors:!0,level:`FULL`,categoryWidth:0,categoryStyle:null,categoryTruncate:`end`,wordWrap:!0});(0,o.configureSync)({sinks:{console:(0,o.withFilter)((0,o.getConsoleSink)({formatter:U}),V?`debug`:`info`),file:(0,s.getFileSink)(H(),{flushInterval:0})},loggers:[{category:[],lowestLevel:`trace`,sinks:[`console`,`file`]},{category:[`logtape`,`meta`],lowestLevel:`error`,sinks:[`console`]}]});const W=(0,o.getLogger)([]),G=e=>{let t=[`}`,`{`,`%`,`>`,`<`,`^`,`;`,"`",`$`,`"`,`@`,`=`],n=e;for(let e in t)n=n.replaceAll(`/`,`_`).replaceAll(t[e],``);return n},K=(e,t,n)=>{let r={},i={};for(let a of n)for(let n of t){let t=new URLPattern(n,a),o=t.exec(e);o&&(Object.assign(r,o.pathname.groups),Object.assign(i,o.search.groups))}return{pathname:r,search:i}},q=(e=new Map)=>{let t=(t,n)=>{for(let r of e.keys())for(let i of e.get(r)||[]){let e=n===void 0||isNaN(n),a=t===void 0||isNaN(t),o=!1;if(o=a?r===n:(e?isNaN(r):r===n)&&i===t,o)return!0}return!1},n=(t,n)=>{let r=n||NaN,i=t||NaN;e.has(r)?e.get(r)?.add(i):e.set(r,new Set([i]))},r=()=>Array.from(e.values()).flatMap(e=>Array.from(e)),i=e.size,a=r(),o=a.length,s=()=>Math.min(...a),c=()=>Math.max(...a);return{items:e,has:t,set:n,getMin:s,getMax:c,seasonsCount:i,episodesCount:o}},xe=new Intl.DateTimeFormat(`en-US`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1}),Se=new Intl.DateTimeFormat(`en-US`,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1});var Ce=class e extends u.EventEmitter{static{this.requestEventName=`form`}static{this.responseEventName=`form:response`}constructor(){super(),O&&this.listen(async e=>{let t=(0,d.createInterface)({input:l.stdin,output:l.stdout}),{title:n,description:r,fields:a,...o}=e,s={};for(let[e,{label:c,type:l}]of Object.entries(a||o)){let a=l===`confirm`,o=[n,r,c].filter(Boolean).join(`. `)+(a?` (y/n)`:``)+`: `,u=await Promise.race([t.question(o),(0,i.setTimeout)(Te,``)]);s[e]=u}return t.close(),s})}async ask(t){let n=new Promise(n=>{this.emit(e.requestEventName,t),this.addListener(e.responseEventName,e=>{n(e)})});return n}listen(t){this.addListener(e.requestEventName,async n=>{let r=await t(n);this.emit(e.responseEventName,r)})}};const J=new Ce,we=async(e,t)=>{let n=t?.fields??{answer:{label:e}},r=await J.ask({title:t?.title,description:e,fields:n});return r},Te=12e4,Ee=(e,n)=>{(0,t.writeSync)(1,e||``);let r=Buffer.alloc(1),i=``;for(;;){try{(0,t.readSync)(0,r,0,1,null)}catch(e){if(e.code===`EOF`)break;throw e}let e=r.toString(`utf-8`);if(e===`
2
- `||e===`\r`){if(e===`\r`)try{(0,t.readSync)(0,r,0,1,null),r.toString(`utf-8`)}catch(e){if(e.code===`EOF`)break;throw e}break}i+=e}return i.trim()||n},De=e=>{let t=e.expires instanceof Date?e.expires.getTime():e.expires,n;return e.sameSite===`Strict`?n=`strict`:e.sameSite===`Lax`&&(n=`lax`),{name:e.name,value:e.value,expires:t,domain:e.domain,path:e.path,sameSite:n,partitioned:!1,maxAge:e.maxAge,secure:e.secure,httpOnly:e.httpOnly,unparsed:e.unparsed}},Y=e=>{let t=[];for(let n of e)try{let e=(0,p.parseCookie)(n);e&&t.push(De(e))}catch(e){W.debug(e)}return t},Oe=async e=>{let t=await(0,a.readFile)(e,`utf8`).catch(()=>``);if(!t)return[];let n=t.split(r.EOL).flatMap(e=>e.split(`
3
- `)),i=n.filter(e=>!!e.trim()&&!e.startsWith(`# `)),o=i.map(e=>e.split(` `)),s=[];for(let e of o){let[t,n,r,i,a,o,c]=e;s.push({name:o,value:c,expires:Number(a),maxAge:void 0,domain:t.replace(`#HttpOnly_`,``),path:r,secure:i===`TRUE`,httpOnly:void 0,sameSite:void 0,unparsed:e})}return s};var X=class{#data={};#cookies;#storagePath;#hasBeenRead=!1;static parse(e){return Y(e)}constructor({storagePath:e}={}){this.#storagePath=e,this.#cookies=[]}async import(e){let t=await(0,a.stat)(e).catch(()=>null);t?.isFile()&&(this.#cookies=await Oe(e),await(0,a.rm)(e,{recursive:!0,force:!0}))}async#read(){if(!this.#storagePath||this.#hasBeenRead)return;let e=await(0,a.stat)(this.#storagePath).catch(()=>null);if(e?.isFile()){let e=await(0,a.readFile)(this.#storagePath,`utf8`);this.#data=e?JSON.parse(e):{},this.#cookies=`cookies`in this.#data?this.#data.cookies:[]}this.#hasBeenRead=!0}async#write(){if(!this.#storagePath)return;let e=JSON.stringify({...this.#data,cookies:this.#cookies},null,2);await(0,a.writeFile)(this.#storagePath,e,`utf8`)}async get(e){await this.#read();let t=typeof e==`string`?e:e.name;return this.#cookies.find(e=>e.name===t)??null}async getAll(e){if(await this.#read(),!e)return this.#cookies;let t=typeof e==`string`?e:e.name;return this.#cookies.filter(e=>e.name===t)??null}async set(e){await this.#read(),this.#cookies=this.#cookies.filter(t=>!(t.name===e.name&&t.domain===e.domain)),this.#cookies.push(e),await this.#write()}async delete(e){if(await this.#read(),!e)this.#cookies=[];else{let t=typeof e==`string`?e:e.name;this.#cookies=this.#cookies.filter(e=>e.name!==t)}}toString(){return this.#cookies.map(e=>`${e.name}=${e.value}`).join(`; `)}},Z=class{#impit;#agent;#retryThreshold;#retryDelayMs;#failures=new Map;constructor(e={}){this.headers=new Headers,this.#retryThreshold=3,this.#retryDelayMs=1500,this.configure(e)}configure({proxyUrl:e,allowH2:t=!0,maxRedirections:n=3,maxRetries:r=3,cookieStore:i}={}){this.cookieStore=i??this.cookieStore??new X,this.#impit=new m.Impit({browser:`chrome`,ignoreTlsErrors:!0,proxyUrl:e,followRedirects:!0,maxRedirects:n});let{redirect:a,retry:o}=p.interceptors;e?this.#agent=new p.ProxyAgent({uri:e,allowH2:t}).compose(a({maxRedirections:n}),o({maxRetries:r})):this.#agent=new p.Agent({allowH2:t}).compose(a({maxRedirections:n}),o({maxRetries:r}))}get retries(){return this.#retryThreshold}async fetch(e,t={}){let n=t.headers&&(t.headers instanceof Headers?t.headers.has(`User-Agent`):`User-Agent`in t.headers),r=this.appendHeaders(t?.headers||{}),i=await this.cookieStore.getAll(),a=i.filter(t=>!t.domain||new f.URL(e).hostname.includes(t.domain));for(let e of i){let t=a.find(t=>t.name===e.name);if(t)continue;e.domain||a.push(e)}let o=a.map(e=>`${e.name}=${e.value}`).join(`; `);r.has(`cookie`)?r.get(`cookie`)||r.delete(`cookie`):r.set(`cookie`,o);let s={...t,body:t?.body,headers:r};t&&(t.headers=r);let c=await(n?(0,p.fetch)(e,{...s,dispatcher:this.#agent}):this.withRetry(this.#impit.fetch.bind(this.#impit),e,s)),l=c.headers.getSetCookie();return l&&await this.setCookies(l),c}async withRetry(e,t,n){try{let r=await e(t,n),i=r.status>=300&&r.status<=399,a=r.status>=200&&r.status<=299||i;return!a&&this.#hasAttempts(t)?(await this.#nextRetry(t),W.debug(await r.text()),W.debug(String(r.status)),this.withRetry(e,t,n)):r}catch(r){let i=r;if(W.debug(i.stack),W.debug({input:t,init:{method:n?.method,headers:n?.headers,body:`...`}}),!this.#hasAttempts(t))throw r;return await this.#nextRetry(t),this.withRetry(e,t,n)}}async setCookies(e){let t=[];if(typeof e==`string`){let[n]=Y([e]);n&&t.push(n)}else if(Array.isArray(e)&&typeof e.at(0)==`string`){let n=Y(e);t.push(...n)}else Array.isArray(e)&&typeof e[0]!=`string`&&t.push(...e);if(!(!t||!t?.length))for(let e of t)await this.cookieStore.set(e)}appendHeaders(e){let t=new Headers(this.headers);for(let[n,r]of Object.entries(e))t.set(n,r);return t}#hasAttempts(e){return this.#getFailuresCount(e)<=this.#retryThreshold}#getFailuresCount(e){return this.#failures.get(e)||1}#addFailure(e){this.#failures.set(e,this.#getFailuresCount(e)+1)}async#nextRetry(e){let t=this.#getFailuresCount(e);t&&await new Promise(e=>setTimeout(e,this.#retryDelayMs)),this.#addFailure(e),W.debug(`Retry ${t}/${this.#retryThreshold}: ${String(e)}`)}setHeader(e,t){this.headers.set(e,t)}removeHeader(e){this.headers.delete(e)}setRetryCount(e){e>1&&(this.#retryThreshold=e)}};const ke=new Z,{COMMON_CONTEXT:Ae}=h.default,je=(e,t=`Eval`)=>{try{let n=h.default.createScript(t,e);return n}catch(e){return console.error(`Syntax Error: ${e.message}`),null}},Q=(e,t=1)=>{if(Array.isArray(e)||typeof e==`string`){let n=[];for(let r=1;r<=t;r++)n.push(e[Math.floor(Math.random()*e.length)]);return n}else return[]},Me=e=>{let t=`default`in g.default?g.default.default:g.default;return new t(e)};var Ne=class{#store;constructor({storagePath:e}){this.#store=Me({cwd:(0,n.dirname)(e),configName:(0,n.basename)(e,`.json`)})}get length(){return Object.keys(this.#store.store).length}clear(){this.#store.clear()}getItem(e){return this.#store.get(e)??null}key(e){return Object.keys(this.#store.store).at(e)??null}removeItem(e){this.#store.delete(e)}setItem(e,t){this.#store.set(e,t)}};const $=()=>{switch(r.default.type()){case`Darwin`:return`macOS`;case`Windows_NT`:return`Windows`;default:return`Linux`}};Object.defineProperties(Uint8Array.prototype,{toBase64:{value:function(){return Buffer.from(this).toString(`base64`)},writable:!0,configurable:!0},toHex:{value:function(){return Buffer.from(this).toString(`hex`)},writable:!0,configurable:!0}}),Object.defineProperties(Uint8Array,{fromBase64:{value:function(e){return new Uint8Array(Buffer.from(e,`base64`))},writable:!0,configurable:!0},fromHex:{value:function(e){return new Uint8Array(Buffer.from(e,`hex`))},writable:!0,configurable:!0}});const Pe=new Map([[24,[`Sequoia`,`15`]],[23,[`Sonoma`,`14`]],[22,[`Ventura`,`13`]],[21,[`Monterey`,`12`]],[20,[`Big Sur`,`11`]],[19,[`Catalina`,`10.15`]],[18,[`Mojave`,`10.14`]],[17,[`High Sierra`,`10.13`]],[16,[`Sierra`,`10.12`]],[15,[`El Capitan`,`10.11`]],[14,[`Yosemite`,`10.10`]],[13,[`Mavericks`,`10.9`]],[12,[`Mountain Lion`,`10.8`]],[11,[`Lion`,`10.7`]],[10,[`Snow Leopard`,`10.6`]],[9,[`Leopard`,`10.5`]],[8,[`Tiger`,`10.4`]],[7,[`Panther`,`10.3`]],[6,[`Jaguar`,`10.2`]],[5,[`Puma`,`10.1`]]]),Fe=()=>{let e=Number(r.default.release().split(`.`)[0]),[t,n]=Pe.get(e)||[`Unknown`,``];return{name:t,version:n}},Ie=()=>{switch($()){case`macOS`:return Fe().version;case`Windows`:return r.default.release();case`Linux`:return r.default.release()}},Le=()=>{let e=[{brand:`Azot`,version:E.version.split(`.`).slice(0,2).join(`.`)},{brand:`Node.js`,version:process.version.replace(`v`,``).split(`.`).slice(0,1).join(`.`)}];return{mobile:!1,platform:$(),brands:e,getHighEntropyValues:async t=>{let n={mobile:!1,platform:$(),brands:e};return t.includes(`architecture`)&&(n.architecture=r.default.arch()),t.includes(`platform`)&&(n.platform=$()),t.includes(`platformVersion`)&&(n.platformVersion=Ie()),t.includes(`fullVersionList`)&&(n.fullVersionList=[{brand:`Azot`,version:E.version},{brand:`Node.js`,version:process.version}]),n}}},Re=({name:e=`extension`,dir:t=process.cwd()}={})=>{let r=M((0,n.join)(t,e)),a=new Ne({storagePath:(0,n.join)(r,`storage.json`)}),o=new X({storagePath:(0,n.join)(r,`cookies.json`)}),s=new Z({cookieStore:o}),c=(e,t,n)=>e.split(t)[1]?.split(n)[0]?.trim(),l={sanitizeString:G,execUrlPatterns:K,extendEpisodes:q,between:c,getRandomElements:Q},u={defineExtension:e=>e,version:E.version,input:we,sleep:i.setTimeout,sanitizeString:G,execUrlPatterns:K,extendEpisodes:q,between:c,getRandomElements:Q,utils:l,prompt:J.ask.bind(J)};class d{get cookie(){return o.toString()}}let f={fetch:s.fetch.bind(s),Response,Request,Headers,AbortController,AbortSignal,URL,URLSearchParams,URLPattern,Blob,structuredClone,btoa,atob,TextEncoder,TextDecoder,Uint8Array,crypto,console:Object.assign(W,{log:console.log}),prompt:Ee,alert:e=>{W.warn(e)},Event,EventTarget,localStorage:a,cookieStore:o,document:new d,eval:e=>je(e)?.exports,navigator:{appName:`Azot`,appVersion:E.version,platform:process.platform,userAgentData:Le()}},p={http:s,question:J,common:l,Streamyx:u,Azot:u,window:f,...f};return p};Object.defineProperty(exports,`createContext`,{enumerable:!0,get:function(){return Re}});
package/out/context.js DELETED
@@ -1 +0,0 @@
1
- const e=require(`./context-DYv2PCKF.js`);exports.createContext=e.createContext;
package/out/context.mjs DELETED
@@ -1 +0,0 @@
1
- import{createContext as e}from"./context-DTSYpvwR.mjs";export{e as createContext};
package/out/vitest.js DELETED
@@ -1 +0,0 @@
1
- const e=require(`./chunk-nOFOJqeH.js`),t=require(`./context-DYv2PCKF.js`),n=e.__toESM(require(`vitest`));n.vi.mock(`azot`,()=>{let e=t.createContext();return Object.entries(e).forEach(([e,t])=>{n.vi.stubGlobal(e,t)}),e.Azot});
File without changes