pushy-server 1.4.5-20260113 → 1.4.6-20260113

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/lib/index.js CHANGED
@@ -1478,7 +1478,7 @@ model audit_logs {
1478
1478
  @@index([createdAt], map: "createdAt")
1479
1479
  @@map("audit_logs")
1480
1480
  }
1481
- `,runtimeDataModel:{models:{},enums:{},types:{}}};D9.runtimeDataModel=JSON.parse('{"models":{"apps":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"userId","kind":"scalar","type":"Int"},{"name":"platform","kind":"enum","type":"apps_platform"},{"name":"name","kind":"scalar","type":"String"},{"name":"appKey","kind":"scalar","type":"String"},{"name":"appSecret","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"downloadUrl","kind":"scalar","type":"String"},{"name":"status","kind":"scalar","type":"String"},{"name":"ignoreBuildTime","kind":"scalar","type":"String"},{"name":"users","kind":"object","type":"users","relationName":"appsTousers"},{"name":"packages","kind":"object","type":"packages","relationName":"appsTopackages"},{"name":"versions","kind":"object","type":"versions","relationName":"appsToversions"},{"name":"bindings","kind":"object","type":"bindings","relationName":"appsTobindings"}],"dbName":null},"orders":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"userId","kind":"scalar","type":"Int"},{"name":"type","kind":"enum","type":"orders_type"},{"name":"orderNo","kind":"scalar","type":"String"},{"name":"thirdOrderNo","kind":"scalar","type":"String"},{"name":"thirdUserId","kind":"scalar","type":"String"},{"name":"price","kind":"scalar","type":"Decimal"},{"name":"payTime","kind":"scalar","type":"String"},{"name":"status","kind":"enum","type":"orders_status"},{"name":"tier","kind":"scalar","type":"String"},{"name":"remark","kind":"scalar","type":"String"},{"name":"channel","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"users","kind":"object","type":"users","relationName":"ordersTousers"}],"dbName":null},"packages":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"appId","kind":"scalar","type":"Int"},{"name":"versionId","kind":"scalar","type":"Int"},{"name":"name","kind":"scalar","type":"String"},{"name":"hash","kind":"scalar","type":"String"},{"name":"status","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"buildTime","kind":"scalar","type":"String"},{"name":"buildNumber","kind":"scalar","type":"String"},{"name":"note","kind":"scalar","type":"String"},{"name":"deps","kind":"scalar","type":"Json"},{"name":"commit","kind":"scalar","type":"Json"},{"name":"apps","kind":"object","type":"apps","relationName":"appsTopackages"},{"name":"versions","kind":"object","type":"versions","relationName":"packagesToversions"},{"name":"bindings","kind":"object","type":"bindings","relationName":"bindingsTopackages"}],"dbName":null},"tasks":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"type","kind":"enum","type":"tasks_type"},{"name":"fromHash","kind":"scalar","type":"String"},{"name":"toHash","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"}],"dbName":null},"users":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"email","kind":"scalar","type":"String"},{"name":"name","kind":"scalar","type":"String"},{"name":"salt","kind":"scalar","type":"String"},{"name":"secret","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"status","kind":"enum","type":"users_status"},{"name":"tier","kind":"scalar","type":"String"},{"name":"tierExpiresAt","kind":"scalar","type":"DateTime"},{"name":"quota","kind":"scalar","type":"Json"},{"name":"apps","kind":"object","type":"apps","relationName":"appsTousers"},{"name":"orders","kind":"object","type":"orders","relationName":"ordersTousers"},{"name":"apiTokens","kind":"object","type":"api_tokens","relationName":"api_tokensTousers"},{"name":"auditLogs","kind":"object","type":"audit_logs","relationName":"audit_logsTousers"}],"dbName":null},"versions":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"appId","kind":"scalar","type":"Int"},{"name":"hash","kind":"scalar","type":"String"},{"name":"name","kind":"scalar","type":"String"},{"name":"description","kind":"scalar","type":"String"},{"name":"metaInfo","kind":"scalar","type":"String"},{"name":"config","kind":"scalar","type":"Json"},{"name":"deps","kind":"scalar","type":"Json"},{"name":"commit","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"packages","kind":"object","type":"packages","relationName":"packagesToversions"},{"name":"apps","kind":"object","type":"apps","relationName":"appsToversions"},{"name":"bindings","kind":"object","type":"bindings","relationName":"bindingsToversions"}],"dbName":null},"reports":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"userId","kind":"scalar","type":"Int"},{"name":"appId","kind":"scalar","type":"Int"},{"name":"packageId","kind":"scalar","type":"Int"},{"name":"versionId","kind":"scalar","type":"Int"},{"name":"time","kind":"scalar","type":"String"},{"name":"type","kind":"scalar","type":"String"},{"name":"data","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"}],"dbName":null},"bindings":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"appId","kind":"scalar","type":"Int"},{"name":"packageId","kind":"scalar","type":"Int"},{"name":"versionId","kind":"scalar","type":"Int"},{"name":"type","kind":"enum","type":"binding_type"},{"name":"rollout","kind":"scalar","type":"Int"},{"name":"config","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"apps","kind":"object","type":"apps","relationName":"appsTobindings"},{"name":"packages","kind":"object","type":"packages","relationName":"bindingsTopackages"},{"name":"versions","kind":"object","type":"versions","relationName":"bindingsToversions"}],"dbName":"bindings"},"api_tokens":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"userId","kind":"scalar","type":"Int"},{"name":"name","kind":"scalar","type":"String"},{"name":"tokenHash","kind":"scalar","type":"String"},{"name":"tokenSuffix","kind":"scalar","type":"String"},{"name":"permissions","kind":"scalar","type":"Json"},{"name":"expiresAt","kind":"scalar","type":"DateTime"},{"name":"revokedAt","kind":"scalar","type":"DateTime"},{"name":"lastUsedAt","kind":"scalar","type":"DateTime"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"users","kind":"object","type":"users","relationName":"api_tokensTousers"},{"name":"auditLogs","kind":"object","type":"audit_logs","relationName":"api_tokensToaudit_logs"}],"dbName":"api_tokens"},"audit_logs":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"userId","kind":"scalar","type":"Int"},{"name":"apiTokenId","kind":"scalar","type":"Int"},{"name":"method","kind":"scalar","type":"String"},{"name":"path","kind":"scalar","type":"String"},{"name":"data","kind":"scalar","type":"Json"},{"name":"statusCode","kind":"scalar","type":"Int"},{"name":"ip","kind":"scalar","type":"String"},{"name":"userAgent","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"users","kind":"object","type":"users","relationName":"audit_logsTousers"},{"name":"apiTokens","kind":"object","type":"api_tokens","relationName":"api_tokensToaudit_logs"}],"dbName":"audit_logs"}},"enums":{},"types":{}}');async function $MI(A){let{Buffer:I}=await import("buffer"),g=I.from(A,"base64");return new WebAssembly.Module(g)}D9.compilerWasm={getRuntime:async()=>await Promise.resolve().then(() => (zt(),Vt)),getQueryCompilerWasmModule:async()=>{let{wasm:A}=await Promise.resolve().then(() => (Tt(),Pt));return await $MI(A)}};function $t(){return xt.getPrismaClient(D9)}var qB=bg(B9(),1);var mkg=qB.Extensions.getExtensionContext;var dkg={DbNull:qB.NullTypes.DbNull,JsonNull:qB.NullTypes.JsonNull,AnyNull:qB.NullTypes.AnyNull};var ukg=qB.makeStrictEnum({ReadUncommitted:"ReadUncommitted",ReadCommitted:"ReadCommitted",RepeatableRead:"RepeatableRead",Serializable:"Serializable"});var lkg=qB.Extensions.defineExtension;globalThis.__dirname=bt.dirname(fMI(import.meta.url));var ct=$t();var vMI=new Pn(process.env.DATABASE_URL),wI=new ct({adapter:vMI});async function k8({userId:A=null,apiTokenId:I=null,method:g,path:C,data:B,statusCode:Q,ip:E,userAgent:D}){try{let G={};if(B&&typeof B==="object"&&!Array.isArray(B)){for(let[Y,w]of Object.entries(B))if(!["password","pwd","secret","appSecret","token","deps","commit"].includes(Y.toLowerCase()))G[Y]=w}await wI.audit_logs.create({data:{userId:A,apiTokenId:I,method:g,path:C,data:G,statusCode:Q,ip:E,userAgent:D}})}catch(G){console.error("Failed to log request audit:",G)}}function ot(A){let I=A.headers,g=I.get("x-forwarded-for");if(g)return g.split(",")[0].trim();let C=I.get("x-real-ip");if(C)return C;return null}function ft(A){return A.headers.get("user-agent")}var _MI=["POST","PUT","PATCH","DELETE"],vt=new xI().onAfterResponse(async({request:A,userId:I,path:g,query:C,body:B,params:Q,set:E,responseValue:D})=>{let G=A.method;if(!_MI.includes(G))return;let Y=D;if(!I&&Y&&typeof Y==="object"&&"userId"in Y){let M=Y.userId;if(typeof M==="number")I=M}if(!I)return;let w=typeof E.status==="number"?E.status:200;k8({userId:I,apiTokenId:null,method:G,path:g,data:{...C,...B,...Q},statusCode:w,ip:ot(A),userAgent:ft(A)}).catch((M)=>{console.error("Failed to log audit:",M)})}).as("scoped");import pMI from"os";var mMI=new Date,H8={version:"1.4.5-20260113",buildTime:"2026-01-13T06:41:44.112Z",commit:"283506f17552ec4d4d326812ef507ca849434bf3",hostname:pMI.hostname(),startTime:mMI.toISOString(),runtimeVersion:typeof Bun<"u"?Bun.version:"unknown"};import{createHash as lMI}from"crypto";import{webcrypto as pt}from"crypto";var _t="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var dMI=128,xJ,GH;function uMI(A){if(!xJ||xJ.length<A)xJ=Buffer.allocUnsafe(A*dMI),pt.getRandomValues(xJ),GH=0;else if(GH+A>xJ.length)pt.getRandomValues(xJ),GH=0;GH+=A}function aw(A=21){uMI(A|=0);let I="";for(let g=GH-A;g<GH;g++)I+=_t[xJ[g]&63];return I}function mt(){return`pushy_${aw(48)}`}function G9(A){return lMI("sha256").update(A).digest("hex")}async function dt(A){let I=G9(A),g=await wI.api_tokens.findUnique({where:{tokenHash:I}});if(!g)return null;if(g.revokedAt)return null;if(g.expiresAt&&g.expiresAt<new Date)return null;let C=new Date;return await wI.api_tokens.update({where:{id:g.id},data:{lastUsedAt:C}}),{id:g.id,userId:g.userId,name:g.name,permissions:g.permissions,expiresAt:g.expiresAt,lastUsedAt:C,createdAt:g.createdAt}}function ut(A,I){let{permissions:g}=A;if(I==="DELETE")return g.delete===!0;if(["GET","HEAD","OPTIONS"].includes(I))return g.read===!0;if(["POST","PUT","PATCH"].includes(I))return g.write===!0;return!1}async function lt(A){try{return await wI.api_tokens.update({where:{id:A},data:{revokedAt:new Date}}),!0}catch{return!1}}var nIA=bg(aIA(),1),yqI=new nIA.default(process.env.REDIS_URL),vg=yqI;var qH=bg(vJ(),1),wS="https://pushy-admin.reactnative.cn/#",sIA="https://update.react-native.cn/api",YS=86400,Sqg=604800,rIA=20000,ZE={appCheckUpdate:(A=qH.default())=>`count_appCheckUpdate_${A.format("YYYYMMDD")}`,userCheckUpdateQuota:(A=qH.default())=>`quota_userCheckUpdate_${A.format("YYYYMMDD")}`,uvCheckUpdate:(A,I=qH.default())=>`count_uvCheckUpdate_${I.format("YYYYMMDD")}_${A}`,hourlyAppCheckUpdate:(A=qH.default())=>`hourly_appCheckUpdate_${A.format("YYYYMMDDHH")}`,hourlyUvCheckUpdate:(A,I=qH.default())=>`hourly_uvCheckUpdate_${I.format("YYYYMMDDHH")}_${A}`,dynamicConfig:()=>"config_dynamic"},RH={ios:"Ipa",android:"Apk",harmony:"App"};async function WE({email:A,userId:I}){if(!A&&!I)return null;let g=`user_${A||I}`;return await _J({cacheKey:g,handler:()=>wI.users.findUnique({where:A?{email:A}:{id:I},select:{id:!0,name:!0,email:!0,tier:!0,tierExpiresAt:!0,salt:!0,secret:!0,status:!0,quota:!0}})})}async function KM({appKey:A,appId:I}){if(!A&&!I)return null;let g=`app_${A||I}`;return await _J({cacheKey:g,handler:()=>wI.apps.findUnique({where:A?{appKey:A}:{id:I},select:{id:!0,name:!0,appKey:!0,downloadUrl:!0,status:!0,ignoreBuildTime:!0,platform:!0,userId:!0}})})}var tIA=({appKey:A,appId:I})=>{let g=`app_${A||I}`;return vg.del(g)};async function z8({userId:A}){let I=`apps_${A}`;return await _J({cacheKey:I,handler:()=>wI.apps.findMany({where:{userId:A},select:{id:!0,name:!0,platform:!0,status:!0,appKey:!0}})})}var eIA=({userId:A})=>{let I=`apps_${A}`;return vg.del(I)};async function _J({cacheKey:A,handler:I,expire:g=rIA}){let C=await vg.get(A),B=Date.now(),Q=!0;if(typeof C==="string"){let E=JSON.parse(C),{_ed:D,_ing:G}=E,Y=g*0.5;if(D){if(D<B-g)Q=!1;else if(D<B-Y&&(!G||G<B-3000))vg.set(A,JSON.stringify({data:E,_ing:B})),I().then((w)=>{let M=JSON.stringify({data:w,_ed:B});vg.set(A,M,"EX",YS)}).catch((w)=>{let M=JSON.stringify({_err:w.message,_ed:B});vg.set(A,M,"EX",YS)})}else Q=!1;if(Q){if(E._err)throw Error(E._err);if("data"in E)return E.data}}try{let E=await I(),D=JSON.stringify({data:E,_ed:B});return vg.set(A,D,"EX",YS),E}catch(E){let D=JSON.stringify({_err:E.message,_ed:B});throw vg.set(A,D,"EX",YS),E}}var AgA=["sunnylqm@qq.com"];var P8=(A)=>AgA.includes(A);var P5=bg(jQA(),1),T5=process.env.SECRET||"secret";if(T5==="secret")console.warn("Should have secret configured on production mode.");function FS(A){return P5.default.sign(A,T5)}function XiI(A){let I=null;try{I=P5.default.verify(A,T5)}catch{}return I}function uJ(A,I){let g=XiI(A);if(!g||g.exp<Date.now())return;if(I&&g.type!==I)return;return g}var jiI=2592000000;function x5(A){return FS({type:"user",uid:A,exp:Date.now()+jiI})}var JM=new xI().derive({as:"scoped"},({headers:A,status:I})=>{let g=A["x-accesstoken"],C=g&&uJ(g,"user");if(!C)return I(401,{message:"\u8BF7\u5148\u767B\u5F55"});return{userId:C.uid}}),lJ=new xI().derive({as:"scoped"},async({headers:A,request:I,status:g})=>{let C=A["x-api-token"];if(C){let E=await dt(C);if(!E)return g(401,{message:"\u65E0\u6548\u6216\u5DF2\u8FC7\u671F\u7684 API token"});let D=I.method;if(!ut(E,D))return g(403,{message:"API token \u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u8D44\u6E90"});return{userId:E.userId,apiTokenInfo:E,authType:"api_token"}}let B=A["x-accesstoken"],Q=B&&uJ(B,"user");if(!Q)return g(401,{message:"\u8BF7\u5148\u767B\u5F55\u6216\u63D0\u4F9B\u6709\u6548\u7684 API token"});return{userId:Q.uid,authType:"user_token"}}),FH=new xI().use(lJ).derive({as:"scoped"},async({userId:A,params:{appId:I},status:g})=>{let C=Number(I),B=await KM({appId:C});if(!B||B.userId!==A)return g(403,{message:"\u60A8\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u5E94\u7528"});return{userId:A,appId:C,app:B}}),OQA=new xI().derive({as:"scoped"},async({headers:A,status:I})=>{let g=A["x-accesstoken"],C=g&&uJ(g,"user");if(!C)return I(401,{message:"\u8BF7\u5148\u767B\u5F55"});let B=await WE({userId:C.uid});if(!B||!P8(B.email))return I(403,{message:"no access"});return{user:B}});var OiI=a.Object({name:a.String({minLength:1,maxLength:100}),permissions:a.Object({read:a.Optional(a.Boolean()),write:a.Optional(a.Boolean()),delete:a.Optional(a.Boolean())}),expiresAt:a.Optional(a.String({format:"date-time"}))}),ViI=a.Object({tokenId:a.Numeric()}),VQA=new xI({prefix:"/api-token"}).use(JM).post("/create",async({userId:A,status:I,body:{name:g,permissions:C,expiresAt:B}})=>{if(await wI.api_tokens.count({where:{userId:A,revokedAt:null}})>=10)return I(400,{message:"\u6BCF\u4E2A\u7528\u6237\u6700\u591A\u53EA\u80FD\u521B\u5EFA 10 \u4E2A token\uFF0C\u8BF7\u5148\u64A4\u9500\u4E00\u4E9B\u4E0D\u9700\u8981\u7684 token"});if(!C.read&&!C.write&&!C.delete)return I(400,{message:"\u81F3\u5C11\u9700\u8981\u6307\u5B9A\u4E00\u4E2A\u6743\u9650\uFF08read\u3001write \u6216 delete\uFF09"});let E=mt(),D=G9(E),G=E.slice(-4),Y=null;if(B){if(Y=new Date(B),Number.isNaN(Y.getTime()))return I(400,{message:"\u65E0\u6548\u7684\u8FC7\u671F\u65F6\u95F4\u683C\u5F0F\uFF0C\u8BF7\u4F7F\u7528 ISO 8601 \u683C\u5F0F"});if(Y<new Date)return I(400,{message:"\u8FC7\u671F\u65F6\u95F4\u5FC5\u987B\u662F\u672A\u6765\u7684\u65F6\u95F4"})}let w=await wI.api_tokens.create({data:{userId:A,name:g,tokenHash:D,tokenSuffix:G,permissions:JSON.parse(JSON.stringify(C)),expiresAt:Y}});return{id:w.id,name:w.name,token:E,permissions:w.permissions,expiresAt:w.expiresAt,createdAt:w.createdAt}},{body:OiI,detail:{hide:!0}}).get("/list",async({userId:A})=>{return{data:(await wI.api_tokens.findMany({where:{userId:A},select:{id:!0,name:!0,permissions:!0,expiresAt:!0,revokedAt:!0,lastUsedAt:!0,createdAt:!0,updatedAt:!0},orderBy:{createdAt:"desc"}})).map((g)=>({...g,isExpired:g.expiresAt?g.expiresAt<new Date:!1,isRevoked:!!g.revokedAt}))}},{detail:{hide:!0}}).delete("/:tokenId",async({userId:A,status:I,params:{tokenId:g}})=>{let C=await wI.api_tokens.findUnique({where:{id:g}});if(!C)return I(404,{message:"API token \u4E0D\u5B58\u5728"});if(C.userId!==A)return I(403,{message:"\u60A8\u6CA1\u6709\u6743\u9650\u64A4\u9500\u6B64 token"});if(C.revokedAt)return I(400,{message:"Token \u5DF2\u88AB\u64A4\u9500"});if(!await lt(g))return I(500,{message:"\u64A4\u9500 token \u5931\u8D25"});return{message:"Token \u64A4\u9500\u6210\u529F"}},{params:ViI,detail:{hide:!0}});var zQA=a.Object({offset:a.Optional(a.Numeric()),limit:a.Optional(a.Numeric())}),$5;((g)=>{g.normal="normal";g.paused="paused"})($5||={});var PQA=a.Object({offset:a.Optional(a.Numeric()),limit:a.Optional(a.Numeric()),status:a.Optional(a.Enum($5))}),TQA=a.Object({appId:a.Numeric(),versionId:a.Optional(a.Numeric()),packageId:a.Optional(a.Numeric()),bindingId:a.Optional(a.Numeric())}),xQA=a.Object({bindingId:a.Numeric()}),$QA=a.Object({versionId:a.Numeric()}),bQA=a.Object({packageId:a.Numeric()}),QRg=a.Object({appId:a.Numeric(),versionId:a.Numeric()}),ERg=a.Object({appId:a.Numeric(),packageId:a.Numeric()}),cQA=a.Object({ext:a.String()}),oQA=a.Object({name:a.String(),platform:a.Union([a.Literal("ios"),a.Literal("android"),a.Literal("harmony")])}),fQA=a.Partial(a.Object({name:a.String(),downloadUrl:a.Nullable(a.String()),status:a.Nullable(a.Enum($5)),ignoreBuildTime:a.Nullable(a.Union([a.Literal("enabled"),a.Literal("disabled")]))})),vQA=a.Object({hash:a.String(),name:a.String(),description:a.Optional(a.String()),metaInfo:a.Optional(a.String()),config:a.Optional(a.Object({rollout:a.Record(a.String(),a.Nullable(a.Number()))})),deps:a.Optional(a.Record(a.String(),a.String())),commit:a.Optional(a.Partial(a.Object({hash:a.String(),message:a.String(),author:a.String(),timestamp:a.String(),origin:a.String()})))}),_QA=a.Partial(a.Object({name:a.String(),description:a.String(),metaInfo:a.String(),config:a.Object({rollout:a.Record(a.String(),a.Nullable(a.Number()))})})),pQA=a.Object({hash:a.String(),name:a.String(),buildTime:a.String(),buildNumber:a.Optional(a.String()),note:a.Optional(a.String()),deps:a.Optional(a.Record(a.String(),a.String())),commit:a.Optional(a.Partial(a.Object({hash:a.String(),message:a.String(),author:a.String(),timestamp:a.String(),origin:a.String()})))}),mQA=a.Partial(a.Object({name:a.String(),note:a.Nullable(a.String()),status:a.String(),versionId:a.Nullable(a.Numeric())})),DRg=a.Union([a.Literal("full"),a.Literal("exp")]),dQA=a.Object({packageId:a.Numeric(),versionId:a.Numeric(),rollout:a.Optional(a.Nullable(a.Integer())),config:a.Optional(a.Record(a.String(),a.Any()))}),GRg=a.Object({packageId:a.Numeric()}),wRg=a.Object({email:a.String({format:"email"}),pwd:a.String()}),YRg=a.Object({token:a.String()}),KRg=a.Object({email:a.String({format:"email"})}),MRg=a.Object({email:a.String({format:"email"}),pwd:a.String(),name:a.String()}),JRg=a.Object({token:a.String(),newPwd:a.String()}),NRg=a.Object({orderNo:a.String()}),uQA=a.Object({fileName:a.String()}),lQA=a.Object({out_trade_no:a.String(),trade_no:a.String(),trade_status:a.String(),buyer_id:a.String(),gmt_payment:a.String()},{additionalProperties:!0}),aQA=a.Object({tier:a.String(),channel:a.Optional(a.String()),remark:a.Optional(a.String()),ret_url:a.Optional(a.String())}),nQA=a.Object({appKey:a.String()}),sQA=a.Object({packageVersion:a.String(),hash:a.Optional(a.Nullable(a.String())),toHash:a.Optional(a.String()),buildTime:a.Optional(a.String()),buildNumber:a.Optional(a.String()),cInfo:a.Optional(a.Partial(a.Object({rnu:a.String(),pushy:a.String(),rn:a.String(),os:a.String(),uuid:a.String()})))}),rQA=a.Object({token:a.String()}),b5=a.Object({email:a.String({format:"email"})}),tQA=a.Object({email:a.String({format:"email"}),pwd:a.String(),name:a.String()}),eQA=a.Object({token:a.String(),newPwd:a.String()}),kRg=a.Object({email:a.String({format:"email"})}),AEA=a.Object({email:a.String({format:"email"}),pwd:a.String()}),IEA=a.Object({offset:a.Optional(a.Numeric()),limit:a.Optional(a.Numeric()),type:a.Optional(a.Union([a.Literal("diffFromIpa"),a.Literal("diffFromApk"),a.Literal("diffFromApp"),a.Literal("diff"),a.Literal("hdiffFromIpa"),a.Literal("hdiffFromApk"),a.Literal("hdiff"),a.Literal("hdiffFromApp")])),fromHash:a.Optional(a.String()),toHash:a.Optional(a.String())});function gEA(A){if(A===null)return!1;return typeof A==="object"&&A instanceof Date===!1}function c5(A){if(A===null)return!0;if(A===void 0)return!0;if(A==="")return!0;if(A instanceof Date)return!1;if(typeof A==="boolean")return!1;if(typeof A==="number")return!1;if(Array.isArray(A)&&!A.length)return!0;if(gEA(A)&&!Object.keys(A).length)return!0;return!1}function o5(A){if(!gEA(A)&&!c5(A))return A;if(Array.isArray(A)){let g=0;return A.reduce((C,B)=>{if(!c5(B))C[g]=o5(B),g++;return C},[])}let I=Object.keys(A);if(I.length)return I.reduce((g,C)=>{if(!c5(A[C]))g[C]=o5(A[C]);return g},{})}var ZH=o5;var wy=bg(vJ(),1);var Gy={free:{app:3,package:30,packageSize:"30m",bundle:30,bundleSize:"3m",pv:1000},standard:{app:5,package:50,packageSize:"150m",bundle:50,bundleSize:"15m",pv:1e4},premium:{app:10,package:60,packageSize:"500m",bundle:60,bundleSize:"50m",pv:1e5},pro:{app:50,package:100,packageSize:"2000m",bundle:100,bundleSize:"200m",pv:1e6},vip1:{app:50,package:100,packageSize:"2000m",bundle:100,bundleSize:"200m",pv:1e7},vip2:{app:50,package:100,packageSize:"2000m",bundle:100,bundleSize:"200m",pv:50000000},vip3:{app:50,package:100,packageSize:"2000m",bundle:100,bundleSize:"200m",pv:1e8}},ZS={free:{price:0,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u514D\u8D39\u7248",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u514D\u8D39\u7248"},standard:{price:800,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u6807\u51C6\u7248",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u6807\u51C6\u7248\u4E00\u5E74\u671F\u670D\u52A1"},premium:{price:2400,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u9AD8\u7EA7\u7248",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u9AD8\u7EA7\u7248\u4E00\u5E74\u671F\u670D\u52A1"},pro:{price:7200,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u4E13\u4E1A\u7248",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u4E13\u4E1A\u7248\u4E00\u5E74\u671F\u670D\u52A1"},vip1:{price:30000,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5927\u5BA2\u6237 VIP1",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5927\u5BA2\u6237 VIP1 \u4E00\u5E74\u671F\u670D\u52A1"},vip2:{price:60000,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5927\u5BA2\u6237 VIP2",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5927\u5BA2\u6237 VIP2 \u4E00\u5E74\u671F\u670D\u52A1"},vip3:{price:120000,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5927\u5BA2\u6237 VIP3",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5927\u5BA2\u6237 VIP3 \u4E00\u5E74\u671F\u670D\u52A1"},custom:{price:0,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5B9A\u5236\u7248",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5B9A\u5236\u7248\u4E00\u5E74\u671F\u670D\u52A1"}};async function QG({user:A,userId:I}){let g=wy.default(),C=A||await WE({userId:I});if(!C)throw Error("User not found");if(C.tierExpiresAt){let B=wy.default(C.tierExpiresAt);if(g.isAfter(B,"day"))C=await wI.users.update({data:{tier:"free",tierExpiresAt:null},where:{id:I}})}if(C.tier==="custom"||C.quota){let B=C.quota;if(B.base&&Gy[B.base])B={...Gy[B.base],...B};return B}return Gy[C.tier]}async function CEA({user:A}){let I=await QG({user:A}),g=A.id,C=await z8({userId:g}),Q=(await v5(C.map((D)=>D.appKey))).reduce((D,G)=>D+Number(G),0),E=I.pv;await vg.zadd(ZE.userCheckUpdateQuota(),E-Q,String(g))}async function BEA({user:A}){let I=await f5({user:A,days:7});return{counts:I,avg:Math.floor(I?.reduce((g,C)=>g+C,0)/7)}}async function f5({user:A,day:I,days:g}){let C=(await QG({user:A})).pv,B=A.id;if(g){let E=wy.default(),D=vg.pipeline();for(let Y=0;Y<g;Y++){let w=E.subtract(Y,"day");D.zscore(ZE.userCheckUpdateQuota(w),String(B))}return(await D.exec())?.map(([Y,w])=>{if(w)return Number(w);return C})}let Q=await vg.zscore(ZE.userCheckUpdateQuota(I),String(B));if(Q)return Number(Q);return C}async function v5(A){if(A.length===0)return[];return await vg.zmscore(ZE.appCheckUpdate(),A)}var WS=bg(dJ(),1),ziI=[8673,8672,14849],WH=new xI().derive({as:"scoped"},async({body:A,params:{appId:I},status:g})=>{let C=A?.deps;if(!C)return;if(ziI.includes(Number(I)))return;for(let[B,Q]of Object.entries(C))if(B==="react-native-update"){if(WS.default(Q,"<8"))return g(400,{message:`react-native-update \u5F53\u524D\u7248\u672C(${Q})\u5DF2\u4E0D\u518D\u652F\u6301\uFF0C\u8BF7\u6267\u884C "npm i react-native-update@8" \u66F4\u65B0\u5230 v8 \u7248\u672C\u540E\u91CD\u65B0\u6253\u5305 `});if(WS.default(Q,"8.0.0 - 8.5.5"))return g(400,{message:`react-native-update \u5F53\u524D\u7248\u672C(${Q})\u5DF2\u4E0D\u518D\u652F\u6301\uFF0C\u8BF7\u6267\u884C "npm i react-native-update@8" \u66F4\u65B0\u540E\u91CD\u65B0\u6253\u5305 `});if(WS.default(Q,"9.0.0 - 9.2.4"))return g(400,{message:`react-native-update \u5F53\u524D\u7248\u672C(${Q})\u5DF2\u4E0D\u518D\u652F\u6301\uFF0C\u8BF7\u6267\u884C "npm i react-native-update@9" \u66F4\u65B0\u540E\u91CD\u65B0\u6253\u5305 `});if(WS.default(Q,"10.0.0 - 10.26.4"))return g(400,{message:`react-native-update \u5F53\u524D\u7248\u672C(${Q})\u5DF2\u4E0D\u518D\u652F\u6301\uFF0C\u8BF7\u6267\u884C "npm i react-native-update@10" \u66F4\u65B0\u540E\u91CD\u65B0\u6253\u5305 `})}});var Yy=({types:A,fromHash:I,toHash:g,platform:C})=>{if(C)A=C==="harmony"?["hdiffFromApp"]:[`diffFrom${RH[C]}`,`hdiffFrom${RH[C]}`];if(!A)return;wI.tasks.createMany({data:A.map((B)=>({type:B,fromHash:I,toHash:g}))}).catch(()=>{})},QEA=({app:A,toHash:I})=>{wI.packages.findMany({where:{appId:A.id,status:"normal"},orderBy:{createdAt:"desc"},select:{hash:!0},skip:0,take:5}).then((g)=>{let C=g.map((B)=>({type:`hdiffFrom${RH[A.platform]}`,fromHash:B.hash,toHash:I}));wI.tasks.createMany({data:C}).catch(()=>{})})};var EEA=new xI({prefix:"/binding"}).use(FH).use(WH).get("/",async({query:{packageId:A},appId:I})=>{let g=Number(A);return{data:await wI.bindings.findMany({where:g?{packageId:g,appId:I}:{appId:I},select:{id:!0,versionId:!0,packageId:!0,rollout:!0}})}}).post("/",async({appId:A,app:I,status:g,body:C})=>{let{versionId:B,rollout:Q,config:E,packageId:D}=C,G=await wI.packages.findUnique({where:{id:D,appId:A},select:{id:!0,hash:!0,name:!0,buildTime:!0}});if(!G)return g(403,{message:"\u539F\u751F\u5305\u4E0D\u5B58\u5728\u6216\u4E0D\u5C5E\u4E8E\u5F53\u524D\u5E94\u7528"});let Y=await wI.versions.findUnique({where:{id:B,appId:A},select:{id:!0,hash:!0,config:!0}});if(!Y)return g(403,{message:"\u70ED\u66F4\u65B0\u7248\u672C\u4E0D\u5B58\u5728\u6216\u4E0D\u5C5E\u4E8E\u5F53\u524D\u5E94\u7528"});let w="full";if(Q!==null&&Q!==void 0&&Q<100)w="exp";try{let M=await wI.$transaction(async(J)=>{if(await J.bindings.deleteMany({where:{OR:[{packageId:D,type:w},{packageId:D,versionId:B}]}}),await J.packages.update({where:{id:D},data:{versionId:null}}),Y.config?.rollout?.[D])delete Y.config.rollout[D];return await J.versions.update({where:{id:B},data:{config:Y.config}}),J.bindings.create({data:{appId:A,packageId:D,versionId:B,type:w,rollout:Q,config:E}})});return Yy({platform:I.platform,fromHash:G.hash,toHash:Y.hash}),{data:M}}catch(M){return console.error(M),g(403,{message:"\u521B\u5EFA\u6216\u66F4\u65B0\u7ED1\u5B9A\u5931\u8D25\uFF0C\u6700\u591A\u53EA\u80FD\u540C\u65F6\u7ED1\u5B9A\u4E00\u4E2A\u5168\u91CF\u548C\u4E00\u4E2A\u7070\u5EA6\u7248\u672C"})}},{body:dQA}).guard({params:xQA}).delete("/:bindingId",async({params:{bindingId:A},appId:I,status:g})=>{try{return await wI.bindings.delete({where:{id:A,appId:I}}),{}}catch(C){return console.error(C),g(403,{message:"\u5220\u9664\u7ED1\u5B9A\u5931\u8D25"})}});var wyA=bg(QyA(),1),NP=bg(DyA(),1);var pQ={region:process.env.OSS_REGION,accessKey:process.env.OSS_ACCESSKEY,secretKey:process.env.OSS_SECRETKEY,maxSize:"500m",bucket:process.env.OSS_BUCKET,cdnUrl:"https://dl.charmlot.com",backupCdnUrls:["https://dl.rnpushy.cn","https://pushy.cdn.dfyun.com.cn"]};function GyA(A,I=1){if(A.length===0)return[];if(I>=A.length)return[...A].sort(()=>Math.random()-0.5);if(I<=0)return[];let g=Array.from({length:A.length},(B,Q)=>Q),C=[];for(let B=0;B<I;B++){let Q=Math.floor(Math.random()*g.length),E=g[Q];C.push(A[E]),g.splice(Q,1)}return C}var kP=process.env.ENV==="aliyun",VF=new wyA.default({region:pQ.region,accessKeyId:pQ.accessKey,accessKeySecret:pQ.secretKey,bucket:pQ.bucket,internal:kP}),MoI=`https://${pQ.bucket}.${pQ.region}.aliyuncs.com`,JoI=`https://${pQ.bucket}.${pQ.region}-internal.aliyuncs.com`,NoI=`https://${pQ.bucket}.oss-accelerate.aliyuncs.com`,koI=NP.default(pQ.maxSize||"20m");function YyA({internal:A,maxSize:I}){let g={expiration:new Date(Date.now()+600000).toISOString(),conditions:[{bucket:pQ.bucket},["content-length-range",0,I?NP.default(I):koI]]},C={...VF.calculatePostSignature(g),"x-oss-forbid-overwrite":"true",key:aw(21)};return{url:A&&kP?JoI:MoI,backupUrl:NoI,formData:C,maxSize:I}}async function KyA(A){if(await Vq(A)){if(kP)return VF.signatureUrl(A);return`${pQ.cdnUrl}/${A}`}throw Error(`Key ${A} not found`)}var HoI=[pQ.cdnUrl,...pQ.backupCdnUrls],MyA=()=>[pQ.cdnUrl,...GyA(pQ.backupCdnUrls,2)].map((A)=>A.replace("https://",""));function zF(A){return HoI.map((I)=>`${I}/${A}`)}async function Vq(A){try{return await VF.head(A),!0}catch{}return!1}function PF(A){return VF.delete(A)}async function JyA({appId:A,status:I,offset:g,limit:C}){let B={appId:A,status:I};if(I)B.status=I;let[Q,E]=await Promise.all([wI.packages.count({where:B}),wI.packages.findMany({where:B,orderBy:{id:"desc"},select:{id:!0,hash:!0,name:!0,status:!0,buildTime:!0,buildNumber:!0,note:!0,deps:!0,commit:!0,versions:{select:{id:!0,name:!0,hash:!0}},bindings:{select:{id:!0,type:!0,versions:{select:{id:!0,name:!0,hash:!0}}},orderBy:{createdAt:"desc"}}},skip:g,take:C})]);return{data:ZH(E),count:Q}}var NyA=new xI({prefix:"/package"}).use(WH).use(FH).post("/create",async({userId:A,appId:I,status:g,body:{hash:C,name:B,buildTime:Q,note:E,deps:D,commit:G,buildNumber:Y}})=>{let w=await QG({userId:A});if(await wI.packages.count({where:{appId:I}})>=w.package)return g(403,{message:`\u6BCF\u4E2A\u5E94\u7528\u6700\u591A\u53EF\u4EE5\u53D1\u5E03${w.package}\u4E2A\u539F\u751F\u5305\u3002\u8BF7\u5148\u5220\u9664\u73B0\u6709\u7684\u539F\u751F\u5305\u6216\u5347\u7EA7\u5230\u66F4\u9AD8\u7EA7\u522B\u670D\u52A1\u3002`});try{return{id:(await wI.packages.create({data:{appId:I,hash:C,name:B,buildTime:Q,note:E,deps:D,commit:G,buildNumber:Y}})).id}}catch(J){return console.error(J),g(403,{message:"\u521B\u5EFA\u5305\u5931\u8D25\uFF08\u8BF7\u68C0\u67E5\u539F\u751F\u7248\u672C\u662F\u5426\u91CD\u590D\uFF09"})}},{body:pQA}).get("/list",async({appId:A,query:{offset:I=0,limit:g=10,status:C}})=>{return[26383].includes(A)?await _J({cacheKey:`packageList_${A}_${I}_${g}_${C}`,handler:()=>JyA({appId:A,offset:I,limit:g,status:C})}):JyA({appId:A,offset:I,limit:g,status:C})},{query:PQA}).guard({params:bQA}).delete("/:packageId",async({params:{packageId:A},appId:I})=>{let g=await wI.packages.findUnique({where:{appId:I,id:A}});if(g){let{hash:C}=g;await wI.packages.delete({where:{appId:I,id:A}}),PF(C)}return{}}).put("/:packageId",async({params:{packageId:A},appId:I,app:g,status:C,body:B})=>{let{versionId:Q}=B;if(Q){let E=await wI.versions.findUnique({where:{id:Q,appId:I},select:{id:!0,hash:!0,config:!0}});if(!E)return C(403,{message:"versionId \u9519\u8BEF\u6216\u4E0D\u5C5E\u4E8E\u5F53\u524D\u5E94\u7528"});let D=await wI.packages.findUnique({where:{id:A,appId:I},select:{hash:!0,name:!0,buildTime:!0,deps:!0,versions:{select:{hash:!0,config:!0}}}});if(!D)return C(403,{message:"packageId \u9519\u8BEF\u6216\u4E0D\u5C5E\u4E8E\u5F53\u524D\u5E94\u7528"});Yy({platform:g.platform,fromHash:D.hash,toHash:E.hash})}return await wI.packages.update({where:{appId:I,id:A},data:B}),{}},{body:mQA});function HP(A){if(!A||typeof A!=="object")return!1;let I=Object.getPrototypeOf(A);if(!(I===null||I===Object.prototype||Object.getPrototypeOf(I)===null))return!1;return Object.prototype.toString.call(A)==="[object Object]"}function kyA(A){return A==="__proto__"}function zq(A,I){let g=Object.keys(I);for(let C=0;C<g.length;C++){let B=g[C];if(kyA(B))continue;let Q=I[B],E=A[B];if(HyA(Q)&&HyA(E))A[B]=zq(E,Q);else if(Array.isArray(Q))A[B]=zq([],Q);else if(HP(Q))A[B]=zq({},Q);else if(E===void 0||Q!==void 0)A[B]=Q}return A}function HyA(A){return HP(A)||Array.isArray(A)}var qyA=new xI({prefix:"/version"}).use(WH).use(FH).post("/create",async({userId:A,appId:I,status:g,body:{hash:C,name:B,description:Q,metaInfo:E,config:D,deps:G,commit:Y},app:w})=>{let M=await QG({userId:A});if(await wI.versions.count({where:{appId:I}})>=M.bundle)return g(403,{message:`\u6BCF\u4E2A\u5E94\u7528\u6700\u591A\u53EF\u4EE5\u521B\u5EFA${M.bundle}\u4E2A\u70ED\u66F4\u65B0\u3002\u8BF7\u5148\u5220\u9664\u73B0\u6709\u7684\u70ED\u66F4\u65B0\u6216\u5347\u7EA7\u5230\u66F4\u9AD8\u7EA7\u522B\u670D\u52A1\u3002`});let K=await wI.versions.create({data:{appId:I,hash:C,name:B||"(untitled)",description:Q,metaInfo:E,config:D,deps:G,commit:Y}});return QEA({app:w,toHash:K.hash}),{id:K.id}},{body:vQA}).get("/list",async({appId:A,query:{offset:I=0,limit:g=10}})=>{let[C,B]=await Promise.all([wI.versions.count({where:{appId:A}}),wI.versions.findMany({where:{appId:A},orderBy:{id:"desc"},select:{id:!0,hash:!0,name:!0,description:!0,metaInfo:!0,config:!0,deps:!0,commit:!0,createdAt:!0,packages:{select:{id:!0,name:!0,status:!0}}},skip:I,take:g})]);return{data:ZH(B),count:C}},{query:zQA}).guard({params:$QA}).delete("/:versionId",async({params:{versionId:A},appId:I})=>{let g=await wI.versions.findUnique({where:{appId:I,id:A}});if(g){let{hash:C}=g;await wI.versions.delete({where:{appId:I,id:A}}),PF(C)}return{}}).put("/:versionId",async({params:{versionId:A},appId:I,body:g})=>{let{name:C,description:B,metaInfo:Q,config:E}=g;if(E){let D=await wI.versions.findUnique({where:{appId:I,id:A}});if(D&&typeof D.config==="object"&&D.config!==null)E=zq(D.config,E)}return await wI.versions.update({where:{appId:I,id:A},data:{name:C,description:B,metaInfo:Q,config:E}}),{}},{body:_QA});var RyA=new xI({prefix:"/app"}).use(lJ).post("/create",async({userId:A,status:I,body:{name:g,platform:C}})=>{if(!A)return I(401,{message:"\u8BF7\u5148\u767B\u5F55"});let B=await QG({userId:A});if(await wI.apps.count({where:{userId:A}})>=B.app)return I(403,{message:`\u60A8\u76EE\u524D\u6700\u591A\u53EF\u4EE5\u521B\u5EFA${B.app}\u4E2A\u5E94\u7528\u3002\u8BF7\u5148\u5220\u9664\u5DF2\u6709\u5E94\u7528\u6216\u5347\u7EA7\u5230\u66F4\u9AD8\u7EA7\u522B\u670D\u52A1\u3002`});let E=aw(24),D=aw(24);return{id:(await wI.apps.create({data:{userId:A,name:g,platform:C,appKey:E,appSecret:D}})).id}},{body:oQA}).get("/list",async({userId:A})=>{if(!A)return{data:[]};let I=await z8({userId:A}),g=I.map((B)=>B.appKey),C=await v5(g);return{data:ZH(I.map((B,Q)=>({...B,checkCount:C[Q]})))}}).group("/:appId",{params:TQA},(A)=>A.delete("/",async({userId:I,status:g,params:{appId:C}})=>{let B=await wI.packages.count({where:{appId:C}});if(B>0)return g(403,{message:`\u8BF7\u5148\u6E05\u7A7A\u6B64\u5E94\u7528\u4E0B\u7684\u6240\u6709\u539F\u751F\u5305(\u73B0\u6709${B}\u4E2A)`});let Q=await wI.versions.count({where:{appId:C}});if(Q>0)return g(403,{message:`\u8BF7\u5148\u6E05\u7A7A\u6B64\u5E94\u7528\u4E0B\u7684\u6240\u6709\u70ED\u66F4\u5305(\u73B0\u6709${Q}\u4E2A)`});if(!await wI.apps.delete({where:{userId:I,id:C}}))return g(404);return{}}).get("/",async({userId:I,status:g,params:{appId:C}})=>{let B=await KM({appId:C});if(!B||B?.userId!==I)return g(404);return B}).put("/",async({userId:I,status:g,params:{appId:C},body:B})=>{if(B.ignoreBuildTime==="enabled"){let E=await WE({userId:I});if(!E)return g(404);if(E.tier==="free"||E.tier==="standard")return g(403,{message:"\u6B64\u529F\u80FD\u9700\u8981\u9AD8\u7EA7\u7248\u4EE5\u4E0A"})}if(!await wI.apps.update({where:{userId:I,id:C},data:B}))return g(404);return await Promise.all([tIA({appId:C}),eIA({userId:I})]),{}},{body:fQA}).use(qyA).use(NyA).use(EEA));var qoI=a.Object({key:a.String(),value:a.String()}),RoI=a.Object({tier:a.Optional(a.String()),tierExpiresAt:a.Optional(a.Union([a.String(),a.Null()])),status:a.Optional(a.Union([a.Literal("normal"),a.Literal("unverified")])),quota:a.Optional(a.Union([a.Any(),a.Null()]))}),SyA=new xI({prefix:"/admin"}).use(OQA).get("/config/:key?",async({params:A,status:I})=>{let{key:g}=A;if(g){let B=await vg.hget(ZE.dynamicConfig(),g);if(B===null)return I(404,{message:"config not found"});return{key:g,value:B}}return{data:await vg.hgetall(ZE.dynamicConfig())}},{detail:{hide:!0}}).post("/config",async({body:A})=>{let{key:I,value:g}=A;return await vg.hset(ZE.dynamicConfig(),I,g),{key:I,value:g}},{body:qoI,detail:{hide:!0}}).delete("/config/:key",async({params:{key:A},status:I})=>{if(!await vg.hexists(ZE.dynamicConfig(),A))return I(404,{message:"config not found"});return await vg.hdel(ZE.dynamicConfig(),A),{key:A,deleted:!0}},{detail:{hide:!0}}).get("/users",async({query:A})=>{let{search:I}=A,g=I?{OR:[{name:{contains:I}},{email:{contains:I}}]}:{};return{data:await wI.users.findMany({where:g,select:{id:!0,email:!0,name:!0,status:!0,tier:!0,tierExpiresAt:!0,quota:!0,createdAt:!0},orderBy:{id:"desc"},take:50})}},{query:a.Object({search:a.Optional(a.String())}),detail:{hide:!0}}).put("/users/:id",async({params:{id:A},body:I,status:g})=>{let C=Number(A);if(!await wI.users.findUnique({where:{id:C}}))return g(404,{message:"User not found"});let Q={};if(I.tier!==void 0)Q.tier=I.tier;if(I.status!==void 0)Q.status=I.status;if(I.tierExpiresAt!==void 0)Q.tierExpiresAt=I.tierExpiresAt?new Date(I.tierExpiresAt):null;if(I.quota!==void 0)Q.quota=I.quota;return await wI.users.update({where:{id:C},data:Q,select:{id:!0,email:!0,name:!0,status:!0,tier:!0,tierExpiresAt:!0,quota:!0}})},{body:RoI,detail:{hide:!0}});var SoI=a.Object({offset:a.Optional(a.Numeric()),limit:a.Optional(a.Numeric()),userId:a.Optional(a.Numeric()),method:a.Optional(a.String()),path:a.Optional(a.String()),startDate:a.Optional(a.String({format:"date-time"})),endDate:a.Optional(a.String({format:"date-time"}))}),hoI=["sunnylqm@qq.com","sunnylqm@gmail.com"],hyA=new xI({prefix:"/audit"}).use(JM).get("/logs",async({userId:A,status:I,query:{offset:g=0,limit:C=50,userId:B,method:Q,path:E,startDate:D,endDate:G}})=>{let Y=await WE({userId:A});if(!Y)return I(401,{message:"\u8BF7\u5148\u767B\u5F55"});let w=hoI.includes(Y.email),M;if(!w){if(B&&B!==A)return I(403,{message:"\u65E0\u6743\u67E5\u770B\u5176\u4ED6\u7528\u6237\u7684\u5BA1\u8BA1\u65E5\u5FD7"});M=A}else M=B??A;let J={};if(M)J.userId=M;if(Q)J.method=Q;if(E)J.path=E;if(D||G){if(J.createdAt={},D)J.createdAt.gte=new Date(D);if(G)J.createdAt.lte=new Date(G)}let[K,N]=await Promise.all([wI.audit_logs.findMany({where:J,orderBy:{createdAt:"desc"},skip:Number(g),take:Number(C),select:{id:!0,userId:!0,method:!0,path:!0,data:!0,statusCode:!0,ip:!0,userAgent:!0,createdAt:!0,apiTokens:{select:{tokenSuffix:!0}}}}),wI.audit_logs.count({where:J})]);return{data:K,total:N,offset:Number(g),limit:Number(C)}},{query:SoI});var vM=bg(vJ(),1);var WvI=v4A(),UvI=bE(),XvI=wFA(),jvI=MFA(),OvI=kFA(),VvI=RFA(),zvI=iFA(),PvI=ZFA(),sFg=Vh(),rFg=ww(),tFg=(process.env.ETHEREAL_API||"https://api.nodemailer.com").replace(/\/+$/,""),eFg=(process.env.ETHEREAL_WEB||"https://ethereal.email").replace(/\/+$/,""),AZg=(process.env.ETHEREAL_API_KEY||"").replace(/\s*/g,"")||null,IZg=["true","yes","y","1"].includes((process.env.ETHEREAL_CACHE||"yes").toString().trim().toLowerCase());var cP=function(A,I){let g,C,B;if(typeof A==="object"&&typeof A.send!=="function"||typeof A==="string"&&/^(smtps?|direct):/i.test(A)){if(g=typeof A==="string"?A:A.url)C=UvI.parseConnectionUrl(g);else C=A;if(C.pool)A=new XvI(C);else if(C.sendmail)A=new OvI(C);else if(C.streamTransport)A=new VvI(C);else if(C.jsonTransport)A=new zvI(C);else if(C.SES){if(C.SES.ses&&C.SES.aws){let Q=Error("Using legacy SES configuration, expecting @aws-sdk/client-sesv2, see https://nodemailer.com/transports/ses/");throw Q.code="LegacyConfig",Q}A=new PvI(C)}else A=new jvI(C)}return B=new WvI(A,C,I),B};var oP={pool:!0,host:process.env.SMTP_HOST,secure:!0,rateLimit:10,auth:{user:process.env.SMTP_USER,pass:process.env.SMTP_PASS},from:process.env.SMTP_FROM};var xvI=cP(oP);async function bh(A){return xvI.sendMail({...A,from:oP.from}).catch((I)=>console.error(I))}class ch{#A;#I=0;#g=new Map;#C=new Map;constructor(A){this.#A=A}get cache(){return this.#g}get _cache(){return this.#C}get(A,I){let g=this.#g.get(A),C=I?.maxAge,B;function Q(){return B=B||Date.now(),B}if(g){if(g.expired&&Q()>g.expired)g.expired=0,g.value=void 0;else if(C!==void 0){let E=C?Q()+C:0;g.expired=E}return g.value}if(g=this.#C.get(A),g){if(g.expired&&Q()>g.expired)g.expired=0,g.value=void 0;else if(this._update(A,g),C!==void 0){let E=C?Q()+C:0;g.expired=E}return g.value}}set(A,I,g){let C=g?.maxAge,B=C?Date.now()+C:0,Q=this.#g.get(A);if(Q)Q.expired=B,Q.value=I;else Q={value:I,expired:B},this._update(A,Q)}keys(){let A=new Set,I=Date.now();for(let[C,B]of this.#g.entries())g(C,B);for(let[C,B]of this.#C.entries())g(C,B);function g(C,B){if(B.value&&!B.expired||B.expired>=I)A.add(C)}return Array.from(A)}reset(){this.#I=0,this.#g.clear(),this.#C.clear()}_update(A,I){if(this.#g.set(A,I),this.#I++,this.#I>=this.#A)this.#I=0,this.#C=this.#g,this.#g=new Map}}import{randomBytes as $vI,createHash as bvI}from"crypto";import{Readable as WFA}from"stream";import{performance as cvI}from"perf_hooks";import{ReadableStream as ovI,TransformStream as fvI}from"stream/web";import{Blob as vvI}from"buffer";var AI={kSocketId:Symbol("socket id"),kSocketStartTime:Symbol("socket start time"),kSocketConnectedTime:Symbol("socket connected time"),kSocketConnectErrorTime:Symbol("socket connectError time"),kSocketRequestEndTime:Symbol("socket request end time"),kSocketLocalAddress:Symbol("socket local address"),kSocketLocalPort:Symbol("socket local port"),kSocketConnectHost:Symbol("socket connect params: host"),kSocketConnectPort:Symbol("socket connect params: port"),kSocketConnectProtocol:Symbol("socket connect params: protocol"),kHandledRequests:Symbol("handled requests per socket"),kHandledResponses:Symbol("handled responses per socket"),kRequestSocket:Symbol("request on the socket"),kRequestId:Symbol("request id"),kRequestStartTime:Symbol("request start time"),kEnableRequestTiming:Symbol("enable request timing or not"),kRequestTiming:Symbol("request timing"),kRequestOriginalOpaque:Symbol("request original opaque"),kRequestInternalOpaque:Symbol("request internal opaque"),kErrorSocket:Symbol("socket of error")};var _vI={'"':"\\\"","\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"},pvI=/[\u0000-\u001F\u005C]/g;function mvI(A){return _vI[A]||"\\u"+(A.charCodeAt(0)+65536).toString(16).substring(1)}function dvI(A){return A.replace(pvI,mvI)}function UFA(A,I){if(typeof I==="function")A=I(A);else if(I)A=dvI(A);try{A=JSON.parse(A)}catch(g){if(g.name==="SyntaxError")g.name="JSONResponseFormatError";if(A.length>1024)g.message+=" (data json format: "+JSON.stringify(A.slice(0,512))+" ...skip... "+JSON.stringify(A.slice(A.length-512))+")";else g.message+=" (data json format: "+JSON.stringify(A)+")";throw g}return A}function fP(A){let I=bvI("md5");return I.update(A,"utf8"),I.digest("hex")}var uvI=/(\w{1,100})=["']?([^'"]+)["']?/,lvI=0,avI="00000000";function XFA(A,I,g,C){let B=g.split(","),Q={};for(let S of B){let H=S.match(uvI);if(H)Q[H[1]]=H[2].replace(/["']/g,"")}if(!Q.realm||!Q.nonce)return"";let E=Q.qop||"",D=C.indexOf(":"),G=C.substring(0,D),Y=C.substring(D+1),w=String(++lvI);w=`${avI.substring(w.length)}${w}`;let M=$vI(8).toString("hex"),J=fP(`${G}:${Q.realm}:${Y}`),K=fP(`${A.toUpperCase()}:${I}`),N=`${J}:${Q.nonce}`;if(E)E=E.split(",")[0],N+=`:${w}:${M}:${E}`;N+=`:${K}`;let k=fP(N),q=`Digest username="${G}", realm="${Q.realm}", nonce="${Q.nonce}", uri="${I}", response="${k}"`;if(Q.opaque)q+=`, opaque="${Q.opaque}"`;if(E)q+=`, qop=${E}, nc=${w}, cnonce="${M}"`;return q}var nvI=Math.pow(2,31)-10,oF={};function yN(A){if(!oF[A]||oF[A]>=nvI)oF[A]=0;return++oF[A]}function VD(A,I){return Math.floor(((I??cvI.now())-A)*1000)/1000}function FN(A){if(typeof WFA.isReadable==="function")return WFA.isReadable(A);return A!==null&&typeof A==="object"&&typeof A.pipe==="function"&&A.readable!==!1&&typeof A._read==="function"&&typeof A._readableState==="object"}function xq(A,I,g){let C=I[AI.kRequestSocket]??g?.[AI.kErrorSocket];if(C){if(A.id=C[AI.kSocketId],A.handledRequests=C[AI.kHandledRequests],A.handledResponses=C[AI.kHandledResponses],C[AI.kSocketLocalAddress])A.localAddress=C[AI.kSocketLocalAddress],A.localPort=C[AI.kSocketLocalPort];if(C.remoteAddress)A.remoteAddress=C.remoteAddress,A.remotePort=C.remotePort,A.remoteFamily=C.remoteFamily;if(Array.isArray(C.autoSelectFamilyAttemptedAddresses))A.attemptedRemoteAddresses=C.autoSelectFamilyAttemptedAddresses;if(A.bytesRead=C.bytesRead,A.bytesWritten=C.bytesWritten,C[AI.kSocketConnectErrorTime])A.connectErrorTime=C[AI.kSocketConnectErrorTime],A.connectProtocol=C[AI.kSocketConnectProtocol],A.connectHost=C[AI.kSocketConnectHost],A.connectPort=C[AI.kSocketConnectPort];if(C[AI.kSocketConnectedTime])A.connectedTime=C[AI.kSocketConnectedTime];if(C[AI.kSocketRequestEndTime])A.lastRequestEndTime=C[AI.kSocketRequestEndTime];C[AI.kSocketRequestEndTime]=new Date}}function vP(A){let I={};for(let[g,C]of A.entries())if(I[g]){if(!Array.isArray(I[g]))I[g]=[I[g]];I[g].push(C)}else I[g]=C;return I}function jFA(){if(typeof global.ReadableStream>"u")global.ReadableStream=ovI;if(typeof global.TransformStream>"u")global.TransformStream=fvI;if(typeof global.Blob>"u")global.Blob=vvI;if(typeof global.DOMException>"u")global.DOMException=svI()}function svI(){try{atob(0)}catch(A){return A.constructor}}var WZA=bg($q(),1),UZA=bg(mP(),1),QT=bg(ty(),1),XZA=bg(J4(),1);import lF from"diagnostics_channel";import{EventEmitter as e_I}from"events";import{STATUS_CODES as ApI}from"http";import{debuglog as IpI}from"util";import{createGunzip as hZA,createBrotliDecompress as iZA,gunzipSync as gpI,brotliDecompressSync as CpI}from"zlib";import{Readable as vh,pipeline as BpI}from"stream";import{pipeline as LZA}from"stream/promises";import{basename as ZZA}from"path";import{createReadStream as QpI}from"fs";import{format as EpI}from"url";import{performance as DpI}from"perf_hooks";import GpI from"querystring";import{setTimeout as wpI}from"timers/promises";import{request as yZA,Agent as FZA,getGlobalDispatcher as YpI}from"undici";var qZA=bg(HZA(),1);import IT from"path";var m_I=/[^\x00-\x7F]/i;class pF extends qZA.default{_getContentDisposition(A,I){let g,C;if(typeof I.filepath==="string")g=IT.normalize(I.filepath).replace(/\\/g,"/");else if(I.filename||A.name||A.path)g=IT.basename(I.filename||A.name||A.path);else if(A.readable&&A.hasOwnProperty("httpVersion"))g=IT.basename(A.client._httpMessage.path||"");if(g){if(C='filename="'+g+'"',m_I.test(g))C+="; filename*=UTF-8''"+encodeURIComponent(g)}return C}}import u_I from"dns";import{isIP as l_I}from"net";import{Agent as d_I}from"undici";class ZN extends d_I{#A;constructor(A){super(A);this.#A=A.opaqueLocalStorage}dispatch(A,I){let g=this.#A?.getStore();if(g)I.opaque=g;return super.dispatch(A,I)}}class mF extends Error{hostname;ip;family;constructor(A,I,g){super("illegal address");this.name=this.constructor.name,this.hostname=A,this.ip=I,this.family=g,Error.captureStackTrace(this,this.constructor)}}class oh extends ZN{#A;constructor(A){let{lookup:I=u_I.lookup,...g}=A,C=(B,Q,E)=>{I(B,Q,(D,...G)=>{let Y=G[0],w=G[1];if(D)return E(D,Y,w);if(A.checkAddress){if(typeof Y==="string"){if(!A.checkAddress(Y,w,B))D=new mF(B,Y,w)}else if(Array.isArray(Y)){let M=Y;for(let J of M)if(!A.checkAddress(J.address,J.family,B)){D=new mF(B,J.address,J.family);break}}}E(D,Y,w)})};super({...g,connect:{...A.connect,lookup:C,allowH2:A.allowH2}});this.#A=A.checkAddress}dispatch(A,I){if(this.#A&&A.origin){let C=(typeof A.origin==="string"?new URL(A.origin):A.origin).hostname;if(C.startsWith("[")&&C.endsWith("]"))C=C.substring(1,C.length-1);let B=l_I(C);if(B===4||B===6){if(!this.#A(C,B,C))throw new mF(C,C,B)}}return super.dispatch(A,I)}}import a_I from"diagnostics_channel";import{performance as n_I}from"perf_hooks";import{debuglog as s_I}from"util";import{Socket as SZA}from"net";var zD=s_I("urllib/diagnosticsChannel"),RZA=!1;function WN(A,I){a_I.subscribe(A,I)}var gT;function dF(A){if(!A)return A;if(!gT){let I=Object.getOwnPropertySymbols(A);for(let g of I)if(g.description==="reset"){gT=g;break}}return{localAddress:A[AI.kSocketLocalAddress],localPort:A[AI.kSocketLocalPort],remoteAddress:A.remoteAddress,remotePort:A.remotePort,attemptedAddresses:A.autoSelectFamilyAttemptedAddresses,connecting:A.connecting,reset:A[gT]}}var r_I=SZA.prototype.destroy;SZA.prototype.destroy=function(A){if(A)Object.defineProperty(A,AI.kErrorSocket,{enumerable:!1,value:this});return r_I.call(this,A)};function t_I(A,I){if(!I)return;let g=Reflect.get(A,I);return g?.opts?.opaque??g?.opaque}function uF(){if(RZA)return;RZA=!0;let A;WN("undici:request:create",(I,g)=>{let{request:C}=I;if(!A){let Q=Object.getOwnPropertySymbols(C);for(let E of Q)if(E.description==="handler"){A=E;break}}let B=t_I(C,A);if(!B||!B[AI.kRequestId])return;if(Reflect.set(C,AI.kRequestInternalOpaque,B),zD("[%s] Request#%d %s %s, path: %s, headers: %j",g,B[AI.kRequestId],C.method,C.origin,C.path,C.headers),!B[AI.kEnableRequestTiming])return;B[AI.kRequestTiming].queuing=VD(B[AI.kRequestStartTime])}),WN("undici:client:connectError",(I,g)=>{let{error:C,connectParams:B,socket:Q}=I,E=Q;if(!E&&C[AI.kErrorSocket])E=C[AI.kErrorSocket];if(E){if(E[AI.kSocketId]=yN("UndiciSocket"),E[AI.kSocketConnectErrorTime]=new Date,E[AI.kHandledRequests]=0,E[AI.kHandledResponses]=0,E.localAddress)E[AI.kSocketLocalAddress]=E.localAddress,E[AI.kSocketLocalPort]=E.localPort;E[AI.kSocketConnectProtocol]=B.protocol,E[AI.kSocketConnectHost]=B.host,E[AI.kSocketConnectPort]=B.port,zD("[%s] Socket#%d connectError, connectParams: %j, error: %s, (sock: %j)",g,E[AI.kSocketId],B,C.message,dF(E))}else zD("[%s] connectError, connectParams: %j, error: %o",g,B,C)}),WN("undici:client:connected",(I,g)=>{let{socket:C,connectParams:B}=I;C[AI.kSocketId]=yN("UndiciSocket"),C[AI.kSocketStartTime]=n_I.now(),C[AI.kSocketConnectedTime]=new Date,C[AI.kHandledRequests]=0,C[AI.kHandledResponses]=0,C[AI.kSocketLocalAddress]=C.localAddress,C[AI.kSocketLocalPort]=C.localPort,C[AI.kSocketConnectProtocol]=B.protocol,C[AI.kSocketConnectHost]=B.host,C[AI.kSocketConnectPort]=B.port,zD("[%s] Socket#%d connected (sock: %j)",g,C[AI.kSocketId],dF(C))}),WN("undici:client:sendHeaders",(I,g)=>{let{request:C,socket:B}=I,Q=Reflect.get(C,AI.kRequestInternalOpaque);if(!Q||!Q[AI.kRequestId]){zD("[%s] opaque not found",g);return}if(B[AI.kHandledRequests]++,Q[AI.kRequestSocket]=B,zD("[%s] Request#%d send headers on Socket#%d (handled %d requests, sock: %j)",g,Q[AI.kRequestId],B[AI.kSocketId],B[AI.kHandledRequests],dF(B)),!Q[AI.kEnableRequestTiming])return;if(Q[AI.kRequestTiming].requestHeadersSent=VD(Q[AI.kRequestStartTime]),B[AI.kHandledRequests]===1)Q[AI.kRequestTiming].connected=VD(Q[AI.kRequestStartTime],B[AI.kSocketStartTime])}),WN("undici:request:bodySent",(I,g)=>{let{request:C}=I,B=Reflect.get(C,AI.kRequestInternalOpaque);if(!B||!B[AI.kRequestId]){zD("[%s] opaque not found",g);return}if(zD("[%s] Request#%d send body",g,B[AI.kRequestId]),!B[AI.kEnableRequestTiming])return;B[AI.kRequestTiming].requestSent=VD(B[AI.kRequestStartTime])}),WN("undici:request:headers",(I,g)=>{let{request:C,response:B}=I,Q=Reflect.get(C,AI.kRequestInternalOpaque);if(!Q||!Q[AI.kRequestId]){zD("[%s] opaque not found",g);return}let E=Q[AI.kRequestSocket];if(E)E[AI.kHandledResponses]++,zD("[%s] Request#%d get %s response headers on Socket#%d (handled %d responses, sock: %j)",g,Q[AI.kRequestId],B.statusCode,E[AI.kSocketId],E[AI.kHandledResponses],dF(E));else zD("[%s] Request#%d get %s response headers on Unknown Socket",g,Q[AI.kRequestId],B.statusCode);if(!Q[AI.kEnableRequestTiming])return;Q[AI.kRequestTiming].waiting=VD(Q[AI.kRequestStartTime])}),WN("undici:request:trailers",(I,g)=>{let{request:C}=I,B=Reflect.get(C,AI.kRequestInternalOpaque);if(!B||!B[AI.kRequestId]){zD("[%s] opaque not found",g);return}if(zD("[%s] Request#%d get response body and trailers",g,B[AI.kRequestId]),!B[AI.kEnableRequestTiming])return;B[AI.kRequestTiming].contentDownload=VD(B[AI.kRequestStartTime])})}class CT extends Error{status;headers;socket;res}class fh extends CT{constructor(A,I){let g=`Request timeout for ${A} ms`;super(g,I);this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}}class BT extends CT{code;constructor(A,I,g){super(A,g);this.name=this.constructor.name,this.code=I,Error.captureStackTrace(this,this.constructor)}}var KpI=/^https?:\/\//i;function MpI(){}var qY=IpI("urllib:HttpClient"),JpI="4.6.11",aF=`node-urllib/${JpI} Node.js/${process.version.substring(1)} (${process.platform}; ${process.arch})`;function NpI(A){let I=A.path;if(I)return ZZA(I);return""}function kpI(A){return A.status>=500}var RY={request:lF.channel("urllib:request"),response:lF.channel("urllib:response"),fetchRequest:lF.channel("urllib:fetch:request"),fetchResponse:lF.channel("urllib:fetch:response")},HpI=[301,302,303,307,308];class MK extends e_I{#A;#I;constructor(A){super();if(this.#A=A?.defaultArgs,A?.lookup||A?.checkAddress)this.#I=new oh({lookup:A.lookup,checkAddress:A.checkAddress,connect:A.connect,allowH2:A.allowH2});else if(A?.connect)this.#I=new FZA({connect:A.connect,allowH2:A.allowH2});else if(A?.allowH2)this.#I=new FZA({allowH2:A.allowH2});uF()}getDispatcher(){return this.#I??YpI()}setDispatcher(A){this.#I=A}getDispatcherPoolStats(){let A=this.getDispatcher(),I=Reflect.get(A,WZA.default.kClients),g={};if(!I)return g;for(let[C,B]of I){let E=(typeof B.deref==="function"?B.deref():B)?.stats;if(!E)continue;g[C]={connected:E.connected,free:E.free,pending:E.pending,queued:E.queued,running:E.running,size:E.size}}return g}async request(A,I){return await this.#g(A,I)}async curl(A,I){return await this.request(A,I)}async#g(A,I,g){let C=yN("HttpClientRequest"),B;if(typeof A==="string"){if(!KpI.test(A))A="http://"+A;B=new URL(A)}else if(!A.searchParams)B=new URL(EpI(A));else B=new URL(A.toString());let Q=(I?.type||I?.method||"GET").toUpperCase(),E=I?.headers,D={},G={retry:0,socketErrorRetry:1,timing:!0,...this.#A,...I,method:Q,headers:D};if(g={retries:0,socketErrorRetries:0,redirects:0,history:[],...g},!g.requestStartTime)g.requestStartTime=DpI.now();g.history.push(B.href);let Y=g.requestStartTime,w={queuing:0,dnslookup:0,connected:0,requestHeadersSent:0,requestSent:0,waiting:0,contentDownload:0},M=G.opaque,J={[AI.kRequestId]:C,[AI.kRequestStartTime]:Y,[AI.kEnableRequestTiming]:!!G.timing,[AI.kRequestTiming]:w,[AI.kRequestOriginalOpaque]:M},K={requestId:C,url:B.href,args:G,ctx:G.ctx,retries:g.retries},N={id:0,localAddress:"",localPort:0,remoteAddress:"",remotePort:0,remoteFamily:"",bytesWritten:0,bytesRead:0,handledRequests:0,handledResponses:0},q={status:-1,statusCode:-1,statusText:"",statusMessage:"",headers:{},size:0,aborted:!1,rt:0,keepAliveSocket:!0,requestUrls:g.history,timing:w,socket:N,retries:g.retries,socketErrorRetries:g.socketErrorRetries},S=5000,H=5000;if(G.timeout)if(Array.isArray(G.timeout))S=G.timeout[0]??S,H=G.timeout[1]??H;else S=H=G.timeout;if(E)for(let T in E)D[T.toLowerCase()]=E[T];if("user-agent"in D&&!D["user-agent"])delete D["user-agent"];else if(!D["user-agent"])D["user-agent"]=aF;if(G.streaming||G.customResponse)G.dataType="stream";if(G.dataType==="json"&&!D.accept)D.accept="application/json";if(G.gzip&&G.compressed!==!1)G.compressed=!0;if(G.compressed&&!D["accept-encoding"])D["accept-encoding"]="gzip, br";if(g.retries>0)D["x-urllib-retry"]=`${g.retries}/${G.retry}`;if(g.socketErrorRetries>0)D["x-urllib-retry-on-socket-error"]=`${g.socketErrorRetries}/${G.socketErrorRetry}`;if(G.auth&&!D.authorization)D.authorization=`Basic ${Buffer.from(G.auth).toString("base64")}`;let y=!1,Z=!1;if(G.dataType==="stream"||G.writeStream)Z=!0;let j=G.maxRedirects??10;try{let T={method:Q,maxRedirections:0,headersTimeout:S,headers:D,bodyTimeout:H,opaque:J,dispatcher:G.dispatcher??this.#I,signal:G.signal,reset:!1};if(typeof G.highWaterMark==="number")T.highWaterMark=G.highWaterMark;if(typeof G.reset==="boolean")T.reset=G.reset;if(G.followRedirect===!1)j=0;let L=T.method==="GET"||T.method==="HEAD";if(G.stream&&!G.content){if(FN(G.stream)&&!(G.stream instanceof vh))qY("Request#%d convert old style stream to Readable",C),G.stream=new vh().wrap(G.stream),y=!0;else if(G.stream instanceof XZA.default)qY("Request#%d convert formstream to Readable",C),G.stream=new vh().wrap(G.stream),y=!0;G.content=G.stream}if(G.files){if(L)T.method="POST";let c=new pF,P=[];if(Array.isArray(G.files))for(let[f,n]of G.files.entries()){let AA=f===0?"file":`file${f}`;P.push([AA,n])}else if(G.files instanceof vh||FN(G.files))P.push(["file",G.files]);else if(typeof G.files==="string"||Buffer.isBuffer(G.files))P.push(["file",G.files]);else if(typeof G.files==="object"){let f=G.files;for(let n in f){let AA=f[n];P.push([n,AA,n])}}if(G.data)for(let f in G.data)c.append(f,G.data[f]);for(let[f,[n,AA,p]]of P.entries()){let BA="",m;if(typeof AA==="string")BA=ZZA(AA),m=QpI(AA);else if(Buffer.isBuffer(AA))BA=p||`bufferfile${f}`,m=AA;else if(AA instanceof vh||FN(AA))BA=NpI(AA)||p||`streamfile${f}`,y=!0,m=AA;let gA=UZA.default.lookup(BA)||"";c.append(n,m,{filename:BA,contentType:gA}),qY("formData append field: %s, mimeType: %s, fileName: %s",n,gA,BA)}Object.assign(D,c.getHeaders()),T.body=c}else if(G.content){if(!L){if(T.body=G.content,G.contentType)D["content-type"]=G.contentType;else if(typeof G.content==="string"&&!D["content-type"])D["content-type"]="text/plain;charset=UTF-8";y=FN(G.content)}}else if(G.data){let c=typeof G.data==="string"||Buffer.isBuffer(G.data)||FN(G.data);if(L){if(!c){let P;if(G.nestedQuerystring)P=QT.default.stringify(G.data);else P=GpI.stringify(G.data);let f=B.href;B=new URL(f+(f.includes("?")?"&":"?")+P)}}else if(c)T.body=G.data,y=FN(G.data);else if(G.contentType==="json"||G.contentType==="application/json"||D["content-type"]?.startsWith("application/json")){if(T.body=JSON.stringify(G.data),!D["content-type"])D["content-type"]="application/json"}else if(D["content-type"]="application/x-www-form-urlencoded;charset=UTF-8",G.nestedQuerystring)T.body=QT.default.stringify(G.data);else T.body=new URLSearchParams(G.data).toString()}if(y)G.retry=0,G.socketErrorRetry=0,j=0;if(Z)G.retry=0,G.socketErrorRetry=0;if(qY("Request#%d %s %s, headers: %j, headersTimeout: %s, bodyTimeout: %s, isStreamingRequest: %s, isStreamingResponse: %s, maxRedirections: %s, redirects: %s",C,T.method,B.href,D,S,H,y,Z,j,g.redirects),T.headers=D,RY.request.publish({request:K}),this.listenerCount("request")>0)this.emit("request",K);let U=await yZA(B,T);if(U.statusCode===401&&(U.headers["www-authenticate"]||U.headers["x-www-authenticate"])&&!T.headers.authorization&&G.digestAuth){let c=U.headers["www-authenticate"]??U.headers["x-www-authenticate"],P=Array.isArray(c)?c.find((f)=>f.startsWith("Digest ")):c;if(P&&P.startsWith("Digest ")){if(qY("Request#%d %s: got digest auth header WWW-Authenticate: %s",C,B.href,P),T.headers.authorization=XFA(T.method,`${B.pathname}${B.search}`,P,G.digestAuth),qY("Request#%d %s: auth with digest header: %s",C,A,T.headers.authorization),Array.isArray(U.headers["set-cookie"]))T.headers.cookie=U.headers["set-cookie"].join(";");await U.body.arrayBuffer(),U=await yZA(B,T)}}let X=U.headers["content-encoding"],W=X==="gzip"||X==="br";if(q.headers=U.headers,q.status=q.statusCode=U.statusCode,q.statusMessage=q.statusText=ApI[q.status]||"",q.headers["content-length"])q.size=parseInt(q.headers["content-length"]);if(HpI.includes(q.statusCode)&&j>0&&g.redirects<j){if(q.headers.location){g.redirects++;let c=new URL(q.headers.location,B.href);return await U.body.arrayBuffer(),qY("Request#%d got response, status: %s, headers: %j, timing: %j, redirect to %s",C,q.status,q.headers,q.timing,c.href),await this.#g(c.href,I,g)}}let O=null;if(G.dataType==="stream")if(G.compressed===!0&&W){let c=X==="gzip"?hZA():iZA();q=Object.assign(BpI(U.body,c,MpI),q)}else q=Object.assign(U.body,q);else if(G.writeStream)if(G.compressed===!0&&W){let c=X==="gzip"?hZA():iZA();await LZA(U.body,c,G.writeStream)}else await LZA(U.body,G.writeStream);else{if(O=Buffer.from(await U.body.arrayBuffer()),W&&O.length>0)try{O=X==="gzip"?gpI(O):CpI(O)}catch(c){if(c.name==="Error")c.name="UnzipError";throw c}if(G.dataType==="text"||G.dataType==="html")O=O.toString();else if(G.dataType==="json")if(O.length===0)O=null;else O=UFA(O.toString(),G.fixJSONCtlChars)}q.rt=VD(Y),xq(N,J);let $={opaque:M,data:O,status:q.status,statusCode:q.status,statusText:q.statusText,headers:q.headers,url:B.href,redirected:g.history.length>1,requestUrls:q.requestUrls,res:q};if(qY("Request#%d got response, status: %s, headers: %j, timing: %j, socket: %j",C,q.status,q.headers,q.timing,q.socket),G.retry>0&&g.retries<G.retry){if((G.isRetry??kpI)($)){if(G.retryDelay)await wpI(G.retryDelay);return g.retries++,await this.#g(A,I,g)}}if(RY.response.publish({request:K,response:q}),this.listenerCount("response")>0)this.emit("response",{requestId:C,error:null,ctx:G.ctx,req:{...K,options:G},res:q});return $}catch(T){qY("Request#%d throw error: %s, socketErrorRetry: %s, socketErrorRetries: %s",C,T,G.socketErrorRetry,g.socketErrorRetries);let L=T;if(L.name==="HeadersTimeoutError")L=new fh(S,{cause:L});else if(L.name==="BodyTimeoutError")L=new fh(H,{cause:L});else if(L.name==="InformationalError"&&L.message.includes("stream timeout"))L=new fh(H,{cause:L});else if(L.code==="UND_ERR_CONNECT_TIMEOUT")L=new BT(L.message,L.code,{cause:L});else if(L.code==="UND_ERR_SOCKET"||L.code==="ECONNRESET"){if(G.socketErrorRetry>0&&g.socketErrorRetries<G.socketErrorRetry)return g.socketErrorRetries++,qY("Request#%d retry on socket error, socketErrorRetries: %d",C,g.socketErrorRetries),await this.#g(A,I,g)}if(L.opaque=M,L.status=q.status,L.headers=q.headers,L.res=q,L.socket)L._rawSocket=L.socket;if(L.socket=N,q.rt=VD(Y),xq(N,J,T),RY.response.publish({request:K,response:q,error:L}),this.listenerCount("response")>0)this.emit("response",{requestId:C,error:L,ctx:G.ctx,req:{...K,options:G},res:q});throw L}}}import{MockAgent as nWg,ProxyAgent as ClI,Agent as A3A,Dispatcher as sWg,setGlobalDispatcher as rWg,getGlobalDispatcher as tWg,Request as eWg,Response as AUg,Headers as IUg,FormData as gUg}from"undici";var sUA=bg($q(),1),rUA=bg(aUA(),1);import{AsyncLocalStorage as nuI}from"async_hooks";import{debuglog as suI}from"util";import{fetch as ruI,Request as tuI,getGlobalDispatcher as euI}from"undici";var nUA=suI("urllib/fetch");class SY{static#A;static#I=new nuI;static getDispatcher(){return SY.#A??euI()}static setDispatcher(A){SY.#A=A}static setClientOptions(A){let I={opaqueLocalStorage:SY.#I},g=ZN;if(A?.lookup||A?.checkAddress)I={...I,lookup:A.lookup,checkAddress:A.checkAddress,connect:A.connect,allowH2:A.allowH2},g=oh;else if(A?.connect)I={...I,connect:A.connect,allowH2:A.allowH2},g=ZN;else if(A?.allowH2)I={...I,allowH2:A.allowH2},g=ZN;SY.#A=new g(I),uF()}static getDispatcherPoolStats(){let A=SY.getDispatcher(),I=Reflect.get(A,sUA.default.kClients),g={};if(!I)return g;for(let[C,B]of I){let E=(typeof B.deref==="function"?B.deref():B)?.stats;if(!E)continue;g[C]={connected:E.connected,free:E.free,pending:E.pending,queued:E.queued,running:E.running,size:E.size}}return g}static async fetch(A,I){let g=performance.now();I=I??{},I.dispatcher=I.dispatcher??SY.#A;let C=new tuI(A,I),B=yN("HttpClientRequest"),Q={queuing:0,dnslookup:0,connected:0,requestHeadersSent:0,requestSent:0,waiting:0,contentDownload:0},E={[AI.kRequestId]:B,[AI.kRequestStartTime]:g,[AI.kEnableRequestTiming]:!!(I.timing??!0),[AI.kRequestTiming]:Q},D={requestId:B,url:C.url,args:{method:C.method,type:C.method,data:C.body,headers:vP(C.headers)},retries:0},G={requestId:B,request:C},Y={id:0,localAddress:"",localPort:0,remoteAddress:"",remotePort:0,remoteFamily:"",bytesWritten:0,bytesRead:0,handledRequests:0,handledResponses:0};RY.request.publish({request:D}),RY.fetchRequest.publish({fetch:G});let w,J={status:-1,statusCode:-1,statusText:"",statusMessage:"",headers:{},size:0,aborted:!1,rt:0,keepAliveSocket:!0,requestUrls:[C.url],timing:Q,socket:Y,retries:0,socketErrorRetries:0};try{await SY.#I.run(E,async()=>{w=await ruI(C)})}catch(N){throw xq(Y,E,N),J.rt=VD(g),nUA("Request#%d throw error: %s",B,N),RY.fetchResponse.publish({fetch:G,error:N}),RY.response.publish({request:D,response:J,error:N}),N}let K=rUA.getResponseState(w);if(xq(Y,E),J.headers=vP(w.headers),J.status=J.statusCode=w.status,J.statusMessage=w.statusText,J.headers["content-length"])J.size=parseInt(J.headers["content-length"]);return J.rt=VD(g),nUA("Request#%d got response, status: %s, headers: %j, timing: %j, socket: %j",B,J.status,J.headers,Q,J.socket),RY.fetchResponse.publish({fetch:G,timingInfo:K.timingInfo,response:w}),RY.response.publish({request:D,response:J}),w}}var AlI=SY.fetch;jFA();var $T,bT,cT,oT,tUA=new ch(50);function IlI(A,I){if(A===!1){if(I){if(!oT)oT=new MK({allowH2:I,connect:{rejectUnauthorized:A}});return oT}if(!cT)cT=new MK({connect:{rejectUnauthorized:A}});return cT}if(I){if(!bT)bT=new MK({allowH2:I});return bT}if(!$T)$T=new MK;return $T}async function eUA(A,I){if(I?.socketPath){let g=tUA.get(I.socketPath);if(!g)g=new MK({connect:{socketPath:I.socketPath}}),tUA.set(I.socketPath,g);return await g.request(A,I)}return await IlI(I?.rejectUnauthorized,I?.allowH2).request(A,I)}async function glI(A,I){return await eUA(A,I)}var ah={request:eUA,curl:glI,USER_AGENT:aF};import{debuglog as AnI}from"util";import{createVerify as b1A,randomUUID as InI}from"crypto";import{Readable as c1A}from"stream";var sq=bg(R3A(),1),o1A=bg(uT(),1);import{ReadableStream as OlI}from"stream/web";class nh extends Error{status;headers;error;code;param;type;constructor(A,I,g,C){super(`${nh.makeMessage(A,I,g)}`);this.status=A,this.headers=C;let B=I;this.error=B,this.code=B?.code,this.param=B?.param,this.type=B?.type}static makeMessage(A,I,g){let C=I?.message?typeof I.message==="string"?I.message:JSON.stringify(I.message):I?JSON.stringify(I):g;if(A&&C)return`${A} ${C}`;if(A)return`${A} status code (no body)`;if(C)return C;return"(no status code or body)"}}function VlI(A,I){let g=A.indexOf(I);if(g!==-1)return[A.substring(0,g),I,A.substring(g+I.length)];return[A,"",""]}class lT{data;event;chunks;constructor(){this.event=null,this.data=[],this.chunks=[]}decode(A){let I=A;if(A.endsWith("\r"))I=A.substring(0,A.length-1);if(!I){if(!this.event&&!this.data.length)return null;let Q={event:this.event,data:this.data.join(`
1481
+ `,runtimeDataModel:{models:{},enums:{},types:{}}};D9.runtimeDataModel=JSON.parse('{"models":{"apps":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"userId","kind":"scalar","type":"Int"},{"name":"platform","kind":"enum","type":"apps_platform"},{"name":"name","kind":"scalar","type":"String"},{"name":"appKey","kind":"scalar","type":"String"},{"name":"appSecret","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"downloadUrl","kind":"scalar","type":"String"},{"name":"status","kind":"scalar","type":"String"},{"name":"ignoreBuildTime","kind":"scalar","type":"String"},{"name":"users","kind":"object","type":"users","relationName":"appsTousers"},{"name":"packages","kind":"object","type":"packages","relationName":"appsTopackages"},{"name":"versions","kind":"object","type":"versions","relationName":"appsToversions"},{"name":"bindings","kind":"object","type":"bindings","relationName":"appsTobindings"}],"dbName":null},"orders":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"userId","kind":"scalar","type":"Int"},{"name":"type","kind":"enum","type":"orders_type"},{"name":"orderNo","kind":"scalar","type":"String"},{"name":"thirdOrderNo","kind":"scalar","type":"String"},{"name":"thirdUserId","kind":"scalar","type":"String"},{"name":"price","kind":"scalar","type":"Decimal"},{"name":"payTime","kind":"scalar","type":"String"},{"name":"status","kind":"enum","type":"orders_status"},{"name":"tier","kind":"scalar","type":"String"},{"name":"remark","kind":"scalar","type":"String"},{"name":"channel","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"users","kind":"object","type":"users","relationName":"ordersTousers"}],"dbName":null},"packages":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"appId","kind":"scalar","type":"Int"},{"name":"versionId","kind":"scalar","type":"Int"},{"name":"name","kind":"scalar","type":"String"},{"name":"hash","kind":"scalar","type":"String"},{"name":"status","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"buildTime","kind":"scalar","type":"String"},{"name":"buildNumber","kind":"scalar","type":"String"},{"name":"note","kind":"scalar","type":"String"},{"name":"deps","kind":"scalar","type":"Json"},{"name":"commit","kind":"scalar","type":"Json"},{"name":"apps","kind":"object","type":"apps","relationName":"appsTopackages"},{"name":"versions","kind":"object","type":"versions","relationName":"packagesToversions"},{"name":"bindings","kind":"object","type":"bindings","relationName":"bindingsTopackages"}],"dbName":null},"tasks":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"type","kind":"enum","type":"tasks_type"},{"name":"fromHash","kind":"scalar","type":"String"},{"name":"toHash","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"}],"dbName":null},"users":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"email","kind":"scalar","type":"String"},{"name":"name","kind":"scalar","type":"String"},{"name":"salt","kind":"scalar","type":"String"},{"name":"secret","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"status","kind":"enum","type":"users_status"},{"name":"tier","kind":"scalar","type":"String"},{"name":"tierExpiresAt","kind":"scalar","type":"DateTime"},{"name":"quota","kind":"scalar","type":"Json"},{"name":"apps","kind":"object","type":"apps","relationName":"appsTousers"},{"name":"orders","kind":"object","type":"orders","relationName":"ordersTousers"},{"name":"apiTokens","kind":"object","type":"api_tokens","relationName":"api_tokensTousers"},{"name":"auditLogs","kind":"object","type":"audit_logs","relationName":"audit_logsTousers"}],"dbName":null},"versions":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"appId","kind":"scalar","type":"Int"},{"name":"hash","kind":"scalar","type":"String"},{"name":"name","kind":"scalar","type":"String"},{"name":"description","kind":"scalar","type":"String"},{"name":"metaInfo","kind":"scalar","type":"String"},{"name":"config","kind":"scalar","type":"Json"},{"name":"deps","kind":"scalar","type":"Json"},{"name":"commit","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"packages","kind":"object","type":"packages","relationName":"packagesToversions"},{"name":"apps","kind":"object","type":"apps","relationName":"appsToversions"},{"name":"bindings","kind":"object","type":"bindings","relationName":"bindingsToversions"}],"dbName":null},"reports":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"userId","kind":"scalar","type":"Int"},{"name":"appId","kind":"scalar","type":"Int"},{"name":"packageId","kind":"scalar","type":"Int"},{"name":"versionId","kind":"scalar","type":"Int"},{"name":"time","kind":"scalar","type":"String"},{"name":"type","kind":"scalar","type":"String"},{"name":"data","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"}],"dbName":null},"bindings":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"appId","kind":"scalar","type":"Int"},{"name":"packageId","kind":"scalar","type":"Int"},{"name":"versionId","kind":"scalar","type":"Int"},{"name":"type","kind":"enum","type":"binding_type"},{"name":"rollout","kind":"scalar","type":"Int"},{"name":"config","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"apps","kind":"object","type":"apps","relationName":"appsTobindings"},{"name":"packages","kind":"object","type":"packages","relationName":"bindingsTopackages"},{"name":"versions","kind":"object","type":"versions","relationName":"bindingsToversions"}],"dbName":"bindings"},"api_tokens":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"userId","kind":"scalar","type":"Int"},{"name":"name","kind":"scalar","type":"String"},{"name":"tokenHash","kind":"scalar","type":"String"},{"name":"tokenSuffix","kind":"scalar","type":"String"},{"name":"permissions","kind":"scalar","type":"Json"},{"name":"expiresAt","kind":"scalar","type":"DateTime"},{"name":"revokedAt","kind":"scalar","type":"DateTime"},{"name":"lastUsedAt","kind":"scalar","type":"DateTime"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"users","kind":"object","type":"users","relationName":"api_tokensTousers"},{"name":"auditLogs","kind":"object","type":"audit_logs","relationName":"api_tokensToaudit_logs"}],"dbName":"api_tokens"},"audit_logs":{"fields":[{"name":"id","kind":"scalar","type":"Int"},{"name":"userId","kind":"scalar","type":"Int"},{"name":"apiTokenId","kind":"scalar","type":"Int"},{"name":"method","kind":"scalar","type":"String"},{"name":"path","kind":"scalar","type":"String"},{"name":"data","kind":"scalar","type":"Json"},{"name":"statusCode","kind":"scalar","type":"Int"},{"name":"ip","kind":"scalar","type":"String"},{"name":"userAgent","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"users","kind":"object","type":"users","relationName":"audit_logsTousers"},{"name":"apiTokens","kind":"object","type":"api_tokens","relationName":"api_tokensToaudit_logs"}],"dbName":"audit_logs"}},"enums":{},"types":{}}');async function $MI(A){let{Buffer:I}=await import("buffer"),g=I.from(A,"base64");return new WebAssembly.Module(g)}D9.compilerWasm={getRuntime:async()=>await Promise.resolve().then(() => (zt(),Vt)),getQueryCompilerWasmModule:async()=>{let{wasm:A}=await Promise.resolve().then(() => (Tt(),Pt));return await $MI(A)}};function $t(){return xt.getPrismaClient(D9)}var qB=bg(B9(),1);var mkg=qB.Extensions.getExtensionContext;var dkg={DbNull:qB.NullTypes.DbNull,JsonNull:qB.NullTypes.JsonNull,AnyNull:qB.NullTypes.AnyNull};var ukg=qB.makeStrictEnum({ReadUncommitted:"ReadUncommitted",ReadCommitted:"ReadCommitted",RepeatableRead:"RepeatableRead",Serializable:"Serializable"});var lkg=qB.Extensions.defineExtension;globalThis.__dirname=bt.dirname(fMI(import.meta.url));var ct=$t();var vMI=new Pn(process.env.DATABASE_URL),wI=new ct({adapter:vMI});async function k8({userId:A=null,apiTokenId:I=null,method:g,path:C,data:B,statusCode:Q,ip:E,userAgent:D}){try{let G={};if(B&&typeof B==="object"&&!Array.isArray(B)){for(let[Y,w]of Object.entries(B))if(!["password","pwd","secret","appSecret","token","deps","commit"].includes(Y.toLowerCase()))G[Y]=w}await wI.audit_logs.create({data:{userId:A,apiTokenId:I,method:g,path:C,data:G,statusCode:Q,ip:E,userAgent:D}})}catch(G){console.error("Failed to log request audit:",G)}}function ot(A){let I=A.headers,g=I.get("x-forwarded-for");if(g)return g.split(",")[0].trim();let C=I.get("x-real-ip");if(C)return C;return null}function ft(A){return A.headers.get("user-agent")}var _MI=["POST","PUT","PATCH","DELETE"],vt=new xI().onAfterResponse(async({request:A,userId:I,path:g,query:C,body:B,params:Q,set:E,responseValue:D})=>{let G=A.method;if(!_MI.includes(G))return;let Y=D;if(!I&&Y&&typeof Y==="object"&&"userId"in Y){let M=Y.userId;if(typeof M==="number")I=M}if(!I)return;let w=typeof E.status==="number"?E.status:200;k8({userId:I,apiTokenId:null,method:G,path:g,data:{...C,...B,...Q},statusCode:w,ip:ot(A),userAgent:ft(A)}).catch((M)=>{console.error("Failed to log audit:",M)})}).as("scoped");import pMI from"os";var mMI=new Date,H8={version:"1.4.6-20260113",buildTime:"2026-01-13T13:29:38.780Z",commit:"888f3f4de7333cf8cdf18a0440381c45324092c1",hostname:pMI.hostname(),startTime:mMI.toISOString(),runtimeVersion:typeof Bun<"u"?Bun.version:"unknown"};import{createHash as lMI}from"crypto";import{webcrypto as pt}from"crypto";var _t="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var dMI=128,xJ,GH;function uMI(A){if(!xJ||xJ.length<A)xJ=Buffer.allocUnsafe(A*dMI),pt.getRandomValues(xJ),GH=0;else if(GH+A>xJ.length)pt.getRandomValues(xJ),GH=0;GH+=A}function aw(A=21){uMI(A|=0);let I="";for(let g=GH-A;g<GH;g++)I+=_t[xJ[g]&63];return I}function mt(){return`pushy_${aw(48)}`}function G9(A){return lMI("sha256").update(A).digest("hex")}async function dt(A){let I=G9(A),g=await wI.api_tokens.findUnique({where:{tokenHash:I}});if(!g)return null;if(g.revokedAt)return null;if(g.expiresAt&&g.expiresAt<new Date)return null;let C=new Date;return await wI.api_tokens.update({where:{id:g.id},data:{lastUsedAt:C}}),{id:g.id,userId:g.userId,name:g.name,permissions:g.permissions,expiresAt:g.expiresAt,lastUsedAt:C,createdAt:g.createdAt}}function ut(A,I){let{permissions:g}=A;if(I==="DELETE")return g.delete===!0;if(["GET","HEAD","OPTIONS"].includes(I))return g.read===!0;if(["POST","PUT","PATCH"].includes(I))return g.write===!0;return!1}async function lt(A){try{return await wI.api_tokens.update({where:{id:A},data:{revokedAt:new Date}}),!0}catch{return!1}}var nIA=bg(aIA(),1),yqI=new nIA.default(process.env.REDIS_URL),vg=yqI;var qH=bg(vJ(),1),wS="https://pushy-admin.reactnative.cn/#",sIA="https://update.react-native.cn/api",YS=86400,Sqg=604800,rIA=20000,ZE={appCheckUpdate:(A=qH.default())=>`count_appCheckUpdate_${A.format("YYYYMMDD")}`,userCheckUpdateQuota:(A=qH.default())=>`quota_userCheckUpdate_${A.format("YYYYMMDD")}`,uvCheckUpdate:(A,I=qH.default())=>`count_uvCheckUpdate_${I.format("YYYYMMDD")}_${A}`,hourlyAppCheckUpdate:(A=qH.default())=>`hourly_appCheckUpdate_${A.format("YYYYMMDDHH")}`,hourlyUvCheckUpdate:(A,I=qH.default())=>`hourly_uvCheckUpdate_${I.format("YYYYMMDDHH")}_${A}`,dynamicConfig:()=>"config_dynamic"},RH={ios:"Ipa",android:"Apk",harmony:"App"};async function WE({email:A,userId:I}){if(!A&&!I)return null;let g=`user_${A||I}`;return await _J({cacheKey:g,handler:()=>wI.users.findUnique({where:A?{email:A}:{id:I},select:{id:!0,name:!0,email:!0,tier:!0,tierExpiresAt:!0,salt:!0,secret:!0,status:!0,quota:!0}})})}async function KM({appKey:A,appId:I}){if(!A&&!I)return null;let g=`app_${A||I}`;return await _J({cacheKey:g,handler:()=>wI.apps.findUnique({where:A?{appKey:A}:{id:I},select:{id:!0,name:!0,appKey:!0,downloadUrl:!0,status:!0,ignoreBuildTime:!0,platform:!0,userId:!0}})})}var tIA=({appKey:A,appId:I})=>{let g=`app_${A||I}`;return vg.del(g)};async function z8({userId:A}){let I=`apps_${A}`;return await _J({cacheKey:I,handler:()=>wI.apps.findMany({where:{userId:A},select:{id:!0,name:!0,platform:!0,status:!0,appKey:!0}})})}var eIA=({userId:A})=>{let I=`apps_${A}`;return vg.del(I)};async function _J({cacheKey:A,handler:I,expire:g=rIA}){let C=await vg.get(A),B=Date.now(),Q=!0;if(typeof C==="string"){let E=JSON.parse(C),{_ed:D,_ing:G}=E,Y=g*0.5;if(D){if(D<B-g)Q=!1;else if(D<B-Y&&(!G||G<B-3000))vg.set(A,JSON.stringify({data:E,_ing:B})),I().then((w)=>{let M=JSON.stringify({data:w,_ed:B});vg.set(A,M,"EX",YS)}).catch((w)=>{let M=JSON.stringify({_err:w.message,_ed:B});vg.set(A,M,"EX",YS)})}else Q=!1;if(Q){if(E._err)throw Error(E._err);if("data"in E)return E.data}}try{let E=await I(),D=JSON.stringify({data:E,_ed:B});return vg.set(A,D,"EX",YS),E}catch(E){let D=JSON.stringify({_err:E.message,_ed:B});throw vg.set(A,D,"EX",YS),E}}var AgA=["sunnylqm@qq.com"];var P8=(A)=>AgA.includes(A);var P5=bg(jQA(),1),T5=process.env.SECRET||"secret";if(T5==="secret")console.warn("Should have secret configured on production mode.");function FS(A){return P5.default.sign(A,T5)}function XiI(A){let I=null;try{I=P5.default.verify(A,T5)}catch{}return I}function uJ(A,I){let g=XiI(A);if(!g||g.exp<Date.now())return;if(I&&g.type!==I)return;return g}var jiI=2592000000;function x5(A){return FS({type:"user",uid:A,exp:Date.now()+jiI})}var JM=new xI().derive({as:"scoped"},({headers:A,status:I})=>{let g=A["x-accesstoken"],C=g&&uJ(g,"user");if(!C)return I(401,{message:"\u8BF7\u5148\u767B\u5F55"});return{userId:C.uid}}),lJ=new xI().derive({as:"scoped"},async({headers:A,request:I,status:g})=>{let C=A["x-api-token"];if(C){let E=await dt(C);if(!E)return g(401,{message:"\u65E0\u6548\u6216\u5DF2\u8FC7\u671F\u7684 API token"});let D=I.method;if(!ut(E,D))return g(403,{message:"API token \u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u8D44\u6E90"});return{userId:E.userId,apiTokenInfo:E,authType:"api_token"}}let B=A["x-accesstoken"],Q=B&&uJ(B,"user");if(!Q)return g(401,{message:"\u8BF7\u5148\u767B\u5F55\u6216\u63D0\u4F9B\u6709\u6548\u7684 API token"});return{userId:Q.uid,authType:"user_token"}}),FH=new xI().use(lJ).derive({as:"scoped"},async({userId:A,params:{appId:I},status:g})=>{let C=Number(I),B=await KM({appId:C});if(!B||B.userId!==A)return g(403,{message:"\u60A8\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u5E94\u7528"});return{userId:A,appId:C,app:B}}),OQA=new xI().derive({as:"scoped"},async({headers:A,status:I})=>{let g=A["x-accesstoken"],C=g&&uJ(g,"user");if(!C)return I(401,{message:"\u8BF7\u5148\u767B\u5F55"});let B=await WE({userId:C.uid});if(!B||!P8(B.email))return I(403,{message:"no access"});return{user:B}});var OiI=a.Object({name:a.String({minLength:1,maxLength:100}),permissions:a.Object({read:a.Optional(a.Boolean()),write:a.Optional(a.Boolean()),delete:a.Optional(a.Boolean())}),expiresAt:a.Optional(a.String({format:"date-time"}))}),ViI=a.Object({tokenId:a.Numeric()}),VQA=new xI({prefix:"/api-token"}).use(JM).post("/create",async({userId:A,status:I,body:{name:g,permissions:C,expiresAt:B}})=>{if(await wI.api_tokens.count({where:{userId:A,revokedAt:null}})>=10)return I(400,{message:"\u6BCF\u4E2A\u7528\u6237\u6700\u591A\u53EA\u80FD\u521B\u5EFA 10 \u4E2A token\uFF0C\u8BF7\u5148\u64A4\u9500\u4E00\u4E9B\u4E0D\u9700\u8981\u7684 token"});if(!C.read&&!C.write&&!C.delete)return I(400,{message:"\u81F3\u5C11\u9700\u8981\u6307\u5B9A\u4E00\u4E2A\u6743\u9650\uFF08read\u3001write \u6216 delete\uFF09"});let E=mt(),D=G9(E),G=E.slice(-4),Y=null;if(B){if(Y=new Date(B),Number.isNaN(Y.getTime()))return I(400,{message:"\u65E0\u6548\u7684\u8FC7\u671F\u65F6\u95F4\u683C\u5F0F\uFF0C\u8BF7\u4F7F\u7528 ISO 8601 \u683C\u5F0F"});if(Y<new Date)return I(400,{message:"\u8FC7\u671F\u65F6\u95F4\u5FC5\u987B\u662F\u672A\u6765\u7684\u65F6\u95F4"})}let w=await wI.api_tokens.create({data:{userId:A,name:g,tokenHash:D,tokenSuffix:G,permissions:JSON.parse(JSON.stringify(C)),expiresAt:Y}});return{id:w.id,name:w.name,token:E,permissions:w.permissions,expiresAt:w.expiresAt,createdAt:w.createdAt}},{body:OiI,detail:{hide:!0}}).get("/list",async({userId:A})=>{return{data:(await wI.api_tokens.findMany({where:{userId:A},select:{id:!0,name:!0,permissions:!0,expiresAt:!0,revokedAt:!0,lastUsedAt:!0,createdAt:!0,updatedAt:!0},orderBy:{createdAt:"desc"}})).map((g)=>({...g,isExpired:g.expiresAt?g.expiresAt<new Date:!1,isRevoked:!!g.revokedAt}))}},{detail:{hide:!0}}).delete("/:tokenId",async({userId:A,status:I,params:{tokenId:g}})=>{let C=await wI.api_tokens.findUnique({where:{id:g}});if(!C)return I(404,{message:"API token \u4E0D\u5B58\u5728"});if(C.userId!==A)return I(403,{message:"\u60A8\u6CA1\u6709\u6743\u9650\u64A4\u9500\u6B64 token"});if(C.revokedAt)return I(400,{message:"Token \u5DF2\u88AB\u64A4\u9500"});if(!await lt(g))return I(500,{message:"\u64A4\u9500 token \u5931\u8D25"});return{message:"Token \u64A4\u9500\u6210\u529F"}},{params:ViI,detail:{hide:!0}});var zQA=a.Object({offset:a.Optional(a.Numeric()),limit:a.Optional(a.Numeric())}),$5;((g)=>{g.normal="normal";g.paused="paused"})($5||={});var PQA=a.Object({offset:a.Optional(a.Numeric()),limit:a.Optional(a.Numeric()),status:a.Optional(a.Enum($5))}),TQA=a.Object({appId:a.Numeric(),versionId:a.Optional(a.Numeric()),packageId:a.Optional(a.Numeric()),bindingId:a.Optional(a.Numeric())}),xQA=a.Object({bindingId:a.Numeric()}),$QA=a.Object({versionId:a.Numeric()}),bQA=a.Object({packageId:a.Numeric()}),QRg=a.Object({appId:a.Numeric(),versionId:a.Numeric()}),ERg=a.Object({appId:a.Numeric(),packageId:a.Numeric()}),cQA=a.Object({ext:a.String()}),oQA=a.Object({name:a.String(),platform:a.Union([a.Literal("ios"),a.Literal("android"),a.Literal("harmony")])}),fQA=a.Partial(a.Object({name:a.String(),downloadUrl:a.Nullable(a.String()),status:a.Nullable(a.Enum($5)),ignoreBuildTime:a.Nullable(a.Union([a.Literal("enabled"),a.Literal("disabled")]))})),vQA=a.Object({hash:a.String(),name:a.String(),description:a.Optional(a.String()),metaInfo:a.Optional(a.String()),config:a.Optional(a.Object({rollout:a.Record(a.String(),a.Nullable(a.Number()))})),deps:a.Optional(a.Record(a.String(),a.String())),commit:a.Optional(a.Partial(a.Object({hash:a.String(),message:a.String(),author:a.String(),timestamp:a.String(),origin:a.String()})))}),_QA=a.Partial(a.Object({name:a.String(),description:a.String(),metaInfo:a.String(),config:a.Object({rollout:a.Record(a.String(),a.Nullable(a.Number()))})})),pQA=a.Object({hash:a.String(),name:a.String(),buildTime:a.String(),buildNumber:a.Optional(a.String()),note:a.Optional(a.String()),deps:a.Optional(a.Record(a.String(),a.String())),commit:a.Optional(a.Partial(a.Object({hash:a.String(),message:a.String(),author:a.String(),timestamp:a.String(),origin:a.String()})))}),mQA=a.Partial(a.Object({name:a.String(),note:a.Nullable(a.String()),status:a.String(),versionId:a.Nullable(a.Numeric())})),DRg=a.Union([a.Literal("full"),a.Literal("exp")]),dQA=a.Object({packageId:a.Numeric(),versionId:a.Numeric(),rollout:a.Optional(a.Nullable(a.Integer())),config:a.Optional(a.Record(a.String(),a.Any()))}),GRg=a.Object({packageId:a.Numeric()}),wRg=a.Object({email:a.String({format:"email"}),pwd:a.String()}),YRg=a.Object({token:a.String()}),KRg=a.Object({email:a.String({format:"email"})}),MRg=a.Object({email:a.String({format:"email"}),pwd:a.String(),name:a.String()}),JRg=a.Object({token:a.String(),newPwd:a.String()}),NRg=a.Object({orderNo:a.String()}),uQA=a.Object({fileName:a.String()}),lQA=a.Object({out_trade_no:a.String(),trade_no:a.String(),trade_status:a.String(),buyer_id:a.String(),gmt_payment:a.String()},{additionalProperties:!0}),aQA=a.Object({tier:a.String(),channel:a.Optional(a.String()),remark:a.Optional(a.String()),ret_url:a.Optional(a.String())}),nQA=a.Object({appKey:a.String()}),sQA=a.Object({packageVersion:a.String(),hash:a.Optional(a.Nullable(a.String())),toHash:a.Optional(a.String()),buildTime:a.Optional(a.String()),buildNumber:a.Optional(a.String()),cInfo:a.Optional(a.Partial(a.Object({rnu:a.String(),pushy:a.String(),rn:a.String(),os:a.String(),uuid:a.String()})))}),rQA=a.Object({token:a.String()}),b5=a.Object({email:a.String({format:"email"})}),tQA=a.Object({email:a.String({format:"email"}),pwd:a.String(),name:a.String()}),eQA=a.Object({token:a.String(),newPwd:a.String()}),kRg=a.Object({email:a.String({format:"email"})}),AEA=a.Object({email:a.String({format:"email"}),pwd:a.String()}),IEA=a.Object({offset:a.Optional(a.Numeric()),limit:a.Optional(a.Numeric()),type:a.Optional(a.Union([a.Literal("diffFromIpa"),a.Literal("diffFromApk"),a.Literal("diffFromApp"),a.Literal("diff"),a.Literal("hdiffFromIpa"),a.Literal("hdiffFromApk"),a.Literal("hdiff"),a.Literal("hdiffFromApp")])),fromHash:a.Optional(a.String()),toHash:a.Optional(a.String())});function gEA(A){if(A===null)return!1;return typeof A==="object"&&A instanceof Date===!1}function c5(A){if(A===null)return!0;if(A===void 0)return!0;if(A==="")return!0;if(A instanceof Date)return!1;if(typeof A==="boolean")return!1;if(typeof A==="number")return!1;if(Array.isArray(A)&&!A.length)return!0;if(gEA(A)&&!Object.keys(A).length)return!0;return!1}function o5(A){if(!gEA(A)&&!c5(A))return A;if(Array.isArray(A)){let g=0;return A.reduce((C,B)=>{if(!c5(B))C[g]=o5(B),g++;return C},[])}let I=Object.keys(A);if(I.length)return I.reduce((g,C)=>{if(!c5(A[C]))g[C]=o5(A[C]);return g},{})}var ZH=o5;var wy=bg(vJ(),1);var Gy={free:{app:3,package:30,packageSize:"30m",bundle:30,bundleSize:"3m",pv:1000},standard:{app:5,package:50,packageSize:"150m",bundle:50,bundleSize:"15m",pv:1e4},premium:{app:10,package:60,packageSize:"500m",bundle:60,bundleSize:"50m",pv:1e5},pro:{app:50,package:100,packageSize:"2000m",bundle:100,bundleSize:"200m",pv:1e6},vip1:{app:50,package:100,packageSize:"2000m",bundle:100,bundleSize:"200m",pv:1e7},vip2:{app:50,package:100,packageSize:"2000m",bundle:100,bundleSize:"200m",pv:50000000},vip3:{app:50,package:100,packageSize:"2000m",bundle:100,bundleSize:"200m",pv:1e8}},ZS={free:{price:0,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u514D\u8D39\u7248",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u514D\u8D39\u7248"},standard:{price:800,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u6807\u51C6\u7248",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u6807\u51C6\u7248\u4E00\u5E74\u671F\u670D\u52A1"},premium:{price:2400,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u9AD8\u7EA7\u7248",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u9AD8\u7EA7\u7248\u4E00\u5E74\u671F\u670D\u52A1"},pro:{price:7200,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u4E13\u4E1A\u7248",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u4E13\u4E1A\u7248\u4E00\u5E74\u671F\u670D\u52A1"},vip1:{price:30000,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5927\u5BA2\u6237 VIP1",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5927\u5BA2\u6237 VIP1 \u4E00\u5E74\u671F\u670D\u52A1"},vip2:{price:60000,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5927\u5BA2\u6237 VIP2",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5927\u5BA2\u6237 VIP2 \u4E00\u5E74\u671F\u670D\u52A1"},vip3:{price:120000,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5927\u5BA2\u6237 VIP3",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5927\u5BA2\u6237 VIP3 \u4E00\u5E74\u671F\u670D\u52A1"},custom:{price:0,title:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5B9A\u5236\u7248",summary:"Pushy \u70ED\u66F4\u65B0\u670D\u52A1\u5B9A\u5236\u7248\u4E00\u5E74\u671F\u670D\u52A1"}};async function QG({user:A,userId:I}){let g=wy.default(),C=A||await WE({userId:I});if(!C)throw Error("User not found");if(C.tierExpiresAt){let B=wy.default(C.tierExpiresAt);if(g.isAfter(B,"day"))C=await wI.users.update({data:{tier:"free",tierExpiresAt:null},where:{id:I}})}if(C.tier==="custom"||C.quota){let B=C.quota;if(B.base&&Gy[B.base])B={...Gy[B.base],...B};return B}return Gy[C.tier]}async function CEA({user:A}){let I=await QG({user:A}),g=A.id,C=await z8({userId:g}),Q=(await v5(C.map((D)=>D.appKey))).reduce((D,G)=>D+Number(G),0),E=I.pv;await vg.zadd(ZE.userCheckUpdateQuota(),E-Q,String(g))}async function BEA({user:A}){let I=await f5({user:A,days:7});return{counts:I,avg:Math.floor(I?.reduce((g,C)=>g+C,0)/7)}}async function f5({user:A,day:I,days:g}){let C=(await QG({user:A})).pv,B=A.id;if(g){let E=wy.default(),D=vg.pipeline();for(let Y=0;Y<g;Y++){let w=E.subtract(Y,"day");D.zscore(ZE.userCheckUpdateQuota(w),String(B))}return(await D.exec())?.map(([Y,w])=>{if(w)return Number(w);return C})}let Q=await vg.zscore(ZE.userCheckUpdateQuota(I),String(B));if(Q)return Number(Q);return C}async function v5(A){if(A.length===0)return[];return await vg.zmscore(ZE.appCheckUpdate(),A)}var WS=bg(dJ(),1),ziI=[8673,8672,14849],WH=new xI().derive({as:"scoped"},async({body:A,params:{appId:I},status:g})=>{let C=A?.deps;if(!C)return;if(ziI.includes(Number(I)))return;for(let[B,Q]of Object.entries(C))if(B==="react-native-update"){if(WS.default(Q,"<8"))return g(400,{message:`react-native-update \u5F53\u524D\u7248\u672C(${Q})\u5DF2\u4E0D\u518D\u652F\u6301\uFF0C\u8BF7\u6267\u884C "npm i react-native-update@8" \u66F4\u65B0\u5230 v8 \u7248\u672C\u540E\u91CD\u65B0\u6253\u5305 `});if(WS.default(Q,"8.0.0 - 8.5.5"))return g(400,{message:`react-native-update \u5F53\u524D\u7248\u672C(${Q})\u5DF2\u4E0D\u518D\u652F\u6301\uFF0C\u8BF7\u6267\u884C "npm i react-native-update@8" \u66F4\u65B0\u540E\u91CD\u65B0\u6253\u5305 `});if(WS.default(Q,"9.0.0 - 9.2.4"))return g(400,{message:`react-native-update \u5F53\u524D\u7248\u672C(${Q})\u5DF2\u4E0D\u518D\u652F\u6301\uFF0C\u8BF7\u6267\u884C "npm i react-native-update@9" \u66F4\u65B0\u540E\u91CD\u65B0\u6253\u5305 `});if(WS.default(Q,"10.0.0 - 10.26.4"))return g(400,{message:`react-native-update \u5F53\u524D\u7248\u672C(${Q})\u5DF2\u4E0D\u518D\u652F\u6301\uFF0C\u8BF7\u6267\u884C "npm i react-native-update@10" \u66F4\u65B0\u540E\u91CD\u65B0\u6253\u5305 `})}});var Yy=({types:A,fromHash:I,toHash:g,platform:C})=>{if(C)A=C==="harmony"?["hdiffFromApp"]:[`diffFrom${RH[C]}`,`hdiffFrom${RH[C]}`];if(!A)return;wI.tasks.createMany({data:A.map((B)=>({type:B,fromHash:I,toHash:g}))}).catch(()=>{})},QEA=({app:A,toHash:I})=>{wI.packages.findMany({where:{appId:A.id,status:"normal"},orderBy:{createdAt:"desc"},select:{hash:!0},skip:0,take:5}).then((g)=>{let C=g.map((B)=>({type:`hdiffFrom${RH[A.platform]}`,fromHash:B.hash,toHash:I}));wI.tasks.createMany({data:C}).catch(()=>{})})};var EEA=new xI({prefix:"/binding"}).use(FH).use(WH).get("/",async({query:{packageId:A},appId:I})=>{let g=Number(A);return{data:await wI.bindings.findMany({where:g?{packageId:g,appId:I}:{appId:I},select:{id:!0,versionId:!0,packageId:!0,rollout:!0}})}}).post("/",async({appId:A,app:I,status:g,body:C})=>{let{versionId:B,rollout:Q,config:E,packageId:D}=C,G=await wI.packages.findUnique({where:{id:D,appId:A},select:{id:!0,hash:!0,name:!0,buildTime:!0}});if(!G)return g(403,{message:"\u539F\u751F\u5305\u4E0D\u5B58\u5728\u6216\u4E0D\u5C5E\u4E8E\u5F53\u524D\u5E94\u7528"});let Y=await wI.versions.findUnique({where:{id:B,appId:A},select:{id:!0,hash:!0,config:!0}});if(!Y)return g(403,{message:"\u70ED\u66F4\u65B0\u7248\u672C\u4E0D\u5B58\u5728\u6216\u4E0D\u5C5E\u4E8E\u5F53\u524D\u5E94\u7528"});let w="full";if(Q!==null&&Q!==void 0&&Q<100)w="exp";try{let M=await wI.$transaction(async(J)=>{if(await J.bindings.deleteMany({where:{OR:[{packageId:D,type:w},{packageId:D,versionId:B}]}}),await J.packages.update({where:{id:D},data:{versionId:null}}),Y.config?.rollout?.[D])delete Y.config.rollout[D];return await J.versions.update({where:{id:B},data:{config:Y.config}}),J.bindings.create({data:{appId:A,packageId:D,versionId:B,type:w,rollout:Q,config:E}})});return Yy({platform:I.platform,fromHash:G.hash,toHash:Y.hash}),{data:M}}catch(M){return console.error(M),g(403,{message:"\u521B\u5EFA\u6216\u66F4\u65B0\u7ED1\u5B9A\u5931\u8D25\uFF0C\u6700\u591A\u53EA\u80FD\u540C\u65F6\u7ED1\u5B9A\u4E00\u4E2A\u5168\u91CF\u548C\u4E00\u4E2A\u7070\u5EA6\u7248\u672C"})}},{body:dQA}).guard({params:xQA}).delete("/:bindingId",async({params:{bindingId:A},appId:I,status:g})=>{try{return await wI.bindings.delete({where:{id:A,appId:I}}),{}}catch(C){return console.error(C),g(403,{message:"\u5220\u9664\u7ED1\u5B9A\u5931\u8D25"})}});var wyA=bg(QyA(),1),NP=bg(DyA(),1);var pQ={region:process.env.OSS_REGION,accessKey:process.env.OSS_ACCESSKEY,secretKey:process.env.OSS_SECRETKEY,maxSize:"500m",bucket:process.env.OSS_BUCKET,cdnUrl:"https://dl.charmlot.com",backupCdnUrls:["https://dl.rnpushy.cn","https://pushy.cdn.dfyun.com.cn"]};function GyA(A,I=1){if(A.length===0)return[];if(I>=A.length)return[...A].sort(()=>Math.random()-0.5);if(I<=0)return[];let g=Array.from({length:A.length},(B,Q)=>Q),C=[];for(let B=0;B<I;B++){let Q=Math.floor(Math.random()*g.length),E=g[Q];C.push(A[E]),g.splice(Q,1)}return C}var kP=process.env.ENV==="aliyun",VF=new wyA.default({region:pQ.region,accessKeyId:pQ.accessKey,accessKeySecret:pQ.secretKey,bucket:pQ.bucket,internal:kP}),MoI=`https://${pQ.bucket}.${pQ.region}.aliyuncs.com`,JoI=`https://${pQ.bucket}.${pQ.region}-internal.aliyuncs.com`,NoI=`https://${pQ.bucket}.oss-accelerate.aliyuncs.com`,koI=NP.default(pQ.maxSize||"20m");function YyA({internal:A,maxSize:I}){let g={expiration:new Date(Date.now()+600000).toISOString(),conditions:[{bucket:pQ.bucket},["content-length-range",0,I?NP.default(I):koI]]},C={...VF.calculatePostSignature(g),"x-oss-forbid-overwrite":"true",key:aw(21)};return{url:A&&kP?JoI:MoI,backupUrl:NoI,formData:C,maxSize:I}}async function KyA(A){if(await Vq(A)){if(kP)return VF.signatureUrl(A);return`${pQ.cdnUrl}/${A}`}throw Error(`Key ${A} not found`)}var HoI=[pQ.cdnUrl,...pQ.backupCdnUrls],MyA=()=>[pQ.cdnUrl,...GyA(pQ.backupCdnUrls,2)].map((A)=>A.replace("https://",""));function zF(A){return HoI.map((I)=>`${I}/${A}`)}async function Vq(A){try{return await VF.head(A),!0}catch{}return!1}function PF(A){return VF.delete(A)}async function JyA({appId:A,status:I,offset:g,limit:C}){let B={appId:A,status:I};if(I)B.status=I;let[Q,E]=await Promise.all([wI.packages.count({where:B}),wI.packages.findMany({where:B,orderBy:{id:"desc"},select:{id:!0,hash:!0,name:!0,status:!0,buildTime:!0,buildNumber:!0,note:!0,deps:!0,commit:!0,versions:{select:{id:!0,name:!0,hash:!0}},bindings:{select:{id:!0,type:!0,versions:{select:{id:!0,name:!0,hash:!0}}},orderBy:{createdAt:"desc"}}},skip:g,take:C})]);return{data:ZH(E),count:Q}}var NyA=new xI({prefix:"/package"}).use(WH).use(FH).post("/create",async({userId:A,appId:I,status:g,body:{hash:C,name:B,buildTime:Q,note:E,deps:D,commit:G,buildNumber:Y}})=>{let w=await QG({userId:A});if(await wI.packages.count({where:{appId:I}})>=w.package)return g(403,{message:`\u6BCF\u4E2A\u5E94\u7528\u6700\u591A\u53EF\u4EE5\u53D1\u5E03${w.package}\u4E2A\u539F\u751F\u5305\u3002\u8BF7\u5148\u5220\u9664\u73B0\u6709\u7684\u539F\u751F\u5305\u6216\u5347\u7EA7\u5230\u66F4\u9AD8\u7EA7\u522B\u670D\u52A1\u3002`});try{return{id:(await wI.packages.create({data:{appId:I,hash:C,name:B,buildTime:Q,note:E,deps:D,commit:G,buildNumber:Y}})).id}}catch(J){return console.error(J),g(403,{message:"\u521B\u5EFA\u5305\u5931\u8D25\uFF08\u8BF7\u68C0\u67E5\u539F\u751F\u7248\u672C\u662F\u5426\u91CD\u590D\uFF09"})}},{body:pQA}).get("/list",async({appId:A,query:{offset:I=0,limit:g=10,status:C}})=>{return[26383].includes(A)?await _J({cacheKey:`packageList_${A}_${I}_${g}_${C}`,handler:()=>JyA({appId:A,offset:I,limit:g,status:C})}):JyA({appId:A,offset:I,limit:g,status:C})},{query:PQA}).guard({params:bQA}).delete("/:packageId",async({params:{packageId:A},appId:I})=>{let g=await wI.packages.findUnique({where:{appId:I,id:A}});if(g){let{hash:C}=g;await wI.packages.delete({where:{appId:I,id:A}}),PF(C)}return{}}).put("/:packageId",async({params:{packageId:A},appId:I,app:g,status:C,body:B})=>{let{versionId:Q}=B;if(Q){let E=await wI.versions.findUnique({where:{id:Q,appId:I},select:{id:!0,hash:!0,config:!0}});if(!E)return C(403,{message:"versionId \u9519\u8BEF\u6216\u4E0D\u5C5E\u4E8E\u5F53\u524D\u5E94\u7528"});let D=await wI.packages.findUnique({where:{id:A,appId:I},select:{hash:!0,name:!0,buildTime:!0,deps:!0,versions:{select:{hash:!0,config:!0}}}});if(!D)return C(403,{message:"packageId \u9519\u8BEF\u6216\u4E0D\u5C5E\u4E8E\u5F53\u524D\u5E94\u7528"});Yy({platform:g.platform,fromHash:D.hash,toHash:E.hash})}return await wI.packages.update({where:{appId:I,id:A},data:B}),{}},{body:mQA});function HP(A){if(!A||typeof A!=="object")return!1;let I=Object.getPrototypeOf(A);if(!(I===null||I===Object.prototype||Object.getPrototypeOf(I)===null))return!1;return Object.prototype.toString.call(A)==="[object Object]"}function kyA(A){return A==="__proto__"}function zq(A,I){let g=Object.keys(I);for(let C=0;C<g.length;C++){let B=g[C];if(kyA(B))continue;let Q=I[B],E=A[B];if(HyA(Q)&&HyA(E))A[B]=zq(E,Q);else if(Array.isArray(Q))A[B]=zq([],Q);else if(HP(Q))A[B]=zq({},Q);else if(E===void 0||Q!==void 0)A[B]=Q}return A}function HyA(A){return HP(A)||Array.isArray(A)}var qyA=new xI({prefix:"/version"}).use(WH).use(FH).post("/create",async({userId:A,appId:I,status:g,body:{hash:C,name:B,description:Q,metaInfo:E,config:D,deps:G,commit:Y},app:w})=>{let M=await QG({userId:A});if(await wI.versions.count({where:{appId:I}})>=M.bundle)return g(403,{message:`\u6BCF\u4E2A\u5E94\u7528\u6700\u591A\u53EF\u4EE5\u521B\u5EFA${M.bundle}\u4E2A\u70ED\u66F4\u65B0\u3002\u8BF7\u5148\u5220\u9664\u73B0\u6709\u7684\u70ED\u66F4\u65B0\u6216\u5347\u7EA7\u5230\u66F4\u9AD8\u7EA7\u522B\u670D\u52A1\u3002`});let K=await wI.versions.create({data:{appId:I,hash:C,name:B||"(untitled)",description:Q,metaInfo:E,config:D,deps:G,commit:Y}});return QEA({app:w,toHash:K.hash}),{id:K.id}},{body:vQA}).get("/list",async({appId:A,query:{offset:I=0,limit:g=10}})=>{let[C,B]=await Promise.all([wI.versions.count({where:{appId:A}}),wI.versions.findMany({where:{appId:A},orderBy:{id:"desc"},select:{id:!0,hash:!0,name:!0,description:!0,metaInfo:!0,config:!0,deps:!0,commit:!0,createdAt:!0,packages:{select:{id:!0,name:!0,status:!0}}},skip:I,take:g})]);return{data:ZH(B),count:C}},{query:zQA}).guard({params:$QA}).delete("/:versionId",async({params:{versionId:A},appId:I})=>{let g=await wI.versions.findUnique({where:{appId:I,id:A}});if(g){let{hash:C}=g;await wI.versions.delete({where:{appId:I,id:A}}),PF(C)}return{}}).put("/:versionId",async({params:{versionId:A},appId:I,body:g})=>{let{name:C,description:B,metaInfo:Q,config:E}=g;if(E){let D=await wI.versions.findUnique({where:{appId:I,id:A}});if(D&&typeof D.config==="object"&&D.config!==null)E=zq(D.config,E)}return await wI.versions.update({where:{appId:I,id:A},data:{name:C,description:B,metaInfo:Q,config:E}}),{}},{body:_QA});var RyA=new xI({prefix:"/app"}).use(lJ).post("/create",async({userId:A,status:I,body:{name:g,platform:C}})=>{if(!A)return I(401,{message:"\u8BF7\u5148\u767B\u5F55"});let B=await QG({userId:A});if(await wI.apps.count({where:{userId:A}})>=B.app)return I(403,{message:`\u60A8\u76EE\u524D\u6700\u591A\u53EF\u4EE5\u521B\u5EFA${B.app}\u4E2A\u5E94\u7528\u3002\u8BF7\u5148\u5220\u9664\u5DF2\u6709\u5E94\u7528\u6216\u5347\u7EA7\u5230\u66F4\u9AD8\u7EA7\u522B\u670D\u52A1\u3002`});let E=aw(24),D=aw(24);return{id:(await wI.apps.create({data:{userId:A,name:g,platform:C,appKey:E,appSecret:D}})).id}},{body:oQA}).get("/list",async({userId:A})=>{if(!A)return{data:[]};let I=await z8({userId:A}),g=I.map((B)=>B.appKey),C=await v5(g);return{data:ZH(I.map((B,Q)=>({...B,checkCount:C[Q]})))}}).group("/:appId",{params:TQA},(A)=>A.delete("/",async({userId:I,status:g,params:{appId:C}})=>{let B=await wI.packages.count({where:{appId:C}});if(B>0)return g(403,{message:`\u8BF7\u5148\u6E05\u7A7A\u6B64\u5E94\u7528\u4E0B\u7684\u6240\u6709\u539F\u751F\u5305(\u73B0\u6709${B}\u4E2A)`});let Q=await wI.versions.count({where:{appId:C}});if(Q>0)return g(403,{message:`\u8BF7\u5148\u6E05\u7A7A\u6B64\u5E94\u7528\u4E0B\u7684\u6240\u6709\u70ED\u66F4\u5305(\u73B0\u6709${Q}\u4E2A)`});if(!await wI.apps.delete({where:{userId:I,id:C}}))return g(404);return{}}).get("/",async({userId:I,status:g,params:{appId:C}})=>{let B=await KM({appId:C});if(!B||B?.userId!==I)return g(404);return B}).put("/",async({userId:I,status:g,params:{appId:C},body:B})=>{if(B.ignoreBuildTime==="enabled"){let E=await WE({userId:I});if(!E)return g(404);if(E.tier==="free"||E.tier==="standard")return g(403,{message:"\u6B64\u529F\u80FD\u9700\u8981\u9AD8\u7EA7\u7248\u4EE5\u4E0A"})}if(!await wI.apps.update({where:{userId:I,id:C},data:B}))return g(404);return await Promise.all([tIA({appId:C}),eIA({userId:I})]),{}},{body:fQA}).use(qyA).use(NyA).use(EEA));var qoI=a.Object({key:a.String(),value:a.String()}),RoI=a.Object({tier:a.Optional(a.String()),tierExpiresAt:a.Optional(a.Union([a.String(),a.Null()])),status:a.Optional(a.Union([a.Literal("normal"),a.Literal("unverified")])),quota:a.Optional(a.Union([a.Any(),a.Null()]))}),SyA=new xI({prefix:"/admin"}).use(OQA).get("/config/:key?",async({params:A,status:I})=>{let{key:g}=A;if(g){let B=await vg.hget(ZE.dynamicConfig(),g);if(B===null)return I(404,{message:"config not found"});return{key:g,value:B}}return{data:await vg.hgetall(ZE.dynamicConfig())}},{detail:{hide:!0}}).post("/config",async({body:A})=>{let{key:I,value:g}=A;return await vg.hset(ZE.dynamicConfig(),I,g),{key:I,value:g}},{body:qoI,detail:{hide:!0}}).delete("/config/:key",async({params:{key:A},status:I})=>{if(!await vg.hexists(ZE.dynamicConfig(),A))return I(404,{message:"config not found"});return await vg.hdel(ZE.dynamicConfig(),A),{key:A,deleted:!0}},{detail:{hide:!0}}).get("/users",async({query:A})=>{let{search:I}=A,g=I?{OR:[{name:{contains:I}},{email:{contains:I}}]}:{};return{data:await wI.users.findMany({where:g,select:{id:!0,email:!0,name:!0,status:!0,tier:!0,tierExpiresAt:!0,quota:!0,createdAt:!0},orderBy:{id:"desc"},take:50})}},{query:a.Object({search:a.Optional(a.String())}),detail:{hide:!0}}).put("/users/:id",async({params:{id:A},body:I,status:g})=>{let C=Number(A);if(!await wI.users.findUnique({where:{id:C}}))return g(404,{message:"User not found"});let Q={};if(I.tier!==void 0)Q.tier=I.tier;if(I.status!==void 0)Q.status=I.status;if(I.tierExpiresAt!==void 0)Q.tierExpiresAt=I.tierExpiresAt?new Date(I.tierExpiresAt):null;if(I.quota!==void 0)Q.quota=I.quota;return await wI.users.update({where:{id:C},data:Q,select:{id:!0,email:!0,name:!0,status:!0,tier:!0,tierExpiresAt:!0,quota:!0}})},{body:RoI,detail:{hide:!0}});var SoI=a.Object({offset:a.Optional(a.Numeric()),limit:a.Optional(a.Numeric()),userId:a.Optional(a.Numeric()),method:a.Optional(a.String()),path:a.Optional(a.String()),startDate:a.Optional(a.String({format:"date-time"})),endDate:a.Optional(a.String({format:"date-time"}))}),hoI=["sunnylqm@qq.com","sunnylqm@gmail.com"],hyA=new xI({prefix:"/audit"}).use(JM).get("/logs",async({userId:A,status:I,query:{offset:g=0,limit:C=50,userId:B,method:Q,path:E,startDate:D,endDate:G}})=>{let Y=await WE({userId:A});if(!Y)return I(401,{message:"\u8BF7\u5148\u767B\u5F55"});let w=hoI.includes(Y.email),M;if(!w){if(B&&B!==A)return I(403,{message:"\u65E0\u6743\u67E5\u770B\u5176\u4ED6\u7528\u6237\u7684\u5BA1\u8BA1\u65E5\u5FD7"});M=A}else M=B??A;let J={};if(M)J.userId=M;if(Q)J.method=Q;if(E)J.path=E;if(D||G){if(J.createdAt={},D)J.createdAt.gte=new Date(D);if(G)J.createdAt.lte=new Date(G)}let[K,N]=await Promise.all([wI.audit_logs.findMany({where:J,orderBy:{createdAt:"desc"},skip:Number(g),take:Number(C),select:{id:!0,userId:!0,method:!0,path:!0,data:!0,statusCode:!0,ip:!0,userAgent:!0,createdAt:!0,apiTokens:{select:{tokenSuffix:!0}}}}),wI.audit_logs.count({where:J})]);return{data:K,total:N,offset:Number(g),limit:Number(C)}},{query:SoI});var vM=bg(vJ(),1);var WvI=v4A(),UvI=bE(),XvI=wFA(),jvI=MFA(),OvI=kFA(),VvI=RFA(),zvI=iFA(),PvI=ZFA(),sFg=Vh(),rFg=ww(),tFg=(process.env.ETHEREAL_API||"https://api.nodemailer.com").replace(/\/+$/,""),eFg=(process.env.ETHEREAL_WEB||"https://ethereal.email").replace(/\/+$/,""),AZg=(process.env.ETHEREAL_API_KEY||"").replace(/\s*/g,"")||null,IZg=["true","yes","y","1"].includes((process.env.ETHEREAL_CACHE||"yes").toString().trim().toLowerCase());var cP=function(A,I){let g,C,B;if(typeof A==="object"&&typeof A.send!=="function"||typeof A==="string"&&/^(smtps?|direct):/i.test(A)){if(g=typeof A==="string"?A:A.url)C=UvI.parseConnectionUrl(g);else C=A;if(C.pool)A=new XvI(C);else if(C.sendmail)A=new OvI(C);else if(C.streamTransport)A=new VvI(C);else if(C.jsonTransport)A=new zvI(C);else if(C.SES){if(C.SES.ses&&C.SES.aws){let Q=Error("Using legacy SES configuration, expecting @aws-sdk/client-sesv2, see https://nodemailer.com/transports/ses/");throw Q.code="LegacyConfig",Q}A=new PvI(C)}else A=new jvI(C)}return B=new WvI(A,C,I),B};var oP={pool:!0,host:process.env.SMTP_HOST,secure:!0,rateLimit:10,auth:{user:process.env.SMTP_USER,pass:process.env.SMTP_PASS},from:process.env.SMTP_FROM};var xvI=cP(oP);async function bh(A){return xvI.sendMail({...A,from:oP.from}).catch((I)=>console.error(I))}class ch{#A;#I=0;#g=new Map;#C=new Map;constructor(A){this.#A=A}get cache(){return this.#g}get _cache(){return this.#C}get(A,I){let g=this.#g.get(A),C=I?.maxAge,B;function Q(){return B=B||Date.now(),B}if(g){if(g.expired&&Q()>g.expired)g.expired=0,g.value=void 0;else if(C!==void 0){let E=C?Q()+C:0;g.expired=E}return g.value}if(g=this.#C.get(A),g){if(g.expired&&Q()>g.expired)g.expired=0,g.value=void 0;else if(this._update(A,g),C!==void 0){let E=C?Q()+C:0;g.expired=E}return g.value}}set(A,I,g){let C=g?.maxAge,B=C?Date.now()+C:0,Q=this.#g.get(A);if(Q)Q.expired=B,Q.value=I;else Q={value:I,expired:B},this._update(A,Q)}keys(){let A=new Set,I=Date.now();for(let[C,B]of this.#g.entries())g(C,B);for(let[C,B]of this.#C.entries())g(C,B);function g(C,B){if(B.value&&!B.expired||B.expired>=I)A.add(C)}return Array.from(A)}reset(){this.#I=0,this.#g.clear(),this.#C.clear()}_update(A,I){if(this.#g.set(A,I),this.#I++,this.#I>=this.#A)this.#I=0,this.#C=this.#g,this.#g=new Map}}import{randomBytes as $vI,createHash as bvI}from"crypto";import{Readable as WFA}from"stream";import{performance as cvI}from"perf_hooks";import{ReadableStream as ovI,TransformStream as fvI}from"stream/web";import{Blob as vvI}from"buffer";var AI={kSocketId:Symbol("socket id"),kSocketStartTime:Symbol("socket start time"),kSocketConnectedTime:Symbol("socket connected time"),kSocketConnectErrorTime:Symbol("socket connectError time"),kSocketRequestEndTime:Symbol("socket request end time"),kSocketLocalAddress:Symbol("socket local address"),kSocketLocalPort:Symbol("socket local port"),kSocketConnectHost:Symbol("socket connect params: host"),kSocketConnectPort:Symbol("socket connect params: port"),kSocketConnectProtocol:Symbol("socket connect params: protocol"),kHandledRequests:Symbol("handled requests per socket"),kHandledResponses:Symbol("handled responses per socket"),kRequestSocket:Symbol("request on the socket"),kRequestId:Symbol("request id"),kRequestStartTime:Symbol("request start time"),kEnableRequestTiming:Symbol("enable request timing or not"),kRequestTiming:Symbol("request timing"),kRequestOriginalOpaque:Symbol("request original opaque"),kRequestInternalOpaque:Symbol("request internal opaque"),kErrorSocket:Symbol("socket of error")};var _vI={'"':"\\\"","\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"},pvI=/[\u0000-\u001F\u005C]/g;function mvI(A){return _vI[A]||"\\u"+(A.charCodeAt(0)+65536).toString(16).substring(1)}function dvI(A){return A.replace(pvI,mvI)}function UFA(A,I){if(typeof I==="function")A=I(A);else if(I)A=dvI(A);try{A=JSON.parse(A)}catch(g){if(g.name==="SyntaxError")g.name="JSONResponseFormatError";if(A.length>1024)g.message+=" (data json format: "+JSON.stringify(A.slice(0,512))+" ...skip... "+JSON.stringify(A.slice(A.length-512))+")";else g.message+=" (data json format: "+JSON.stringify(A)+")";throw g}return A}function fP(A){let I=bvI("md5");return I.update(A,"utf8"),I.digest("hex")}var uvI=/(\w{1,100})=["']?([^'"]+)["']?/,lvI=0,avI="00000000";function XFA(A,I,g,C){let B=g.split(","),Q={};for(let S of B){let H=S.match(uvI);if(H)Q[H[1]]=H[2].replace(/["']/g,"")}if(!Q.realm||!Q.nonce)return"";let E=Q.qop||"",D=C.indexOf(":"),G=C.substring(0,D),Y=C.substring(D+1),w=String(++lvI);w=`${avI.substring(w.length)}${w}`;let M=$vI(8).toString("hex"),J=fP(`${G}:${Q.realm}:${Y}`),K=fP(`${A.toUpperCase()}:${I}`),N=`${J}:${Q.nonce}`;if(E)E=E.split(",")[0],N+=`:${w}:${M}:${E}`;N+=`:${K}`;let k=fP(N),q=`Digest username="${G}", realm="${Q.realm}", nonce="${Q.nonce}", uri="${I}", response="${k}"`;if(Q.opaque)q+=`, opaque="${Q.opaque}"`;if(E)q+=`, qop=${E}, nc=${w}, cnonce="${M}"`;return q}var nvI=Math.pow(2,31)-10,oF={};function yN(A){if(!oF[A]||oF[A]>=nvI)oF[A]=0;return++oF[A]}function VD(A,I){return Math.floor(((I??cvI.now())-A)*1000)/1000}function FN(A){if(typeof WFA.isReadable==="function")return WFA.isReadable(A);return A!==null&&typeof A==="object"&&typeof A.pipe==="function"&&A.readable!==!1&&typeof A._read==="function"&&typeof A._readableState==="object"}function xq(A,I,g){let C=I[AI.kRequestSocket]??g?.[AI.kErrorSocket];if(C){if(A.id=C[AI.kSocketId],A.handledRequests=C[AI.kHandledRequests],A.handledResponses=C[AI.kHandledResponses],C[AI.kSocketLocalAddress])A.localAddress=C[AI.kSocketLocalAddress],A.localPort=C[AI.kSocketLocalPort];if(C.remoteAddress)A.remoteAddress=C.remoteAddress,A.remotePort=C.remotePort,A.remoteFamily=C.remoteFamily;if(Array.isArray(C.autoSelectFamilyAttemptedAddresses))A.attemptedRemoteAddresses=C.autoSelectFamilyAttemptedAddresses;if(A.bytesRead=C.bytesRead,A.bytesWritten=C.bytesWritten,C[AI.kSocketConnectErrorTime])A.connectErrorTime=C[AI.kSocketConnectErrorTime],A.connectProtocol=C[AI.kSocketConnectProtocol],A.connectHost=C[AI.kSocketConnectHost],A.connectPort=C[AI.kSocketConnectPort];if(C[AI.kSocketConnectedTime])A.connectedTime=C[AI.kSocketConnectedTime];if(C[AI.kSocketRequestEndTime])A.lastRequestEndTime=C[AI.kSocketRequestEndTime];C[AI.kSocketRequestEndTime]=new Date}}function vP(A){let I={};for(let[g,C]of A.entries())if(I[g]){if(!Array.isArray(I[g]))I[g]=[I[g]];I[g].push(C)}else I[g]=C;return I}function jFA(){if(typeof global.ReadableStream>"u")global.ReadableStream=ovI;if(typeof global.TransformStream>"u")global.TransformStream=fvI;if(typeof global.Blob>"u")global.Blob=vvI;if(typeof global.DOMException>"u")global.DOMException=svI()}function svI(){try{atob(0)}catch(A){return A.constructor}}var WZA=bg($q(),1),UZA=bg(mP(),1),QT=bg(ty(),1),XZA=bg(J4(),1);import lF from"diagnostics_channel";import{EventEmitter as e_I}from"events";import{STATUS_CODES as ApI}from"http";import{debuglog as IpI}from"util";import{createGunzip as hZA,createBrotliDecompress as iZA,gunzipSync as gpI,brotliDecompressSync as CpI}from"zlib";import{Readable as vh,pipeline as BpI}from"stream";import{pipeline as LZA}from"stream/promises";import{basename as ZZA}from"path";import{createReadStream as QpI}from"fs";import{format as EpI}from"url";import{performance as DpI}from"perf_hooks";import GpI from"querystring";import{setTimeout as wpI}from"timers/promises";import{request as yZA,Agent as FZA,getGlobalDispatcher as YpI}from"undici";var qZA=bg(HZA(),1);import IT from"path";var m_I=/[^\x00-\x7F]/i;class pF extends qZA.default{_getContentDisposition(A,I){let g,C;if(typeof I.filepath==="string")g=IT.normalize(I.filepath).replace(/\\/g,"/");else if(I.filename||A.name||A.path)g=IT.basename(I.filename||A.name||A.path);else if(A.readable&&A.hasOwnProperty("httpVersion"))g=IT.basename(A.client._httpMessage.path||"");if(g){if(C='filename="'+g+'"',m_I.test(g))C+="; filename*=UTF-8''"+encodeURIComponent(g)}return C}}import u_I from"dns";import{isIP as l_I}from"net";import{Agent as d_I}from"undici";class ZN extends d_I{#A;constructor(A){super(A);this.#A=A.opaqueLocalStorage}dispatch(A,I){let g=this.#A?.getStore();if(g)I.opaque=g;return super.dispatch(A,I)}}class mF extends Error{hostname;ip;family;constructor(A,I,g){super("illegal address");this.name=this.constructor.name,this.hostname=A,this.ip=I,this.family=g,Error.captureStackTrace(this,this.constructor)}}class oh extends ZN{#A;constructor(A){let{lookup:I=u_I.lookup,...g}=A,C=(B,Q,E)=>{I(B,Q,(D,...G)=>{let Y=G[0],w=G[1];if(D)return E(D,Y,w);if(A.checkAddress){if(typeof Y==="string"){if(!A.checkAddress(Y,w,B))D=new mF(B,Y,w)}else if(Array.isArray(Y)){let M=Y;for(let J of M)if(!A.checkAddress(J.address,J.family,B)){D=new mF(B,J.address,J.family);break}}}E(D,Y,w)})};super({...g,connect:{...A.connect,lookup:C,allowH2:A.allowH2}});this.#A=A.checkAddress}dispatch(A,I){if(this.#A&&A.origin){let C=(typeof A.origin==="string"?new URL(A.origin):A.origin).hostname;if(C.startsWith("[")&&C.endsWith("]"))C=C.substring(1,C.length-1);let B=l_I(C);if(B===4||B===6){if(!this.#A(C,B,C))throw new mF(C,C,B)}}return super.dispatch(A,I)}}import a_I from"diagnostics_channel";import{performance as n_I}from"perf_hooks";import{debuglog as s_I}from"util";import{Socket as SZA}from"net";var zD=s_I("urllib/diagnosticsChannel"),RZA=!1;function WN(A,I){a_I.subscribe(A,I)}var gT;function dF(A){if(!A)return A;if(!gT){let I=Object.getOwnPropertySymbols(A);for(let g of I)if(g.description==="reset"){gT=g;break}}return{localAddress:A[AI.kSocketLocalAddress],localPort:A[AI.kSocketLocalPort],remoteAddress:A.remoteAddress,remotePort:A.remotePort,attemptedAddresses:A.autoSelectFamilyAttemptedAddresses,connecting:A.connecting,reset:A[gT]}}var r_I=SZA.prototype.destroy;SZA.prototype.destroy=function(A){if(A)Object.defineProperty(A,AI.kErrorSocket,{enumerable:!1,value:this});return r_I.call(this,A)};function t_I(A,I){if(!I)return;let g=Reflect.get(A,I);return g?.opts?.opaque??g?.opaque}function uF(){if(RZA)return;RZA=!0;let A;WN("undici:request:create",(I,g)=>{let{request:C}=I;if(!A){let Q=Object.getOwnPropertySymbols(C);for(let E of Q)if(E.description==="handler"){A=E;break}}let B=t_I(C,A);if(!B||!B[AI.kRequestId])return;if(Reflect.set(C,AI.kRequestInternalOpaque,B),zD("[%s] Request#%d %s %s, path: %s, headers: %j",g,B[AI.kRequestId],C.method,C.origin,C.path,C.headers),!B[AI.kEnableRequestTiming])return;B[AI.kRequestTiming].queuing=VD(B[AI.kRequestStartTime])}),WN("undici:client:connectError",(I,g)=>{let{error:C,connectParams:B,socket:Q}=I,E=Q;if(!E&&C[AI.kErrorSocket])E=C[AI.kErrorSocket];if(E){if(E[AI.kSocketId]=yN("UndiciSocket"),E[AI.kSocketConnectErrorTime]=new Date,E[AI.kHandledRequests]=0,E[AI.kHandledResponses]=0,E.localAddress)E[AI.kSocketLocalAddress]=E.localAddress,E[AI.kSocketLocalPort]=E.localPort;E[AI.kSocketConnectProtocol]=B.protocol,E[AI.kSocketConnectHost]=B.host,E[AI.kSocketConnectPort]=B.port,zD("[%s] Socket#%d connectError, connectParams: %j, error: %s, (sock: %j)",g,E[AI.kSocketId],B,C.message,dF(E))}else zD("[%s] connectError, connectParams: %j, error: %o",g,B,C)}),WN("undici:client:connected",(I,g)=>{let{socket:C,connectParams:B}=I;C[AI.kSocketId]=yN("UndiciSocket"),C[AI.kSocketStartTime]=n_I.now(),C[AI.kSocketConnectedTime]=new Date,C[AI.kHandledRequests]=0,C[AI.kHandledResponses]=0,C[AI.kSocketLocalAddress]=C.localAddress,C[AI.kSocketLocalPort]=C.localPort,C[AI.kSocketConnectProtocol]=B.protocol,C[AI.kSocketConnectHost]=B.host,C[AI.kSocketConnectPort]=B.port,zD("[%s] Socket#%d connected (sock: %j)",g,C[AI.kSocketId],dF(C))}),WN("undici:client:sendHeaders",(I,g)=>{let{request:C,socket:B}=I,Q=Reflect.get(C,AI.kRequestInternalOpaque);if(!Q||!Q[AI.kRequestId]){zD("[%s] opaque not found",g);return}if(B[AI.kHandledRequests]++,Q[AI.kRequestSocket]=B,zD("[%s] Request#%d send headers on Socket#%d (handled %d requests, sock: %j)",g,Q[AI.kRequestId],B[AI.kSocketId],B[AI.kHandledRequests],dF(B)),!Q[AI.kEnableRequestTiming])return;if(Q[AI.kRequestTiming].requestHeadersSent=VD(Q[AI.kRequestStartTime]),B[AI.kHandledRequests]===1)Q[AI.kRequestTiming].connected=VD(Q[AI.kRequestStartTime],B[AI.kSocketStartTime])}),WN("undici:request:bodySent",(I,g)=>{let{request:C}=I,B=Reflect.get(C,AI.kRequestInternalOpaque);if(!B||!B[AI.kRequestId]){zD("[%s] opaque not found",g);return}if(zD("[%s] Request#%d send body",g,B[AI.kRequestId]),!B[AI.kEnableRequestTiming])return;B[AI.kRequestTiming].requestSent=VD(B[AI.kRequestStartTime])}),WN("undici:request:headers",(I,g)=>{let{request:C,response:B}=I,Q=Reflect.get(C,AI.kRequestInternalOpaque);if(!Q||!Q[AI.kRequestId]){zD("[%s] opaque not found",g);return}let E=Q[AI.kRequestSocket];if(E)E[AI.kHandledResponses]++,zD("[%s] Request#%d get %s response headers on Socket#%d (handled %d responses, sock: %j)",g,Q[AI.kRequestId],B.statusCode,E[AI.kSocketId],E[AI.kHandledResponses],dF(E));else zD("[%s] Request#%d get %s response headers on Unknown Socket",g,Q[AI.kRequestId],B.statusCode);if(!Q[AI.kEnableRequestTiming])return;Q[AI.kRequestTiming].waiting=VD(Q[AI.kRequestStartTime])}),WN("undici:request:trailers",(I,g)=>{let{request:C}=I,B=Reflect.get(C,AI.kRequestInternalOpaque);if(!B||!B[AI.kRequestId]){zD("[%s] opaque not found",g);return}if(zD("[%s] Request#%d get response body and trailers",g,B[AI.kRequestId]),!B[AI.kEnableRequestTiming])return;B[AI.kRequestTiming].contentDownload=VD(B[AI.kRequestStartTime])})}class CT extends Error{status;headers;socket;res}class fh extends CT{constructor(A,I){let g=`Request timeout for ${A} ms`;super(g,I);this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}}class BT extends CT{code;constructor(A,I,g){super(A,g);this.name=this.constructor.name,this.code=I,Error.captureStackTrace(this,this.constructor)}}var KpI=/^https?:\/\//i;function MpI(){}var qY=IpI("urllib:HttpClient"),JpI="4.6.11",aF=`node-urllib/${JpI} Node.js/${process.version.substring(1)} (${process.platform}; ${process.arch})`;function NpI(A){let I=A.path;if(I)return ZZA(I);return""}function kpI(A){return A.status>=500}var RY={request:lF.channel("urllib:request"),response:lF.channel("urllib:response"),fetchRequest:lF.channel("urllib:fetch:request"),fetchResponse:lF.channel("urllib:fetch:response")},HpI=[301,302,303,307,308];class MK extends e_I{#A;#I;constructor(A){super();if(this.#A=A?.defaultArgs,A?.lookup||A?.checkAddress)this.#I=new oh({lookup:A.lookup,checkAddress:A.checkAddress,connect:A.connect,allowH2:A.allowH2});else if(A?.connect)this.#I=new FZA({connect:A.connect,allowH2:A.allowH2});else if(A?.allowH2)this.#I=new FZA({allowH2:A.allowH2});uF()}getDispatcher(){return this.#I??YpI()}setDispatcher(A){this.#I=A}getDispatcherPoolStats(){let A=this.getDispatcher(),I=Reflect.get(A,WZA.default.kClients),g={};if(!I)return g;for(let[C,B]of I){let E=(typeof B.deref==="function"?B.deref():B)?.stats;if(!E)continue;g[C]={connected:E.connected,free:E.free,pending:E.pending,queued:E.queued,running:E.running,size:E.size}}return g}async request(A,I){return await this.#g(A,I)}async curl(A,I){return await this.request(A,I)}async#g(A,I,g){let C=yN("HttpClientRequest"),B;if(typeof A==="string"){if(!KpI.test(A))A="http://"+A;B=new URL(A)}else if(!A.searchParams)B=new URL(EpI(A));else B=new URL(A.toString());let Q=(I?.type||I?.method||"GET").toUpperCase(),E=I?.headers,D={},G={retry:0,socketErrorRetry:1,timing:!0,...this.#A,...I,method:Q,headers:D};if(g={retries:0,socketErrorRetries:0,redirects:0,history:[],...g},!g.requestStartTime)g.requestStartTime=DpI.now();g.history.push(B.href);let Y=g.requestStartTime,w={queuing:0,dnslookup:0,connected:0,requestHeadersSent:0,requestSent:0,waiting:0,contentDownload:0},M=G.opaque,J={[AI.kRequestId]:C,[AI.kRequestStartTime]:Y,[AI.kEnableRequestTiming]:!!G.timing,[AI.kRequestTiming]:w,[AI.kRequestOriginalOpaque]:M},K={requestId:C,url:B.href,args:G,ctx:G.ctx,retries:g.retries},N={id:0,localAddress:"",localPort:0,remoteAddress:"",remotePort:0,remoteFamily:"",bytesWritten:0,bytesRead:0,handledRequests:0,handledResponses:0},q={status:-1,statusCode:-1,statusText:"",statusMessage:"",headers:{},size:0,aborted:!1,rt:0,keepAliveSocket:!0,requestUrls:g.history,timing:w,socket:N,retries:g.retries,socketErrorRetries:g.socketErrorRetries},S=5000,H=5000;if(G.timeout)if(Array.isArray(G.timeout))S=G.timeout[0]??S,H=G.timeout[1]??H;else S=H=G.timeout;if(E)for(let T in E)D[T.toLowerCase()]=E[T];if("user-agent"in D&&!D["user-agent"])delete D["user-agent"];else if(!D["user-agent"])D["user-agent"]=aF;if(G.streaming||G.customResponse)G.dataType="stream";if(G.dataType==="json"&&!D.accept)D.accept="application/json";if(G.gzip&&G.compressed!==!1)G.compressed=!0;if(G.compressed&&!D["accept-encoding"])D["accept-encoding"]="gzip, br";if(g.retries>0)D["x-urllib-retry"]=`${g.retries}/${G.retry}`;if(g.socketErrorRetries>0)D["x-urllib-retry-on-socket-error"]=`${g.socketErrorRetries}/${G.socketErrorRetry}`;if(G.auth&&!D.authorization)D.authorization=`Basic ${Buffer.from(G.auth).toString("base64")}`;let y=!1,Z=!1;if(G.dataType==="stream"||G.writeStream)Z=!0;let j=G.maxRedirects??10;try{let T={method:Q,maxRedirections:0,headersTimeout:S,headers:D,bodyTimeout:H,opaque:J,dispatcher:G.dispatcher??this.#I,signal:G.signal,reset:!1};if(typeof G.highWaterMark==="number")T.highWaterMark=G.highWaterMark;if(typeof G.reset==="boolean")T.reset=G.reset;if(G.followRedirect===!1)j=0;let L=T.method==="GET"||T.method==="HEAD";if(G.stream&&!G.content){if(FN(G.stream)&&!(G.stream instanceof vh))qY("Request#%d convert old style stream to Readable",C),G.stream=new vh().wrap(G.stream),y=!0;else if(G.stream instanceof XZA.default)qY("Request#%d convert formstream to Readable",C),G.stream=new vh().wrap(G.stream),y=!0;G.content=G.stream}if(G.files){if(L)T.method="POST";let c=new pF,P=[];if(Array.isArray(G.files))for(let[f,n]of G.files.entries()){let AA=f===0?"file":`file${f}`;P.push([AA,n])}else if(G.files instanceof vh||FN(G.files))P.push(["file",G.files]);else if(typeof G.files==="string"||Buffer.isBuffer(G.files))P.push(["file",G.files]);else if(typeof G.files==="object"){let f=G.files;for(let n in f){let AA=f[n];P.push([n,AA,n])}}if(G.data)for(let f in G.data)c.append(f,G.data[f]);for(let[f,[n,AA,p]]of P.entries()){let BA="",m;if(typeof AA==="string")BA=ZZA(AA),m=QpI(AA);else if(Buffer.isBuffer(AA))BA=p||`bufferfile${f}`,m=AA;else if(AA instanceof vh||FN(AA))BA=NpI(AA)||p||`streamfile${f}`,y=!0,m=AA;let gA=UZA.default.lookup(BA)||"";c.append(n,m,{filename:BA,contentType:gA}),qY("formData append field: %s, mimeType: %s, fileName: %s",n,gA,BA)}Object.assign(D,c.getHeaders()),T.body=c}else if(G.content){if(!L){if(T.body=G.content,G.contentType)D["content-type"]=G.contentType;else if(typeof G.content==="string"&&!D["content-type"])D["content-type"]="text/plain;charset=UTF-8";y=FN(G.content)}}else if(G.data){let c=typeof G.data==="string"||Buffer.isBuffer(G.data)||FN(G.data);if(L){if(!c){let P;if(G.nestedQuerystring)P=QT.default.stringify(G.data);else P=GpI.stringify(G.data);let f=B.href;B=new URL(f+(f.includes("?")?"&":"?")+P)}}else if(c)T.body=G.data,y=FN(G.data);else if(G.contentType==="json"||G.contentType==="application/json"||D["content-type"]?.startsWith("application/json")){if(T.body=JSON.stringify(G.data),!D["content-type"])D["content-type"]="application/json"}else if(D["content-type"]="application/x-www-form-urlencoded;charset=UTF-8",G.nestedQuerystring)T.body=QT.default.stringify(G.data);else T.body=new URLSearchParams(G.data).toString()}if(y)G.retry=0,G.socketErrorRetry=0,j=0;if(Z)G.retry=0,G.socketErrorRetry=0;if(qY("Request#%d %s %s, headers: %j, headersTimeout: %s, bodyTimeout: %s, isStreamingRequest: %s, isStreamingResponse: %s, maxRedirections: %s, redirects: %s",C,T.method,B.href,D,S,H,y,Z,j,g.redirects),T.headers=D,RY.request.publish({request:K}),this.listenerCount("request")>0)this.emit("request",K);let U=await yZA(B,T);if(U.statusCode===401&&(U.headers["www-authenticate"]||U.headers["x-www-authenticate"])&&!T.headers.authorization&&G.digestAuth){let c=U.headers["www-authenticate"]??U.headers["x-www-authenticate"],P=Array.isArray(c)?c.find((f)=>f.startsWith("Digest ")):c;if(P&&P.startsWith("Digest ")){if(qY("Request#%d %s: got digest auth header WWW-Authenticate: %s",C,B.href,P),T.headers.authorization=XFA(T.method,`${B.pathname}${B.search}`,P,G.digestAuth),qY("Request#%d %s: auth with digest header: %s",C,A,T.headers.authorization),Array.isArray(U.headers["set-cookie"]))T.headers.cookie=U.headers["set-cookie"].join(";");await U.body.arrayBuffer(),U=await yZA(B,T)}}let X=U.headers["content-encoding"],W=X==="gzip"||X==="br";if(q.headers=U.headers,q.status=q.statusCode=U.statusCode,q.statusMessage=q.statusText=ApI[q.status]||"",q.headers["content-length"])q.size=parseInt(q.headers["content-length"]);if(HpI.includes(q.statusCode)&&j>0&&g.redirects<j){if(q.headers.location){g.redirects++;let c=new URL(q.headers.location,B.href);return await U.body.arrayBuffer(),qY("Request#%d got response, status: %s, headers: %j, timing: %j, redirect to %s",C,q.status,q.headers,q.timing,c.href),await this.#g(c.href,I,g)}}let O=null;if(G.dataType==="stream")if(G.compressed===!0&&W){let c=X==="gzip"?hZA():iZA();q=Object.assign(BpI(U.body,c,MpI),q)}else q=Object.assign(U.body,q);else if(G.writeStream)if(G.compressed===!0&&W){let c=X==="gzip"?hZA():iZA();await LZA(U.body,c,G.writeStream)}else await LZA(U.body,G.writeStream);else{if(O=Buffer.from(await U.body.arrayBuffer()),W&&O.length>0)try{O=X==="gzip"?gpI(O):CpI(O)}catch(c){if(c.name==="Error")c.name="UnzipError";throw c}if(G.dataType==="text"||G.dataType==="html")O=O.toString();else if(G.dataType==="json")if(O.length===0)O=null;else O=UFA(O.toString(),G.fixJSONCtlChars)}q.rt=VD(Y),xq(N,J);let $={opaque:M,data:O,status:q.status,statusCode:q.status,statusText:q.statusText,headers:q.headers,url:B.href,redirected:g.history.length>1,requestUrls:q.requestUrls,res:q};if(qY("Request#%d got response, status: %s, headers: %j, timing: %j, socket: %j",C,q.status,q.headers,q.timing,q.socket),G.retry>0&&g.retries<G.retry){if((G.isRetry??kpI)($)){if(G.retryDelay)await wpI(G.retryDelay);return g.retries++,await this.#g(A,I,g)}}if(RY.response.publish({request:K,response:q}),this.listenerCount("response")>0)this.emit("response",{requestId:C,error:null,ctx:G.ctx,req:{...K,options:G},res:q});return $}catch(T){qY("Request#%d throw error: %s, socketErrorRetry: %s, socketErrorRetries: %s",C,T,G.socketErrorRetry,g.socketErrorRetries);let L=T;if(L.name==="HeadersTimeoutError")L=new fh(S,{cause:L});else if(L.name==="BodyTimeoutError")L=new fh(H,{cause:L});else if(L.name==="InformationalError"&&L.message.includes("stream timeout"))L=new fh(H,{cause:L});else if(L.code==="UND_ERR_CONNECT_TIMEOUT")L=new BT(L.message,L.code,{cause:L});else if(L.code==="UND_ERR_SOCKET"||L.code==="ECONNRESET"){if(G.socketErrorRetry>0&&g.socketErrorRetries<G.socketErrorRetry)return g.socketErrorRetries++,qY("Request#%d retry on socket error, socketErrorRetries: %d",C,g.socketErrorRetries),await this.#g(A,I,g)}if(L.opaque=M,L.status=q.status,L.headers=q.headers,L.res=q,L.socket)L._rawSocket=L.socket;if(L.socket=N,q.rt=VD(Y),xq(N,J,T),RY.response.publish({request:K,response:q,error:L}),this.listenerCount("response")>0)this.emit("response",{requestId:C,error:L,ctx:G.ctx,req:{...K,options:G},res:q});throw L}}}import{MockAgent as nWg,ProxyAgent as ClI,Agent as A3A,Dispatcher as sWg,setGlobalDispatcher as rWg,getGlobalDispatcher as tWg,Request as eWg,Response as AUg,Headers as IUg,FormData as gUg}from"undici";var sUA=bg($q(),1),rUA=bg(aUA(),1);import{AsyncLocalStorage as nuI}from"async_hooks";import{debuglog as suI}from"util";import{fetch as ruI,Request as tuI,getGlobalDispatcher as euI}from"undici";var nUA=suI("urllib/fetch");class SY{static#A;static#I=new nuI;static getDispatcher(){return SY.#A??euI()}static setDispatcher(A){SY.#A=A}static setClientOptions(A){let I={opaqueLocalStorage:SY.#I},g=ZN;if(A?.lookup||A?.checkAddress)I={...I,lookup:A.lookup,checkAddress:A.checkAddress,connect:A.connect,allowH2:A.allowH2},g=oh;else if(A?.connect)I={...I,connect:A.connect,allowH2:A.allowH2},g=ZN;else if(A?.allowH2)I={...I,allowH2:A.allowH2},g=ZN;SY.#A=new g(I),uF()}static getDispatcherPoolStats(){let A=SY.getDispatcher(),I=Reflect.get(A,sUA.default.kClients),g={};if(!I)return g;for(let[C,B]of I){let E=(typeof B.deref==="function"?B.deref():B)?.stats;if(!E)continue;g[C]={connected:E.connected,free:E.free,pending:E.pending,queued:E.queued,running:E.running,size:E.size}}return g}static async fetch(A,I){let g=performance.now();I=I??{},I.dispatcher=I.dispatcher??SY.#A;let C=new tuI(A,I),B=yN("HttpClientRequest"),Q={queuing:0,dnslookup:0,connected:0,requestHeadersSent:0,requestSent:0,waiting:0,contentDownload:0},E={[AI.kRequestId]:B,[AI.kRequestStartTime]:g,[AI.kEnableRequestTiming]:!!(I.timing??!0),[AI.kRequestTiming]:Q},D={requestId:B,url:C.url,args:{method:C.method,type:C.method,data:C.body,headers:vP(C.headers)},retries:0},G={requestId:B,request:C},Y={id:0,localAddress:"",localPort:0,remoteAddress:"",remotePort:0,remoteFamily:"",bytesWritten:0,bytesRead:0,handledRequests:0,handledResponses:0};RY.request.publish({request:D}),RY.fetchRequest.publish({fetch:G});let w,J={status:-1,statusCode:-1,statusText:"",statusMessage:"",headers:{},size:0,aborted:!1,rt:0,keepAliveSocket:!0,requestUrls:[C.url],timing:Q,socket:Y,retries:0,socketErrorRetries:0};try{await SY.#I.run(E,async()=>{w=await ruI(C)})}catch(N){throw xq(Y,E,N),J.rt=VD(g),nUA("Request#%d throw error: %s",B,N),RY.fetchResponse.publish({fetch:G,error:N}),RY.response.publish({request:D,response:J,error:N}),N}let K=rUA.getResponseState(w);if(xq(Y,E),J.headers=vP(w.headers),J.status=J.statusCode=w.status,J.statusMessage=w.statusText,J.headers["content-length"])J.size=parseInt(J.headers["content-length"]);return J.rt=VD(g),nUA("Request#%d got response, status: %s, headers: %j, timing: %j, socket: %j",B,J.status,J.headers,Q,J.socket),RY.fetchResponse.publish({fetch:G,timingInfo:K.timingInfo,response:w}),RY.response.publish({request:D,response:J}),w}}var AlI=SY.fetch;jFA();var $T,bT,cT,oT,tUA=new ch(50);function IlI(A,I){if(A===!1){if(I){if(!oT)oT=new MK({allowH2:I,connect:{rejectUnauthorized:A}});return oT}if(!cT)cT=new MK({connect:{rejectUnauthorized:A}});return cT}if(I){if(!bT)bT=new MK({allowH2:I});return bT}if(!$T)$T=new MK;return $T}async function eUA(A,I){if(I?.socketPath){let g=tUA.get(I.socketPath);if(!g)g=new MK({connect:{socketPath:I.socketPath}}),tUA.set(I.socketPath,g);return await g.request(A,I)}return await IlI(I?.rejectUnauthorized,I?.allowH2).request(A,I)}async function glI(A,I){return await eUA(A,I)}var ah={request:eUA,curl:glI,USER_AGENT:aF};import{debuglog as AnI}from"util";import{createVerify as b1A,randomUUID as InI}from"crypto";import{Readable as c1A}from"stream";var sq=bg(R3A(),1),o1A=bg(uT(),1);import{ReadableStream as OlI}from"stream/web";class nh extends Error{status;headers;error;code;param;type;constructor(A,I,g,C){super(`${nh.makeMessage(A,I,g)}`);this.status=A,this.headers=C;let B=I;this.error=B,this.code=B?.code,this.param=B?.param,this.type=B?.type}static makeMessage(A,I,g){let C=I?.message?typeof I.message==="string"?I.message:JSON.stringify(I.message):I?JSON.stringify(I):g;if(A&&C)return`${A} ${C}`;if(A)return`${A} status code (no body)`;if(C)return C;return"(no status code or body)"}}function VlI(A,I){let g=A.indexOf(I);if(g!==-1)return[A.substring(0,g),I,A.substring(g+I.length)];return[A,"",""]}class lT{data;event;chunks;constructor(){this.event=null,this.data=[],this.chunks=[]}decode(A){let I=A;if(A.endsWith("\r"))I=A.substring(0,A.length-1);if(!I){if(!this.event&&!this.data.length)return null;let Q={event:this.event,data:this.data.join(`
1482
1482
  `),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],Q}if(this.chunks.push(I),I.startsWith(":"))return null;let[g,C,B]=VlI(I,":");if(B.startsWith(" "))B=B.substring(1);if(g==="event")this.event=B;else if(g==="data")this.data.push(B);return null}}class lq{static NEWLINE_CHARS=new Set([`
