@redocly/cli 2.62.1 → 2.62.2

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.
Files changed (100) hide show
  1. package/THIRD_PARTY_NOTICES +2 -2
  2. package/lib/chunks/{O7F2NBMC.js → 2OBVZIAW.js} +2 -2
  3. package/lib/chunks/{GVQMC2WB.js → 2OQM5ARW.js} +1 -1
  4. package/lib/chunks/{DBBMGF4W.js → 36IHQANV.js} +1 -1
  5. package/lib/chunks/{YPYZCXVX.js → 3FXYWWTJ.js} +1 -1
  6. package/lib/chunks/{UFZ7VJKO.js → 3JYQOGV3.js} +1 -1
  7. package/lib/chunks/{YINR7LU6.js → 3WHXM4DJ.js} +1 -1
  8. package/lib/chunks/{RGU6OZYB.js → 4AM55DEH.js} +1 -1
  9. package/lib/chunks/{G55KF2JU.js → 4OEXH5EV.js} +1 -1
  10. package/lib/chunks/{23KTTVIR.js → 5SIJI5LC.js} +1 -1
  11. package/lib/chunks/{PRSNVDUV.js → 5X35UU2C.js} +1 -1
  12. package/lib/chunks/{3M4FKKBI.js → 6MH5ZWLD.js} +1 -1
  13. package/lib/chunks/{XVZ7A34Y.js → 6WZUCZGV.js} +1 -1
  14. package/lib/chunks/{7YNVVBUW.js → 73RBZL53.js} +1 -1
  15. package/lib/chunks/{Y5AAEFMH.js → 7WM6VLB3.js} +1 -1
  16. package/lib/chunks/{ZNQTCB4Q.js → 7WTV5KH3.js} +1 -1
  17. package/lib/chunks/{LWPTRXNP.js → CIDSJFJO.js} +1 -1
  18. package/lib/chunks/{KQ5RN67Y.js → CQKQB4PJ.js} +1 -1
  19. package/lib/chunks/DS4SCWID.js +9 -0
  20. package/lib/chunks/{QWPV64G2.js → EDQ6QRIB.js} +1 -1
  21. package/lib/chunks/{LNYTDBAU.js → ENSYM7KY.js} +1 -1
  22. package/lib/chunks/{5YW5LAGV.js → FDGP3ZYZ.js} +1 -1
  23. package/lib/chunks/GKXY6U4S.js +145 -0
  24. package/lib/chunks/{WEOCCL26.js → GWXT3QO6.js} +5 -5
  25. package/lib/chunks/{VE45GKNY.js → HUWKDZPP.js} +1 -1
  26. package/lib/chunks/{W3G6AQCC.js → HWTYAU4Y.js} +1 -1
  27. package/lib/chunks/{VXLODB3S.js → HYE4U6V5.js} +1 -1
  28. package/lib/chunks/{REIGI2Y7.js → I5CGSLGR.js} +1 -1
  29. package/lib/chunks/{P7MVM2ZA.js → IUSSBOYO.js} +1 -1
  30. package/lib/chunks/{5UYYEBJY.js → JLVGRO3I.js} +1 -1
  31. package/lib/chunks/{AB2EMYEK.js → KOR5TUJG.js} +1 -1
  32. package/lib/chunks/{WPIZQQ5C.js → LCFG5N4V.js} +1 -1
  33. package/lib/chunks/{BX2H6D2W.js → M3XPS7UF.js} +1 -1
  34. package/lib/chunks/{B64RMZSV.js → PWGFZ5ZK.js} +1 -1
  35. package/lib/chunks/{UWK3L6LB.js → RU7T4CKG.js} +1 -1
  36. package/lib/chunks/{RUIEI3YV.js → SHZZKTDE.js} +1 -1
  37. package/lib/chunks/{SOI7RTB4.js → TKLMYBPI.js} +1 -1
  38. package/lib/chunks/{QMIOB64K.js → V2YF33JL.js} +1 -1
  39. package/lib/chunks/{ID2DJAJI.js → V3ILUN2S.js} +1 -1
  40. package/lib/chunks/{L3H2DSRP.js → VXONEXYX.js} +1 -1
  41. package/lib/chunks/{5S5OMDQZ.js → WX24BERR.js} +381 -381
  42. package/lib/chunks/{ZJYDDU5M.js → XFBJHVYU.js} +1 -1
  43. package/lib/chunks/{U77FTE2C.js → Z6GHMX6Z.js} +1 -1
  44. package/lib/chunks/{NBI4EQPC.js → ZCVUIIPU.js} +1 -1
  45. package/lib/eject-assets/generators/cli/docs.ts +1 -1
  46. package/lib/eject-assets/generators/cli/engine-source.ts +1 -1
  47. package/lib/eject-assets/generators/cli/index.ts +2 -2
  48. package/lib/eject-assets/generators/cli/render.ts +1 -1
  49. package/lib/eject-assets/generators/go/client.ts +1 -1
  50. package/lib/eject-assets/generators/go/descriptor.ts +1 -1
  51. package/lib/eject-assets/generators/go/index.ts +2 -2
  52. package/lib/eject-assets/generators/go/models.ts +1 -1
  53. package/lib/eject-assets/generators/go/naming.ts +1 -1
  54. package/lib/eject-assets/generators/go/operations.ts +1 -1
  55. package/lib/eject-assets/generators/go/pagination.ts +1 -1
  56. package/lib/eject-assets/generators/go/types.ts +1 -1
  57. package/lib/eject-assets/generators/mock/faker.ts +1 -1
  58. package/lib/eject-assets/generators/mock/index.ts +2 -2
  59. package/lib/eject-assets/generators/mock/render.ts +1 -1
  60. package/lib/eject-assets/generators/mock/sample.ts +1 -1
  61. package/lib/eject-assets/generators/mock/values.ts +1 -1
  62. package/lib/eject-assets/generators/php/client.ts +1 -1
  63. package/lib/eject-assets/generators/php/descriptor.ts +1 -1
  64. package/lib/eject-assets/generators/php/index.ts +2 -2
  65. package/lib/eject-assets/generators/php/models.ts +1 -1
  66. package/lib/eject-assets/generators/php/naming.ts +1 -1
  67. package/lib/eject-assets/generators/php/operations.ts +1 -1
  68. package/lib/eject-assets/generators/php/pagination.ts +1 -1
  69. package/lib/eject-assets/generators/php/types.ts +1 -1
  70. package/lib/eject-assets/generators/python/client.ts +1 -1
  71. package/lib/eject-assets/generators/python/descriptor.ts +1 -1
  72. package/lib/eject-assets/generators/python/index.ts +2 -2
  73. package/lib/eject-assets/generators/python/models.ts +1 -1
  74. package/lib/eject-assets/generators/python/naming.ts +1 -1
  75. package/lib/eject-assets/generators/python/operations.ts +1 -1
  76. package/lib/eject-assets/generators/python/pagination.ts +1 -1
  77. package/lib/eject-assets/generators/python/types.ts +1 -1
  78. package/lib/eject-assets/generators/swr/index.ts +2 -2
  79. package/lib/eject-assets/generators/swr/render.ts +1 -1
  80. package/lib/eject-assets/generators/tanstack-query/index.ts +2 -2
  81. package/lib/eject-assets/generators/tanstack-query/render.ts +1 -1
  82. package/lib/eject-assets/generators/transformers/index.ts +2 -2
  83. package/lib/eject-assets/generators/transformers/render.ts +1 -1
  84. package/lib/eject-assets/generators/typescript/banner.ts +1 -1
  85. package/lib/eject-assets/generators/typescript/client.ts +1 -1
  86. package/lib/eject-assets/generators/typescript/descriptor.ts +1 -1
  87. package/lib/eject-assets/generators/typescript/index.ts +2 -2
  88. package/lib/eject-assets/generators/typescript/inline-runtime.ts +1 -1
  89. package/lib/eject-assets/generators/typescript/operation-signature.ts +1 -1
  90. package/lib/eject-assets/generators/typescript/operation-types.ts +1 -1
  91. package/lib/eject-assets/generators/typescript/operations.ts +1 -1
  92. package/lib/eject-assets/generators/typescript/response-headers.ts +1 -1
  93. package/lib/eject-assets/generators/typescript/type-guards.ts +1 -1
  94. package/lib/eject-assets/generators/typescript/types.ts +1 -1
  95. package/lib/eject-assets/generators/zod/index.ts +2 -2
  96. package/lib/eject-assets/generators/zod/schemas.ts +1 -1
  97. package/lib/index.js +25 -25
  98. package/package.json +1 -1
  99. package/lib/chunks/5NOJ76EP.js +0 -9
  100. package/lib/chunks/LRUXN6H5.js +0 -59
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/cli",
3
- "version": "2.62.1",
3
+ "version": "2.62.2",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,9 +0,0 @@
1
- import { createRequire as __createRequire } from 'node:module';
2
- import { fileURLToPath as __fileURLToPath } from 'node:url';
3
- import { dirname as __pathDirname } from 'node:path';
4
- const require = __createRequire(import.meta.url);
5
- var __filename = __fileURLToPath(import.meta.url);
6
- var __dirname = __pathDirname(__filename);
7
- import{a as ue}from"./LRUXN6H5.js";import{Aa as Y,j as b,l as I,o as z,oa as m,p as H,ta as q}from"./22EANOP2.js";import{e as ce}from"./RFWIIJFG.js";var _=ce(ue(),1);function V(){return process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.http_proxy||process.env.https_proxy}function K(n){let t=process.env.NO_PROXY||process.env.no_proxy;if(!t)return!1;let e=t.split(",").map(o=>o.trim().toLowerCase()).filter(Boolean);if(e.length===0)return!1;let r;try{r=new URL(n).hostname.toLowerCase()}catch{return!1}return e.some(o=>!!(o==="*"||r===o||o.startsWith(".")&&r.endsWith(o)||!o.startsWith(".")&&r.endsWith("."+o)))}var G=async(n,{timeout:t,...e}={})=>{let r=V(),o=r&&!K(n),s,i=t?{connect:{timeout:t}}:{};return o?s=new _.ProxyAgent({uri:r,...i}):t&&(s=new _.Agent(i)),await fetch(n,{signal:t?AbortSignal.timeout(t):void 0,...e,dispatcher:s})};var le=/^[\x21-\x7e]+( [\x21-\x7e]+)*$/;function X(){let n=process.env.REDOCLY_ENVIRONMENT?.trim();return n&&le.test(n)?n:void 0}var u=class extends Error{status;constructor(t,e){super(t),this.status=e}},T=class{command;version;sunsetWarnings=[];constructor(t,e="2.0"){this.command=t,this.version=e}async request(t,e){let r=X(),o={...e.headers,"user-agent":`redocly-cli/${this.version} ${this.command}${r?` ${r}`:""}`};try{let s=await G(t,{...e,headers:o});return this.collectSunsetWarning(s),s}catch(s){let i="Failed to fetch.";throw s.cause&&(i+=` Caused by ${s.cause.message||s.cause.name}.`),(s.code||s.cause?.code)&&(i+=` Code: ${s.code||s.cause?.code}`),new Error(i)}}collectSunsetWarning(t){let e=this.getSunsetDate(t);if(!e)return;let r=new Date(e);e>Date.now()?this.sunsetWarnings.push({sunsetDate:r,isSunsetExpired:!1}):this.sunsetWarnings.push({sunsetDate:r,isSunsetExpired:!0})}getSunsetDate(t){let{headers:e}=t;if(!e)return;let r=e.get("sunset")||e.get("Sunset");if(r)return Date.parse(r)}},U=class{client;domain;apiKey;constructor(t,e,r){this.client=t,this.domain=e,this.apiKey=r}async getParsedResponse(t){let e=await t.json();if(t.ok)return e;throw new u(`${e.title||t.statusText||"Unknown error"}.`,t.status)}},N=class extends U{async find(t,e){try{let r=await this.client.request(`${this.domain}/api/orgs/${encodeURIComponent(t)}/projects/${encodeURIComponent(e)}`,{timeout:6e3,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}});return r.status===404?void 0:await this.getParsedResponse(r)}catch(r){let o=`Failed to fetch project. ${r.message}`;throw r instanceof u?new u(o,r.status):new Error(o)}}},j=class extends U{async getDefaultBranch(t,e){try{let r=await this.client.request(`${this.domain}/api/orgs/${t}/projects/${e}/source`,{timeout:6e3,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}});return(await this.getParsedResponse(r)).branchName}catch(r){let o=`Failed to fetch default branch. ${r.message}`;throw r instanceof u?new u(o,r.status):new Error(o)}}async upsert(t,e,r){try{let o=await this.client.request(`${this.domain}/api/orgs/${t}/projects/${e}/remotes`,{timeout:6e3,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({mountPath:r.mountPath,mountBranchName:r.mountBranchName,type:"CICD",autoMerge:!0})});return await this.getParsedResponse(o)}catch(o){let s=`Failed to upsert remote. ${o.message}`;throw o instanceof u?new u(s,o.status):new Error(s)}}async push(t,e,r,o){let s=new globalThis.FormData;s.append("remoteId",r.remoteId),s.append("commit[message]",r.commit.message),s.append("commit[author][name]",r.commit.author.name),s.append("commit[author][email]",r.commit.author.email),s.append("commit[branchName]",r.commit.branchName),r.commit.url&&s.append("commit[url]",r.commit.url),r.commit.namespace&&s.append("commit[namespaceId]",r.commit.namespace),r.commit.sha&&s.append("commit[sha]",r.commit.sha),r.commit.repository&&s.append("commit[repositoryId]",r.commit.repository),r.commit.createdAt&&s.append("commit[createdAt]",r.commit.createdAt);for(let i of o){let a=Buffer.isBuffer(i.stream)?new Blob([i.stream]):new Blob([await de(i.stream)]);s.append(`files[${i.path}]`,a,i.path)}r.isMainBranch&&s.append("isMainBranch","true"),r.replace&&s.append("replace","true");try{let i=await this.client.request(`${this.domain}/api/orgs/${t}/projects/${e}/pushes`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`},body:s});return await this.getParsedResponse(i)}catch(i){let a=`Failed to push. ${i.message}`;throw i instanceof u?new u(a,i.status):new Error(a)}}async getPush({organizationId:t,projectId:e,pushId:r}){try{let o=await this.client.request(`${this.domain}/api/orgs/${t}/projects/${e}/pushes/${r}`,{timeout:6e3,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}});return await this.getParsedResponse(o)}catch(o){let s=`Failed to get push status. ${o.message}`;throw o instanceof u?new u(s,o.status):new Error(s)}}},g=class{apiClient;projects;remotes;constructor({domain:t,apiKey:e,command:r,version:o}){this.apiClient=new T(r,o),this.projects=new N(this.apiClient,t,e),this.remotes=new j(this.apiClient,t,e)}getSunsetWarning(){return Z(this.apiClient.sunsetWarnings)}};function Z(n){let[t]=[...n].sort((e,r)=>e.isSunsetExpired!==r.isSunsetExpired?e.isSunsetExpired?-1:1:e.sunsetDate>r.sunsetDate?1:-1);return t}async function de(n){let t=[];for await(let e of n)t.push(e);return Buffer.concat(t)}function he(){if(process.env.REDOCLY_AUTHORIZATION)return process.env.REDOCLY_AUTHORIZATION;throw new Error("No api key provided, please use environment variable REDOCLY_AUTHORIZATION.")}var fe=/^http:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/,P={us:"https://app.cloud.redocly.com",eu:"https://app.cloud.eu.redocly.com"};function pe(){return process.env.REDOCLY_DOMAIN||P.us}var J=me((n,t)=>{try{let e=t||n?.resolvedConfig.residency;return ge(e)?P[e]:e?new URL(e).origin:n?.resolvedConfig.scorecard?.fromProjectUrl?new URL(n.resolvedConfig.scorecard.fromProjectUrl).origin:P.us}catch{throw new R}});function O(n){try{J(void 0,n)}catch{return!1}return!0}function me(n){return(...t)=>{let e=n(...t);if(!e.startsWith("https://")&&!fe.test(e))throw new R;return e}}var R=class extends Error{constructor(){super("Invalid Reunite URL")}};function ge(n){return typeof n=="string"&&n in P}import{Buffer as D}from"node:buffer";import F from"node:crypto";import{mkdirSync as we,existsSync as ee,writeFileSync as ye,readFileSync as ve,rmSync as Te}from"node:fs";import{homedir as xe}from"node:os";import te from"node:path";import*as Q from"node:child_process";var w=class{baseUrl;apiClient;clientName="redocly-cli";constructor(t,e){this.baseUrl=t,this.apiClient=new T("login",e)}async run(t){let e=await this.getDeviceCode();t?.({verificationUri:e.verificationUri,verificationUriComplete:e.verificationUriComplete,userCode:e.userCode}),this.openBrowser(e.verificationUriComplete);let r=await this.pollingAccessToken(e.deviceCode,e.interval,e.expiresIn);return this.withResidency(r)}openBrowser(t){if(!/^https?:\/\//.test(t))return;let[e,r]=process.platform==="win32"?["rundll32",["url.dll,FileProtocolHandler",t]]:process.platform==="darwin"?["open",[t]]:["xdg-open",[t]];Q.spawn(e,r,{stdio:"ignore",detached:!0}).on("error",()=>{}).unref()}async verifyToken(t){try{return!!(await this.sendRequest("/session","GET",void 0,{Cookie:`accessToken=${t};`})).user}catch{return!1}}async verifyApiKey(t){try{return!!(await this.sendRequest("/api-keys-verify","POST",{apiKey:t})).success}catch{return!1}}async refreshToken(t){let e=await this.sendRequest("/device-rotate-token","POST",{grant_type:"refresh_token",client_name:this.clientName,refresh_token:t});if(!e.access_token)throw new Error("Failed to refresh token");return this.withResidency({access_token:e.access_token,refresh_token:e.refresh_token,expires_in:e.expires_in})}async pollingAccessToken(t,e,r){return new Promise((o,s)=>{let i=setInterval(async()=>{let c=await this.getAccessToken(t);c.access_token&&(clearInterval(i),clearTimeout(a),o(c)),c.error&&c.error!=="authorization_pending"&&(clearInterval(i),clearTimeout(a),s(c.error_description))},e*1e3),a=setTimeout(async()=>{clearInterval(i),clearTimeout(a),s("Authorization has expired. Please try again.")},r*1e3)})}async getAccessToken(t){return await this.sendRequest("/device-token","POST",{client_name:this.clientName,device_code:t,grant_type:"urn:ietf:params:oauth:grant-type:device_code"})}async getDeviceCode(){let{device_code:t,user_code:e,verification_uri:r,verification_uri_complete:o,interval:s=10,expires_in:i=300}=await this.sendRequest("/device-authorize","POST",{client_name:this.clientName});return{deviceCode:t,userCode:e,verificationUri:r,verificationUriComplete:o,interval:s,expiresIn:i}}async sendRequest(t,e="GET",r=void 0,o={}){let s=`${this.baseUrl}/api${t}`,i=await this.apiClient.request(s,{body:r&&JSON.stringify(r),method:e,headers:{"Content-Type":"application/json",...o},timeout:6e3});return i.status===204?{success:!0}:await i.json()}withResidency(t){return{...t,residency:this.baseUrl}}};var Ce="4618dbc9-8aed-4e27-aaf0-225f4603e5a4",re="aes-256-cbc",k=class{version;credentialsFolderPath;credentialsFilePath;credentialsFileName;key;iv;constructor(t){this.version=t;let e=xe();this.credentialsFolderPath=te.join(e,".redocly"),this.credentialsFileName="credentials",this.credentialsFilePath=te.join(this.credentialsFolderPath,this.credentialsFileName),this.key=F.createHash("sha256").update(`${this.credentialsFolderPath}${Ce}`).digest(),this.iv=F.createHash("md5").update(this.credentialsFolderPath).digest(),we(this.credentialsFolderPath,{recursive:!0})}async login(t,e){let o=await new w(t,this.version).run(e);if(!o)throw new Error("Failed to login. No credentials received.");await this.saveCredentials(o)}async logout(){try{this.removeCredentials()}catch{}}async isAuthorized(t,e){return e?new w(t,this.version).verifyApiKey(e):!!await this.getAccessToken(t)}getAccessToken=async t=>{let e=new w(t,this.version),r=await this.readCredentials();if(!r||!O(t)||r.residency&&r.residency!==t)return null;if(await e.verifyToken(r.access_token))return r.access_token;try{let s=await e.refreshToken(r.refresh_token);return await this.saveCredentials(s),s.access_token}catch{return null}};async saveCredentials(t){try{let e=this.encryptCredentials(t);ye(this.credentialsFilePath,e,"utf8")}catch(e){throw new Error(`Failed to save credentials: ${e.message}`)}}async readCredentials(){if(!ee(this.credentialsFilePath))return null;try{let t=ve(this.credentialsFilePath,"utf8");return this.decryptCredentials(t)}catch{return null}}async removeCredentials(){ee(this.credentialsFilePath)&&Te(this.credentialsFilePath)}encryptCredentials(t){let e=F.createCipheriv(re,this.key,this.iv);return D.concat([e.update(JSON.stringify(t),"utf8"),e.final()]).toString("hex")}decryptCredentials(t){let e=F.createDecipheriv(re,this.key,this.iv),r=D.concat([e.update(D.from(t,"hex")),e.final()]);return JSON.parse(r.toString("utf8"))}};import*as y from"node:fs";import*as h from"node:path";var Pe=/\/orgs\/([^/]+)\/projects\//,Re=[401,403];async function x(n,{organization:t,project:e,onSlugDeprecated:r}){let o=await Ee(n,t,e);if(!o)return{organizationId:t,projectId:e};let s={organizationId:$e(o.uri),projectId:o.id};return(s.organizationId!==t||s.projectId!==e)&&r?.(s),s}async function Ee(n,t,e){try{let r=await n.projects.find(t,e);if(!r)throw new u(`Project "${e}" was not found in organization "${t}". Use the IDs from the organization and project settings in Reunite.`,404);return r}catch(r){if(r instanceof u&&Re.includes(r.status))return;throw r}}function $e(n){let t=n.match(Pe)?.[1];if(!t)throw new Error(`Could not read the organization ID from the project URI "${n}".`);return t}async function _e({domain:n,apiKey:t,organization:e,project:r,mountPath:o,files:s,defaultBranch:i,commit:a,version:c,replace:E,onUploadStart:$,onSunsetWarning:v,onSlugDeprecated:A}){let f=new g({domain:n,apiKey:t,command:"push",version:c});try{let{organizationId:d,projectId:l}=await x(f,{organization:e,project:r,onSlugDeprecated:A}),M=await f.remotes.getDefaultBranch(d,l),p=await f.remotes.upsert(d,l,{mountBranchName:M,mountPath:o});$?.(p);let{id:C}=await f.remotes.push(d,l,{remoteId:p.id,commit:a,isMainBranch:i===a.branchName,replace:E},s.map(W=>({path:z(W.name),stream:y.createReadStream(W.path)})));return{pushId:C,organizationId:d,projectId:l}}finally{let d=f.getSunsetWarning();d&&v?.(d)}}function Se(n,t){let e={};for(let o of n)if(y.statSync(o).isDirectory()){let s=o;ne(s,[]).forEach(a=>r(a,s))}else r(o,h.dirname(o));function r(o,s){let i=h.relative(s,o);e[i]&&t?.(e[i],o),e[i]=o}return Object.entries(e).map(([o,s])=>({name:o,path:h.resolve(s)}))}function ne(n,t){let e=y.readdirSync(n);for(let r of e){let o=h.join(n,r);y.statSync(o).isDirectory()?t=ne(o,t):t.push(o)}return t}async function se({operation:n,condition:t,onConditionNotMet:e,startTime:r=Date.now(),retryTimeoutMs:o=6e5,retryIntervalMs:s=5e3}){async function i(){let a=await n();if(t(a))return a;if(Date.now()-r>o)throw new Error("Timeout exceeded.");return await e?.(a),await b(s),i()}return i()}var Ue=1200,Fe=5e3,Ae=["pending","running"];async function Ie(n){let t=oe(n);try{let e=await x(t,n);return await ae(t,e,n.pushId)}finally{ie(t,n)}}async function Ne({buildType:n,maxExecutionTime:t=Ue,retryIntervalMs:e=Fe,startTime:r=Date.now(),onRetry:o,...s}){let i=oe(s);try{let a=await x(i,s);return await se({operation:()=>ae(i,a,s.pushId),condition:c=>!Ae.includes(c.status[n].deploy.status),onConditionNotMet:o,startTime:r,retryTimeoutMs:t*1e3,retryIntervalMs:e})}finally{ie(i,s)}}function oe({domain:n,apiKey:t,version:e}){return new g({domain:n,apiKey:t,command:"push-status",version:e})}function ie(n,{onSunsetWarning:t}){let e=n.getSunsetWarning();e&&t?.(e)}function ae(n,{organizationId:t,projectId:e},r){return n.remotes.getPush({organizationId:t,projectId:e,pushId:r})}async function je({projectUrl:n,auth:t,isApiKey:e=!1,onDebug:r}){let o=Oe(n);if(!o)throw new m(`Invalid project URL format: ${n}`);try{let s=await De({...o,auth:t,isApiKey:e,onDebug:r}),i=s.config.scorecardClassic||s.config.scorecard;if(!i)throw new Error("No scorecard configuration found.");let a=s.config.pluginsUrl,c=a?await ke(a,r):void 0;return{scorecard:i,plugins:c,pluginsUrl:a}}catch(s){throw new m(s instanceof Error?s.message:String(s))}}function Oe(n){let t=new URL(n),e=t.pathname.match(/\/org\/(?<orgSlug>[^/]+)\/project\/(?<projectSlug>[^/]+)/);if(!e?.groups)return;let{orgSlug:r,projectSlug:o}=e.groups;return{residency:t.origin,orgSlug:r,projectSlug:o}}async function De({residency:n,orgSlug:t,projectSlug:e,auth:r,isApiKey:o,onDebug:s}){let i=new URL(`${n}/api/orgs/${t}/projects/${e}`),a=await fetch(i,{headers:Le(r,o)});if(s?.(`Project fetch response status: ${a.status}`),a.status===401||a.status===403)throw s?.(`Authentication failed with status ${a.status}.`),s?.("Check that your credentials are valid and have the necessary permissions."),new Error(`Unauthorized access to project: ${e}. Please check your credentials.`);if(a.status!==200)throw new Error(`Failed to fetch project: ${e}. Status: ${a.status}`);return s?.("Successfully received project configuration."),a.json()}async function ke(n,t){t?.(`Fetching plugins from: ${n}`);try{let e=await fetch(n);if(t?.(`Plugins fetch response status: ${e.status}`),e.status!==200){t?.("Failed to fetch plugins");return}return e.text()}catch(e){t?.(`Error fetching plugins: ${e instanceof Error?e.message:String(e)}`);return}}function Le(n,t){return t?{Authorization:`Bearer ${n}`}:{Cookie:`accessToken=${n}`}}async function L(n,t,e=[],r=[],o){let s={};for(let i of e){let a={[i.name]:{root:n,rules:t}},c=await q({apis:a,...i,plugins:r},{configPath:o});s[i.name]=c.forAlias(i.name)}return s}function B(n,t){if(n){for(let e of n)if(Object.entries(e.where?.metadata||{}).every(([o,s])=>Be(o,s,t)))return e}}function Be(n,t,e){if(t.match(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}Z)?\/(\d{4}-\d{2}-\d{2})?$/)){if(!e[n])return!1;let[r,o]=t.split("/"),s=new Date(e[n]);return!(s<new Date(r)||o&&s>new Date(o))}else if(t.match(/^\/.*\//)){if(!e[n])return!1;try{return H(t).test(e[n])}catch{throw new m(`Invalid regex in scorecard target "${n}": ${t}`)}}return e[n]===t}import{pathToFileURL as Me}from"node:url";async function We(n,t){if(!n)return[];let e=Me(t??process.cwd()).href+"/",r=n.replaceAll("__redocly_dirname",`"${e}"`);return(await import(`data:text/javascript;base64,${btoa(r)}`)).default.map(i=>i())}var be=".redocly.com";function ze(n){try{return new URL(n).hostname.toLowerCase().endsWith(be)}catch{return!1}}async function He({apiPath:n,document:t,externalRefResolver:e,scorecardConfig:r,configPath:o,plugins:s=[],targetLevel:i,metadata:a={},onDebug:c}){let E=[],$=new Map,v=r.levels||[];if(i&&!v.some(l=>l.name===i))throw new m(`Target level "${i}" not found in the scorecard configuration levels.
8
- `);let A=B(r.targets,a)?.rules,f=await L(n,A,v,s,o||"");for(let l of v){c?.(`
9
- Validating level: "${l.name}"`),s.length>0&&c?.(`Using ${s.length} ${I("plugin",s.length)} for this level.`),c?.("Linting document against level rules...");let p=(await Y({document:t,externalRefResolver:e,config:f[l.name]})).filter(({ignored:C})=>!C).map(C=>({...C,scorecardLevel:l.name}));c?.(`Found ${p.length} ${I("problem",p.length)} for level "${l.name}".`),$.set(l.name,p),E.push(...p)}let d=qe($,v,i);return{problems:E,achievedLevel:d,targetLevelAchieved:i?d===i:!0}}function qe(n,t,e){let r=null;for(let o of t){if((n.get(o.name)||[]).some(a=>a.severity==="error"))return r||"Non Conformant";if(r=o.name,e&&o.name===e)return o.name}return r||"Non Conformant"}export{u as a,T as b,g as c,Z as d,he as e,P as f,pe as g,J as h,O as i,R as j,w as k,k as l,x as m,_e as n,Se as o,Ie as p,Ne as q,je as r,L as s,B as t,We as u,ze as v,He as w};