@shipstatic/ship 2.3.1-beta.1 → 2.3.1

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.
@@ -5,7 +5,7 @@ Their copyright notices travel with that copy, and are reproduced here in
5
5
  full. This file is GENERATED from the build's own metafile — edit the
6
6
  bundle, not this list.
7
7
 
8
- ## @shipstatic/types 2.9.0-beta.1
8
+ ## @shipstatic/types 2.9.0
9
9
 
10
10
  License: MIT
11
11
 
package/dist/browser.d.ts CHANGED
@@ -21,35 +21,66 @@ type DeploymentStatusType = (typeof DeploymentStatus)[keyof typeof DeploymentSta
21
21
  * outside the set was **silently dropped** by the server, so a typo did not
22
22
  * fail anywhere. It stopped recording where deploys came from and said nothing.
23
23
  *
24
- * **Members name one of two things, and the distinction is worth keeping.**
25
- * Most name a CLIENT that identifies itself the CLI, the SDK, the dashboard,
26
- * the stdio MCP, the GitHub Action, the n8n node, the VS Code extension. The
27
- * rest name a CHANNEL: a marketplace or directory listing, whose users all
28
- * arrive through one hosted-MCP door. A channel cannot identify itself in a
29
- * request the way an installed client can, because every one of them is the
30
- * same server speaking the same protocol so the DOOR carries the identity,
31
- * and the door's path IS the value (`/gpt` → `gpt`, and since 2026-08-15
32
- * `/cld` `cld`, `/crs` `crs`). That is why a listing needs its own member:
33
- * a marketplace entry names exactly one URL, and the URL is the only thing a
34
- * listing's traffic has in common.
35
- *
36
- * Every member is three characters, which is what lets a door path and its
37
- * `via` be spelled the same.
24
+ * **The origin law: origin is declared by whatever we control our code where
25
+ * we ship code, our URL where we ship only a URL.** One rule decides every
26
+ * member here and every future one:
27
+ *
28
+ * - **Where the platform ships CODE, the code declares it.** `web`, `sdk`,
29
+ * `cli`, `git`, `n8n` and `vsc` are surfaces this platform authors, so each
30
+ * names itself in its own source and nothing external is needed to tell them
31
+ * apart.
32
+ * - **Where the platform ships only a URL, the URL declares it.** A
33
+ * marketplace listing runs somebody else's client against a bare endpoint
34
+ * every one of them the same server speaking the same protocol, and
35
+ * indistinguishable in a request. The only thing such a listing's traffic
36
+ * has in common is the URL its users were handed, so the hosted MCP serves
37
+ * one DOOR per listing and the door's path IS the value: `gpt`, `cld`,
38
+ * `crs`.
39
+ *
40
+ * **A member names the most specific surface the platform can honestly
41
+ * claim**, which is what makes the two FALLBACKS fallbacks rather than peers
42
+ * of the named surfaces. `mcp` is any MCP host that was never handed a door of
43
+ * its own; `api` is a call that reached the REST API naming nothing at all.
44
+ * Guessing past either would be inventing attribution rather than recording
45
+ * it, which is the one thing this vocabulary exists to prevent.
46
+ *
47
+ * Every member is three lowercase characters — the property that lets a
48
+ * channel door's path and its attribution be spelled the same. The suite pins
49
+ * both the width and the channel members by name.
38
50
  */
39
51
  declare const DeploymentVia: {
52
+ /** The web dashboard. */
40
53
  readonly WEB: "web";
54
+ /** A program embedding the SDK directly. */
41
55
  readonly SDK: "sdk";
56
+ /** The `ship` CLI. */
42
57
  readonly CLI: "cli";
58
+ /** Any MCP host with no door of its own — the stdio server included. The family fallback. */
43
59
  readonly MCP: "mcp";
60
+ /** The GitHub Action. */
44
61
  readonly GIT: "git";
62
+ /** The n8n community node. */
45
63
  readonly N8N: "n8n";
46
- /** Channel: the ChatGPT App listing, served at `mcp.<domain>/gpt`. */
64
+ /** Channel: the ChatGPT App listing `mcp.<domain>/gpt`. */
47
65
  readonly GPT: "gpt";
66
+ /** The VS Code extension. */
48
67
  readonly VSC: "vsc";
49
- /** Channel: the Claude connectors directory listing, served at `mcp.<domain>/cld`. */
68
+ /** Channel: the Claude connectors directory listing `mcp.<domain>/cld`. */
50
69
  readonly CLD: "cld";
51
- /** Channel: the Cursor marketplace listing, served at `mcp.<domain>/crs`. */
70
+ /** Channel: the Cursor marketplace listing `mcp.<domain>/crs`. */
52
71
  readonly CRS: "crs";
72
+ /**
73
+ * A deploy that reached the REST API naming no origin at all — the
74
+ * platform-wide fallback, one altitude below `mcp`'s family fallback.
75
+ *
76
+ * **Declared ahead of its emitter, deliberately.** Nothing sends it yet and
77
+ * the server still records an unattributed deploy as `null`. Vocabulary must
78
+ * exist before a consumer can adopt it, and adding a member costs a full
79
+ * constellation convoy — so the word ships first and the API adopts it as a
80
+ * default whenever that decision is taken, with no convoy standing between
81
+ * the decision and the deploy.
82
+ */
83
+ readonly API: "api";
53
84
  };
54
85
  type DeploymentViaType = (typeof DeploymentVia)[keyof typeof DeploymentVia];