1483
1483
  `,"\r","\v","\f","\x1C","\x1D","\x1E","\x85","\u2028","\u2029"]);static NEWLINE_REGEXP=/\r\n|[\n\r\x0b\x0c\x1c\x1d\x1e\x85\u2028\u2029]/g;buffer;trailingCR;textDecoder;constructor(){this.buffer=[],this.trailingCR=!1}decode(A){let I=this.decodeText(A);if(this.trailingCR)I="\r"+I,this.trailingCR=!1;if(I.endsWith("\r"))this.trailingCR=!0,I=I.slice(0,-1);if(!I)return[];let g=lq.NEWLINE_CHARS.has(I[I.length-1]||""),C=I.split(lq.NEWLINE_REGEXP);if(g)C.pop();if(C.length===1&&!g)return this.buffer.push(C[0]),[];if(this.buffer.length>0)C=[this.buffer.join("")+C[0],...C.slice(1)],this.buffer=[];if(!g)this.buffer=[C.pop()||""];return C}decodeText(A){if(A===null)return"";if(typeof A==="string")return A;if(typeof Buffer<"u"){if(A instanceof Buffer)return A.toString();if(A instanceof Uint8Array)return Buffer.from(A).toString();throw Error(`Unexpected: received non-Uint8Array (${A?.constructor.name}) stream chunk in an environment with a global "Buffer" defined, which this library assumes to be Node. Please report this error.`)}if(typeof TextDecoder<"u"){if(A instanceof Uint8Array||A instanceof ArrayBuffer)return this.textDecoder??=new TextDecoder("utf8"),this.textDecoder.decode(A);throw Error(`Unexpected: received non-Uint8Array/ArrayBuffer (${A.constructor.name}) in a web platform. Please report this error.`)}throw Error("Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.")}flush(){if(!this.buffer.length&&!this.trailingCR)return[];let A=[this.buffer.join("")];return this.buffer=[],this.trailingCR=!1,A}}function T3A(A){if(A[Symbol.asyncIterator])return A;let I=A.getReader();return{async next(){try{let g=await I.read();if(g?.done)I.releaseLock();return g}catch(g){throw I.releaseLock(),g}},async return(){let g=I.cancel();return I.releaseLock(),await g,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}class TM{iterator;controller;constructor(A,I){this.iterator=A,this.controller=I}static fromSSEResponse(A,I){let g=!1,C=new lT;async function*B(){if(!A.body)throw I.abort(),Error("Attempted to iterate over a response with no body");let E=new lq,D=T3A(A.body);for await(let G of D)for(let Y of E.decode(G)){let w=C.decode(Y);if(w)yield w}for(let G of E.flush()){let Y=C.decode(G);if(Y)yield Y}}async function*Q(){if(g)throw Error("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");g=!0;let E=!1;try{for await(let D of B()){if(E)continue;if(D.data.startsWith("[DONE]")){E=!0;continue}if(D.event===null){let G;try{G=JSON.parse(D.data)}catch(Y){throw console.error("Could not parse message into JSON:",D.data),console.error("From chunk:",D.raw),Y}if(G&&G.error)throw new nh(void 0,G.error,void 0,void 0);yield G}else{let G;try{G=JSON.parse(D.data)}catch(Y){throw console.error("Could not parse message into JSON:",D.data),console.error("From chunk:",D.raw),Y}if(D.event==="error")throw new nh(void 0,G.error,G.message,void 0);yield{event:D.event,data:G}}}E=!0}catch(D){if(D instanceof Error&&D.name==="AbortError")return;throw D}finally{if(!E)I.abort()}}return new TM(Q,I)}static fromReadableStream(A,I,g){let C=!1;async function*B(){let E=new lq,D=T3A(A);for await(let G of D)for(let Y of E.decode(G))yield Y;for(let G of E.flush())yield G}async function*Q(){if(C)throw Error("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");C=!0;let E=!1;try{for await(let D of B()){if(E)continue;if(D)if(g?.disableJSONParse)yield D;else yield JSON.parse(D)}E=!0}catch(D){if(D instanceof Error&&D.name==="AbortError")return;throw D}finally{if(!E)I?.abort()}}return new TM(Q,I)}[Symbol.asyncIterator](){return this.iterator()}tee(){let A=[],I=[],g=this.iterator(),C=(B)=>{return{next:()=>{if(B.length===0){let Q=g.next();A.push(Q),I.push(Q)}return B.shift()}}};return[new TM(()=>C(A),this.controller),new TM(()=>C(I),this.controller)]}toReadableStream(){let A=this,I,g=new TextEncoder;return new OlI({async start(){I=A[Symbol.asyncIterator]()},async pull(C){try{let{value:B,done:Q}=await I.next();if(Q)return C.close();let E=g.encode(JSON.stringify(B)+`
