azot 5.0.0-alpha.2 → 5.0.0-alpha.4

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;
package/dist/main.mjs ADDED
@@ -0,0 +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}};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});
@@ -0,0 +1 @@
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,154 +1,84 @@
1
1
  {
2
2
  "name": "azot",
3
- "productName": "Azot",
4
- "version": "5.0.0-alpha.2",
5
- "main": "./out/main.js",
3
+ "version": "5.0.0-alpha.4",
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
- "./test": {
14
- "types": "./types/test.d.ts",
15
- "import": "./out/test.js",
16
- "require": "./out/test.js"
14
+ "./context": {
15
+ "types": "./types/context.d.ts",
16
+ "import": "./dist/context.js",
17
+ "require": "./dist/context.js"
18
+ },
19
+ "./vitest": {
20
+ "import": "./dist/vitest.mjs",
21
+ "require": "./dist/vitest.js"
17
22
  }
18
23
  },
19
24
  "bin": {
20
- "azt": "out/azt.js"
25
+ "azt": "./dist/cli.js"
21
26
  },
22
27
  "files": [
23
- "out",
24
- "azot.d.ts",
25
- "types",
26
- ".npmrc"
28
+ "dist",
29
+ "types"
27
30
  ],
28
- "author": "Vitaly Gashkov <vitalygashkov@vk.com>",
29
- "description": "A powerful, extensible app for downloading videos",
30
- "repository": {
31
- "type": "git",
32
- "url": "https://github.com/azot-labs/azot.git"
33
- },
34
- "homepage": "https://azot.so",
35
31
  "scripts": {
36
- "start": "tsx --env-file .env ./src/main/cli.ts",
37
- "preview": "electron-vite preview --config vite.desktop.config.mjs",
38
- "dev": "electron-vite dev --config vite.desktop.config.mjs --watch",
39
- "test": "vitest",
40
- "coverage": "vitest run --coverage",
41
- "bundle:lib": "tsdown",
42
- "bundle:cli": "electron-vite build --config vite.cli.config.mjs",
43
- "bundle": "npm run bundle:cli && electron-vite build --config vite.desktop.config.mjs",
44
- "build": "npm run bundle && electron-builder build --config electron-builder.config.js",
45
- "build:mac": "npm run bundle && electron-builder build --mac --config electron-builder.config.js",
46
- "build:win": "npm run bundle && electron-builder build --win --config electron-builder.config.js",
47
- "build:linux": "npm run bundle && electron-builder build --linux --config electron-builder.config.js",
48
- "publish": "npm run bundle && electron-builder build --publish always --config electron-builder.config.js",
49
- "publish:lib": "npm run bundle:lib && npm publish --tag alpha",
50
- "typecheck": "npm run typecheck:node && npm run typecheck:web",
51
- "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
52
- "typecheck:web": "vue-tsc --noEmit -p tsconfig.web.json --composite false",
53
- "format": "prettier --write .",
54
- "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 ."
55
36
  },
56
- "engines": {
57
- "node": "22"
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "git+https://github.com/azot-labs/extensions.git"
58
40
  },
59
- "os": [
60
- "darwin",
61
- "linux",
62
- "win32"
41
+ "keywords": [
42
+ "azot",
43
+ "extensions",
44
+ "types",
45
+ "api"
63
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",
64
54
  "funding": [
65
55
  {
66
56
  "type": "individual",
67
57
  "url": "https://t.me/tribute/app?startapp=dqW2"
68
58
  }
69
59
  ],
60
+ "engines": {
61
+ "node": ">=22"
62
+ },
70
63
  "dependencies": {
71
- "@electron-toolkit/preload": "^3.0.2",
72
- "@electron-toolkit/utils": "^4.0.0",
73
- "@inquirer/prompts": "^7.8.3",
74
- "@logtape/file": "^1.0.4",
75
- "@logtape/logtape": "^1.0.4",
76
- "@logtape/pretty": "^1.0.4",
77
- "@tanstack/query-core": "^5.85.5",
78
- "@tribute-tg/better-auth": "^1.0.9",
79
- "better-auth": "^1.3.7",
80
- "bytenode": "^1.5.7",
81
- "conf": "^14.0.0",
82
- "cross-spawn": "^7.0.6",
83
- "dasha": "3.1.8",
84
- "electron-squirrel-startup": "^1.0.1",
85
- "electron-updater": "^6.6.2",
86
64
  "impit": "^0.5.4",
87
65
  "javascript-obfuscator": "^4.1.1",
88
- "metavm": "^1.4.4",
89
- "molnia": "^0.1.5",
90
- "nanospinner": "^1.2.2",
91
- "okova": "^0.9.3",
92
- "p-queue": "^8.1.0",
93
- "picocolors": "^1.1.1",
94
- "tsdown": "^0.14.2",
95
- "undici": "^7.15.0",
96
- "urlpattern-polyfill": "^10.1.0",
97
- "yargs": "^18.0.0",
98
- "yauzl": "^3.2.0"
66
+ "metavm": "^1.4.5",
67
+ "tsdown": "^0.15.6",
68
+ "undici": "^7.16.0"
99
69
  },
100
70
  "devDependencies": {
101
- "@electron-toolkit/eslint-config": "^2.1.0",
102
- "@electron-toolkit/eslint-config-prettier": "^3.0.0",
103
- "@electron-toolkit/eslint-config-ts": "^3.1.0",
104
- "@electron-toolkit/tsconfig": "^1.0.1",
105
- "@eslint/js": "^9.26.0",
106
- "@iconify/vue": "^4.3.0",
107
- "@intlify/unplugin-vue-i18n": "^6.0.8",
108
- "@rushstack/eslint-patch": "^1.10.5",
109
- "@tailwindcss/vite": "^4.1.12",
110
- "@tanstack/vue-query": "^5.85.5",
111
- "@types/node": "^24.3.0",
112
- "@types/wicg-file-system-access": "^2023.10.5",
113
- "@types/yargs": "^17.0.33",
114
- "@vee-validate/zod": "^4.15.1",
115
- "@vitejs/plugin-vue": "^6.0.1",
116
- "@vue/eslint-config-prettier": "^10.2.0",
117
- "@vue/eslint-config-typescript": "^14.5.0",
118
- "@vueuse/core": "^13.7.0",
119
- "class-variance-authority": "^0.7.1",
120
- "clsx": "^2.1.1",
121
- "dotenv": "^17.2.1",
122
- "electron": "37.3.1",
123
- "electron-builder": "^26.0.12",
124
- "electron-vite": "^4.0.0",
125
- "eslint": "^9.34.0",
126
- "eslint-plugin-import": "^2.32.0",
127
- "eslint-plugin-n": "^17.21.3",
128
- "eslint-plugin-vue": "^10.4.0",
129
- "execa": "^9.6.0",
130
- "globals": "^16.3.0",
131
- "lucide-vue-next": "^0.541.0",
132
- "non.geist": "^1.0.4",
133
- "pinia": "^3.0.3",
134
- "postcss": "^8.5.6",
71
+ "@eslint/js": "^9.37.0",
72
+ "@types/node": "^24.7.0",
73
+ "dasha": "^3.1.9",
74
+ "eslint": "^9.37.0",
75
+ "eslint-config-prettier": "^10.1.8",
76
+ "eslint-plugin-prettier": "^5.5.4",
77
+ "globals": "^16.4.0",
135
78
  "prettier": "^3.6.2",
136
- "reka-ui": "^2.4.1",
137
- "sass": "^1.90.0",
138
- "tailwind-merge": "^3.3.1",
139
- "tailwindcss": "^4.1.12",
140
- "tailwindcss-animate": "^1.0.7",
141
- "tsx": "^4.20.5",
142
- "typescript": "^5.9.2",
143
- "vee-validate": "^4.15.1",
144
- "vite": "^7.1.3",
145
- "vite-plugin-static-copy": "^3.1.2",
146
- "vitest": "^3.2.4",
147
- "vue": "^3.5.18",
148
- "vue-eslint-parser": "^10.2.0",
149
- "vue-i18n": "^11.1.11",
150
- "vue-sonner": "^1.3.0",
151
- "vue-tsc": "^3.0.6",
152
- "zod": "^3.25.42"
79
+ "typescript": "^5.9.3"
80
+ },
81
+ "peerDependencies": {
82
+ "vitest": ">=3.2.0"
153
83
  }
154
84
  }
@@ -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:path`)),n=e.__toESM(require(`node:fs`)),r=e.__toESM(require(`node:util`)),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,r.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(),t.default.join(process.cwd(),`src`),t.default.join(process.cwd(),`lib`)];for(let r of e){let e=(0,n.readdirSync)(r),i=e.filter(e=>!e.endsWith(`.d.ts`)).filter(e=>new Set([`.ts`,`.js`]).has(t.default.extname(e))),a=e=>t.default.basename(e,t.default.extname(e)),o=i.find(e=>a(e)===`index`)||i.find(e=>a(e)===`main`)||i[0];if(o)return t.default.join(r,o)}};(async()=>{let[e,...r]=d.positionals,a=d.values.input||r[0]||f();if(!a)throw Error(`No entry file found`);if(e===`build`||e===`pack`){let r=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:r}),d.values.input=t.default.join(process.cwd(),`dist`,t.default.basename(a).replace(/\.ts$/,`.js`));let o=require(t.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||t.default.join(__dirname,`../public.pem`),`utf8`),r=d.values.output||d.values.input.replace(/\.js$/,`-${o.version}.stx`);c(e,d.values.input,r),(0,n.rmSync)(d.values.input)}}else if(e===`decrypt`){let e=(0,n.readFileSync)(d.values.key||t.default.join(__dirname,`../private.pem`),`utf8`),r=d.values.output||a.replace(/\.stx$/,`.js`);l(e,a,r),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/test.js DELETED
@@ -1,3 +0,0 @@
1
- const e=require(`./chunk-nOFOJqeH.js`),t=e.__toESM(require(`node:os`)),n=e.__toESM(require(`node:path`)),r=e.__toESM(require(`node:timers/promises`)),i=e.__toESM(require(`node:fs/promises`)),a=e.__toESM(require(`@logtape/logtape`)),o=e.__toESM(require(`@logtape/file`)),s=e.__toESM(require(`@logtape/pretty`)),c=e.__toESM(require(`node:fs`)),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.2`,b=`./out/main.js`,x=`./types/main.d.ts`,S={".":{types:`./types/main.d.ts`,import:`./out/main.js`,require:`./out/main.js`},"./test":{types:`./types/test.d.ts`,import:`./out/test.js`,require:`./out/test.js`}},C={azt:`out/azt.js`},ee=[`out`,`azot.d.ts`,`types`,`.npmrc`],te=`Vitaly Gashkov <vitalygashkov@vk.com>`,ne=`A powerful, extensible app for downloading videos`,re={type:`git`,url:`https://github.com/azot-labs/azot.git`},ie=`https://azot.so`,ae={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:`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`},oe={node:`22`},se=[`darwin`,`linux`,`win32`],ce=[{type:`individual`,url:`https://t.me/tribute/app?startapp=dqW2`}],le={"@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`},w={"@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={name:_,productName:v,version:y,main:b,types:x,exports:S,bin:C,files:ee,author:te,description:ne,repository:re,homepage:ie,scripts:ae,engines:oe,os:se,funding:ce,dependencies:le,devDependencies:w};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 t=typeof e==`string`?e:e[A];return(0,c.existsSync)(t)||(0,c.mkdirSync)(t,{recursive:!0}),t},M=(0,t.homedir)(),N=(0,t.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=(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=()=>{let e=new Date().toISOString().split(`.`)[0].replace(`T`,`_`).replaceAll(`-`,``).replaceAll(`:`,``);return`Azot_${e}.log`},be=()=>(0,n.join)(R,V()),H=(0,s.getPrettyFormatter)({timestamp:`time`,levelStyle:null,icons:!1,colors:!0,level:`FULL`,categoryWidth:0,categoryStyle:null,categoryTruncate:`end`,wordWrap:!0});(0,a.configureSync)({sinks:{console:(0,a.withFilter)((0,a.getConsoleSink)({formatter:H}),B?`debug`:`info`),file:(0,o.getFileSink)(be(),{flushInterval:0})},loggers:[{category:[],lowestLevel:`trace`,sinks:[`console`,`file`]},{category:[`logtape`,`meta`],lowestLevel:`error`,sinks:[`console`]}]});const U=(0,a.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),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}},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(),D&&this.listen(async e=>{let t=(0,d.createInterface)({input:l.stdin,output:l.stdout}),{title:n,description:i,fields:a,...o}=e,s={};for(let[e,{label:c,type:l}]of Object.entries(a||o)){let a=l===`confirm`,o=[n,i,c].filter(Boolean).join(`. `)+(a?` (y/n)`:``)+`: `,u=await Promise.race([t.question(o),(0,r.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 q=new Ce,we=async(e,t)=>{let n=t?.fields??{answer:{label:e}},r=await q.ask({title:t?.title,description:e,fields:n});return r},Te=12e4,Ee=(e,t)=>{(0,c.writeSync)(1,e||``);let n=Buffer.alloc(1),r=``;for(;;){try{(0,c.readSync)(0,n,0,1,null)}catch(e){if(e.code===`EOF`)break;throw e}let e=n.toString(`utf-8`);if(e===`
2
- `||e===`\r`){if(e===`\r`)try{(0,c.readSync)(0,n,0,1,null),n.toString(`utf-8`)}catch(e){if(e.code===`EOF`)break;throw e}break}r+=e}return r.trim()||t},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}},J=e=>{let t=[];for(let n of e)try{let e=(0,p.parseCookie)(n);e&&t.push(De(e))}catch(e){U.debug(e)}return t},Y=async e=>{let n=await(0,i.readFile)(e,`utf8`).catch(()=>``);if(!n)return[];let r=n.split(t.EOL).flatMap(e=>e.split(`
3
- `)),a=r.filter(e=>!!e.trim()&&!e.startsWith(`# `)),o=a.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 J(e)}constructor({storagePath:e}={}){this.#storagePath=e,this.#cookies=[]}async import(e){let t=await(0,i.stat)(e).catch(()=>null);t?.isFile()&&(this.#cookies=await Y(e),await(0,i.rm)(e,{recursive:!0,force:!0}))}async#read(){if(!this.#storagePath||this.#hasBeenRead)return;let e=await(0,i.stat)(this.#storagePath).catch(()=>null);if(e?.isFile()){let e=await(0,i.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,i.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),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 Oe=new Z,{COMMON_CONTEXT:ke}=h.default,Ae=(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[]},je=e=>{let t=`default`in g.default?g.default.default:g.default;return new t(e)};var Me=class{#store;constructor({storagePath:e}){this.#store=je({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(t.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 Ne=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`]]]),Pe=()=>{let e=Number(t.default.release().split(`.`)[0]),[n,r]=Ne.get(e)||[`Unknown`,``];return{name:n,version:r}},Fe=()=>{switch($()){case`macOS`:return Pe().version;case`Windows`:return t.default.release();case`Linux`:return t.default.release()}},Ie=()=>{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:$(),brands:e,getHighEntropyValues:async n=>{let r={mobile:!1,platform:$(),brands:e};return n.includes(`architecture`)&&(r.architecture=t.default.arch()),n.includes(`platform`)&&(r.platform=$()),n.includes(`platformVersion`)&&(r.platformVersion=Fe()),n.includes(`fullVersionList`)&&(r.fullVersionList=[{brand:`Azot`,version:T.version},{brand:`Node.js`,version:process.version}]),r}}},Le=({name:e=`extension`,dir:t=process.cwd()}={})=>{let i=j((0,n.join)(t,e)),a=new Me({storagePath:(0,n.join)(i,`storage.json`)}),o=new X({storagePath:(0,n.join)(i,`cookies.json`)}),s=new Z({cookieStore:o}),c=(e,t,n)=>e.split(t)[1]?.split(n)[0]?.trim(),l={sanitizeString:W,execUrlPatterns:G,extendEpisodes:K,between:c,getRandomElements:Q},u={defineExtension:e=>e,version:T.version,input:we,sleep:r.setTimeout,sanitizeString:W,execUrlPatterns:G,extendEpisodes:K,between:c,getRandomElements:Q,utils:l,prompt:q.ask.bind(q)};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:U,prompt:Ee,alert:e=>{U.warn(e)},Event,EventTarget,localStorage:a,cookieStore:o,document:new d,eval:e=>Ae(e)?.exports,navigator:{appName:`Azot`,appVersion:T.version,platform:process.platform,userAgentData:Ie()}},p={http:s,question:q,common:l,Streamyx:u,Azot:u,window:f,...f};return p};exports.createContext=Le;
File without changes
File without changes