55
86
  /**
package/dist/browser.js CHANGED
@@ -1,2 +1,2 @@
1
- var st=Object.create;var $=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var lt=Object.getOwnPropertyNames;var pt=Object.getPrototypeOf,ut=Object.prototype.hasOwnProperty;var ct=(e,n,t)=>n in e?$(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;var I=(e,n)=>()=>(e&&(n=e(e=0)),n);var De=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),ft=(e,n)=>{for(var t in n)$(e,t,{get:n[t],enumerable:!0})},dt=(e,n,t,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let l of lt(n))!ut.call(e,l)&&l!==t&&$(e,l,{get:()=>n[l],enumerable:!(a=at(n,l))||a.enumerable});return e};var H=(e,n,t)=>(t=e!=null?st(pt(e)):{},dt(n||!e||!e.__esModule?$(t,"default",{value:e,enumerable:!0}):t,e));var B=(e,n,t)=>ct(e,typeof n!="symbol"?n+"":n,t);function Qt(e){if(!e||typeof e!="string")return;let n=e.trim().toLowerCase();return Object.values(mt).includes(n)?n:void 0}function Re(e){if(e==null)return;if(typeof e!="string")throw m.validation("Idempotency key must be a string.");let n=e.trim();if(!n)throw m.validation("Idempotency key must not be empty.");if(n.length>v.MAX_LENGTH)throw m.validation(`Idempotency key must be at most ${v.MAX_LENGTH} characters.`);return n}function Et(e){let n=e.code;return n==="ERR_INVALID_URL"?!1:typeof n=="string"?!0:e instanceof TypeError?!/\burl\b/i.test(e.message):!1}function be(e){return e!==null&&typeof e=="object"&&"name"in e&&e.name==="ShipError"&&"status"in e}function At(e){let n=e.replace(/\\/g,"/").split("/").pop()??"",t=n.lastIndexOf(".");return t<=0||t===n.length-1?null:n.slice(t+1).toLowerCase()}function Ie(e,n){let t=At(e);return t===null?!1:Array.isArray(n)?n.includes(t):n.has(t)}function Le(e){return St.test(e)}function z(e){return e.replace(/\\/g,"/").split("/").filter(Boolean).some(t=>Dt.has(t))}function Rt(e){return e.startsWith(_e.PREFIX)?x.API_KEY:e.startsWith(we.PREFIX)?x.DEPLOY_TOKEN:e.startsWith(Ne.PREFIX)?x.OAUTH:x.OPAQUE}function nn(e){return e.slice(0,re.length).toLowerCase()!==re?null:e.slice(re.length)||null}function xe(e){let n=e.charCodeAt(0)===65279?e.slice(1):e,t;try{t=JSON.parse(n)}catch(a){throw m.config(`invalid JSON format in config: ${a.message}`,{filePath:N})}if(t===null||typeof t!="object"||Array.isArray(t))throw m.config(`${N} must contain a JSON object`,{filePath:N})}function ie(e,n,t){if(!e.startsWith(n.PREFIX))throw m.validation(`${t} must start with "${n.PREFIX}"`);if(e.length!==n.TOTAL_LENGTH)throw m.validation(`${t} must be ${n.TOTAL_LENGTH} characters total (${n.PREFIX} + ${n.HEX_LENGTH} hex chars)`);let a=e.slice(n.PREFIX.length);if(!new RegExp(`^[a-f0-9]{${n.HEX_LENGTH}}$`,"i").test(a))throw m.validation(`${t} must contain ${n.HEX_LENGTH} hexadecimal characters after "${n.PREFIX}" prefix`)}function bt(e){ie(e,_e,"API key")}function It(e){ie(e,we,"Deploy token")}function Lt(e){ie(e,Ne,"OAuth access token")}function oe(e){switch(Rt(e)){case x.API_KEY:bt(e);return;case x.DEPLOY_TOKEN:It(e);return;case x.OAUTH:Lt(e);return;case x.OPAQUE:if(!e)throw m.validation("Token must be a non-empty string")}}function Oe(e){if(!e||e.length>C.MAX_LENGTH||!C.PATTERN.test(e))throw m.validation(`Caller must be 1-${C.MAX_LENGTH} characters: letters, digits, dots, underscores, or hyphens`)}function on(e){try{let n=new URL(e);if(!["http:","https:"].includes(n.protocol))throw m.validation("API URL must use http:// or https:// protocol");if(n.pathname!=="/"&&n.pathname!=="")throw m.validation("API URL must not contain a path");if(n.search||n.hash)throw m.validation("API URL must not contain query parameters or fragments")}catch(n){throw be(n)?n:m.validation("API URL must be a valid URL")}}function sn(e){return/^[a-z]+-[a-z]+-[a-z0-9]{7}(\.[a-z0-9.-]+)?$/i.test(e)}function se(e){if(e!=null){if(typeof e!="number"||!Number.isFinite(e))throw m.validation("TTL must be a number of seconds");if(!Number.isInteger(e))throw m.validation("TTL must be a whole number of seconds");if(e<G.MIN_SECONDS||e>G.MAX_SECONDS)throw m.validation(`TTL must be between ${G.MIN_SECONDS} and ${G.MAX_SECONDS} seconds`);return e}}function Fe(e,n){return e.endsWith(`.${n}`)}function un(e,n){return!Fe(e,n)}function cn(e,n){return Fe(e,n)?e.slice(0,-(n.length+1)):null}function fn(e){return`https://${e}`}function dn(e){return`https://${e}`}function mn(e){return!e||e.length===0?null:JSON.stringify(e)}function hn(e){if(!e)return[];try{let n=JSON.parse(e);return Array.isArray(n)?n:[]}catch{return[]}}function le(e){if(e==null)return;if(typeof e!="string")throw m.validation("Password must be a string");let n=e.trim();if(n.length<k.MIN_LENGTH||n.length>k.MAX_LENGTH)throw m.validation(`Password must be between ${k.MIN_LENGTH} and ${k.MAX_LENGTH} characters`);return n}var Wt,mt,Jt,v,Zt,T,L,g,ht,te,yt,gt,m,Tt,en,St,Dt,tn,ne,_e,we,Ne,C,x,re,rn,N,Pe,K,G,ae,an,ln,pn,R,O,ve,k,D=I(()=>{"use strict";Wt={PENDING:"pending",SUCCESS:"success",FAILED:"failed",DELETING:"deleting"},mt={WEB:"web",SDK:"sdk",CLI:"cli",MCP:"mcp",GIT:"git",N8N:"n8n",GPT:"gpt",VSC:"vsc",CLD:"cld",CRS:"crs"},Jt={PENDING:"pending",PARTIAL:"partial",SUCCESS:"success",PAUSED:"paused"},v={HEADER:"Idempotency-Key",MAX_LENGTH:256,WINDOW_SECONDS:1440*60};Zt={FREE:"free",STANDARD:"standard",SPONSORED:"sponsored",ENTERPRISE:"enterprise",SUSPENDED:"suspended",TERMINATING:"terminating",TERMINATED:"terminated"},T={DEPLOYMENTS:"/deployments",DEPLOYMENT:e=>`/deployments/${e}`,DEPLOYMENT_CONFIG:e=>`/deployments/${e}/config`,DOMAINS:"/domains",DOMAIN:e=>`/domains/${e}`,DOMAIN_VERIFY:e=>`/domains/${e}/verify`,DOMAIN_DNS:e=>`/domains/${e}/dns`,DOMAIN_RECORDS:e=>`/domains/${e}/records`,DOMAIN_SHARE:e=>`/domains/${e}/share`,DOMAIN_PROPAGATION:e=>`/domains/${e}/propagation`,DOMAINS_VALIDATE:"/domains/validate",TOKENS:"/tokens",TOKEN:e=>`/tokens/${e}`,ACCOUNT:"/account",ACCOUNT_KEY:"/account/key",ACCOUNT_CLAIM:"/account/claim",ACTIVITIES:"/activities",LABELS:"/labels",LIMITS:"/limits",PING:"/ping",SETUP:"/setup",SPA_CHECK:"/spa-check",UPLOAD:"/upload"},L={FILES:"files[]",CHECKSUMS:"checksums",LABELS:"labels",VIA:"via",PASSWORD:"password",TTL:"ttl",BUILD:"build",PRERENDER:"prerender",SPA:"spa",CAPTCHA:"captcha"},g={Validation:"validation_failed",NotFound:"not_found",Forbidden:"forbidden",RateLimit:"rate_limit_exceeded",Authentication:"authentication_failed",Business:"business_logic_error",Api:"internal_server_error",Maintenance:"maintenance",Network:"network_error",Timeout:"timeout_error",Cancelled:"operation_cancelled",File:"file_error",Config:"config_error"},ht=new Set([g.Network,g.Timeout,g.Cancelled,g.File,g.Config]),te={client:new Set([g.Business,g.Cancelled,g.Config,g.File,g.Forbidden,g.NotFound,g.RateLimit,g.Validation]),network:new Set([g.Network,g.Timeout]),auth:new Set([g.Authentication])},yt=new Set(Object.values(g).filter(e=>!ht.has(e))),gt=200;m=class e extends Error{constructor(t,a,l,c){super(a);B(this,"type");B(this,"status");B(this,"details");this.type=t,this.status=l,this.details=c,this.name="ShipError"}toResponse(){let t=this.details,a=this.type===g.Authentication&&t?.internal?void 0:this.details;return{error:this.type,message:this.message,status:this.status,details:a}}static async fromHttpResponse(t,a){let l,c,h;try{if(t.headers.get("content-type")?.includes("application/json")){let f=await t.json();if(f&&typeof f=="object"){let A=f;typeof A.message=="string"?l=A.message:typeof A.error=="string"&&(l=A.error),c=A.details,typeof A.error=="string"&&yt.has(A.error)&&(h=A.error)}}else{let f=(await t.text()).trim();f&&!f.startsWith("<")&&f.length<=gt&&(l=f)}}catch{}let y=t.headers.get("retry-after");if(y!==null){let E=y.trim(),f=/^\d+$/.test(E)?Number(E):Math.ceil((Date.parse(E)-Date.now())/1e3);if(Number.isFinite(f)&&f>=0){let A=c&&typeof c=="object"?c:{};A.retryAfter===void 0&&(c={...A,retryAfter:f})}}l=l||`${a||"Request"} failed with status ${t.status}`;let d=h??(t.status===401?g.Authentication:t.status===403?g.Forbidden:t.status===429?g.RateLimit:g.Api);return new e(d,l,t.status,c)}static fromFetchError(t,a){if(be(t))return t;let l=a||"Request",c=t?.name;return c==="AbortError"?e.cancelled(`${l} was cancelled`):c==="TimeoutError"?e.timeout(`${l} timed out`,{cause:t}):t instanceof Error?Et(t)?e.network(`${l} failed: ${t.message}`,{cause:t}):new e(g.Api,`${l} failed: ${t.message}`):new e(g.Api,`${l} failed: Unknown error`)}static validation(t,a){return new e(g.Validation,t,400,a)}static notFound(t,a){let l=a?`${t} ${a} not found`:`${t} not found`;return new e(g.NotFound,l,404)}static forbidden(t,a){return new e(g.Forbidden,t,403,a)}static rateLimit(t="Too many requests",a){return new e(g.RateLimit,t,429,a)}static authentication(t="Authentication required",a){return new e(g.Authentication,t,401,a)}static business(t,a=400,l){return new e(g.Business,t,a,l)}static network(t,a){return new e(g.Network,t,void 0,a)}static timeout(t,a){return new e(g.Timeout,t,void 0,a)}static cancelled(t,a){return new e(g.Cancelled,t,void 0,a)}static file(t,a){return new e(g.File,t,void 0,a)}static config(t,a){return new e(g.Config,t,void 0,a)}static api(t,a=500,l){return new e(g.Api,t,a,l)}static maintenance(t,a){return new e(g.Maintenance,t,503,a)}isClientError(){return te.client.has(this.type)?!0:this.status!==void 0&&this.status>=400&&this.status<500}isNetworkError(){return te.network.has(this.type)}isAuthError(){return te.auth.has(this.type)}isType(t){return this.type===t}};Tt=["html","htm","xhtml","xml","txt","md","markdown","pdf","csv","json","jsonc","webmanifest","map","toml","yaml","yml","rss","atom","css","scss","sass","less","js","mjs","cjs","jsx","ts","tsx","wasm","vue","svelte","png","jpg","jpeg","gif","webp","avif","svg","ico","bmp","tif","tiff","heic","heif","woff","woff2","ttf","otf","eot","mp3","wav","ogg","oga","opus","m4a","aac","flac","weba","mp4","webm","ogv","mov","m4v","avi","glb","gltf","usdz","vtt","srt","zip"],en=Tt.map(e=>`.${e}`).join(","),St=/[\x00-\x1f\x7f#?%\\<>"]/;Dt=new Set(["node_modules","package.json"]);tn="/auth",ne={SESSION:"session",API_KEY:"apiKey",TOKEN:"token",AGENT:"agent",OAUTH:"oauth",WEBHOOK:"webhook",SYSTEM:"system"},_e={PREFIX:"ship-",HEX_LENGTH:32,TOTAL_LENGTH:37,HINT_LENGTH:4},we={PREFIX:"deploy-",HEX_LENGTH:32,TOTAL_LENGTH:39},Ne={PREFIX:"oauth-",HEX_LENGTH:32,TOTAL_LENGTH:38},C={HEADER:"X-Caller",MAX_LENGTH:128,PATTERN:/^[a-zA-Z0-9._-]+$/},x={API_KEY:ne.API_KEY,DEPLOY_TOKEN:ne.TOKEN,OAUTH:ne.OAUTH,OPAQUE:"opaque"};re="bearer ";rn={ACCOUNT_READ:"account:read",DEPLOYMENTS_READ:"deployments:read",DEPLOYMENTS_WRITE:"deployments:write",DOMAINS_READ:"domains:read",DOMAINS_WRITE:"domains:write"},N="ship.json",Pe={rewrites:[{source:"/(.*)",destination:"/index.html"}]},K={INDEX_FILE:"index.html",MAX_INDEX_BYTES:100*1024};G={MIN_SECONDS:1,MAX_SECONDS:365*24*60*60};ae="https://api.shipstatic.com",an={TOKEN:"SHIP_TOKEN",API_URL:"SHIP_API_URL"},ln="https://my.shipstatic.com/api-key",pn=4320*60,R={PENDING:"pending",PROCESSING_ERROR:"processing_error",EXCLUDED:"excluded",VALIDATION_FAILED:"validation_failed",READY:"ready"};O={MIN_LENGTH:3,MAX_LENGTH:25,MAX_COUNT:10,SEPARATORS:"._-"},ve=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/;k={MIN_LENGTH:6,MAX_LENGTH:128}});var He=De((Ue,$e)=>{"use strict";(function(e){if(typeof Ue=="object")$e.exports=e();else if(typeof define=="function"&&define.amd)define(e);else{var n;try{n=window}catch{n=self}n.SparkMD5=e()}})(function(e){"use strict";var n=function(u,p){return u+p&4294967295},t=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];function a(u,p,i,r,s,o){return p=n(n(p,u),n(r,o)),n(p<<s|p>>>32-s,i)}function l(u,p){var i=u[0],r=u[1],s=u[2],o=u[3];i+=(r&s|~r&o)+p[0]-680876936|0,i=(i<<7|i>>>25)+r|0,o+=(i&r|~i&s)+p[1]-389564586|0,o=(o<<12|o>>>20)+i|0,s+=(o&i|~o&r)+p[2]+606105819|0,s=(s<<17|s>>>15)+o|0,r+=(s&o|~s&i)+p[3]-1044525330|0,r=(r<<22|r>>>10)+s|0,i+=(r&s|~r&o)+p[4]-176418897|0,i=(i<<7|i>>>25)+r|0,o+=(i&r|~i&s)+p[5]+1200080426|0,o=(o<<12|o>>>20)+i|0,s+=(o&i|~o&r)+p[6]-1473231341|0,s=(s<<17|s>>>15)+o|0,r+=(s&o|~s&i)+p[7]-45705983|0,r=(r<<22|r>>>10)+s|0,i+=(r&s|~r&o)+p[8]+1770035416|0,i=(i<<7|i>>>25)+r|0,o+=(i&r|~i&s)+p[9]-1958414417|0,o=(o<<12|o>>>20)+i|0,s+=(o&i|~o&r)+p[10]-42063|0,s=(s<<17|s>>>15)+o|0,r+=(s&o|~s&i)+p[11]-1990404162|0,r=(r<<22|r>>>10)+s|0,i+=(r&s|~r&o)+p[12]+1804603682|0,i=(i<<7|i>>>25)+r|0,o+=(i&r|~i&s)+p[13]-40341101|0,o=(o<<12|o>>>20)+i|0,s+=(o&i|~o&r)+p[14]-1502002290|0,s=(s<<17|s>>>15)+o|0,r+=(s&o|~s&i)+p[15]+1236535329|0,r=(r<<22|r>>>10)+s|0,i+=(r&o|s&~o)+p[1]-165796510|0,i=(i<<5|i>>>27)+r|0,o+=(i&s|r&~s)+p[6]-1069501632|0,o=(o<<9|o>>>23)+i|0,s+=(o&r|i&~r)+p[11]+643717713|0,s=(s<<14|s>>>18)+o|0,r+=(s&i|o&~i)+p[0]-373897302|0,r=(r<<20|r>>>12)+s|0,i+=(r&o|s&~o)+p[5]-701558691|0,i=(i<<5|i>>>27)+r|0,o+=(i&s|r&~s)+p[10]+38016083|0,o=(o<<9|o>>>23)+i|0,s+=(o&r|i&~r)+p[15]-660478335|0,s=(s<<14|s>>>18)+o|0,r+=(s&i|o&~i)+p[4]-405537848|0,r=(r<<20|r>>>12)+s|0,i+=(r&o|s&~o)+p[9]+568446438|0,i=(i<<5|i>>>27)+r|0,o+=(i&s|r&~s)+p[14]-1019803690|0,o=(o<<9|o>>>23)+i|0,s+=(o&r|i&~r)+p[3]-187363961|0,s=(s<<14|s>>>18)+o|0,r+=(s&i|o&~i)+p[8]+1163531501|0,r=(r<<20|r>>>12)+s|0,i+=(r&o|s&~o)+p[13]-1444681467|0,i=(i<<5|i>>>27)+r|0,o+=(i&s|r&~s)+p[2]-51403784|0,o=(o<<9|o>>>23)+i|0,s+=(o&r|i&~r)+p[7]+1735328473|0,s=(s<<14|s>>>18)+o|0,r+=(s&i|o&~i)+p[12]-1926607734|0,r=(r<<20|r>>>12)+s|0,i+=(r^s^o)+p[5]-378558|0,i=(i<<4|i>>>28)+r|0,o+=(i^r^s)+p[8]-2022574463|0,o=(o<<11|o>>>21)+i|0,s+=(o^i^r)+p[11]+1839030562|0,s=(s<<16|s>>>16)+o|0,r+=(s^o^i)+p[14]-35309556|0,r=(r<<23|r>>>9)+s|0,i+=(r^s^o)+p[1]-1530992060|0,i=(i<<4|i>>>28)+r|0,o+=(i^r^s)+p[4]+1272893353|0,o=(o<<11|o>>>21)+i|0,s+=(o^i^r)+p[7]-155497632|0,s=(s<<16|s>>>16)+o|0,r+=(s^o^i)+p[10]-1094730640|0,r=(r<<23|r>>>9)+s|0,i+=(r^s^o)+p[13]+681279174|0,i=(i<<4|i>>>28)+r|0,o+=(i^r^s)+p[0]-358537222|0,o=(o<<11|o>>>21)+i|0,s+=(o^i^r)+p[3]-722521979|0,s=(s<<16|s>>>16)+o|0,r+=(s^o^i)+p[6]+76029189|0,r=(r<<23|r>>>9)+s|0,i+=(r^s^o)+p[9]-640364487|0,i=(i<<4|i>>>28)+r|0,o+=(i^r^s)+p[12]-421815835|0,o=(o<<11|o>>>21)+i|0,s+=(o^i^r)+p[15]+530742520|0,s=(s<<16|s>>>16)+o|0,r+=(s^o^i)+p[2]-995338651|0,r=(r<<23|r>>>9)+s|0,i+=(s^(r|~o))+p[0]-198630844|0,i=(i<<6|i>>>26)+r|0,o+=(r^(i|~s))+p[7]+1126891415|0,o=(o<<10|o>>>22)+i|0,s+=(i^(o|~r))+p[14]-1416354905|0,s=(s<<15|s>>>17)+o|0,r+=(o^(s|~i))+p[5]-57434055|0,r=(r<<21|r>>>11)+s|0,i+=(s^(r|~o))+p[12]+1700485571|0,i=(i<<6|i>>>26)+r|0,o+=(r^(i|~s))+p[3]-1894986606|0,o=(o<<10|o>>>22)+i|0,s+=(i^(o|~r))+p[10]-1051523|0,s=(s<<15|s>>>17)+o|0,r+=(o^(s|~i))+p[1]-2054922799|0,r=(r<<21|r>>>11)+s|0,i+=(s^(r|~o))+p[8]+1873313359|0,i=(i<<6|i>>>26)+r|0,o+=(r^(i|~s))+p[15]-30611744|0,o=(o<<10|o>>>22)+i|0,s+=(i^(o|~r))+p[6]-1560198380|0,s=(s<<15|s>>>17)+o|0,r+=(o^(s|~i))+p[13]+1309151649|0,r=(r<<21|r>>>11)+s|0,i+=(s^(r|~o))+p[4]-145523070|0,i=(i<<6|i>>>26)+r|0,o+=(r^(i|~s))+p[11]-1120210379|0,o=(o<<10|o>>>22)+i|0,s+=(i^(o|~r))+p[2]+718787259|0,s=(s<<15|s>>>17)+o|0,r+=(o^(s|~i))+p[9]-343485551|0,r=(r<<21|r>>>11)+s|0,u[0]=i+u[0]|0,u[1]=r+u[1]|0,u[2]=s+u[2]|0,u[3]=o+u[3]|0}function c(u){var p=[],i;for(i=0;i<64;i+=4)p[i>>2]=u.charCodeAt(i)+(u.charCodeAt(i+1)<<8)+(u.charCodeAt(i+2)<<16)+(u.charCodeAt(i+3)<<24);return p}function h(u){var p=[],i;for(i=0;i<64;i+=4)p[i>>2]=u[i]+(u[i+1]<<8)+(u[i+2]<<16)+(u[i+3]<<24);return p}function y(u){var p=u.length,i=[1732584193,-271733879,-1732584194,271733878],r,s,o,b,w,P;for(r=64;r<=p;r+=64)l(i,c(u.substring(r-64,r)));for(u=u.substring(r-64),s=u.length,o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],r=0;r<s;r+=1)o[r>>2]|=u.charCodeAt(r)<<(r%4<<3);if(o[r>>2]|=128<<(r%4<<3),r>55)for(l(i,o),r=0;r<16;r+=1)o[r]=0;return b=p*8,b=b.toString(16).match(/(.*?)(.{0,8})$/),w=parseInt(b[2],16),P=parseInt(b[1],16)||0,o[14]=w,o[15]=P,l(i,o),i}function d(u){var p=u.length,i=[1732584193,-271733879,-1732584194,271733878],r,s,o,b,w,P;for(r=64;r<=p;r+=64)l(i,h(u.subarray(r-64,r)));for(u=r-64<p?u.subarray(r-64):new Uint8Array(0),s=u.length,o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],r=0;r<s;r+=1)o[r>>2]|=u[r]<<(r%4<<3);if(o[r>>2]|=128<<(r%4<<3),r>55)for(l(i,o),r=0;r<16;r+=1)o[r]=0;return b=p*8,b=b.toString(16).match(/(.*?)(.{0,8})$/),w=parseInt(b[2],16),P=parseInt(b[1],16)||0,o[14]=w,o[15]=P,l(i,o),i}function E(u){var p="",i;for(i=0;i<4;i+=1)p+=t[u>>i*8+4&15]+t[u>>i*8&15];return p}function f(u){var p;for(p=0;p<u.length;p+=1)u[p]=E(u[p]);return u.join("")}f(y("hello"))!=="5d41402abc4b2a76b9719d911017c592"&&(n=function(u,p){var i=(u&65535)+(p&65535),r=(u>>16)+(p>>16)+(i>>16);return r<<16|i&65535}),typeof ArrayBuffer<"u"&&!ArrayBuffer.prototype.slice&&(function(){function u(p,i){return p=p|0||0,p<0?Math.max(p+i,0):Math.min(p,i)}ArrayBuffer.prototype.slice=function(p,i){var r=this.byteLength,s=u(p,r),o=r,b,w,P,Se;return i!==e&&(o=u(i,r)),s>o?new ArrayBuffer(0):(b=o-s,w=new ArrayBuffer(b),P=new Uint8Array(w),Se=new Uint8Array(this,s,b),P.set(Se),w)}})();function A(u){return/[\u0080-\uFFFF]/.test(u)&&(u=unescape(encodeURIComponent(u))),u}function _(u,p){var i=u.length,r=new ArrayBuffer(i),s=new Uint8Array(r),o;for(o=0;o<i;o+=1)s[o]=u.charCodeAt(o);return p?s:r}function F(u){return String.fromCharCode.apply(null,new Uint8Array(u))}function ot(u,p,i){var r=new Uint8Array(u.byteLength+p.byteLength);return r.set(new Uint8Array(u)),r.set(new Uint8Array(p),u.byteLength),i?r:r.buffer}function U(u){var p=[],i=u.length,r;for(r=0;r<i-1;r+=2)p.push(parseInt(u.substr(r,2),16));return String.fromCharCode.apply(String,p)}function S(){this.reset()}return S.prototype.append=function(u){return this.appendBinary(A(u)),this},S.prototype.appendBinary=function(u){this._buff+=u,this._length+=u.length;var p=this._buff.length,i;for(i=64;i<=p;i+=64)l(this._hash,c(this._buff.substring(i-64,i)));return this._buff=this._buff.substring(i-64),this},S.prototype.end=function(u){var p=this._buff,i=p.length,r,s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],o;for(r=0;r<i;r+=1)s[r>>2]|=p.charCodeAt(r)<<(r%4<<3);return this._finish(s,i),o=f(this._hash),u&&(o=U(o)),this.reset(),o},S.prototype.reset=function(){return this._buff="",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},S.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},S.prototype.setState=function(u){return this._buff=u.buff,this._length=u.length,this._hash=u.hash,this},S.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},S.prototype._finish=function(u,p){var i=p,r,s,o;if(u[i>>2]|=128<<(i%4<<3),i>55)for(l(this._hash,u),i=0;i<16;i+=1)u[i]=0;r=this._length*8,r=r.toString(16).match(/(.*?)(.{0,8})$/),s=parseInt(r[2],16),o=parseInt(r[1],16)||0,u[14]=s,u[15]=o,l(this._hash,u)},S.hash=function(u,p){return S.hashBinary(A(u),p)},S.hashBinary=function(u,p){var i=y(u),r=f(i);return p?U(r):r},S.ArrayBuffer=function(){this.reset()},S.ArrayBuffer.prototype.append=function(u){var p=ot(this._buff.buffer,u,!0),i=p.length,r;for(this._length+=u.byteLength,r=64;r<=i;r+=64)l(this._hash,h(p.subarray(r-64,r)));return this._buff=r-64<i?new Uint8Array(p.buffer.slice(r-64)):new Uint8Array(0),this},S.ArrayBuffer.prototype.end=function(u){var p=this._buff,i=p.length,r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],s,o;for(s=0;s<i;s+=1)r[s>>2]|=p[s]<<(s%4<<3);return this._finish(r,i),o=f(this._hash),u&&(o=U(o)),this.reset(),o},S.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},S.ArrayBuffer.prototype.getState=function(){var u=S.prototype.getState.call(this);return u.buff=F(u.buff),u},S.ArrayBuffer.prototype.setState=function(u){return u.buff=_(u.buff,!0),S.prototype.setState.call(this,u)},S.ArrayBuffer.prototype.destroy=S.prototype.destroy,S.ArrayBuffer.prototype._finish=S.prototype._finish,S.ArrayBuffer.hash=function(u,p){var i=d(new Uint8Array(u)),r=f(i);return p?U(r):r},S})});var Y=De((bn,Be)=>{"use strict";Be.exports={}});async function Ct(e){let n=(await Promise.resolve().then(()=>H(He(),1))).default,t=new n.ArrayBuffer,a=2097152;for(let l=0;l<e.size;l+=a){let c=Math.min(l+a,e.size);t.append(await e.slice(l,c).arrayBuffer())}return{md5:t.end()}}async function Mt(e){let{createHash:n}=await Promise.resolve().then(()=>H(Y(),1)),t=n("md5");return t.update(e),{md5:t.digest("hex")}}async function Ut(e){let{createHash:n}=await Promise.resolve().then(()=>H(Y(),1)),{createReadStream:t}=await Promise.resolve().then(()=>H(Y(),1));return new Promise((a,l)=>{let c=n("md5"),h=t(e);h.on("error",y=>l(m.file(`Failed to read file for MD5: ${y.message}`,{filePath:e}))),h.on("data",y=>c.update(y)),h.on("end",()=>a({md5:c.digest("hex")}))})}async function X(e){if(e instanceof Blob)return Ct(e);if(typeof Buffer<"u"&&Buffer.isBuffer(e))return Mt(e);if(typeof e=="string")return Ut(e);throw m.business("Invalid input for MD5 calculation")}var j=I(()=>{"use strict";D()});function Q(e){return e.replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\/+/,"")}var Ye=I(()=>{"use strict"});function Xe(e,n={}){if(n.flatten===!1)return e.map(a=>({path:Q(a),name:ue(a)}));let t=Gt(e);return e.map(a=>{let l=Q(a);if(t){let c=t.endsWith("/")?t:`${t}/`;l.startsWith(c)&&(l=l.substring(c.length))}return l||(l=ue(a)),{path:l,name:ue(a)}})}function Gt(e){if(!e.length)return"";let t=e.map(c=>Q(c)).map(c=>c.split("/")),a=[],l=Math.min(...t.map(c=>c.length));for(let c=0;c<l-1;c++){let h=t[0][c];if(t.every(y=>y[c]===h))a.push(h);else break}return a.join("/")}function ue(e){return e.split(/[/\\]/).pop()||e}var ce=I(()=>{"use strict";Ye()});function Yn(e){fe=e}function kt(){return typeof process<"u"&&process.versions&&process.versions.node?"node":typeof window<"u"||typeof self<"u"?"browser":"unknown"}function je(){return fe||kt()}var fe,de=I(()=>{"use strict";fe=null});function ee(e,n){return zt.find(t=>t.broken(e,n))}var zt,he=I(()=>{"use strict";D();ye();zt=[{name:"name",broken:({path:e})=>!me(e).valid,sentence:({path:e})=>me(e).reason??"Invalid file name"},{name:"extension",broken:({path:e},n)=>Ie(e,n.blockedExtensions??[]),sentence:({path:e})=>`File extension not allowed: "${e}"`},{name:"fileSize",broken:({size:e},n)=>e>n.maxFileSize,sentence:({path:e},n)=>`File "${e}" too large. Maximum ${Z(n.maxFileSize)} allowed`},{name:"totalSize",broken:({totalSize:e},n)=>e>n.maxTotalSize,sentence:({totalSize:e},n)=>`Total upload size too large. ${Z(e)} exceeds maximum of ${Z(n.maxTotalSize)}`}]});function Z(e,n=1){if(e===0)return"0 Bytes";let t=1024,a=["Bytes","KB","MB","GB"],l=Math.floor(Math.log(e)/Math.log(t));return`${parseFloat((e/t**l).toFixed(n))} ${a[l]}`}function me(e){if(Le(e))return{valid:!1,reason:"File name contains unsafe characters"};if(e.startsWith(" ")||e.endsWith(" "))return{valid:!1,reason:"File name cannot start/end with spaces"};if(e.endsWith("."))return{valid:!1,reason:"File name cannot end with dots"};let n=/^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(\.|$)/i,t=e.split("/").pop()||e;return n.test(t)?{valid:!1,reason:"File name uses a reserved system name"}:e.includes("..")?{valid:!1,reason:"File name contains path traversal pattern"}:{valid:!0}}function er(e,n){let t=[],a=[],l=[];if(e.length===0){let d={file:"(no files)",message:"At least one file must be provided"};return t.push(d),{files:[],validFiles:[],errors:t,warnings:[],canDeploy:!1}}for(let d of e)if(z(d.name))return t.push({file:d.name,message:"Unbuilt project detected \u2014 deploy your build output (dist/, build/, out/), not the project folder"}),{files:e.map(E=>({...E,status:R.VALIDATION_FAILED,statusMessage:"Unbuilt project detected"})),validFiles:[],errors:t,warnings:[],canDeploy:!1};if(e.length>n.maxFilesCount){let d={file:`(${e.length} files)`,message:`File count (${e.length}) exceeds limit of ${n.maxFilesCount}`};return t.push(d),{files:e.map(E=>({...E,status:R.VALIDATION_FAILED,statusMessage:d.message})),validFiles:[],errors:t,warnings:[],canDeploy:!1}}let c=0;for(let d of e){let E=R.READY,f="Ready for upload";if(d.status===R.PROCESSING_ERROR)E=R.VALIDATION_FAILED,f=d.statusMessage||"File failed during processing",t.push({file:d.name,message:f});else if(d.size===0){E=R.EXCLUDED,f="File is empty (0 bytes) and cannot be deployed due to storage limitations",a.push({file:d.name,message:f}),l.push({...d,status:E,statusMessage:f});continue}else if(d.size<0)E=R.VALIDATION_FAILED,f="File size must be positive",t.push({file:d.name,message:f});else if(!d.name||d.name.trim().length===0)E=R.VALIDATION_FAILED,f="File name cannot be empty",t.push({file:d.name||"(empty)",message:f});else if(d.name.includes("\0"))E=R.VALIDATION_FAILED,f="File name contains invalid characters (null byte)",t.push({file:d.name,message:f});else{let A={path:d.name,size:d.size,totalSize:c+d.size},_=ee(A,n);_?(E=R.VALIDATION_FAILED,f=_.sentence(A,n),t.push({file:_.name==="totalSize"?`(${e.length} files)`:d.name,message:f})):c=A.totalSize}l.push({...d,status:E,statusMessage:f})}t.length>0&&(l=l.map(d=>d.status===R.EXCLUDED?d:{...d,status:R.VALIDATION_FAILED,statusMessage:d.status===R.VALIDATION_FAILED?d.statusMessage:"Deployment failed due to validation errors in bundle"}));let h=t.length===0?l.filter(d=>d.status===R.READY):[],y=t.length===0;return{files:l,validFiles:h,errors:t,warnings:a,canDeploy:y}}function Kt(e){return e.filter(n=>n.status===R.READY)}function tr(e){return Kt(e).length>0}var ye=I(()=>{"use strict";D();he()});function We(e){return Vt.test(e)}var qt,Vt,Je=I(()=>{"use strict";qt=["^npm-debug\\.log$","^\\..*\\.swp$","^\\.DS_Store$","^\\.AppleDouble$","^\\.LSOverride$","^Icon\\r$","^\\._.*","^\\.Spotlight-V100(?:$|\\/)","\\.Trashes","^__MACOSX$","~$","^Thumbs\\.db$","^ehthumbs\\.db$","^[Dd]esktop\\.ini$","@eaDir$"],Vt=new RegExp(qt.join("|"))});function Qe(e,n){if(!e||e.length===0)return[];if(!n?.allowUnbuilt&&e.find(a=>a&&z(a)))throw m.business("Unbuilt project detected \u2014 deploy your build output (dist/, build/, out/), not the project folder");return e.filter(t=>{if(!t)return!1;let a=t.replace(/\\/g,"/").split("/").filter(Boolean);if(a.length===0)return!0;let l=a[a.length-1];if(We(l))return!1;for(let h of a)if(h!==".well-known"&&(h.startsWith(".")||h.length>255))return!1;let c=a.slice(0,-1);for(let h of c)if(Yt.some(y=>h.toLowerCase()===y.toLowerCase()))return!1;return!0})}var Yt,ge=I(()=>{"use strict";D();Je();Yt=["__MACOSX",".Trashes",".fseventsd",".Spotlight-V100"]});function Ze(e,n){if(e.includes("\0")||e.includes("/../")||e.startsWith("../")||e.endsWith("/.."))throw m.business(`Security error: Unsafe file path "${e}" for file: ${n}`)}function et(e,n){let t=ee(e,n);if(t)throw m.business(t.sentence(e,n))}var Ee=I(()=>{"use strict";D();he()});async function tt(e,n={},t){let a=!!(n.build||n.prerender),l=Xe(e.map(f=>f.path),{flatten:n.pathDetect!==!1}).map(f=>f.path),c=new Set(Qe(l,{allowUnbuilt:a})),h=e.map((f,A)=>({source:f,deployPath:l[A]})).filter(({deployPath:f})=>c.has(f));if(h.length===0)return[];let y=a?null:Xt(t),d=[],E=0;for(let{source:f,deployPath:A}of h){if(y&&Ze(A,f.origin),f.size===0)continue;y&&(E+=f.size,et({path:A,size:f.size,totalSize:E},y));let _=await f.read(),{md5:F}=await X(_);d.push({path:A,content:_,size:f.size,md5:F})}if(y&&d.length>y.maxFilesCount)throw m.business(`Too many files to deploy. Maximum allowed is ${y.maxFilesCount} files.`);return d}function Xt(e){if(!e)throw m.config("Platform limits not provided. Deploy-mode validation requires the limits argument \u2014 pass `ship.getLimits()` result.");return e}var nt=I(()=>{"use strict";D();ce();ge();j();Ee()});var it={};ft(it,{processFilesForBrowser:()=>rt});async function rt(e,n={},t){if(je()!=="browser")throw m.business("processFilesForBrowser can only be called in a browser environment.");return tt(e.map(a=>({path:a.webkitRelativePath||a.name,origin:a.name,size:a.size,read:async()=>a})),n,t)}var Ae=I(()=>{"use strict";D();nt();de()});D();D();D();var q=class{constructor(){this.handlers=new Map}on(n,t){this.handlers.has(n)||this.handlers.set(n,new Set),this.handlers.get(n)?.add(t)}off(n,t){let a=this.handlers.get(n);a&&(a.delete(t),a.size===0&&this.handlers.delete(n))}emit(n,...t){let a=this.handlers.get(n);if(!a)return;let l=Array.from(a);for(let c of l)try{c(...t)}catch(h){a.delete(c),n!=="error"&&setTimeout(()=>{let y=h instanceof Error?h:new Error(String(h));this.emit("error",y,String(n))},0)}}};var _t=3e4,wt=2,Nt=300,Pt=2e3,xt=new Set([500,502,503,504]);function Ot(e,n){return new Promise((t,a)=>{if(n?.aborted){a(n.reason);return}let l=()=>{clearTimeout(h),n?.removeEventListener("abort",c)},c=()=>{l(),a(n?.reason)},h=setTimeout(()=>{l(),t()},e);n?.addEventListener("abort",c)})}var Ce=3e5,Ft=3e5,vt=Ce+Ft,V=class extends q{constructor(t){super();this.globalHeaders={};this.apiUrl=t.apiUrl||ae,this.getAuthHeadersCallback=t.getAuthHeaders,this.session=t.session??!1,this.caller=t.caller,this.timeout=t.timeout??_t,this.maxRetries=Math.max(0,t.maxRetries??wt),this.fetch=t.fetch??globalThis.fetch.bind(globalThis),this.deploy={endpoint:t.deployEndpoint||T.DEPLOYMENTS,timeout:t.timeout??Ce,buildTimeout:t.timeout??vt}}setGlobalHeaders(t){this.globalHeaders=t}async executeRequest(t,a,l,c=this.timeout){for(let h=0;;h++)try{return await this.attemptOnce(t,a,l,c)}catch(y){let d=m.fromFetchError(y,l);if(h>=this.maxRetries||!this.isRetryable(d,a))throw this.emit("error",d,t),d;this.emit("retry",d,t,h+1);let E=Math.min(Pt,Nt*2**h);try{await Ot(Math.random()*E,a.signal)}catch(f){let A=m.fromFetchError(f,l);throw this.emit("error",A,t),A}}}isRetryable(t,a){if(a.signal?.aborted||t.isType(g.Maintenance)||t.isType(g.Cancelled)||!(t.isNetworkError()||t.status!==void 0&&xt.has(t.status)))return!1;let c=(a.method??"GET").toUpperCase();return c==="GET"||c==="HEAD"?!0:c==="PUT"||c==="DELETE"?!1:this.hasIdempotencyKey(a.headers)}hasIdempotencyKey(t){if(!t)return!1;let a=v.HEADER.toLowerCase();return Object.keys(t).some(l=>l.toLowerCase()===a)}async attemptOnce(t,a,l,c=this.timeout){let h=()=>{};try{let y=await this.mergeHeaders(a.headers),d=this.createTimeoutSignal(a.signal,c);h=d.cleanup;let E={...a,headers:y,credentials:this.session&&!y.Authorization?"include":void 0,signal:d.signal};this.emit("request",t,E);let f=await this.fetch(t,E);if(h(),!f.ok)throw await m.fromHttpResponse(f,l);return this.emit("response",this.safeClone(f),t),{data:await this.parseResponse(this.safeClone(f)),status:f.status}}catch(y){throw h(),m.fromFetchError(y,l)}}async request(t,a,l,c){let{data:h}=await this.executeRequest(`${this.apiUrl}${t}`,a,l,c);return h}async requestWithStatus(t,a,l){return this.executeRequest(`${this.apiUrl}${t}`,a,l)}async mergeHeaders(t={}){return{...this.globalHeaders,...this.caller?{[C.HEADER]:this.caller}:{},...await this.getAuthHeadersCallback(),...t}}createTimeoutSignal(t,a=this.timeout){let l=new AbortController,c=setTimeout(()=>l.abort(new DOMException(`Timed out after ${a}ms`,"TimeoutError")),a),h=t?()=>l.abort(t.reason):void 0;return t&&h&&(t.addEventListener("abort",h),t.aborted&&l.abort(t.reason)),{signal:l.signal,cleanup:()=>{clearTimeout(c),t&&h&&t.removeEventListener("abort",h)}}}safeClone(t){try{return t.clone()}catch{return t}}async parseResponse(t){if(!(t.headers.get("Content-Length")==="0"||t.status===204))return t.json()}};D();D();async function Me(e,n={}){let{labels:t,via:a,password:l,ttl:c,flags:h,captcha:y}=n,d=new FormData,E=[];for(let f of e){if(typeof f.content=="string"||f.content===null||f.content===void 0)throw m.file(`Unsupported file.content type: ${f.path}`,{filePath:f.path});if(!f.md5)throw m.file(`File missing md5 checksum: ${f.path}`,{filePath:f.path});d.append(L.FILES,new File([f.content],f.path,{type:"application/octet-stream"})),E.push(f.md5)}return d.append(L.CHECKSUMS,JSON.stringify(E)),t&&t.length>0&&d.append(L.LABELS,JSON.stringify(t)),a&&d.append(L.VIA,a),l&&d.append(L.PASSWORD,l),c!==void 0&&d.append(L.TTL,String(c)),h?.build&&d.append(L.BUILD,"true"),h?.prerender&&d.append(L.PRERENDER,"true"),h?.spa&&d.append(L.SPA,"true"),y&&d.append(L.CAPTCHA,y),d}D();j();async function $t(){let e=JSON.stringify(Pe,null,2),n;typeof Buffer<"u"?n=Buffer.from(e,"utf-8"):n=new Blob([e],{type:"application/json"});let{md5:t}=await X(n);return{path:N,content:n,size:e.length,md5:t}}async function Ht(e,n){let t=e.find(h=>h.path===K.INDEX_FILE||h.path===`/${K.INDEX_FILE}`);if(!t||t.size>K.MAX_INDEX_BYTES)return!1;let a;if(typeof Buffer<"u"&&Buffer.isBuffer(t.content))a=t.content.toString("utf-8");else if(typeof Blob<"u"&&t.content instanceof Blob)a=await t.content.text();else if(typeof File<"u"&&t.content instanceof File)a=await t.content.text();else return!1;let l={files:e.map(h=>h.path),index:a};return(await n.request(T.SPA_CHECK,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)},"SPA check")).isSPA}async function Ge(e,n,t){if(t.spaDetect===!1||t.spa||t.build||t.prerender||e.some(a=>a.path===N))return e;try{if(await Ht(e,n)){let l=await $t();return[...e,l]}}catch{}return e}D();D();function M(e){if(e==null)return;if(e.length===0)return e;if(e.length>O.MAX_COUNT)throw m.validation(`Maximum ${O.MAX_COUNT} labels allowed`);let n=e.map((a,l)=>{if(typeof a!="string")throw m.validation(`Label at index ${l} must be a string`);let c=a.trim().toLowerCase();if(c.length<O.MIN_LENGTH)throw m.validation(`Labels must be at least ${O.MIN_LENGTH} characters long`);if(c.length>O.MAX_LENGTH)throw m.validation(`Labels must be no more than ${O.MAX_LENGTH} characters long`);if(!ve.test(c))throw m.validation(`Labels must start and end with alphanumeric characters, with optional separators (${O.SEPARATORS}) between segments`);return c}),t=[...new Set(n)];if(t.length!==n.length)throw m.validation("Duplicate labels are not allowed");return t}async function ke(e){let n=e.find(l=>l.path===N||l.path===`/${N}`);if(!n)return;let t=n.content,a=typeof t.text=="function"?await t.text():n.content.toString("utf8");xe(a)}var W={"Content-Type":"application/json"},Bt="sdk";function pe(e){let n=new URLSearchParams;e?.limit!==void 0&&n.set("limit",String(e.limit)),e?.cursor!==void 0&&n.set("cursor",e.cursor);let t=n.toString();return t?`?${t}`:""}function ze(e){let{getApi:n,processInput:t}=e;return{upload:async(a,l={})=>{if(!t)throw m.config("processInput function is not provided.");let c=n(),h=await t(a,l),y=await Ge(h,c,l);if(!y.length)throw m.business("No files to deploy");for(let F of y)if(!F.md5)throw m.file(`MD5 checksum missing for file: ${F.path}`,{filePath:F.path});le(l.password);let d=se(l.ttl),E=Re(l.idempotencyKey),f=M(l.labels);await ke(y);let A=l.build||l.prerender||l.spa?{build:l.build,prerender:l.prerender,spa:l.spa}:void 0,_=await Me(y,{labels:f,via:l.via??Bt,password:l.password,ttl:d,flags:A,captcha:l.captcha});return c.request(c.deploy.endpoint,{method:"POST",body:_,...E?{headers:{[v.HEADER]:E}}:{},signal:l.signal||null},"Deploy",l.build||l.prerender?c.deploy.buildTimeout:c.deploy.timeout)},list:async a=>n().request(`${T.DEPLOYMENTS}${pe(a)}`,{method:"GET"},"List deployments"),get:async a=>n().request(T.DEPLOYMENT(encodeURIComponent(a)),{method:"GET"},"Get deployment"),set:async(a,l)=>n().request(T.DEPLOYMENT(encodeURIComponent(a)),{method:"PATCH",headers:W,body:JSON.stringify({labels:M(l.labels)})},"Update deployment labels"),delete:async a=>n().request(T.DEPLOYMENT(encodeURIComponent(a)),{method:"DELETE"},"Delete deployment")}}function Ke(e){let{getApi:n}=e;return{set:async(t,a={})=>{let l=M(a.labels),c={};a.deployment&&(c.deployment=a.deployment),l!==void 0&&(c.labels=l);let{data:h,status:y}=await n().requestWithStatus(T.DOMAIN(encodeURIComponent(t)),{method:"PUT",headers:W,body:JSON.stringify(c)},"Set domain");return{...h,isCreate:y===201}},list:async t=>n().request(`${T.DOMAINS}${pe(t)}`,{method:"GET"},"List domains"),get:async t=>n().request(T.DOMAIN(encodeURIComponent(t)),{method:"GET"},"Get domain"),delete:async t=>n().request(T.DOMAIN(encodeURIComponent(t)),{method:"DELETE"},"Delete domain"),verify:async t=>n().request(T.DOMAIN_VERIFY(encodeURIComponent(t)),{method:"POST"},"Verify domain"),validate:async t=>n().request(T.DOMAINS_VALIDATE,{method:"POST",headers:W,body:JSON.stringify({domain:t})},"Validate domain"),dns:async t=>n().request(T.DOMAIN_DNS(encodeURIComponent(t)),{method:"GET"},"Get domain DNS"),records:async t=>n().request(T.DOMAIN_RECORDS(encodeURIComponent(t)),{method:"GET"},"Get domain records"),share:async t=>n().request(T.DOMAIN_SHARE(encodeURIComponent(t)),{method:"GET"},"Get domain share")}}function qe(e){let{getApi:n}=e;return{get:async()=>n().request(T.ACCOUNT,{method:"GET"},"Get account")}}function Ve(e){let{getApi:n}=e;return{create:async(t={})=>{let a=se(t.ttl),l=M(t.labels),c={};return a!==void 0&&(c.ttl=a),l!==void 0&&(c.labels=l),n().request(T.TOKENS,{method:"POST",headers:W,body:JSON.stringify(c)},"Create token")},list:async t=>n().request(`${T.TOKENS}${pe(t)}`,{method:"GET"},"List tokens"),get:async t=>n().request(T.TOKEN(encodeURIComponent(t)),{method:"GET"},"Get token"),delete:async t=>n().request(T.TOKEN(encodeURIComponent(t)),{method:"DELETE"},"Delete token")}}var J=class{constructor(n={}){this.initPromise=null;this.platformLimits=null;this.credential=null;if(n={...n,apiUrl:n.apiUrl||void 0,token:n.token||void 0,caller:n.caller||void 0},this.clientOptions=n,n.caller!==void 0&&Oe(n.caller),n.token&&n.session)throw m.config("Provide either `token` or `session`, not both.");typeof n.token=="string"?(oe(n.token),this.credential=n.token):n.token&&(this.credential=n.token),this.http=new V({...n,getAuthHeaders:()=>this.getAuthHeaders()});let t={getApi:()=>this.http};this.deployments=ze({...t,processInput:async(a,l)=>(await this.ensureInitialized(),this.processInput(a,l))}),this.domains=Ke(t),this.account=qe(t),this.tokens=Ve(t)}async ensureInitialized(){return this.initPromise||(this.initPromise=this.fetchPlatformLimits()),this.initPromise}async fetchPlatformLimits(){try{this.platformLimits=await this.http.request(T.LIMITS,{method:"GET"},"Get limits")}catch(n){throw this.initPromise=null,n}}async ping(){return this.http.request(T.PING,{method:"GET"},"Ping")}async deploy(n,t){return this.deployments.upload(n,t)}async whoami(){return this.account.get()}async getLimits(){return this.platformLimits?this.platformLimits:(await this.ensureInitialized(),this.platformLimits)}on(n,t){this.http.on(n,t)}off(n,t){this.http.off(n,t)}setHeaders(n){this.http.setGlobalHeaders(n)}clearHeaders(){this.http.setGlobalHeaders({})}setToken(n){if(this.clientOptions.session)throw m.config("Provide either `token` or `session`, not both.");if(typeof n=="string"){if(!n)throw m.business("Invalid token provided. Token must be a non-empty string.");oe(n),this.credential=n;return}if(typeof n!="function")throw m.business("Invalid token provided. Token must be a non-empty string or a provider function.");this.credential=n}async getAuthHeaders(){if(this.credential===null)return{};let n=typeof this.credential=="function"?await this.credential():this.credential;if(!n)throw m.authentication("Token provider returned no token.");if(typeof n!="string")throw m.authentication("Token provider returned a non-string value.");return{Authorization:`Bearer ${n}`}}};D();D();ce();de();ye();ge();j();Ee();function ur(e,n,t,a=!0){let l=e===1?n:t;return a?`${e} ${l}`:l}Ae();var Te=class extends J{async deploy(n,t){return super.deploy(n,t)}async processInput(n,t){if(!Array.isArray(n)||!n.every(l=>l instanceof File))throw m.business("Invalid input type for browser environment. Expected File[].");if(n.length===0)throw m.business("No files to deploy.");let{processFilesForBrowser:a}=await Promise.resolve().then(()=>(Ae(),it));return a(n,t,this.platformLimits??void 0)}},Mr=Te;export{_e as API_KEY,T as API_PATHS,tn as AUTH_BASE_PATH,Zt as AccountPlan,V as ApiHttp,ne as AuthMethod,C as CALLER,ae as DEFAULT_API,N as DEPLOYMENT_CONFIG_FILENAME,L as DEPLOY_FIELDS,we as DEPLOY_TOKEN,Wt as DeploymentStatus,mt as DeploymentVia,Jt as DomainStatus,g as ErrorType,R as FILE_VALIDATION_STATUS,R as FileValidationStatus,v as IDEMPOTENCY_KEY_CONSTRAINTS,Yt as JUNK_DIRECTORIES,O as LABEL_CONSTRAINTS,ve as LABEL_PATTERN,ln as MY_API_KEY_URL,Ne as OAUTH_TOKEN,rn as OAuthScope,k as PASSWORD_CONSTRAINTS,pn as PUBLIC_DEPLOYMENT_TTL_SECONDS,an as SHIP_ENV,K as SPA_CHECK_CONSTRAINTS,Pe as SPA_DEFAULT_CONFIG,Te as Ship,m as ShipError,G as TTL_CONSTRAINTS,x as TokenKind,Dt as UNBUILT_PROJECT_MARKERS,St as UNSAFE_FILENAME_CHARS,en as WEB_FILE_ACCEPT,Yn as __setTestEnvironment,tr as allValidFilesReady,xe as assertShipJsonSyntax,X as calculateMD5,Rt as classifyToken,qe as createAccountResource,ze as createDeploymentResource,Ke as createDomainResource,Ve as createTokenResource,Mr as default,hn as deserializeLabels,cn as extractSubdomain,Qe as filterJunk,Z as formatFileSize,fn as generateDeploymentUrl,dn as generateDomainUrl,je as getENV,Kt as getValidFiles,z as hasUnbuiltMarker,Le as hasUnsafeChars,Ie as isBlockedExtension,un as isCustomDomain,sn as isDeployment,Fe as isPlatformDomain,be as isShipError,Qt as normalizeVia,Xe as optimizeDeployPaths,ur as pluralize,rt as processFilesForBrowser,nn as readBearerValue,mn as serializeLabels,bt as validateApiKey,on as validateApiUrl,Oe as validateCaller,et as validateDeployFile,Ze as validateDeployPath,It as validateDeployToken,me as validateFileName,er as validateFiles,Re as validateIdempotencyKey,Lt as validateOAuthToken,le as validatePassword,oe as validateToken,se as validateTtl};
1
+ var st=Object.create;var $=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var lt=Object.getOwnPropertyNames;var pt=Object.getPrototypeOf,ut=Object.prototype.hasOwnProperty;var ct=(e,n,t)=>n in e?$(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;var I=(e,n)=>()=>(e&&(n=e(e=0)),n);var De=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),ft=(e,n)=>{for(var t in n)$(e,t,{get:n[t],enumerable:!0})},dt=(e,n,t,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let l of lt(n))!ut.call(e,l)&&l!==t&&$(e,l,{get:()=>n[l],enumerable:!(a=at(n,l))||a.enumerable});return e};var H=(e,n,t)=>(t=e!=null?st(pt(e)):{},dt(n||!e||!e.__esModule?$(t,"default",{value:e,enumerable:!0}):t,e));var B=(e,n,t)=>ct(e,typeof n!="symbol"?n+"":n,t);function Qt(e){if(!e||typeof e!="string")return;let n=e.trim().toLowerCase();return Object.values(mt).includes(n)?n:void 0}function Re(e){if(e==null)return;if(typeof e!="string")throw m.validation("Idempotency key must be a string.");let n=e.trim();if(!n)throw m.validation("Idempotency key must not be empty.");if(n.length>v.MAX_LENGTH)throw m.validation(`Idempotency key must be at most ${v.MAX_LENGTH} characters.`);return n}function Et(e){let n=e.code;return n==="ERR_INVALID_URL"?!1:typeof n=="string"?!0:e instanceof TypeError?!/\burl\b/i.test(e.message):!1}function be(e){return e!==null&&typeof e=="object"&&"name"in e&&e.name==="ShipError"&&"status"in e}function At(e){let n=e.replace(/\\/g,"/").split("/").pop()??"",t=n.lastIndexOf(".");return t<=0||t===n.length-1?null:n.slice(t+1).toLowerCase()}function Ie(e,n){let t=At(e);return t===null?!1:Array.isArray(n)?n.includes(t):n.has(t)}function Le(e){return St.test(e)}function z(e){return e.replace(/\\/g,"/").split("/").filter(Boolean).some(t=>Dt.has(t))}function Rt(e){return e.startsWith(_e.PREFIX)?x.API_KEY:e.startsWith(we.PREFIX)?x.DEPLOY_TOKEN:e.startsWith(Ne.PREFIX)?x.OAUTH:x.OPAQUE}function nn(e){return e.slice(0,re.length).toLowerCase()!==re?null:e.slice(re.length)||null}function xe(e){let n=e.charCodeAt(0)===65279?e.slice(1):e,t;try{t=JSON.parse(n)}catch(a){throw m.config(`invalid JSON format in config: ${a.message}`,{filePath:N})}if(t===null||typeof t!="object"||Array.isArray(t))throw m.config(`${N} must contain a JSON object`,{filePath:N})}function ie(e,n,t){if(!e.startsWith(n.PREFIX))throw m.validation(`${t} must start with "${n.PREFIX}"`);if(e.length!==n.TOTAL_LENGTH)throw m.validation(`${t} must be ${n.TOTAL_LENGTH} characters total (${n.PREFIX} + ${n.HEX_LENGTH} hex chars)`);let a=e.slice(n.PREFIX.length);if(!new RegExp(`^[a-f0-9]{${n.HEX_LENGTH}}$`,"i").test(a))throw m.validation(`${t} must contain ${n.HEX_LENGTH} hexadecimal characters after "${n.PREFIX}" prefix`)}function bt(e){ie(e,_e,"API key")}function It(e){ie(e,we,"Deploy token")}function Lt(e){ie(e,Ne,"OAuth access token")}function oe(e){switch(Rt(e)){case x.API_KEY:bt(e);return;case x.DEPLOY_TOKEN:It(e);return;case x.OAUTH:Lt(e);return;case x.OPAQUE:if(!e)throw m.validation("Token must be a non-empty string")}}function Oe(e){if(!e||e.length>C.MAX_LENGTH||!C.PATTERN.test(e))throw m.validation(`Caller must be 1-${C.MAX_LENGTH} characters: letters, digits, dots, underscores, or hyphens`)}function on(e){try{let n=new URL(e);if(!["http:","https:"].includes(n.protocol))throw m.validation("API URL must use http:// or https:// protocol");if(n.pathname!=="/"&&n.pathname!=="")throw m.validation("API URL must not contain a path");if(n.search||n.hash)throw m.validation("API URL must not contain query parameters or fragments")}catch(n){throw be(n)?n:m.validation("API URL must be a valid URL")}}function sn(e){return/^[a-z]+-[a-z]+-[a-z0-9]{7}(\.[a-z0-9.-]+)?$/i.test(e)}function se(e){if(e!=null){if(typeof e!="number"||!Number.isFinite(e))throw m.validation("TTL must be a number of seconds");if(!Number.isInteger(e))throw m.validation("TTL must be a whole number of seconds");if(e<G.MIN_SECONDS||e>G.MAX_SECONDS)throw m.validation(`TTL must be between ${G.MIN_SECONDS} and ${G.MAX_SECONDS} seconds`);return e}}function Fe(e,n){return e.endsWith(`.${n}`)}function un(e,n){return!Fe(e,n)}function cn(e,n){return Fe(e,n)?e.slice(0,-(n.length+1)):null}function fn(e){return`https://${e}`}function dn(e){return`https://${e}`}function mn(e){return!e||e.length===0?null:JSON.stringify(e)}function hn(e){if(!e)return[];try{let n=JSON.parse(e);return Array.isArray(n)?n:[]}catch{return[]}}function le(e){if(e==null)return;if(typeof e!="string")throw m.validation("Password must be a string");let n=e.trim();if(n.length<k.MIN_LENGTH||n.length>k.MAX_LENGTH)throw m.validation(`Password must be between ${k.MIN_LENGTH} and ${k.MAX_LENGTH} characters`);return n}var Wt,mt,Jt,v,Zt,T,L,g,ht,te,yt,gt,m,Tt,en,St,Dt,tn,ne,_e,we,Ne,C,x,re,rn,N,Pe,K,G,ae,an,ln,pn,R,O,ve,k,D=I(()=>{"use strict";Wt={PENDING:"pending",SUCCESS:"success",FAILED:"failed",DELETING:"deleting"},mt={WEB:"web",SDK:"sdk",CLI:"cli",MCP:"mcp",GIT:"git",N8N:"n8n",GPT:"gpt",VSC:"vsc",CLD:"cld",CRS:"crs",API:"api"},Jt={PENDING:"pending",PARTIAL:"partial",SUCCESS:"success",PAUSED:"paused"},v={HEADER:"Idempotency-Key",MAX_LENGTH:256,WINDOW_SECONDS:1440*60};Zt={FREE:"free",STANDARD:"standard",SPONSORED:"sponsored",ENTERPRISE:"enterprise",SUSPENDED:"suspended",TERMINATING:"terminating",TERMINATED:"terminated"},T={DEPLOYMENTS:"/deployments",DEPLOYMENT:e=>`/deployments/${e}`,DEPLOYMENT_CONFIG:e=>`/deployments/${e}/config`,DOMAINS:"/domains",DOMAIN:e=>`/domains/${e}`,DOMAIN_VERIFY:e=>`/domains/${e}/verify`,DOMAIN_DNS:e=>`/domains/${e}/dns`,DOMAIN_RECORDS:e=>`/domains/${e}/records`,DOMAIN_SHARE:e=>`/domains/${e}/share`,DOMAIN_PROPAGATION:e=>`/domains/${e}/propagation`,DOMAINS_VALIDATE:"/domains/validate",TOKENS:"/tokens",TOKEN:e=>`/tokens/${e}`,ACCOUNT:"/account",ACCOUNT_KEY:"/account/key",ACCOUNT_CLAIM:"/account/claim",ACTIVITIES:"/activities",LABELS:"/labels",LIMITS:"/limits",PING:"/ping",SETUP:"/setup",SPA_CHECK:"/spa-check",UPLOAD:"/upload"},L={FILES:"files[]",CHECKSUMS:"checksums",LABELS:"labels",VIA:"via",PASSWORD:"password",TTL:"ttl",BUILD:"build",PRERENDER:"prerender",SPA:"spa",CAPTCHA:"captcha"},g={Validation:"validation_failed",NotFound:"not_found",Forbidden:"forbidden",RateLimit:"rate_limit_exceeded",Authentication:"authentication_failed",Business:"business_logic_error",Api:"internal_server_error",Maintenance:"maintenance",Network:"network_error",Timeout:"timeout_error",Cancelled:"operation_cancelled",File:"file_error",Config:"config_error"},ht=new Set([g.Network,g.Timeout,g.Cancelled,g.File,g.Config]),te={client:new Set([g.Business,g.Cancelled,g.Config,g.File,g.Forbidden,g.NotFound,g.RateLimit,g.Validation]),network:new Set([g.Network,g.Timeout]),auth:new Set([g.Authentication])},yt=new Set(Object.values(g).filter(e=>!ht.has(e))),gt=200;m=class e extends Error{constructor(t,a,l,c){super(a);B(this,"type");B(this,"status");B(this,"details");this.type=t,this.status=l,this.details=c,this.name="ShipError"}toResponse(){let t=this.details,a=this.type===g.Authentication&&t?.internal?void 0:this.details;return{error:this.type,message:this.message,status:this.status,details:a}}static async fromHttpResponse(t,a){let l,c,h;try{if(t.headers.get("content-type")?.includes("application/json")){let f=await t.json();if(f&&typeof f=="object"){let A=f;typeof A.message=="string"?l=A.message:typeof A.error=="string"&&(l=A.error),c=A.details,typeof A.error=="string"&&yt.has(A.error)&&(h=A.error)}}else{let f=(await t.text()).trim();f&&!f.startsWith("<")&&f.length<=gt&&(l=f)}}catch{}let y=t.headers.get("retry-after");if(y!==null){let E=y.trim(),f=/^\d+$/.test(E)?Number(E):Math.ceil((Date.parse(E)-Date.now())/1e3);if(Number.isFinite(f)&&f>=0){let A=c&&typeof c=="object"?c:{};A.retryAfter===void 0&&(c={...A,retryAfter:f})}}l=l||`${a||"Request"} failed with status ${t.status}`;let d=h??(t.status===401?g.Authentication:t.status===403?g.Forbidden:t.status===429?g.RateLimit:g.Api);return new e(d,l,t.status,c)}static fromFetchError(t,a){if(be(t))return t;let l=a||"Request",c=t?.name;return c==="AbortError"?e.cancelled(`${l} was cancelled`):c==="TimeoutError"?e.timeout(`${l} timed out`,{cause:t}):t instanceof Error?Et(t)?e.network(`${l} failed: ${t.message}`,{cause:t}):new e(g.Api,`${l} failed: ${t.message}`):new e(g.Api,`${l} failed: Unknown error`)}static validation(t,a){return new e(g.Validation,t,400,a)}static notFound(t,a){let l=a?`${t} ${a} not found`:`${t} not found`;return new e(g.NotFound,l,404)}static forbidden(t,a){return new e(g.Forbidden,t,403,a)}static rateLimit(t="Too many requests",a){return new e(g.RateLimit,t,429,a)}static authentication(t="Authentication required",a){return new e(g.Authentication,t,401,a)}static business(t,a=400,l){return new e(g.Business,t,a,l)}static network(t,a){return new e(g.Network,t,void 0,a)}static timeout(t,a){return new e(g.Timeout,t,void 0,a)}static cancelled(t,a){return new e(g.Cancelled,t,void 0,a)}static file(t,a){return new e(g.File,t,void 0,a)}static config(t,a){return new e(g.Config,t,void 0,a)}static api(t,a=500,l){return new e(g.Api,t,a,l)}static maintenance(t,a){return new e(g.Maintenance,t,503,a)}isClientError(){return te.client.has(this.type)?!0:this.status!==void 0&&this.status>=400&&this.status<500}isNetworkError(){return te.network.has(this.type)}isAuthError(){return te.auth.has(this.type)}isType(t){return this.type===t}};Tt=["html","htm","xhtml","xml","txt","md","markdown","pdf","csv","json","jsonc","webmanifest","map","toml","yaml","yml","rss","atom","css","scss","sass","less","js","mjs","cjs","jsx","ts","tsx","wasm","vue","svelte","png","jpg","jpeg","gif","webp","avif","svg","ico","bmp","tif","tiff","heic","heif","woff","woff2","ttf","otf","eot","mp3","wav","ogg","oga","opus","m4a","aac","flac","weba","mp4","webm","ogv","mov","m4v","avi","glb","gltf","usdz","vtt","srt","zip"],en=Tt.map(e=>`.${e}`).join(","),St=/[\x00-\x1f\x7f#?%\\<>"]/;Dt=new Set(["node_modules","package.json"]);tn="/auth",ne={SESSION:"session",API_KEY:"apiKey",TOKEN:"token",AGENT:"agent",OAUTH:"oauth",WEBHOOK:"webhook",SYSTEM:"system"},_e={PREFIX:"ship-",HEX_LENGTH:32,TOTAL_LENGTH:37,HINT_LENGTH:4},we={PREFIX:"deploy-",HEX_LENGTH:32,TOTAL_LENGTH:39},Ne={PREFIX:"oauth-",HEX_LENGTH:32,TOTAL_LENGTH:38},C={HEADER:"X-Caller",MAX_LENGTH:128,PATTERN:/^[a-zA-Z0-9._-]+$/},x={API_KEY:ne.API_KEY,DEPLOY_TOKEN:ne.TOKEN,OAUTH:ne.OAUTH,OPAQUE:"opaque"};re="bearer ";rn={ACCOUNT_READ:"account:read",DEPLOYMENTS_READ:"deployments:read",DEPLOYMENTS_WRITE:"deployments:write",DOMAINS_READ:"domains:read",DOMAINS_WRITE:"domains:write"},N="ship.json",Pe={rewrites:[{source:"/(.*)",destination:"/index.html"}]},K={INDEX_FILE:"index.html",MAX_INDEX_BYTES:100*1024};G={MIN_SECONDS:1,MAX_SECONDS:365*24*60*60};ae="https://api.shipstatic.com",an={TOKEN:"SHIP_TOKEN",API_URL:"SHIP_API_URL"},ln="https://my.shipstatic.com/api-key",pn=4320*60,R={PENDING:"pending",PROCESSING_ERROR:"processing_error",EXCLUDED:"excluded",VALIDATION_FAILED:"validation_failed",READY:"ready"};O={MIN_LENGTH:3,MAX_LENGTH:25,MAX_COUNT:10,SEPARATORS:"._-"},ve=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/;k={MIN_LENGTH:6,MAX_LENGTH:128}});var He=De((Ue,$e)=>{"use strict";(function(e){if(typeof Ue=="object")$e.exports=e();else if(typeof define=="function"&&define.amd)define(e);else{var n;try{n=window}catch{n=self}n.SparkMD5=e()}})(function(e){"use strict";var n=function(u,p){return u+p&4294967295},t=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];function a(u,p,i,r,s,o){return p=n(n(p,u),n(r,o)),n(p<<s|p>>>32-s,i)}function l(u,p){var i=u[0],r=u[1],s=u[2],o=u[3];i+=(r&s|~r&o)+p[0]-680876936|0,i=(i<<7|i>>>25)+r|0,o+=(i&r|~i&s)+p[1]-389564586|0,o=(o<<12|o>>>20)+i|0,s+=(o&i|~o&r)+p[2]+606105819|0,s=(s<<17|s>>>15)+o|0,r+=(s&o|~s&i)+p[3]-1044525330|0,r=(r<<22|r>>>10)+s|0,i+=(r&s|~r&o)+p[4]-176418897|0,i=(i<<7|i>>>25)+r|0,o+=(i&r|~i&s)+p[5]+1200080426|0,o=(o<<12|o>>>20)+i|0,s+=(o&i|~o&r)+p[6]-1473231341|0,s=(s<<17|s>>>15)+o|0,r+=(s&o|~s&i)+p[7]-45705983|0,r=(r<<22|r>>>10)+s|0,i+=(r&s|~r&o)+p[8]+1770035416|0,i=(i<<7|i>>>25)+r|0,o+=(i&r|~i&s)+p[9]-1958414417|0,o=(o<<12|o>>>20)+i|0,s+=(o&i|~o&r)+p[10]-42063|0,s=(s<<17|s>>>15)+o|0,r+=(s&o|~s&i)+p[11]-1990404162|0,r=(r<<22|r>>>10)+s|0,i+=(r&s|~r&o)+p[12]+1804603682|0,i=(i<<7|i>>>25)+r|0,o+=(i&r|~i&s)+p[13]-40341101|0,o=(o<<12|o>>>20)+i|0,s+=(o&i|~o&r)+p[14]-1502002290|0,s=(s<<17|s>>>15)+o|0,r+=(s&o|~s&i)+p[15]+1236535329|0,r=(r<<22|r>>>10)+s|0,i+=(r&o|s&~o)+p[1]-165796510|0,i=(i<<5|i>>>27)+r|0,o+=(i&s|r&~s)+p[6]-1069501632|0,o=(o<<9|o>>>23)+i|0,s+=(o&r|i&~r)+p[11]+643717713|0,s=(s<<14|s>>>18)+o|0,r+=(s&i|o&~i)+p[0]-373897302|0,r=(r<<20|r>>>12)+s|0,i+=(r&o|s&~o)+p[5]-701558691|0,i=(i<<5|i>>>27)+r|0,o+=(i&s|r&~s)+p[10]+38016083|0,o=(o<<9|o>>>23)+i|0,s+=(o&r|i&~r)+p[15]-660478335|0,s=(s<<14|s>>>18)+o|0,r+=(s&i|o&~i)+p[4]-405537848|0,r=(r<<20|r>>>12)+s|0,i+=(r&o|s&~o)+p[9]+568446438|0,i=(i<<5|i>>>27)+r|0,o+=(i&s|r&~s)+p[14]-1019803690|0,o=(o<<9|o>>>23)+i|0,s+=(o&r|i&~r)+p[3]-187363961|0,s=(s<<14|s>>>18)+o|0,r+=(s&i|o&~i)+p[8]+1163531501|0,r=(r<<20|r>>>12)+s|0,i+=(r&o|s&~o)+p[13]-1444681467|0,i=(i<<5|i>>>27)+r|0,o+=(i&s|r&~s)+p[2]-51403784|0,o=(o<<9|o>>>23)+i|0,s+=(o&r|i&~r)+p[7]+1735328473|0,s=(s<<14|s>>>18)+o|0,r+=(s&i|o&~i)+p[12]-1926607734|0,r=(r<<20|r>>>12)+s|0,i+=(r^s^o)+p[5]-378558|0,i=(i<<4|i>>>28)+r|0,o+=(i^r^s)+p[8]-2022574463|0,o=(o<<11|o>>>21)+i|0,s+=(o^i^r)+p[11]+1839030562|0,s=(s<<16|s>>>16)+o|0,r+=(s^o^i)+p[14]-35309556|0,r=(r<<23|r>>>9)+s|0,i+=(r^s^o)+p[1]-1530992060|0,i=(i<<4|i>>>28)+r|0,o+=(i^r^s)+p[4]+1272893353|0,o=(o<<11|o>>>21)+i|0,s+=(o^i^r)+p[7]-155497632|0,s=(s<<16|s>>>16)+o|0,r+=(s^o^i)+p[10]-1094730640|0,r=(r<<23|r>>>9)+s|0,i+=(r^s^o)+p[13]+681279174|0,i=(i<<4|i>>>28)+r|0,o+=(i^r^s)+p[0]-358537222|0,o=(o<<11|o>>>21)+i|0,s+=(o^i^r)+p[3]-722521979|0,s=(s<<16|s>>>16)+o|0,r+=(s^o^i)+p[6]+76029189|0,r=(r<<23|r>>>9)+s|0,i+=(r^s^o)+p[9]-640364487|0,i=(i<<4|i>>>28)+r|0,o+=(i^r^s)+p[12]-421815835|0,o=(o<<11|o>>>21)+i|0,s+=(o^i^r)+p[15]+530742520|0,s=(s<<16|s>>>16)+o|0,r+=(s^o^i)+p[2]-995338651|0,r=(r<<23|r>>>9)+s|0,i+=(s^(r|~o))+p[0]-198630844|0,i=(i<<6|i>>>26)+r|0,o+=(r^(i|~s))+p[7]+1126891415|0,o=(o<<10|o>>>22)+i|0,s+=(i^(o|~r))+p[14]-1416354905|0,s=(s<<15|s>>>17)+o|0,r+=(o^(s|~i))+p[5]-57434055|0,r=(r<<21|r>>>11)+s|0,i+=(s^(r|~o))+p[12]+1700485571|0,i=(i<<6|i>>>26)+r|0,o+=(r^(i|~s))+p[3]-1894986606|0,o=(o<<10|o>>>22)+i|0,s+=(i^(o|~r))+p[10]-1051523|0,s=(s<<15|s>>>17)+o|0,r+=(o^(s|~i))+p[1]-2054922799|0,r=(r<<21|r>>>11)+s|0,i+=(s^(r|~o))+p[8]+1873313359|0,i=(i<<6|i>>>26)+r|0,o+=(r^(i|~s))+p[15]-30611744|0,o=(o<<10|o>>>22)+i|0,s+=(i^(o|~r))+p[6]-1560198380|0,s=(s<<15|s>>>17)+o|0,r+=(o^(s|~i))+p[13]+1309151649|0,r=(r<<21|r>>>11)+s|0,i+=(s^(r|~o))+p[4]-145523070|0,i=(i<<6|i>>>26)+r|0,o+=(r^(i|~s))+p[11]-1120210379|0,o=(o<<10|o>>>22)+i|0,s+=(i^(o|~r))+p[2]+718787259|0,s=(s<<15|s>>>17)+o|0,r+=(o^(s|~i))+p[9]-343485551|0,r=(r<<21|r>>>11)+s|0,u[0]=i+u[0]|0,u[1]=r+u[1]|0,u[2]=s+u[2]|0,u[3]=o+u[3]|0}function c(u){var p=[],i;for(i=0;i<64;i+=4)p[i>>2]=u.charCodeAt(i)+(u.charCodeAt(i+1)<<8)+(u.charCodeAt(i+2)<<16)+(u.charCodeAt(i+3)<<24);return p}function h(u){var p=[],i;for(i=0;i<64;i+=4)p[i>>2]=u[i]+(u[i+1]<<8)+(u[i+2]<<16)+(u[i+3]<<24);return p}function y(u){var p=u.length,i=[1732584193,-271733879,-1732584194,271733878],r,s,o,b,w,P;for(r=64;r<=p;r+=64)l(i,c(u.substring(r-64,r)));for(u=u.substring(r-64),s=u.length,o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],r=0;r<s;r+=1)o[r>>2]|=u.charCodeAt(r)<<(r%4<<3);if(o[r>>2]|=128<<(r%4<<3),r>55)for(l(i,o),r=0;r<16;r+=1)o[r]=0;return b=p*8,b=b.toString(16).match(/(.*?)(.{0,8})$/),w=parseInt(b[2],16),P=parseInt(b[1],16)||0,o[14]=w,o[15]=P,l(i,o),i}function d(u){var p=u.length,i=[1732584193,-271733879,-1732584194,271733878],r,s,o,b,w,P;for(r=64;r<=p;r+=64)l(i,h(u.subarray(r-64,r)));for(u=r-64<p?u.subarray(r-64):new Uint8Array(0),s=u.length,o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],r=0;r<s;r+=1)o[r>>2]|=u[r]<<(r%4<<3);if(o[r>>2]|=128<<(r%4<<3),r>55)for(l(i,o),r=0;r<16;r+=1)o[r]=0;return b=p*8,b=b.toString(16).match(/(.*?)(.{0,8})$/),w=parseInt(b[2],16),P=parseInt(b[1],16)||0,o[14]=w,o[15]=P,l(i,o),i}function E(u){var p="",i;for(i=0;i<4;i+=1)p+=t[u>>i*8+4&15]+t[u>>i*8&15];return p}function f(u){var p;for(p=0;p<u.length;p+=1)u[p]=E(u[p]);return u.join("")}f(y("hello"))!=="5d41402abc4b2a76b9719d911017c592"&&(n=function(u,p){var i=(u&65535)+(p&65535),r=(u>>16)+(p>>16)+(i>>16);return r<<16|i&65535}),typeof ArrayBuffer<"u"&&!ArrayBuffer.prototype.slice&&(function(){function u(p,i){return p=p|0||0,p<0?Math.max(p+i,0):Math.min(p,i)}ArrayBuffer.prototype.slice=function(p,i){var r=this.byteLength,s=u(p,r),o=r,b,w,P,Se;return i!==e&&(o=u(i,r)),s>o?new ArrayBuffer(0):(b=o-s,w=new ArrayBuffer(b),P=new Uint8Array(w),Se=new Uint8Array(this,s,b),P.set(Se),w)}})();function A(u){return/[\u0080-\uFFFF]/.test(u)&&(u=unescape(encodeURIComponent(u))),u}function _(u,p){var i=u.length,r=new ArrayBuffer(i),s=new Uint8Array(r),o;for(o=0;o<i;o+=1)s[o]=u.charCodeAt(o);return p?s:r}function F(u){return String.fromCharCode.apply(null,new Uint8Array(u))}function ot(u,p,i){var r=new Uint8Array(u.byteLength+p.byteLength);return r.set(new Uint8Array(u)),r.set(new Uint8Array(p),u.byteLength),i?r:r.buffer}function U(u){var p=[],i=u.length,r;for(r=0;r<i-1;r+=2)p.push(parseInt(u.substr(r,2),16));return String.fromCharCode.apply(String,p)}function S(){this.reset()}return S.prototype.append=function(u){return this.appendBinary(A(u)),this},S.prototype.appendBinary=function(u){this._buff+=u,this._length+=u.length;var p=this._buff.length,i;for(i=64;i<=p;i+=64)l(this._hash,c(this._buff.substring(i-64,i)));return this._buff=this._buff.substring(i-64),this},S.prototype.end=function(u){var p=this._buff,i=p.length,r,s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],o;for(r=0;r<i;r+=1)s[r>>2]|=p.charCodeAt(r)<<(r%4<<3);return this._finish(s,i),o=f(this._hash),u&&(o=U(o)),this.reset(),o},S.prototype.reset=function(){return this._buff="",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},S.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},S.prototype.setState=function(u){return this._buff=u.buff,this._length=u.length,this._hash=u.hash,this},S.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},S.prototype._finish=function(u,p){var i=p,r,s,o;if(u[i>>2]|=128<<(i%4<<3),i>55)for(l(this._hash,u),i=0;i<16;i+=1)u[i]=0;r=this._length*8,r=r.toString(16).match(/(.*?)(.{0,8})$/),s=parseInt(r[2],16),o=parseInt(r[1],16)||0,u[14]=s,u[15]=o,l(this._hash,u)},S.hash=function(u,p){return S.hashBinary(A(u),p)},S.hashBinary=function(u,p){var i=y(u),r=f(i);return p?U(r):r},S.ArrayBuffer=function(){this.reset()},S.ArrayBuffer.prototype.append=function(u){var p=ot(this._buff.buffer,u,!0),i=p.length,r;for(this._length+=u.byteLength,r=64;r<=i;r+=64)l(this._hash,h(p.subarray(r-64,r)));return this._buff=r-64<i?new Uint8Array(p.buffer.slice(r-64)):new Uint8Array(0),this},S.ArrayBuffer.prototype.end=function(u){var p=this._buff,i=p.length,r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],s,o;for(s=0;s<i;s+=1)r[s>>2]|=p[s]<<(s%4<<3);return this._finish(r,i),o=f(this._hash),u&&(o=U(o)),this.reset(),o},S.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},S.ArrayBuffer.prototype.getState=function(){var u=S.prototype.getState.call(this);return u.buff=F(u.buff),u},S.ArrayBuffer.prototype.setState=function(u){return u.buff=_(u.buff,!0),S.prototype.setState.call(this,u)},S.ArrayBuffer.prototype.destroy=S.prototype.destroy,S.ArrayBuffer.prototype._finish=S.prototype._finish,S.ArrayBuffer.hash=function(u,p){var i=d(new Uint8Array(u)),r=f(i);return p?U(r):r},S})});var Y=De((bn,Be)=>{"use strict";Be.exports={}});async function Ct(e){let n=(await Promise.resolve().then(()=>H(He(),1))).default,t=new n.ArrayBuffer,a=2097152;for(let l=0;l<e.size;l+=a){let c=Math.min(l+a,e.size);t.append(await e.slice(l,c).arrayBuffer())}return{md5:t.end()}}async function Mt(e){let{createHash:n}=await Promise.resolve().then(()=>H(Y(),1)),t=n("md5");return t.update(e),{md5:t.digest("hex")}}async function Ut(e){let{createHash:n}=await Promise.resolve().then(()=>H(Y(),1)),{createReadStream:t}=await Promise.resolve().then(()=>H(Y(),1));return new Promise((a,l)=>{let c=n("md5"),h=t(e);h.on("error",y=>l(m.file(`Failed to read file for MD5: ${y.message}`,{filePath:e}))),h.on("data",y=>c.update(y)),h.on("end",()=>a({md5:c.digest("hex")}))})}async function X(e){if(e instanceof Blob)return Ct(e);if(typeof Buffer<"u"&&Buffer.isBuffer(e))return Mt(e);if(typeof e=="string")return Ut(e);throw m.business("Invalid input for MD5 calculation")}var j=I(()=>{"use strict";D()});function Q(e){return e.replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\/+/,"")}var Ye=I(()=>{"use strict"});function Xe(e,n={}){if(n.flatten===!1)return e.map(a=>({path:Q(a),name:ue(a)}));let t=Gt(e);return e.map(a=>{let l=Q(a);if(t){let c=t.endsWith("/")?t:`${t}/`;l.startsWith(c)&&(l=l.substring(c.length))}return l||(l=ue(a)),{path:l,name:ue(a)}})}function Gt(e){if(!e.length)return"";let t=e.map(c=>Q(c)).map(c=>c.split("/")),a=[],l=Math.min(...t.map(c=>c.length));for(let c=0;c<l-1;c++){let h=t[0][c];if(t.every(y=>y[c]===h))a.push(h);else break}return a.join("/")}function ue(e){return e.split(/[/\\]/).pop()||e}var ce=I(()=>{"use strict";Ye()});function Yn(e){fe=e}function kt(){return typeof process<"u"&&process.versions&&process.versions.node?"node":typeof window<"u"||typeof self<"u"?"browser":"unknown"}function je(){return fe||kt()}var fe,de=I(()=>{"use strict";fe=null});function ee(e,n){return zt.find(t=>t.broken(e,n))}var zt,he=I(()=>{"use strict";D();ye();zt=[{name:"name",broken:({path:e})=>!me(e).valid,sentence:({path:e})=>me(e).reason??"Invalid file name"},{name:"extension",broken:({path:e},n)=>Ie(e,n.blockedExtensions??[]),sentence:({path:e})=>`File extension not allowed: "${e}"`},{name:"fileSize",broken:({size:e},n)=>e>n.maxFileSize,sentence:({path:e},n)=>`File "${e}" too large. Maximum ${Z(n.maxFileSize)} allowed`},{name:"totalSize",broken:({totalSize:e},n)=>e>n.maxTotalSize,sentence:({totalSize:e},n)=>`Total upload size too large. ${Z(e)} exceeds maximum of ${Z(n.maxTotalSize)}`}]});function Z(e,n=1){if(e===0)return"0 Bytes";let t=1024,a=["Bytes","KB","MB","GB"],l=Math.floor(Math.log(e)/Math.log(t));return`${parseFloat((e/t**l).toFixed(n))} ${a[l]}`}function me(e){if(Le(e))return{valid:!1,reason:"File name contains unsafe characters"};if(e.startsWith(" ")||e.endsWith(" "))return{valid:!1,reason:"File name cannot start/end with spaces"};if(e.endsWith("."))return{valid:!1,reason:"File name cannot end with dots"};let n=/^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(\.|$)/i,t=e.split("/").pop()||e;return n.test(t)?{valid:!1,reason:"File name uses a reserved system name"}:e.includes("..")?{valid:!1,reason:"File name contains path traversal pattern"}:{valid:!0}}function er(e,n){let t=[],a=[],l=[];if(e.length===0){let d={file:"(no files)",message:"At least one file must be provided"};return t.push(d),{files:[],validFiles:[],errors:t,warnings:[],canDeploy:!1}}for(let d of e)if(z(d.name))return t.push({file:d.name,message:"Unbuilt project detected \u2014 deploy your build output (dist/, build/, out/), not the project folder"}),{files:e.map(E=>({...E,status:R.VALIDATION_FAILED,statusMessage:"Unbuilt project detected"})),validFiles:[],errors:t,warnings:[],canDeploy:!1};if(e.length>n.maxFilesCount){let d={file:`(${e.length} files)`,message:`File count (${e.length}) exceeds limit of ${n.maxFilesCount}`};return t.push(d),{files:e.map(E=>({...E,status:R.VALIDATION_FAILED,statusMessage:d.message})),validFiles:[],errors:t,warnings:[],canDeploy:!1}}let c=0;for(let d of e){let E=R.READY,f="Ready for upload";if(d.status===R.PROCESSING_ERROR)E=R.VALIDATION_FAILED,f=d.statusMessage||"File failed during processing",t.push({file:d.name,message:f});else if(d.size===0){E=R.EXCLUDED,f="File is empty (0 bytes) and cannot be deployed due to storage limitations",a.push({file:d.name,message:f}),l.push({...d,status:E,statusMessage:f});continue}else if(d.size<0)E=R.VALIDATION_FAILED,f="File size must be positive",t.push({file:d.name,message:f});else if(!d.name||d.name.trim().length===0)E=R.VALIDATION_FAILED,f="File name cannot be empty",t.push({file:d.name||"(empty)",message:f});else if(d.name.includes("\0"))E=R.VALIDATION_FAILED,f="File name contains invalid characters (null byte)",t.push({file:d.name,message:f});else{let A={path:d.name,size:d.size,totalSize:c+d.size},_=ee(A,n);_?(E=R.VALIDATION_FAILED,f=_.sentence(A,n),t.push({file:_.name==="totalSize"?`(${e.length} files)`:d.name,message:f})):c=A.totalSize}l.push({...d,status:E,statusMessage:f})}t.length>0&&(l=l.map(d=>d.status===R.EXCLUDED?d:{...d,status:R.VALIDATION_FAILED,statusMessage:d.status===R.VALIDATION_FAILED?d.statusMessage:"Deployment failed due to validation errors in bundle"}));let h=t.length===0?l.filter(d=>d.status===R.READY):[],y=t.length===0;return{files:l,validFiles:h,errors:t,warnings:a,canDeploy:y}}function Kt(e){return e.filter(n=>n.status===R.READY)}function tr(e){return Kt(e).length>0}var ye=I(()=>{"use strict";D();he()});function We(e){return Vt.test(e)}var qt,Vt,Je=I(()=>{"use strict";qt=["^npm-debug\\.log$","^\\..*\\.swp$","^\\.DS_Store$","^\\.AppleDouble$","^\\.LSOverride$","^Icon\\r$","^\\._.*","^\\.Spotlight-V100(?:$|\\/)","\\.Trashes","^__MACOSX$","~$","^Thumbs\\.db$","^ehthumbs\\.db$","^[Dd]esktop\\.ini$","@eaDir$"],Vt=new RegExp(qt.join("|"))});function Qe(e,n){if(!e||e.length===0)return[];if(!n?.allowUnbuilt&&e.find(a=>a&&z(a)))throw m.business("Unbuilt project detected \u2014 deploy your build output (dist/, build/, out/), not the project folder");return e.filter(t=>{if(!t)return!1;let a=t.replace(/\\/g,"/").split("/").filter(Boolean);if(a.length===0)return!0;let l=a[a.length-1];if(We(l))return!1;for(let h of a)if(h!==".well-known"&&(h.startsWith(".")||h.length>255))return!1;let c=a.slice(0,-1);for(let h of c)if(Yt.some(y=>h.toLowerCase()===y.toLowerCase()))return!1;return!0})}var Yt,ge=I(()=>{"use strict";D();Je();Yt=["__MACOSX",".Trashes",".fseventsd",".Spotlight-V100"]});function Ze(e,n){if(e.includes("\0")||e.includes("/../")||e.startsWith("../")||e.endsWith("/.."))throw m.business(`Security error: Unsafe file path "${e}" for file: ${n}`)}function et(e,n){let t=ee(e,n);if(t)throw m.business(t.sentence(e,n))}var Ee=I(()=>{"use strict";D();he()});async function tt(e,n={},t){let a=!!(n.build||n.prerender),l=Xe(e.map(f=>f.path),{flatten:n.pathDetect!==!1}).map(f=>f.path),c=new Set(Qe(l,{allowUnbuilt:a})),h=e.map((f,A)=>({source:f,deployPath:l[A]})).filter(({deployPath:f})=>c.has(f));if(h.length===0)return[];let y=a?null:Xt(t),d=[],E=0;for(let{source:f,deployPath:A}of h){if(y&&Ze(A,f.origin),f.size===0)continue;y&&(E+=f.size,et({path:A,size:f.size,totalSize:E},y));let _=await f.read(),{md5:F}=await X(_);d.push({path:A,content:_,size:f.size,md5:F})}if(y&&d.length>y.maxFilesCount)throw m.business(`Too many files to deploy. Maximum allowed is ${y.maxFilesCount} files.`);return d}function Xt(e){if(!e)throw m.config("Platform limits not provided. Deploy-mode validation requires the limits argument \u2014 pass `ship.getLimits()` result.");return e}var nt=I(()=>{"use strict";D();ce();ge();j();Ee()});var it={};ft(it,{processFilesForBrowser:()=>rt});async function rt(e,n={},t){if(je()!=="browser")throw m.business("processFilesForBrowser can only be called in a browser environment.");return tt(e.map(a=>({path:a.webkitRelativePath||a.name,origin:a.name,size:a.size,read:async()=>a})),n,t)}var Ae=I(()=>{"use strict";D();nt();de()});D();D();D();var q=class{constructor(){this.handlers=new Map}on(n,t){this.handlers.has(n)||this.handlers.set(n,new Set),this.handlers.get(n)?.add(t)}off(n,t){let a=this.handlers.get(n);a&&(a.delete(t),a.size===0&&this.handlers.delete(n))}emit(n,...t){let a=this.handlers.get(n);if(!a)return;let l=Array.from(a);for(let c of l)try{c(...t)}catch(h){a.delete(c),n!=="error"&&setTimeout(()=>{let y=h instanceof Error?h:new Error(String(h));this.emit("error",y,String(n))},0)}}};var _t=3e4,wt=2,Nt=300,Pt=2e3,xt=new Set([500,502,503,504]);function Ot(e,n){return new Promise((t,a)=>{if(n?.aborted){a(n.reason);return}let l=()=>{clearTimeout(h),n?.removeEventListener("abort",c)},c=()=>{l(),a(n?.reason)},h=setTimeout(()=>{l(),t()},e);n?.addEventListener("abort",c)})}var Ce=3e5,Ft=3e5,vt=Ce+Ft,V=class extends q{constructor(t){super();this.globalHeaders={};this.apiUrl=t.apiUrl||ae,this.getAuthHeadersCallback=t.getAuthHeaders,this.session=t.session??!1,this.caller=t.caller,this.timeout=t.timeout??_t,this.maxRetries=Math.max(0,t.maxRetries??wt),this.fetch=t.fetch??globalThis.fetch.bind(globalThis),this.deploy={endpoint:t.deployEndpoint||T.DEPLOYMENTS,timeout:t.timeout??Ce,buildTimeout:t.timeout??vt}}setGlobalHeaders(t){this.globalHeaders=t}async executeRequest(t,a,l,c=this.timeout){for(let h=0;;h++)try{return await this.attemptOnce(t,a,l,c)}catch(y){let d=m.fromFetchError(y,l);if(h>=this.maxRetries||!this.isRetryable(d,a))throw this.emit("error",d,t),d;this.emit("retry",d,t,h+1);let E=Math.min(Pt,Nt*2**h);try{await Ot(Math.random()*E,a.signal)}catch(f){let A=m.fromFetchError(f,l);throw this.emit("error",A,t),A}}}isRetryable(t,a){if(a.signal?.aborted||t.isType(g.Maintenance)||t.isType(g.Cancelled)||!(t.isNetworkError()||t.status!==void 0&&xt.has(t.status)))return!1;let c=(a.method??"GET").toUpperCase();return c==="GET"||c==="HEAD"?!0:c==="PUT"||c==="DELETE"?!1:this.hasIdempotencyKey(a.headers)}hasIdempotencyKey(t){if(!t)return!1;let a=v.HEADER.toLowerCase();return Object.keys(t).some(l=>l.toLowerCase()===a)}async attemptOnce(t,a,l,c=this.timeout){let h=()=>{};try{let y=await this.mergeHeaders(a.headers),d=this.createTimeoutSignal(a.signal,c);h=d.cleanup;let E={...a,headers:y,credentials:this.session&&!y.Authorization?"include":void 0,signal:d.signal};this.emit("request",t,E);let f=await this.fetch(t,E);if(h(),!f.ok)throw await m.fromHttpResponse(f,l);return this.emit("response",this.safeClone(f),t),{data:await this.parseResponse(this.safeClone(f)),status:f.status}}catch(y){throw h(),m.fromFetchError(y,l)}}async request(t,a,l,c){let{data:h}=await this.executeRequest(`${this.apiUrl}${t}`,a,l,c);return h}async requestWithStatus(t,a,l){return this.executeRequest(`${this.apiUrl}${t}`,a,l)}async mergeHeaders(t={}){return{...this.globalHeaders,...this.caller?{[C.HEADER]:this.caller}:{},...await this.getAuthHeadersCallback(),...t}}createTimeoutSignal(t,a=this.timeout){let l=new AbortController,c=setTimeout(()=>l.abort(new DOMException(`Timed out after ${a}ms`,"TimeoutError")),a),h=t?()=>l.abort(t.reason):void 0;return t&&h&&(t.addEventListener("abort",h),t.aborted&&l.abort(t.reason)),{signal:l.signal,cleanup:()=>{clearTimeout(c),t&&h&&t.removeEventListener("abort",h)}}}safeClone(t){try{return t.clone()}catch{return t}}async parseResponse(t){if(!(t.headers.get("Content-Length")==="0"||t.status===204))return t.json()}};D();D();async function Me(e,n={}){let{labels:t,via:a,password:l,ttl:c,flags:h,captcha:y}=n,d=new FormData,E=[];for(let f of e){if(typeof f.content=="string"||f.content===null||f.content===void 0)throw m.file(`Unsupported file.content type: ${f.path}`,{filePath:f.path});if(!f.md5)throw m.file(`File missing md5 checksum: ${f.path}`,{filePath:f.path});d.append(L.FILES,new File([f.content],f.path,{type:"application/octet-stream"})),E.push(f.md5)}return d.append(L.CHECKSUMS,JSON.stringify(E)),t&&t.length>0&&d.append(L.LABELS,JSON.stringify(t)),a&&d.append(L.VIA,a),l&&d.append(L.PASSWORD,l),c!==void 0&&d.append(L.TTL,String(c)),h?.build&&d.append(L.BUILD,"true"),h?.prerender&&d.append(L.PRERENDER,"true"),h?.spa&&d.append(L.SPA,"true"),y&&d.append(L.CAPTCHA,y),d}D();j();async function $t(){let e=JSON.stringify(Pe,null,2),n;typeof Buffer<"u"?n=Buffer.from(e,"utf-8"):n=new Blob([e],{type:"application/json"});let{md5:t}=await X(n);return{path:N,content:n,size:e.length,md5:t}}async function Ht(e,n){let t=e.find(h=>h.path===K.INDEX_FILE||h.path===`/${K.INDEX_FILE}`);if(!t||t.size>K.MAX_INDEX_BYTES)return!1;let a;if(typeof Buffer<"u"&&Buffer.isBuffer(t.content))a=t.content.toString("utf-8");else if(typeof Blob<"u"&&t.content instanceof Blob)a=await t.content.text();else if(typeof File<"u"&&t.content instanceof File)a=await t.content.text();else return!1;let l={files:e.map(h=>h.path),index:a};return(await n.request(T.SPA_CHECK,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)},"SPA check")).isSPA}async function Ge(e,n,t){if(t.spaDetect===!1||t.spa||t.build||t.prerender||e.some(a=>a.path===N))return e;try{if(await Ht(e,n)){let l=await $t();return[...e,l]}}catch{}return e}D();D();function M(e){if(e==null)return;if(e.length===0)return e;if(e.length>O.MAX_COUNT)throw m.validation(`Maximum ${O.MAX_COUNT} labels allowed`);let n=e.map((a,l)=>{if(typeof a!="string")throw m.validation(`Label at index ${l} must be a string`);let c=a.trim().toLowerCase();if(c.length<O.MIN_LENGTH)throw m.validation(`Labels must be at least ${O.MIN_LENGTH} characters long`);if(c.length>O.MAX_LENGTH)throw m.validation(`Labels must be no more than ${O.MAX_LENGTH} characters long`);if(!ve.test(c))throw m.validation(`Labels must start and end with alphanumeric characters, with optional separators (${O.SEPARATORS}) between segments`);return c}),t=[...new Set(n)];if(t.length!==n.length)throw m.validation("Duplicate labels are not allowed");return t}async function ke(e){let n=e.find(l=>l.path===N||l.path===`/${N}`);if(!n)return;let t=n.content,a=typeof t.text=="function"?await t.text():n.content.toString("utf8");xe(a)}var W={"Content-Type":"application/json"},Bt="sdk";function pe(e){let n=new URLSearchParams;e?.limit!==void 0&&n.set("limit",String(e.limit)),e?.cursor!==void 0&&n.set("cursor",e.cursor);let t=n.toString();return t?`?${t}`:""}function ze(e){let{getApi:n,processInput:t}=e;return{upload:async(a,l={})=>{if(!t)throw m.config("processInput function is not provided.");let c=n(),h=await t(a,l),y=await Ge(h,c,l);if(!y.length)throw m.business("No files to deploy");for(let F of y)if(!F.md5)throw m.file(`MD5 checksum missing for file: ${F.path}`,{filePath:F.path});le(l.password);let d=se(l.ttl),E=Re(l.idempotencyKey),f=M(l.labels);await ke(y);let A=l.build||l.prerender||l.spa?{build:l.build,prerender:l.prerender,spa:l.spa}:void 0,_=await Me(y,{labels:f,via:l.via??Bt,password:l.password,ttl:d,flags:A,captcha:l.captcha});return c.request(c.deploy.endpoint,{method:"POST",body:_,...E?{headers:{[v.HEADER]:E}}:{},signal:l.signal||null},"Deploy",l.build||l.prerender?c.deploy.buildTimeout:c.deploy.timeout)},list:async a=>n().request(`${T.DEPLOYMENTS}${pe(a)}`,{method:"GET"},"List deployments"),get:async a=>n().request(T.DEPLOYMENT(encodeURIComponent(a)),{method:"GET"},"Get deployment"),set:async(a,l)=>n().request(T.DEPLOYMENT(encodeURIComponent(a)),{method:"PATCH",headers:W,body:JSON.stringify({labels:M(l.labels)})},"Update deployment labels"),delete:async a=>n().request(T.DEPLOYMENT(encodeURIComponent(a)),{method:"DELETE"},"Delete deployment")}}function Ke(e){let{getApi:n}=e;return{set:async(t,a={})=>{let l=M(a.labels),c={};a.deployment&&(c.deployment=a.deployment),l!==void 0&&(c.labels=l);let{data:h,status:y}=await n().requestWithStatus(T.DOMAIN(encodeURIComponent(t)),{method:"PUT",headers:W,body:JSON.stringify(c)},"Set domain");return{...h,isCreate:y===201}},list:async t=>n().request(`${T.DOMAINS}${pe(t)}`,{method:"GET"},"List domains"),get:async t=>n().request(T.DOMAIN(encodeURIComponent(t)),{method:"GET"},"Get domain"),delete:async t=>n().request(T.DOMAIN(encodeURIComponent(t)),{method:"DELETE"},"Delete domain"),verify:async t=>n().request(T.DOMAIN_VERIFY(encodeURIComponent(t)),{method:"POST"},"Verify domain"),validate:async t=>n().request(T.DOMAINS_VALIDATE,{method:"POST",headers:W,body:JSON.stringify({domain:t})},"Validate domain"),dns:async t=>n().request(T.DOMAIN_DNS(encodeURIComponent(t)),{method:"GET"},"Get domain DNS"),records:async t=>n().request(T.DOMAIN_RECORDS(encodeURIComponent(t)),{method:"GET"},"Get domain records"),share:async t=>n().request(T.DOMAIN_SHARE(encodeURIComponent(t)),{method:"GET"},"Get domain share")}}function qe(e){let{getApi:n}=e;return{get:async()=>n().request(T.ACCOUNT,{method:"GET"},"Get account")}}function Ve(e){let{getApi:n}=e;return{create:async(t={})=>{let a=se(t.ttl),l=M(t.labels),c={};return a!==void 0&&(c.ttl=a),l!==void 0&&(c.labels=l),n().request(T.TOKENS,{method:"POST",headers:W,body:JSON.stringify(c)},"Create token")},list:async t=>n().request(`${T.TOKENS}${pe(t)}`,{method:"GET"},"List tokens"),get:async t=>n().request(T.TOKEN(encodeURIComponent(t)),{method:"GET"},"Get token"),delete:async t=>n().request(T.TOKEN(encodeURIComponent(t)),{method:"DELETE"},"Delete token")}}var J=class{constructor(n={}){this.initPromise=null;this.platformLimits=null;this.credential=null;if(n={...n,apiUrl:n.apiUrl||void 0,token:n.token||void 0,caller:n.caller||void 0},this.clientOptions=n,n.caller!==void 0&&Oe(n.caller),n.token&&n.session)throw m.config("Provide either `token` or `session`, not both.");typeof n.token=="string"?(oe(n.token),this.credential=n.token):n.token&&(this.credential=n.token),this.http=new V({...n,getAuthHeaders:()=>this.getAuthHeaders()});let t={getApi:()=>this.http};this.deployments=ze({...t,processInput:async(a,l)=>(await this.ensureInitialized(),this.processInput(a,l))}),this.domains=Ke(t),this.account=qe(t),this.tokens=Ve(t)}async ensureInitialized(){return this.initPromise||(this.initPromise=this.fetchPlatformLimits()),this.initPromise}async fetchPlatformLimits(){try{this.platformLimits=await this.http.request(T.LIMITS,{method:"GET"},"Get limits")}catch(n){throw this.initPromise=null,n}}async ping(){return this.http.request(T.PING,{method:"GET"},"Ping")}async deploy(n,t){return this.deployments.upload(n,t)}async whoami(){return this.account.get()}async getLimits(){return this.platformLimits?this.platformLimits:(await this.ensureInitialized(),this.platformLimits)}on(n,t){this.http.on(n,t)}off(n,t){this.http.off(n,t)}setHeaders(n){this.http.setGlobalHeaders(n)}clearHeaders(){this.http.setGlobalHeaders({})}setToken(n){if(this.clientOptions.session)throw m.config("Provide either `token` or `session`, not both.");if(typeof n=="string"){if(!n)throw m.business("Invalid token provided. Token must be a non-empty string.");oe(n),this.credential=n;return}if(typeof n!="function")throw m.business("Invalid token provided. Token must be a non-empty string or a provider function.");this.credential=n}async getAuthHeaders(){if(this.credential===null)return{};let n=typeof this.credential=="function"?await this.credential():this.credential;if(!n)throw m.authentication("Token provider returned no token.");if(typeof n!="string")throw m.authentication("Token provider returned a non-string value.");return{Authorization:`Bearer ${n}`}}};D();D();ce();de();ye();ge();j();Ee();function ur(e,n,t,a=!0){let l=e===1?n:t;return a?`${e} ${l}`:l}Ae();var Te=class extends J{async deploy(n,t){return super.deploy(n,t)}async processInput(n,t){if(!Array.isArray(n)||!n.every(l=>l instanceof File))throw m.business("Invalid input type for browser environment. Expected File[].");if(n.length===0)throw m.business("No files to deploy.");let{processFilesForBrowser:a}=await Promise.resolve().then(()=>(Ae(),it));return a(n,t,this.platformLimits??void 0)}},Mr=Te;export{_e as API_KEY,T as API_PATHS,tn as AUTH_BASE_PATH,Zt as AccountPlan,V as ApiHttp,ne as AuthMethod,C as CALLER,ae as DEFAULT_API,N as DEPLOYMENT_CONFIG_FILENAME,L as DEPLOY_FIELDS,we as DEPLOY_TOKEN,Wt as DeploymentStatus,mt as DeploymentVia,Jt as DomainStatus,g as ErrorType,R as FILE_VALIDATION_STATUS,R as FileValidationStatus,v as IDEMPOTENCY_KEY_CONSTRAINTS,Yt as JUNK_DIRECTORIES,O as LABEL_CONSTRAINTS,ve as LABEL_PATTERN,ln as MY_API_KEY_URL,Ne as OAUTH_TOKEN,rn as OAuthScope,k as PASSWORD_CONSTRAINTS,pn as PUBLIC_DEPLOYMENT_TTL_SECONDS,an as SHIP_ENV,K as SPA_CHECK_CONSTRAINTS,Pe as SPA_DEFAULT_CONFIG,Te as Ship,m as ShipError,G as TTL_CONSTRAINTS,x as TokenKind,Dt as UNBUILT_PROJECT_MARKERS,St as UNSAFE_FILENAME_CHARS,en as WEB_FILE_ACCEPT,Yn as __setTestEnvironment,tr as allValidFilesReady,xe as assertShipJsonSyntax,X as calculateMD5,Rt as classifyToken,qe as createAccountResource,ze as createDeploymentResource,Ke as createDomainResource,Ve as createTokenResource,Mr as default,hn as deserializeLabels,cn as extractSubdomain,Qe as filterJunk,Z as formatFileSize,fn as generateDeploymentUrl,dn as generateDomainUrl,je as getENV,Kt as getValidFiles,z as hasUnbuiltMarker,Le as hasUnsafeChars,Ie as isBlockedExtension,un as isCustomDomain,sn as isDeployment,Fe as isPlatformDomain,be as isShipError,Qt as normalizeVia,Xe as optimizeDeployPaths,ur as pluralize,rt as processFilesForBrowser,nn as readBearerValue,mn as serializeLabels,bt as validateApiKey,on as validateApiUrl,Oe as validateCaller,et as validateDeployFile,Ze as validateDeployPath,It as validateDeployToken,me as validateFileName,er as validateFiles,Re as validateIdempotencyKey,Lt as validateOAuthToken,le as validatePassword,oe as validateToken,se as validateTtl};
2
2
  //# sourceMappingURL=browser.js.map