1484
1484
  `);C.enqueue(E)}catch(B){C.error(B)}},async cancel(){await I.return?.()}})}}var x3A=bg(J4(),1);class aq extends x3A.default{constructor(A){super({minChunkSize:2097152,...A})}}class sh{method;files;fields;constructor(){this.fields=[],this.files=[],this.method="post"}getFields(){return this.fields}getFiles(){return this.files}getMethod(){return this.method}setMethod(A){this.method=A.toLowerCase()}addField(A,I){if($3A(I))this.fields.push({name:A,value:JSON.parse(I)});else this.fields.push({name:A,value:I})}addFile(A,I,g){let C={fieldName:A,name:I};if(typeof g==="string")C.path=g;else if(Buffer.isBuffer(g))C.content=g;else C.stream=g;this.files.push(C)}}function $3A(A){if(typeof A!=="string")return!1;if(A=A.replace(/\s/g,"").replace(/\n|\r/,""),/^\{(.*?)\}$/.test(A))return/"(.*?)":(.*?)/g.test(A);if(/^\[(.*?)\]$/.test(A))return A.replace(/^\[/,"").replace(/\]$/,"").replace(/},{/g,`}
@@ -1533,7 +1533,7 @@ expectedSignature: %o`,H,F),!eXA(H,F,this.config.alipayPublicKey))throw new TD(`
1533
1533
  <p style="margin-bottom: 0px; padding: 0px; font-size: 14px;">
1534
1534
  React Native\u4E2D\u6587\u7F51 Pushy\u70ED\u66F4\u65B0\u670D\u52A1
1535
1535
  </p>
1536
- `})}var v1A=new xI({prefix:"/oss-proxy"}).get("/:fileName",async({status:A,params:{fileName:I}})=>{if(!I)return A(404);let g=await KyA(I),C=await fetch(g);if(!C.ok)return A(C.status);return new Response(C.body,{headers:{"Content-Type":C.headers.get("Content-Type")||"application/octet-stream","Content-Disposition":`attachment; filename="${I}"`}})},{params:uQA,detail:{hide:!0}});async function EnI({offset:A=0,limit:I=20,type:g,fromHash:C,toHash:B}){let Q={};if(g)Q.type=g;if(C)Q.fromHash=C;if(B)Q.toHash=B;let[E,D]=await Promise.all([wI.tasks.count({where:Q}),wI.tasks.findMany({where:Q,orderBy:{id:"desc"},select:{id:!0,type:!0,fromHash:!0,toHash:!0,createdAt:!0,updatedAt:!0},skip:A,take:I})]);return{data:D,count:E}}var _1A=new xI({prefix:"/task"}).get("/list",async({query:{offset:A=0,limit:I=10,type:g,fromHash:C,toHash:B}})=>{return EnI({offset:A,limit:I,type:g,fromHash:C,toHash:B})},{query:IEA});var l1A=bg(vJ(),1);class rq extends Error{code;op;constructor(A,I){super(A);this.code=400,this.op=I}}var MW=bg(SS(),1),m1A=bg(dJ(),1);var H7=({urls:A,supportsBackupCdn:I})=>{if(I)return A[0];return DnI(A)},p1A=async({pkgHash:A,fromHash:I,toHash:g,diffFn:C,useCompactFormat:B,supportsBackupCdn:Q,platform:E})=>{let D={},G=`${A}-${g}.p${C}`,Y=`${G}.empty`;if(await Vq(G))if(B)D.pdiff=G;else{let w=zF(G);D.pdiffUrl=H7({urls:w,supportsBackupCdn:Q}),D.pdiffUrls=w}else if(await Vq(Y));else wI.tasks.create({data:{type:`${C}From${RH[E]}`,fromHash:A,toHash:g}}).catch((w)=>console.error(w.stack));if(I&&C==="hdiff"){let w=`${I}-${g}.${C}`,M=`${w}.empty`;if(await Vq(w))if(B)D.diff=w;else{let J=zF(w);D.diffUrl=H7({urls:J,supportsBackupCdn:Q}),D.diffUrls=J}else if(await Vq(M));else wI.tasks.create({data:{type:C,fromHash:I,toHash:g}}).catch((J)=>console.error(J.stack))}return D},q7=(A)=>!!A&&m1A.default(A,">= 8.5.5 < 9.0.0 || >= 9.2.5 < 10.0.0 || >= 10.26.4"),DnI=(A)=>A[Math.floor(Math.random()*A.length)];async function d1A({appKey:A,packageVersion:I,hash:g,buildTime:C,cInfo:B,toHash:Q}){let E="diff",D=!1,G=!1,Y=!1;if(B){let Z=B.rnu||B.pushy||"";if(Z){if(MW.default(Z,"5.99.0"))E="hdiff";if(MW.default(Z,"10.13.0"))D=!0;if(MW.default(Z,"10.15.0"))G=!0;if(q7(Z))Y=!0}}let w=await KM({appKey:A});if(!w)throw new rq(`appKey ${A} not found.`,[{type:"block",duration:31536000000,reason:`appKey ${A} not found.`}]);let M=await WE({userId:w.userId});if(CEA({user:M}),Number(await f5({user:M}))<0)return{upToDate:!0,paused:"quota"};if(w.status==="paused")return{upToDate:!0,paused:"app"};let K=await wI.packages.findFirst({where:{appId:w.id,name:I},select:{id:!0,hash:!0,status:!0,buildTime:!0,versions:{select:{id:!0,name:!0,hash:!0,description:!0,metaInfo:!0,config:G}},bindings:{select:{rollout:!0,config:!0,versions:{select:{name:!0,hash:!0,description:!0,metaInfo:!0}}}}}});if(!K||K.status==="expired"){let Z={expired:!0};if(w.downloadUrl)Z.downloadUrl=w.downloadUrl;return Z}if(K.status==="paused")return{upToDate:!0,paused:"package"};let N=K.versions,k=null;if(Q)N=await wI.versions.findFirst({where:{appId:w.id,hash:Q},select:{id:!0,name:!0,hash:!0,description:!0,metaInfo:!0,config:!0}});else if(K.bindings?.length>0){for(let Z of K.bindings){let j=Z.rollout??100;if(j>0&&j<100)k=Z.versions,k.config={rollout:{[I]:j}},k.description=k.description||"";else if(!N)N=Z.versions,delete N.config}if(!N)N=k,k=null}let q=N?.hash;if(!N||!q||g===q)return{upToDate:!0};let S=w.ignoreBuildTime==="enabled";if(!S&&C&&K.buildTime!==C)throw new rq("\u7F16\u8BD1\u65F6\u95F4\u6233\u4E0D\u5339\u914D",[{type:"block",duration:21600000,reason:"\u7F16\u8BD1\u65F6\u95F4\u6233\u4E0D\u5339\u914D"}]);let H={update:!0,hash:q,name:N.name,description:N.description,metaInfo:N.metaInfo,config:N.config},F=C||S;if(F)if(D)H.full=q;else{let Z=zF(q);H.updateUrl=H7({urls:Z,supportsBackupCdn:Y}),H.updateUrls=Z}if(k){let Z=await p1A({pkgHash:K.hash,fromHash:g,toHash:k.hash,diffFn:E,useCompactFormat:D,supportsBackupCdn:Y,platform:w.platform});if(H.expVersion={...k,...Z},F)H.expVersion.full=k.hash}let y=await p1A({pkgHash:K.hash,fromHash:g,toHash:q,diffFn:E,useCompactFormat:D,supportsBackupCdn:Y,platform:w.platform});if(H={...H,...y},!H.pdiffUrl&&!H.diffUrl&&!H.pdiff&&!H.diff)return{upToDate:!0};if(D){H.paths=MyA();for(let[Z,j]of Object.entries(H))if(j===""||j===null||j===void 0)delete H[Z]}return H}var GnI=300000,wnI=3600000,YnI=604800,u1A=7776000,KnI=7200,MnI="\x1F";function JnI(A){return l1A.default(A).format("YYYYMMDDHHmm")}function a1A(A,I){let g=Math.floor(A.getTime()/I)*I;return JnI(new Date(g))}function NnI(A=new Date){return a1A(A,GnI)}function knI(A=new Date){return a1A(A,wnI)}function n1A(A,I){return`${A}${MnI}${I}`}async function HnI({appKey:A,payload:I}){try{let C=`cu:agg:${NnI()}:app:${A}`,B=vg.pipeline();B.hincrby(C,"_total",1);for(let[Q,E]of Object.entries(I)){if(E===void 0||E===null)continue;let D=n1A(Q,String(E));B.hincrby(C,D,1)}B.expire(C,YnI),await B.exec()}catch(g){console.error("Failed to record app metrics:",g)}}async function qnI({uuid:A,payload:I}){try{let g=knI(),C=`cu:agg:${g}:global`,B=`cu:agg:uv:${g}:global`,Q=`cu:uniq:${g}:global`,E=!1;if(typeof A==="string"&&A)E=await vg.pfadd(Q,A)===1,vg.expire(Q,KnI);let D=vg.pipeline();D.hincrby(C,"_total",1);for(let[G,Y]of Object.entries(I)){if(Y===void 0||Y===null)continue;let w=n1A(G,String(Y));if(D.hincrby(C,w,1),E)D.hincrby(B,w,1)}if(E)D.hincrby(B,"_total",1),D.expire(B,u1A);D.expire(C,u1A),await D.exec()}catch(g){console.error("Failed to record global metrics:",g)}}var s1A=new xI({prefix:"/checkUpdate"}).onError(({error:A,set:I})=>{if(I.status=400,A instanceof rq)return{message:A.message,op:A.op};return{message:A.message}}).post("/:appKey",async({params:A,body:I})=>{let{appKey:g}=A,{packageVersion:C,hash:B="",buildTime:Q="",cInfo:E={rnu:"",rn:"",os:"",uuid:""},toHash:D=""}=I,G=E.pushy||E.rnu,Y=q7(G),w=`${g}_${C}_${B}_${Q}_${G}_${D}`;vg.zincrby(ZE.appCheckUpdate(),1,g);let M=`${C}_${Q}`;return HnI({appKey:g,payload:{packageVersion_buildTime:M,hash:B}}),qnI({uuid:E.uuid,payload:{rnu:G,os:E.os,rn:E.rn}}),await _J({cacheKey:w,expire:Y?void 0:5000,handler:()=>d1A({appKey:g,packageVersion:C,hash:B,buildTime:Q,cInfo:E,toHash:D})})},{params:nQA,body:sQA});var e1A=bg(vJ(),1);var RnI=300000,SnI=3600000,hnI="\x1F",inI=a.Object({start:a.String({format:"date-time"}),end:a.String({format:"date-time"}),mode:a.Optional(a.Union([a.Literal("pv"),a.Literal("uv")])),dataKey:a.Optional(a.String()),dataValue:a.Optional(a.String())}),LnI=a.Object({appKey:a.String(),start:a.String({format:"date-time"}),end:a.String({format:"date-time"}),dataKey:a.Optional(a.String()),dataValue:a.Optional(a.String()),mode:a.Optional(a.Union([a.Literal("pv"),a.Literal("uv")]))});function ynI(A){return e1A.default(A).format("YYYYMMDDHHmm")}function JW(A,I){return`${A}${hnI}${I}`}function r1A(A){let I=Number(A.slice(0,4)),g=Number(A.slice(4,6)),C=Number(A.slice(6,8)),B=Number(A.slice(8,10)),Q=Number(A.slice(10,12));if(!Number.isFinite(I)||!Number.isFinite(g)||!Number.isFinite(C)||!Number.isFinite(B)||!Number.isFinite(Q))return null;return new Date(I,g-1,C,B,Q)}function t1A(A,I,g){let C=Math.floor(A.getTime()/g)*g,B=Math.floor(I.getTime()/g)*g,Q=[];for(let E=C;E<=B;E+=g)Q.push(ynI(new Date(E)));return Q}function NW(A,I,g){let C=g.get(A);if(C!==void 0)return C;let B=I.length;return I.push(A),g.set(A,B),B}var AjA=new xI({prefix:"/metrics"}).get("/global",async({query:A,status:I})=>{let{start:g,end:C,mode:B="pv",dataKey:Q,dataValue:E}=A,D=new Date(g),G=new Date(C);if(Number.isNaN(D.getTime())||Number.isNaN(G.getTime()))return I(400,{message:"invalid start or end"});if(Q&&E===void 0)return I(400,{message:"dataValue is required"});let Y=t1A(D,G,SnI),w=vg.pipeline();for(let k of Y){let q=B==="uv"?`cu:agg:uv:${k}:global`:`cu:agg:${k}:global`;if(Q){let S=JW(String(Q),String(E));w.hget(q,S)}else w.hgetall(q)}let M=await w.exec(),J=[],K=new Map,N=Y.map((k,q)=>{let S=M?.[q],H=r1A(k),F=H?H.toISOString():k;if(Q){let j=S&&!S[0]?Number(S[1]??0):0,T=JW(String(Q),String(E));if(!Number.isFinite(j)||j===0)return{time:F,data:[]};let L=NW(T,J,K);return{time:F,data:[[L,j]]}}let y=S&&!S[0]?S[1]:null,Z=[];if(y)for(let[j,T]of Object.entries(y)){let L=Number(T);if(!Number.isFinite(L)||L===0)continue;let U=NW(j,J,K);Z.push([U,L])}return{time:F,data:Z}});return{dict:J,data:N}},{query:inI}).use(lJ).get("/app",async({query:A,status:I,userId:g})=>{let{appKey:C,start:B,end:Q,dataKey:E,dataValue:D,mode:G}=A,Y=new Date(B),w=new Date(Q);if(Number.isNaN(Y.getTime())||Number.isNaN(w.getTime()))return I(400,{message:"invalid start or end"});if(G==="uv")return I(400,{message:"uv is only supported for global metrics"});let M=await KM({appKey:C});if(!M||M.userId!==g)return I(403,{message:"no access to app"});if(E&&D===void 0)return I(400,{message:"dataValue is required"});let J=t1A(Y,w,RnI),K=vg.pipeline();for(let H of J){let F=`cu:agg:${H}:app:${C}`;if(E){let y=JW(String(E),String(D));K.hget(F,y)}else K.hgetall(F)}let N=await K.exec(),k=[],q=new Map,S=J.map((H,F)=>{let y=N?.[F],Z=r1A(H),j=Z?Z.toISOString():H;if(E){let U=y&&!y[0]?Number(y[1]??0):0,X=JW(String(E),String(D));if(!Number.isFinite(U)||U===0)return{time:j,data:[]};let W=NW(X,k,q);return{time:j,data:[[W,U]]}}let T=y&&!y[0]?y[1]:null,L=[];if(T)for(let[U,X]of Object.entries(T)){let W=Number(X);if(!Number.isFinite(W)||W===0)continue;let O=NW(U,k,q);L.push([O,W])}return{time:j,data:L}});return{dict:k,data:S}},{query:LnI});var IjA=bg(RS(),1);var gjA=new xI({prefix:"/upload"}).use(JM).post("/",async({userId:A,body:{ext:I},headers:g,status:C})=>{let Q=(g["user-agent"]||"").split("react-native-update-cli/")[1];if(!Q)return C(400,{message:"\u8BF7\u5347\u7EA7 cli \u540E\u518D\u5C1D\u8BD5( npm i -g react-native-update-cli )"});if(IjA.default(Q,"1.43.0"))return C(400,{message:`\u60A8\u5F53\u524D\u7684 cli \u7248\u672C ${Q} \u5DF2\u8FC7\u671F\uFF0C\u8BF7\u5347\u7EA7\u540E\u518D\u5C1D\u8BD5( npm i -g react-native-update-cli )`});let E=await QG({userId:A}),D="";if(I===".ipa"||I===".apk"||I===".app")D=E.packageSize;else if(I===".ppk")D=E.bundleSize;else return C(400,{message:"\u60A8\u53EA\u80FD\u4E0A\u4F20 .ipa, .apk, .app \u4EE5\u53CA .ppk \u6587\u4EF6"});return YyA({maxSize:D})},{body:cQA,detail:{hide:!0}});var R7=bg(vJ(),1);import{createHash as FnI}from"crypto";function B2(A){return FnI("md5").update(A).digest("base64")}async function CjA(A,I){let g=A.replace("@",'<span style="display:none"></span>@<span style="display:none"></span>'),C=FS({type:"verify",uid:I,exp:Date.now()+3600000}),B=`${wS}/activate?code=${C}`;await bh({to:A,subject:"React Native\u4E2D\u6587\u7F51: Pushy\u70ED\u66F4\u65B0\u670D\u52A1-\u6FC0\u6D3B\u60A8\u7684\u8D26\u6237",html:`
1536
+ `})}var v1A=new xI({prefix:"/oss-proxy"}).get("/:fileName",async({status:A,params:{fileName:I}})=>{if(!I)return A(404);let g=await KyA(I),C=await fetch(g);if(!C.ok)return A(C.status);return new Response(C.body,{headers:{"Content-Type":C.headers.get("Content-Type")||"application/octet-stream","Content-Disposition":`attachment; filename="${I}"`}})},{params:uQA,detail:{hide:!0}});async function EnI({offset:A=0,limit:I=20,type:g,fromHash:C,toHash:B}){let Q={};if(g)Q.type=g;if(C)Q.fromHash=C;if(B)Q.toHash=B;let[E,D]=await Promise.all([wI.tasks.count({where:Q}),wI.tasks.findMany({where:Q,orderBy:{id:"desc"},select:{id:!0,type:!0,fromHash:!0,toHash:!0,createdAt:!0,updatedAt:!0},skip:A,take:I})]);return{data:D,count:E}}var _1A=new xI({prefix:"/task"}).get("/list",async({query:{offset:A=0,limit:I=10,type:g,fromHash:C,toHash:B}})=>{return EnI({offset:A,limit:I,type:g,fromHash:C,toHash:B})},{query:IEA});var l1A=bg(vJ(),1);class rq extends Error{code;op;constructor(A,I){super(A);this.code=400,this.op=I}}var MW=bg(SS(),1),m1A=bg(dJ(),1);var H7=({urls:A,supportsBackupCdn:I})=>{if(I)return A[0];return DnI(A)},p1A=async({pkgHash:A,fromHash:I,toHash:g,diffFn:C,useCompactFormat:B,supportsBackupCdn:Q,platform:E})=>{let D={},G=`${A}-${g}.p${C}`,Y=`${G}.empty`;if(await Vq(G))if(B)D.pdiff=G;else{let w=zF(G);D.pdiffUrl=H7({urls:w,supportsBackupCdn:Q}),D.pdiffUrls=w}else if(await Vq(Y));else wI.tasks.create({data:{type:`${C}From${RH[E]}`,fromHash:A,toHash:g}}).catch((w)=>console.error(w.stack));if(I&&C==="hdiff"){let w=`${I}-${g}.${C}`,M=`${w}.empty`;if(await Vq(w))if(B)D.diff=w;else{let J=zF(w);D.diffUrl=H7({urls:J,supportsBackupCdn:Q}),D.diffUrls=J}else if(await Vq(M));else wI.tasks.create({data:{type:C,fromHash:I,toHash:g}}).catch((J)=>console.error(J.stack))}return D},q7=(A)=>!!A&&m1A.default(A,">= 8.5.5 < 9.0.0 || >= 9.2.5 < 10.0.0 || >= 10.26.4"),DnI=(A)=>A[Math.floor(Math.random()*A.length)];async function d1A({appKey:A,packageVersion:I,hash:g,buildTime:C,cInfo:B,toHash:Q}){let E="diff",D=!1,G=!1,Y=!1;if(B){let Z=B.rnu||B.pushy||"";if(Z){if(MW.default(Z,"5.99.0"))E="hdiff";if(MW.default(Z,"10.13.0"))D=!0;if(MW.default(Z,"10.15.0"))G=!0;if(q7(Z))Y=!0}}let w=await KM({appKey:A});if(!w)throw new rq(`appKey ${A} not found.`,[{type:"block",duration:31536000000,reason:`appKey ${A} not found.`}]);let M=await WE({userId:w.userId});if(CEA({user:M}),Number(await f5({user:M}))<0)return{upToDate:!0,paused:"quota"};if(w.status==="paused")return{upToDate:!0,paused:"app"};let K=await wI.packages.findFirst({where:{appId:w.id,name:I},select:{id:!0,hash:!0,status:!0,buildTime:!0,versions:{select:{id:!0,name:!0,hash:!0,description:!0,metaInfo:!0,config:G}},bindings:{select:{rollout:!0,config:!0,versions:{select:{name:!0,hash:!0,description:!0,metaInfo:!0}}}}}});if(!K||K.status==="expired"){let Z={expired:!0};if(w.downloadUrl)Z.downloadUrl=w.downloadUrl;return Z}if(K.status==="paused")return{upToDate:!0,paused:"package"};let N=K.versions,k=null;if(Q)N=await wI.versions.findFirst({where:{appId:w.id,hash:Q},select:{id:!0,name:!0,hash:!0,description:!0,metaInfo:!0,config:!0}});else if(K.bindings?.length>0){for(let Z of K.bindings){let j=Z.rollout??100;if(j>0&&j<100)k=Z.versions,k.config={rollout:{[I]:j}},k.description=k.description||"";else if(!N)N=Z.versions,delete N.config}if(!N)N=k,k=null}let q=N?.hash;if(!N||!q||g===q)return{upToDate:!0};let S=w.ignoreBuildTime==="enabled";if(!S&&C&&K.buildTime!==C)throw new rq("\u7F16\u8BD1\u65F6\u95F4\u6233\u4E0D\u5339\u914D",[{type:"block",duration:21600000,reason:"\u7F16\u8BD1\u65F6\u95F4\u6233\u4E0D\u5339\u914D"}]);let H={update:!0,hash:q,name:N.name,description:N.description,metaInfo:N.metaInfo,config:N.config},F=C||S;if(F)if(D)H.full=q;else{let Z=zF(q);H.updateUrl=H7({urls:Z,supportsBackupCdn:Y}),H.updateUrls=Z}if(k){let Z=await p1A({pkgHash:K.hash,fromHash:g,toHash:k.hash,diffFn:E,useCompactFormat:D,supportsBackupCdn:Y,platform:w.platform});if(H.expVersion={...k,...Z},F)H.expVersion.full=k.hash}let y=await p1A({pkgHash:K.hash,fromHash:g,toHash:q,diffFn:E,useCompactFormat:D,supportsBackupCdn:Y,platform:w.platform});if(H={...H,...y},!H.pdiffUrl&&!H.diffUrl&&!H.pdiff&&!H.diff)return{upToDate:!0};if(D){H.paths=MyA();for(let[Z,j]of Object.entries(H))if(j===""||j===null||j===void 0)delete H[Z]}return H}var GnI=300000,wnI=3600000,YnI=604800,u1A=7776000,KnI=7200,MnI="\x1F";function JnI(A){return l1A.default(A).format("YYYYMMDDHHmm")}function a1A(A,I){let g=Math.floor(A.getTime()/I)*I;return JnI(new Date(g))}function NnI(A=new Date){return a1A(A,GnI)}function knI(A=new Date){return a1A(A,wnI)}function n1A(A,I){return`${A}${MnI}${I||"unknown"}`}async function HnI({appKey:A,payload:I}){try{let C=`cu:agg:${NnI()}:app:${A}`,B=vg.pipeline();B.hincrby(C,"_total",1);for(let[Q,E]of Object.entries(I)){let D=n1A(Q,E);B.hincrby(C,D,1)}B.expire(C,YnI),await B.exec()}catch(g){console.error("Failed to record app metrics:",g)}}async function qnI({uuid:A,payload:I}){try{let g=knI(),C=`cu:agg:${g}:global`,B=`cu:agg:uv:${g}:global`,Q=`cu:uniq:${g}:global`,E=!1;if(typeof A==="string"&&A)E=await vg.pfadd(Q,A)===1,vg.expire(Q,KnI);let D=vg.pipeline();D.hincrby(C,"_total",1);for(let[G,Y]of Object.entries(I)){let w=n1A(G,Y);if(D.hincrby(C,w,1),E)D.hincrby(B,w,1)}if(E)D.hincrby(B,"_total",1),D.expire(B,u1A);D.expire(C,u1A),await D.exec()}catch(g){console.error("Failed to record global metrics:",g)}}var s1A=new xI({prefix:"/checkUpdate"}).onError(({error:A,set:I})=>{if(I.status=400,A instanceof rq)return{message:A.message,op:A.op};return{message:A.message}}).post("/:appKey",async({params:A,body:I})=>{let{appKey:g}=A,{packageVersion:C,hash:B="",buildTime:Q="",cInfo:E={rnu:"",rn:"",os:"",uuid:""},toHash:D=""}=I,G=E.pushy||E.rnu,Y=q7(G),w=`${g}_${C}_${B}_${Q}_${G}_${D}`;vg.zincrby(ZE.appCheckUpdate(),1,g);let M=`${C}_${Q}`;return HnI({appKey:g,payload:{packageVersion_buildTime:M,hash:B}}),qnI({uuid:E.uuid,payload:{rnu:G,os:E.os,rn:E.rn}}),await _J({cacheKey:w,expire:Y?void 0:5000,handler:()=>d1A({appKey:g,packageVersion:C,hash:B,buildTime:Q,cInfo:E,toHash:D})})},{params:nQA,body:sQA});var e1A=bg(vJ(),1);var RnI=300000,SnI=3600000,hnI="\x1F",inI=a.Object({start:a.String({format:"date-time"}),end:a.String({format:"date-time"}),mode:a.Optional(a.Union([a.Literal("pv"),a.Literal("uv")])),dataKey:a.Optional(a.String()),dataValue:a.Optional(a.String())}),LnI=a.Object({appKey:a.String(),start:a.String({format:"date-time"}),end:a.String({format:"date-time"}),dataKey:a.Optional(a.String()),dataValue:a.Optional(a.String()),mode:a.Optional(a.Union([a.Literal("pv"),a.Literal("uv")]))});function ynI(A){return e1A.default(A).format("YYYYMMDDHHmm")}function JW(A,I){return`${A}${hnI}${I}`}function r1A(A){let I=Number(A.slice(0,4)),g=Number(A.slice(4,6)),C=Number(A.slice(6,8)),B=Number(A.slice(8,10)),Q=Number(A.slice(10,12));if(!Number.isFinite(I)||!Number.isFinite(g)||!Number.isFinite(C)||!Number.isFinite(B)||!Number.isFinite(Q))return null;return new Date(I,g-1,C,B,Q)}function t1A(A,I,g){let C=Math.floor(A.getTime()/g)*g,B=Math.floor(I.getTime()/g)*g,Q=[];for(let E=C;E<=B;E+=g)Q.push(ynI(new Date(E)));return Q}function NW(A,I,g){let C=g.get(A);if(C!==void 0)return C;let B=I.length;return I.push(A),g.set(A,B),B}var AjA=new xI({prefix:"/metrics"}).get("/global",async({query:A,status:I})=>{let{start:g,end:C,mode:B="pv",dataKey:Q,dataValue:E}=A,D=new Date(g),G=new Date(C);if(Number.isNaN(D.getTime())||Number.isNaN(G.getTime()))return I(400,{message:"invalid start or end"});if(Q&&E===void 0)return I(400,{message:"dataValue is required"});let Y=t1A(D,G,SnI),w=vg.pipeline();for(let k of Y){let q=B==="uv"?`cu:agg:uv:${k}:global`:`cu:agg:${k}:global`;if(Q){let S=JW(String(Q),String(E));w.hget(q,S)}else w.hgetall(q)}let M=await w.exec(),J=[],K=new Map,N=Y.map((k,q)=>{let S=M?.[q],H=r1A(k),F=H?H.toISOString():k;if(Q){let j=S&&!S[0]?Number(S[1]??0):0,T=JW(String(Q),String(E));if(!Number.isFinite(j)||j===0)return{time:F,data:[]};let L=NW(T,J,K);return{time:F,data:[[L,j]]}}let y=S&&!S[0]?S[1]:null,Z=[];if(y)for(let[j,T]of Object.entries(y)){let L=Number(T);if(!Number.isFinite(L)||L===0)continue;let U=NW(j,J,K);Z.push([U,L])}return{time:F,data:Z}});return{dict:J,data:N}},{query:inI}).use(lJ).get("/app",async({query:A,status:I,userId:g})=>{let{appKey:C,start:B,end:Q,dataKey:E,dataValue:D,mode:G}=A,Y=new Date(B),w=new Date(Q);if(Number.isNaN(Y.getTime())||Number.isNaN(w.getTime()))return I(400,{message:"invalid start or end"});if(G==="uv")return I(400,{message:"uv is only supported for global metrics"});let M=await KM({appKey:C});if(!M||M.userId!==g)return I(403,{message:"no access to app"});if(E&&D===void 0)return I(400,{message:"dataValue is required"});let J=t1A(Y,w,RnI),K=vg.pipeline();for(let H of J){let F=`cu:agg:${H}:app:${C}`;if(E){let y=JW(String(E),String(D));K.hget(F,y)}else K.hgetall(F)}let N=await K.exec(),k=[],q=new Map,S=J.map((H,F)=>{let y=N?.[F],Z=r1A(H),j=Z?Z.toISOString():H;if(E){let U=y&&!y[0]?Number(y[1]??0):0,X=JW(String(E),String(D));if(!Number.isFinite(U)||U===0)return{time:j,data:[]};let W=NW(X,k,q);return{time:j,data:[[W,U]]}}let T=y&&!y[0]?y[1]:null,L=[];if(T)for(let[U,X]of Object.entries(T)){let W=Number(X);if(!Number.isFinite(W)||W===0)continue;let O=NW(U,k,q);L.push([O,W])}return{time:j,data:L}});return{dict:k,data:S}},{query:LnI});var IjA=bg(RS(),1);var gjA=new xI({prefix:"/upload"}).use(JM).post("/",async({userId:A,body:{ext:I},headers:g,status:C})=>{let Q=(g["user-agent"]||"").split("react-native-update-cli/")[1];if(!Q)return C(400,{message:"\u8BF7\u5347\u7EA7 cli \u540E\u518D\u5C1D\u8BD5( npm i -g react-native-update-cli )"});if(IjA.default(Q,"1.43.0"))return C(400,{message:`\u60A8\u5F53\u524D\u7684 cli \u7248\u672C ${Q} \u5DF2\u8FC7\u671F\uFF0C\u8BF7\u5347\u7EA7\u540E\u518D\u5C1D\u8BD5( npm i -g react-native-update-cli )`});let E=await QG({userId:A}),D="";if(I===".ipa"||I===".apk"||I===".app")D=E.packageSize;else if(I===".ppk")D=E.bundleSize;else return C(400,{message:"\u60A8\u53EA\u80FD\u4E0A\u4F20 .ipa, .apk, .app \u4EE5\u53CA .ppk \u6587\u4EF6"});return YyA({maxSize:D})},{body:cQA,detail:{hide:!0}});var R7=bg(vJ(),1);import{createHash as FnI}from"crypto";function B2(A){return FnI("md5").update(A).digest("base64")}async function CjA(A,I){let g=A.replace("@",'<span style="display:none"></span>@<span style="display:none"></span>'),C=FS({type:"verify",uid:I,exp:Date.now()+3600000}),B=`${wS}/activate?code=${C}`;await bh({to:A,subject:"React Native\u4E2D\u6587\u7F51: Pushy\u70ED\u66F4\u65B0\u670D\u52A1-\u6FC0\u6D3B\u60A8\u7684\u8D26\u6237",html:`
1537
1537
  <p>
1538
1538
  <span style="font-size: 14px;">\u4EB2\u7231\u7684 <b>${g}</b></span><span style="font-size: 14px;">\uFF0C\u60A8\u597D\uFF01</span>
1539
1539
  </p>
@@ -1592,5 +1592,5 @@ React Native\u4E2D\u6587\u7F51 \u70ED\u66F4\u65B0\u670D\u52A1
1592
1592
  </p>
1593
1593
  `}),{userId:C.id}},{body:b5,detail:{hide:!0}}).post("/resetpwd/reset",async({status:A,body:{token:I,newPwd:g}})=>{let C=uJ(I,"resetpwd");if(!C)return A(403,{message:"\u65E0\u6548\u7684\u6FC0\u6D3B\u7801\u6216\u6FC0\u6D3B\u7801\u5DF2\u8FC7\u671F"});let B=`${aw(16)}==`,Q=B2(g+B);if(!await wI.users.update({where:{id:C.uid},data:{salt:B,secret:Q},select:{email:!0}}))return A(404);let D=await vg.get("failAttempts");try{if(D){let G=JSON.parse(D);if(G[C.uid])G[C.uid]=0,vg.set("failAttempts",JSON.stringify(G))}}catch{}return{userId:C.uid}},{body:eQA,detail:{hide:!0}}).post("/login",async({status:A,body:{email:I,pwd:g}})=>{let C=await WE({email:I});if(!C)return A(403,{message:"\u7528\u6237\u540D\u6216\u5BC6\u7801\u9519\u8BEF"});let B=R7.default().format("YYYYMMDD"),Q={today:B},E=await vg.get("failAttempts");try{if(E)Q=JSON.parse(E)}catch{}if(B!==Q.today)Q={today:B};if(!Q[C.id])Q[C.id]=0;if(Q[C.id]>4)return A(403,{message:"\u5931\u8D25\u6B21\u6570\u5DF2\u8FBE\u4E0A\u9650\uFF0C\u767B\u5F55\u5DF2\u9501\u5B9A\uFF0C\u8BF7\u627E\u56DE\u5BC6\u7801\u6216\u660E\u65E5\u91CD\u8BD5\u3002"});if(C.secret!==B2(g+C.salt))return Q[C.id]+=1,await vg.set("failAttempts",JSON.stringify(Q)),A(403,{message:"\u7528\u6237\u540D\u6216\u5BC6\u7801\u9519\u8BEF"});if(C.status==="unverified")return A(423,{message:"\u60A8\u7684\u8D26\u6237\u8FD8\u6CA1\u6709\u901A\u8FC7\u5BA1\u6838"});return{token:x5(C.id),userId:C.id,info:{email:I,name:C.name}}},{body:AEA,detail:{hide:!0}}).use(lJ).get("/me",async({status:A,userId:I})=>{let g=await WE({userId:I});if(!g)return A(401,{message:"\u8BF7\u5148\u767B\u5F55"});let{avg:C,counts:B}=await BEA({user:g}),Q={id:g.id,name:g.name,email:g.email,tier:g.tier,tierExpiresAt:g.tierExpiresAt,checkQuota:B[0],last7dAvg:C,last7dCounts:B};if(P8(g.email))Q.admin=!0;let E=Q;if(g.tier==="custom")E.quota=await QG({user:g});return E},{detail:{hide:!0}});var QjA=process.env.PORT||9000,EjA=new xI;if(process.env.ENV==="aliyun")EjA.use(v1A);EjA.use(nm({exclude:{paths:["/status"]},documentation:{info:{title:"Pushy Server",version:H8.version},servers:[{url:"/api/"}]}})).use(av()).use(uv({level:"error",serializers:{...bi,request:(A)=>`${A.method} ${A.url}`},redact:{paths:["pid","hostname"],remove:!0},customProps:(A)=>({body:A.body})})).use(vt).use(BjA).use(SyA).use(VQA).use(hyA).use(RyA).use(gjA).use(f1A).use(s1A).use(AjA).use(_1A).all("/status",H8).listen(QjA);console.log("process.env.NODE_ENV","production");console.log(`Pushy server (${H8.version}) is running on port ${QjA}`);
1594
1594
 
1595
- //# debugId=7806E6A99A0B0C9664756E2164756E21
1595
+ //# debugId=5FB4C008A2D25C5064756E2164756E21
1596
1596
  //# sourceMappingURL=index.js.map