@stacksjs/ts-cloud 0.9.4 → 0.10.0

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 (251) hide show
  1. package/dist/aws/index.js +1 -1
  2. package/dist/bin/chunk-08c0pzkb.js +1 -0
  3. package/dist/bin/chunk-12210qvj.js +1 -0
  4. package/dist/bin/chunk-1v6bt68w.js +6 -0
  5. package/dist/bin/chunk-35ttwn26.js +70 -0
  6. package/dist/bin/chunk-3r3be05z.js +1 -0
  7. package/dist/bin/chunk-41yqpdv7.js +2 -0
  8. package/dist/bin/chunk-5rv31chh.js +1 -0
  9. package/dist/bin/chunk-6eat8ezk.js +2 -0
  10. package/dist/bin/chunk-6gktf2m2.js +1 -0
  11. package/dist/bin/chunk-6zjy949y.js +141 -0
  12. package/dist/bin/chunk-7wzdaqh6.js +2 -0
  13. package/dist/bin/chunk-80ar3aty.js +1 -0
  14. package/dist/bin/chunk-8rwhsp5b.js +2 -0
  15. package/dist/bin/chunk-936vp7dx.js +44 -0
  16. package/dist/bin/chunk-9px3rg4a.js +4 -0
  17. package/dist/bin/{chunk-rxcvf10f.js → chunk-anm3ae6z.js} +129 -129
  18. package/dist/bin/{chunk-tx0tqq2k.js → chunk-axvr7dwa.js} +6 -6
  19. package/dist/bin/chunk-b0hj9m5e.js +2 -0
  20. package/dist/bin/{chunk-mh0kdzqp.js → chunk-b2ymh8k0.js} +1 -1
  21. package/dist/bin/chunk-b35989e3.js +50 -0
  22. package/dist/bin/chunk-c2b6nk0q.js +37 -0
  23. package/dist/bin/chunk-ckxpgwxw.js +3 -0
  24. package/dist/bin/chunk-d6zzgvtn.js +92 -0
  25. package/dist/bin/chunk-da8zpf82.js +1 -0
  26. package/dist/bin/chunk-ddmjjstg.js +1 -0
  27. package/dist/bin/chunk-dhhz4zyj.js +1 -0
  28. package/dist/bin/chunk-dj9a67c3.js +9 -0
  29. package/dist/bin/chunk-ds1z880f.js +1 -0
  30. package/dist/bin/chunk-dvkj4k6h.js +111 -0
  31. package/dist/bin/chunk-eh40fpvj.js +1 -0
  32. package/dist/bin/chunk-ey9fagrr.js +6 -0
  33. package/dist/bin/chunk-ezftw2q4.js +1 -0
  34. package/dist/bin/chunk-g6a4n3rh.js +1 -0
  35. package/dist/bin/chunk-g90nqfgv.js +585 -0
  36. package/dist/bin/chunk-gs40j75w.js +1 -0
  37. package/dist/bin/chunk-jjjts1vt.js +1 -0
  38. package/dist/bin/{chunk-etrb03mt.js → chunk-jnsbzqzz.js} +30 -30
  39. package/dist/bin/chunk-jnx4jgw8.js +1 -0
  40. package/dist/bin/chunk-jt1tndm2.js +3 -0
  41. package/dist/bin/chunk-kybdb0ws.js +2 -0
  42. package/dist/bin/chunk-m3nqw76h.js +3 -0
  43. package/dist/bin/chunk-mn6j22zn.js +6 -0
  44. package/dist/bin/chunk-nb0yjkv5.js +2 -0
  45. package/dist/bin/chunk-pjpa4x52.js +2 -0
  46. package/dist/bin/chunk-pkgkfe6s.js +2 -0
  47. package/dist/bin/chunk-pnz5hk8n.js +60 -0
  48. package/dist/bin/chunk-q46zr2tv.js +1 -0
  49. package/dist/bin/chunk-qtdngvs8.js +1 -0
  50. package/dist/bin/chunk-sbejksrh.js +2 -0
  51. package/dist/bin/chunk-svyd4v6c.js +34 -0
  52. package/dist/bin/chunk-tna7ay8d.js +1 -0
  53. package/dist/bin/chunk-tp4c2mv1.js +1 -0
  54. package/dist/bin/chunk-w5d6tr2x.js +1 -0
  55. package/dist/bin/chunk-wewcjam5.js +1 -0
  56. package/dist/bin/chunk-xv4bscrm.js +1 -0
  57. package/dist/bin/chunk-y9eyc5pw.js +1 -0
  58. package/dist/bin/chunk-y9f8649w.js +512 -0
  59. package/dist/bin/cli.js +428 -418
  60. package/dist/bin/dashboard-server.js +1 -1
  61. package/dist/{chunk-dskvqt67.js → chunk-06jk7ba9.js} +127 -127
  62. package/dist/chunk-0e16qt6k.js +5 -0
  63. package/dist/chunk-13hxhzaz.js +34 -0
  64. package/dist/chunk-2p89vt3b.js +2 -0
  65. package/dist/{chunk-xt3s24vr.js → chunk-77t2ctwn.js} +1 -1
  66. package/dist/chunk-88z37ey4.js +114 -0
  67. package/dist/chunk-8c4715hz.js +2 -0
  68. package/dist/chunk-9a22225r.js +60 -0
  69. package/dist/chunk-as6by62d.js +1 -0
  70. package/dist/chunk-cd0zpxhf.js +44 -0
  71. package/dist/chunk-cp54a0qn.js +6 -0
  72. package/dist/chunk-d67xbk4v.js +141 -0
  73. package/dist/chunk-dckz9xve.js +2 -0
  74. package/dist/chunk-e1666vjv.js +2 -0
  75. package/dist/chunk-hhdx5k96.js +442 -0
  76. package/dist/{chunk-gahsdmxf.js → chunk-kv2ztkp4.js} +52 -52
  77. package/dist/chunk-nrz6zypg.js +1 -0
  78. package/dist/chunk-q816js1y.js +1 -0
  79. package/dist/chunk-qh9ep11z.js +704 -0
  80. package/dist/chunk-rg720cqg.js +1 -0
  81. package/dist/chunk-snak8s7m.js +92 -0
  82. package/dist/chunk-vq737g82.js +1 -0
  83. package/dist/chunk-xd6w0c11.js +50 -0
  84. package/dist/chunk-xtwjt370.js +37 -0
  85. package/dist/chunk-y26yh5zp.js +1 -0
  86. package/dist/chunk-zmxffmmq.js +4 -0
  87. package/dist/deploy/attach-credentials.d.ts +4 -8
  88. package/dist/deploy/index.js +1 -1
  89. package/dist/dns/cloudflare.d.ts +27 -0
  90. package/dist/dns/godaddy.d.ts +18 -1
  91. package/dist/dns/index.d.ts +2 -0
  92. package/dist/dns/index.js +1 -1
  93. package/dist/dns/zone-migration.d.ts +92 -0
  94. package/dist/dns/zone-migration.test.d.ts +1 -0
  95. package/dist/drivers/hetzner/driver.d.ts +8 -1
  96. package/dist/drivers/index.js +1 -1
  97. package/dist/drivers/shared/compute-provision.d.ts +14 -2
  98. package/dist/drivers/shared/db-provision.d.ts +3 -2
  99. package/dist/drivers/shared/mail-provision.d.ts +116 -0
  100. package/dist/drivers/shared/mail-provision.test.d.ts +1 -0
  101. package/dist/drivers/shared/managed-services-probe.d.ts +47 -0
  102. package/dist/drivers/shared/managed-services-probe.test.d.ts +1 -0
  103. package/dist/drivers/shared/package-manager.d.ts +1 -0
  104. package/dist/drivers/shared/remote-failure.d.ts +21 -0
  105. package/dist/drivers/shared/remote-failure.test.d.ts +1 -0
  106. package/dist/drivers/shared/sqlite-shared-path.d.ts +50 -0
  107. package/dist/drivers/shared/sqlite-shared-path.test.d.ts +1 -0
  108. package/dist/index.d.ts +2 -0
  109. package/dist/index.js +89 -89
  110. package/dist/operations/plan.d.ts +136 -0
  111. package/dist/operations/plan.test.d.ts +1 -0
  112. package/dist/operations/server-rename.d.ts +84 -0
  113. package/dist/operations/server-rename.test.d.ts +1 -0
  114. package/dist/operations/site-move.d.ts +263 -0
  115. package/dist/operations/site-move.test.d.ts +1 -0
  116. package/dist/protection/index.js +1 -1
  117. package/dist/push/index.js +1 -1
  118. package/dist/spend/index.js +1 -1
  119. package/dist/ui/404.html +1 -1
  120. package/dist/ui/accept-invitation.html +1 -1
  121. package/dist/ui/access-denied.html +1 -1
  122. package/dist/ui/account/automation.html +6 -6
  123. package/dist/ui/account/security.html +1 -1
  124. package/dist/ui/applications/compose.html +5 -5
  125. package/dist/ui/applications/new.html +2 -2
  126. package/dist/ui/data/backups.html +80 -80
  127. package/dist/ui/data/services.html +78 -78
  128. package/dist/ui/data/volumes.html +50 -50
  129. package/dist/ui/index.html +50 -50
  130. package/dist/ui/infrastructure/topology.html +118 -118
  131. package/dist/ui/integrations.html +1 -1
  132. package/dist/ui/operations/alerts.html +47 -47
  133. package/dist/ui/operations/configuration.html +5 -5
  134. package/dist/ui/operations/jobs.html +76 -76
  135. package/dist/ui/operations/maintenance.html +6 -6
  136. package/dist/ui/operations/observability.html +82 -82
  137. package/dist/ui/operations/previews.html +6 -6
  138. package/dist/ui/operations/queue.html +6 -6
  139. package/dist/ui/operations/regions.html +6 -6
  140. package/dist/ui/operations/releases.html +6 -6
  141. package/dist/ui/operations/spend.html +54 -54
  142. package/dist/ui/operations/workloads.html +104 -104
  143. package/dist/ui/security.html +2 -2
  144. package/dist/ui/server/actions.html +56 -56
  145. package/dist/ui/server/activity.html +1 -1
  146. package/dist/ui/server/capacity.html +6 -6
  147. package/dist/ui/server/database.html +106 -106
  148. package/dist/ui/server/deployments.html +50 -50
  149. package/dist/ui/server/diagnostics.html +2 -2
  150. package/dist/ui/server/firewall.html +76 -76
  151. package/dist/ui/server/fleet.html +33 -33
  152. package/dist/ui/server/logs.html +23 -23
  153. package/dist/ui/server/metrics.html +112 -112
  154. package/dist/ui/server/security.html +2 -2
  155. package/dist/ui/server/services.html +27 -27
  156. package/dist/ui/server/sites.html +120 -120
  157. package/dist/ui/server/ssh-keys.html +52 -52
  158. package/dist/ui/server/team.html +144 -144
  159. package/dist/ui/server/terminal.html +15 -15
  160. package/dist/ui/serverless/alarms.html +52 -52
  161. package/dist/ui/serverless/assets.html +27 -27
  162. package/dist/ui/serverless/cost.html +2 -2
  163. package/dist/ui/serverless/data.html +36 -36
  164. package/dist/ui/serverless/deployments.html +26 -26
  165. package/dist/ui/serverless/firewall.html +1 -1
  166. package/dist/ui/serverless/functions.html +39 -39
  167. package/dist/ui/serverless/logs.html +24 -24
  168. package/dist/ui/serverless/metrics.html +2 -2
  169. package/dist/ui/serverless/queues.html +48 -48
  170. package/dist/ui/serverless/secrets.html +52 -52
  171. package/dist/ui/serverless/traces.html +6 -6
  172. package/dist/ui/serverless.html +54 -54
  173. package/dist/ui-src/src/charts.ts +17499 -12662
  174. package/dist/ui-src/src/topology.ts +2 -2
  175. package/package.json +3 -3
  176. package/dist/bin/chunk-00kg80qg.js +0 -1
  177. package/dist/bin/chunk-09nwf2gy.js +0 -34
  178. package/dist/bin/chunk-1k5kszjp.js +0 -111
  179. package/dist/bin/chunk-21e0mavm.js +0 -1
  180. package/dist/bin/chunk-271gk1n2.js +0 -6
  181. package/dist/bin/chunk-2empps47.js +0 -2
  182. package/dist/bin/chunk-38pq971s.js +0 -2
  183. package/dist/bin/chunk-3gykfyq4.js +0 -37
  184. package/dist/bin/chunk-3vqfexc4.js +0 -70
  185. package/dist/bin/chunk-4vrqm9h0.js +0 -2
  186. package/dist/bin/chunk-598yf4bs.js +0 -1
  187. package/dist/bin/chunk-5ectjq0b.js +0 -1
  188. package/dist/bin/chunk-5erkxpt7.js +0 -512
  189. package/dist/bin/chunk-5mrtzemj.js +0 -1
  190. package/dist/bin/chunk-5n9fmabb.js +0 -1
  191. package/dist/bin/chunk-9knpg30y.js +0 -1
  192. package/dist/bin/chunk-9pvsff8g.js +0 -1
  193. package/dist/bin/chunk-ax9mr6wm.js +0 -44
  194. package/dist/bin/chunk-axhnkn5g.js +0 -2
  195. package/dist/bin/chunk-c1vcdgvr.js +0 -1
  196. package/dist/bin/chunk-ctd2vg9w.js +0 -2
  197. package/dist/bin/chunk-dbgffky8.js +0 -1
  198. package/dist/bin/chunk-ddk4rt4j.js +0 -6
  199. package/dist/bin/chunk-dwr30vbv.js +0 -1
  200. package/dist/bin/chunk-e0rkrq70.js +0 -1
  201. package/dist/bin/chunk-e3xrwh9z.js +0 -1
  202. package/dist/bin/chunk-fhc6ntvd.js +0 -2
  203. package/dist/bin/chunk-fpm59y25.js +0 -6
  204. package/dist/bin/chunk-fvbxvq6b.js +0 -1
  205. package/dist/bin/chunk-fy8j3y8p.js +0 -92
  206. package/dist/bin/chunk-fz21b57w.js +0 -1
  207. package/dist/bin/chunk-gavvf0pg.js +0 -141
  208. package/dist/bin/chunk-ggn7ax8p.js +0 -4
  209. package/dist/bin/chunk-gpe2prkm.js +0 -1
  210. package/dist/bin/chunk-h5pa5men.js +0 -2
  211. package/dist/bin/chunk-hm08xdxf.js +0 -2
  212. package/dist/bin/chunk-hzgz13nf.js +0 -1
  213. package/dist/bin/chunk-j703btc5.js +0 -50
  214. package/dist/bin/chunk-k9t9wvms.js +0 -1
  215. package/dist/bin/chunk-m669wtgr.js +0 -1
  216. package/dist/bin/chunk-m7dgskt1.js +0 -1
  217. package/dist/bin/chunk-mr0atd2s.js +0 -2
  218. package/dist/bin/chunk-mz0wbbsj.js +0 -3
  219. package/dist/bin/chunk-ngcyftm2.js +0 -1
  220. package/dist/bin/chunk-p66ptpmr.js +0 -2
  221. package/dist/bin/chunk-qk9qgepa.js +0 -1
  222. package/dist/bin/chunk-rytk89az.js +0 -60
  223. package/dist/bin/chunk-tga3hhwk.js +0 -6
  224. package/dist/bin/chunk-vek8a0w6.js +0 -1
  225. package/dist/bin/chunk-vm3q5gf2.js +0 -3
  226. package/dist/bin/chunk-y7s5r8y6.js +0 -3
  227. package/dist/bin/chunk-yv9sth30.js +0 -1
  228. package/dist/bin/chunk-zmegvjp8.js +0 -581
  229. package/dist/chunk-0ccta6z6.js +0 -6
  230. package/dist/chunk-0k1cs6pp.js +0 -1
  231. package/dist/chunk-1egjn203.js +0 -704
  232. package/dist/chunk-2wx29qga.js +0 -5
  233. package/dist/chunk-5m5rqmv7.js +0 -1
  234. package/dist/chunk-8ea5022g.js +0 -114
  235. package/dist/chunk-8xqn3c0w.js +0 -2
  236. package/dist/chunk-b4esxhmw.js +0 -2
  237. package/dist/chunk-b8e5wzwn.js +0 -44
  238. package/dist/chunk-bggt4n6e.js +0 -2
  239. package/dist/chunk-cwkg37rs.js +0 -37
  240. package/dist/chunk-gnv3r2jg.js +0 -1
  241. package/dist/chunk-hg3c48cp.js +0 -34
  242. package/dist/chunk-m5azeva3.js +0 -2
  243. package/dist/chunk-r3qf56b3.js +0 -92
  244. package/dist/chunk-sdqa9ghv.js +0 -141
  245. package/dist/chunk-svrvvcm7.js +0 -1
  246. package/dist/chunk-v0p3hpc3.js +0 -60
  247. package/dist/chunk-wdzjbecg.js +0 -50
  248. package/dist/chunk-ww8k3g7j.js +0 -1
  249. package/dist/chunk-xmqfc62w.js +0 -1
  250. package/dist/chunk-xrebj679.js +0 -435
  251. package/dist/chunk-y21zk0pn.js +0 -4
@@ -1,114 +0,0 @@
1
- import{pf as z1}from"./chunk-hg3c48cp.js";import{Qh as Z1,Rh as w}from"./chunk-r3qf56b3.js";import{Th as W}from"./chunk-0ccta6z6.js";import{qt as O1}from"./chunk-xt3s24vr.js";class S1{region;client;constructor(J="us-east-1",X=new W){this.region=J;this.client=X}request(J,X){return this.client.request({service:"backup",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`CryoControllerFrontendService.${J}`},body:JSON.stringify(X)})}startBackupJob(J){return this.request("StartBackupJob",J)}describeBackupJob(J){return this.request("DescribeBackupJob",{BackupJobId:J})}startRestoreJob(J){return this.request("StartRestoreJob",J)}describeRestoreJob(J){return this.request("DescribeRestoreJob",{RestoreJobId:J})}deleteRecoveryPoint(J,X){return this.request("DeleteRecoveryPoint",{BackupVaultName:J,RecoveryPointArn:X})}}function j1(J,X){if(!X)return J;return J.startsWith(X)?J.slice(X.length):J}function r(J,X,G){let $=j1(J,X);return`${G??""}${$}`}function o(J,X,G){if(G&&G.some(($)=>J.startsWith($)))return!1;if(X&&X.length>0)return X.some(($)=>J.startsWith($));return!0}async function q1(J,X,G){let $=0,Y=[],Z=Math.max(1,Math.min(X,J.length||1));for(let L=0;L<Z;L++)Y.push((async()=>{while(!0){let O=$++;if(O>=J.length)return;await G(J[O],O)}})());await Promise.all(Y)}function e(J){if(J.client)return J.client;return a({provider:J.provider,region:J.region,endpoint:J.endpoint,forcePathStyle:J.forcePathStyle,credentials:J.credentials})}async function q0(J){let X=J.concurrency??8,G=e(J.from),$=e(J.to),Y=await G.listAllObjects({bucket:J.from.bucket,prefix:J.from.prefix}),Z={copied:0,skipped:0,excluded:0,bytesCopied:0,errors:[],excludedKeys:[],deleted:[]},L=[];for(let _ of Y){if(!o(_.Key,J.include,J.exclude)){Z.excluded++,Z.excludedKeys.push(_.Key);continue}L.push({source:_,destKey:r(_.Key,J.from.prefix,J.to.prefix)})}if(J.dryRun){Z.plan=L.map(({source:z,destKey:F})=>({key:z.Key,destKey:F,size:z.Size}));let _=Y.length,E=0;for(let z of Y){E++;let F=!o(z.Key,J.include,J.exclude);J.onProgress?.({key:z.Key,destKey:F?"":r(z.Key,J.from.prefix,J.to.prefix),size:z.Size,action:F?"excluded":"planned",index:E,total:_})}return Z}let O=L.length,Q=0;await q1(L,X,async({source:_,destKey:E})=>{let z=++Q;try{if(!J.force){let U=await $.headObject(J.to.bucket,E);if(U&&U.ContentLength===_.Size){Z.skipped++,J.onProgress?.({key:_.Key,destKey:E,size:_.Size,action:"skipped",index:z,total:O});return}}let{body:F,contentType:R}=await G.getObjectBytes(J.from.bucket,_.Key);await $.putObject({bucket:J.to.bucket,key:E,body:F,contentType:R}),Z.copied++,Z.bytesCopied+=F.byteLength,J.onProgress?.({key:_.Key,destKey:E,size:_.Size,action:"copied",index:z,total:O})}catch(F){Z.errors.push({key:_.Key,message:F?.message??String(F)}),J.onProgress?.({key:_.Key,destKey:E,size:_.Size,action:"error",index:z,total:O})}});let V=new Set(L.map((_)=>_.destKey));if(J.deleteExtraneous){let E=(await $.listAllObjects({bucket:J.to.bucket,prefix:J.to.prefix})).filter((z)=>!V.has(z.Key)).map((z)=>z.Key);for(let z of E)try{await $.deleteObject(J.to.bucket,z),Z.deleted.push(z)}catch(F){Z.errors.push({key:z,message:`delete failed: ${F?.message??String(F)}`})}}if(J.verify){let _=await $.listAllObjects({bucket:J.to.bucket,prefix:J.to.prefix}),E=new Map(_.map((U)=>[U.Key,U.Size])),z=[],F=[],R=0;for(let{source:U,destKey:B}of L){if(!E.has(B)){z.push(B);continue}let T=E.get(B);if(T!==U.Size){F.push({key:B,expected:U.Size,actual:T});continue}R++}Z.verification={ok:z.length===0&&F.length===0,matched:R,missing:z,sizeMismatches:F}}return Z}var P1={aws:"us-east-1",backblaze:"us-west-004",hetzner:"fsn1"};function C1(J,X){switch(J){case"backblaze":return`s3.${X}.backblazeb2.com`;case"hetzner":return`${X}.your-objectstorage.com`;case"aws":default:return}}function H(...J){for(let X of J){let G=process.env[X];if(G)return G}return}function h1(J,X){if(X?.accessKeyId&&X.secretAccessKey)return X;let G,$;if(J==="backblaze")G=H("B2_APPLICATION_KEY_ID","B2_KEY_ID","S3_ACCESS_KEY_ID","AWS_ACCESS_KEY_ID"),$=H("B2_APPLICATION_KEY","B2_SECRET_KEY","S3_SECRET_ACCESS_KEY","AWS_SECRET_ACCESS_KEY");else if(J==="hetzner")G=H("HETZNER_S3_ACCESS_KEY","HETZNER_ACCESS_KEY","S3_ACCESS_KEY_ID","AWS_ACCESS_KEY_ID"),$=H("HETZNER_S3_SECRET_KEY","HETZNER_SECRET_KEY","S3_SECRET_ACCESS_KEY","AWS_SECRET_ACCESS_KEY");else G=H("S3_ACCESS_KEY_ID"),$=H("S3_SECRET_ACCESS_KEY");if(G&&$)return{accessKeyId:G,secretAccessKey:$,sessionToken:H("AWS_SESSION_TOKEN")};return}function I1(J={}){let X=J.provider||H("OBJECT_STORAGE_PROVIDER","STORAGE_PROVIDER")||"aws",G=J.region||(X==="backblaze"?H("B2_REGION"):void 0)||(X==="hetzner"?H("HETZNER_S3_REGION","HETZNER_REGION"):void 0)||H("S3_REGION","AWS_REGION","AWS_DEFAULT_REGION")||P1[X],$=J.endpoint||H("S3_ENDPOINT")||C1(X,G),Y=J.forcePathStyle??H("S3_FORCE_PATH_STYLE")==="true",Z=h1(X,J.credentials),L=(O)=>{let Q=$||`s3.${G}.amazonaws.com`;return Y?`https://${Q}/${O}`:`https://${O}.${Q}`};return{provider:X,region:G,endpoint:$,forcePathStyle:Y,credentials:Z,profile:J.profile,publicBaseUrl:L}}function a(J={}){let X=I1(J),G={endpoint:X.endpoint,forcePathStyle:X.forcePathStyle,credentials:X.credentials};return new w(X.region,X.profile,G)}import{createHash as v1}from"node:crypto";import{existsSync as k1,mkdirSync as x1,readdirSync as x0,readFileSync as b1,rmSync as b0,writeFileSync as f1}from"node:fs";import{homedir as y1}from"node:os";import{join as j}from"node:path";var s=1,J1=3600000,g1=24*J1,c1=J1,u1=30*g1;function d1(){let J=process.env.XDG_CACHE_HOME;return j(J&&J.trim()?J:j(y1(),".cache"),"ts-cloud","cost-explorer")}function X1(J){return j(d1(),J??"__default__")}function G1(J){let X={s:J.start,e:J.end,g:J.granularity,m:[...J.metrics].sort(),gb:[...J.groupBy].map((G)=>`${G.Type}:${G.Key}`).sort(),f:J.filter??null};return v1("sha256").update(JSON.stringify(X)).digest("hex").slice(0,24)}function l1(J,X){let G=Date.parse(`${X}T00:00:00Z`);if(Number.isNaN(G))return!1;let $=new Date,Y=Date.UTC($.getUTCFullYear(),$.getUTCMonth(),1);return G<=Y}function m1(J){return l1(J.start,J.end)?u1:c1}function $1(J,X){let G=j(X1(J),`${G1(X)}.json`);if(!k1(G))return null;let $;try{$=JSON.parse(b1(G,"utf-8"))}catch{return null}if($.schema!==s)return null;let Y=Date.now()-$.savedAt;if(Y<0||Y>m1(X))return null;return{response:$.response,ageSeconds:Math.floor(Y/1000)}}function Y1(J,X,G){let $=X1(J);x1($,{recursive:!0});let Y={schema:s,savedAt:Date.now(),key:X,response:G};f1(j($,`${G1(X)}.json`),JSON.stringify(Y))}class p1{client;profile;useCache;lastCacheAgeSeconds=null;constructor(J,X){this.profile=J,this.useCache=X?.useCache??!0,this.client=new W(Z1(J))}async getCostByService(J){return(await this.getCostByDimension({...J,dimension:"SERVICE"})).map((G)=>({service:G.key,amount:G.amount,unit:G.unit}))}async getCostByDimension(J){let{start:X,end:G,dimension:$,granularity:Y="MONTHLY",filter:Z}=J,L=["UnblendedCost"],O=[{Type:"DIMENSION",Key:$}],Q={start:X,end:G,granularity:Y,metrics:L,groupBy:O,filter:Z};if(this.useCache){let z=$1(this.profile,Q);if(z)return this.lastCacheAgeSeconds=z.ageSeconds,z.response}this.lastCacheAgeSeconds=null;let V=new Map,_;do{let z={TimePeriod:{Start:X,End:G},Granularity:Y,Metrics:L,GroupBy:O};if(Z)z.Filter=Z;if(_)z.NextPageToken=_;let F=await this.client.request({service:"ce",region:"us-east-1",method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"AWSInsightsIndexService.GetCostAndUsage"},body:JSON.stringify(z)});for(let R of F?.ResultsByTime??[])for(let U of R?.Groups??[]){let B=U.Keys?.[0]??"Unknown",T=Number.parseFloat(U.Metrics?.UnblendedCost?.Amount??"0"),M=U.Metrics?.UnblendedCost?.Unit??"USD",A=V.get(B);V.set(B,{key:B,amount:(A?.amount??0)+T,unit:M})}_=F?.NextPageToken||void 0}while(_);let E=[...V.values()].filter((z)=>z.amount>0).sort((z,F)=>F.amount-z.amount);if(this.useCache)Y1(this.profile,Q,E);return E}async getDailyTotals(J){return((await this.client.request({service:"ce",region:"us-east-1",method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"AWSInsightsIndexService.GetCostAndUsage"},body:JSON.stringify({TimePeriod:{Start:J.start,End:J.end},Granularity:"DAILY",Metrics:["UnblendedCost"]})}))?.ResultsByTime??[]).map(($)=>Number.parseFloat($.Total?.UnblendedCost?.Amount??"0"))}}class n1{client;region="us-east-1";constructor(){this.client=new W}async getDomainDetail(J){let X=JSON.stringify({DomainName:J.DomainName}),G=await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.GetDomainDetail"},body:X});return this.parseDomainDetail(G)}async updateDomainNameservers(J){let X=JSON.stringify({DomainName:J.DomainName,Nameservers:J.Nameservers.map(($)=>({Name:$.Name,...$.GlueIps&&{GlueIps:$.GlueIps}}))});return{OperationId:(await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.UpdateDomainNameservers"},body:X})).OperationId||""}}async listDomains(J){let X={};if(J?.Marker)X.Marker=J.Marker;if(J?.MaxItems)X.MaxItems=J.MaxItems;if(J?.SortCondition)X.SortCondition=J.SortCondition;let G=JSON.stringify(X),$=await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.ListDomains"},body:G});return{Domains:$.Domains||[],NextPageMarker:$.NextPageMarker}}async checkDomainAvailability(J){let X=JSON.stringify({DomainName:J.DomainName});return{Availability:(await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.CheckDomainAvailability"},body:X})).Availability||"DONT_KNOW"}}async getDomainPrice(J){let X=J.DomainName.split(".").slice(1).join("."),G=JSON.stringify({Tld:X}),Y=(await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.ListPrices"},body:G})).Prices?.[0]||{};return{RegistrationPrice:Y.RegistrationPrice?{Price:Y.RegistrationPrice.Price,Currency:Y.RegistrationPrice.Currency}:void 0,RenewalPrice:Y.RenewalPrice?{Price:Y.RenewalPrice.Price,Currency:Y.RenewalPrice.Currency}:void 0,TransferPrice:Y.TransferPrice?{Price:Y.TransferPrice.Price,Currency:Y.TransferPrice.Currency}:void 0}}async registerDomain(J){let X=JSON.stringify({DomainName:J.DomainName,DurationInYears:J.DurationInYears,AutoRenew:J.AutoRenew??!0,AdminContact:J.AdminContact,RegistrantContact:J.RegistrantContact,TechContact:J.TechContact,PrivacyProtectAdminContact:J.PrivacyProtectAdminContact??!0,PrivacyProtectRegistrantContact:J.PrivacyProtectRegistrantContact??!0,PrivacyProtectTechContact:J.PrivacyProtectTechContact??!0});return{OperationId:(await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.RegisterDomain"},body:X})).OperationId||""}}async getOperationDetail(J){let X=JSON.stringify({OperationId:J.OperationId}),G=await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.GetOperationDetail"},body:X});return{OperationId:G.OperationId||"",Status:G.Status||"SUBMITTED",Message:G.Message,DomainName:G.DomainName,Type:G.Type,SubmittedDate:G.SubmittedDate}}parseDomainDetail(J){return{DomainName:J.DomainName||"",Nameservers:J.Nameservers?.map((X)=>({Name:X.Name,GlueIps:X.GlueIps})),AutoRenew:J.AutoRenew,AdminContact:J.AdminContact,RegistrantContact:J.RegistrantContact,TechContact:J.TechContact,AdminPrivacy:J.AdminPrivacy,RegistrantPrivacy:J.RegistrantPrivacy,TechPrivacy:J.TechPrivacy,RegistrarName:J.RegistrarName,WhoIsServer:J.WhoIsServer,RegistrarUrl:J.RegistrarUrl,AbuseContactEmail:J.AbuseContactEmail,AbuseContactPhone:J.AbuseContactPhone,RegistryDomainId:J.RegistryDomainId,CreationDate:J.CreationDate,UpdatedDate:J.UpdatedDate,ExpirationDate:J.ExpirationDate,Reseller:J.Reseller,DnsSec:J.DnsSec,StatusList:J.StatusList}}}class i1{client;region;constructor(J="us-east-1",X){this.region=J,this.client=new W(void 0,{profile:X})}async describeServices(J){let X={cluster:J.cluster,services:J.services};return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DescribeServices","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async listServices(J,X={}){let G={cluster:J,...X};return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.ListServices","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(G)})}async listTasks(J,X,G={}){let $={cluster:J,...G};if(X)$.serviceName=X;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.ListTasks","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify($)})}async describeTasks(J,X){let G={cluster:J,tasks:X};return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DescribeTasks","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(G)})}async updateService(J){let X={cluster:J.cluster,service:J.service};if(J.forceNewDeployment!==void 0)X.forceNewDeployment=J.forceNewDeployment;if(J.desiredCount!==void 0)X.desiredCount=J.desiredCount;if(J.taskDefinition)X.taskDefinition=J.taskDefinition;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.UpdateService","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async createService(J){let X={cluster:J.cluster,serviceName:J.serviceName,taskDefinition:J.taskDefinition,desiredCount:J.desiredCount};if(J.launchType)X.launchType=J.launchType;if(J.networkConfiguration)X.networkConfiguration=J.networkConfiguration;if(J.loadBalancers)X.loadBalancers=J.loadBalancers;if(J.healthCheckGracePeriodSeconds!==void 0)X.healthCheckGracePeriodSeconds=J.healthCheckGracePeriodSeconds;if(J.deploymentConfiguration)X.deploymentConfiguration=J.deploymentConfiguration;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.CreateService","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async deleteService(J){let X={cluster:J.cluster,service:J.service};if(J.force!==void 0)X.force=J.force;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DeleteService","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async listClusters(J={}){return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.ListClusters","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(J)})}async describeClusters(J){let X={clusters:J,include:["ATTACHMENTS","CONFIGURATIONS","SETTINGS","STATISTICS","TAGS"]};return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DescribeClusters","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async stopTask(J){let X={cluster:J.cluster,task:J.task};if(J.reason)X.reason=J.reason;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.StopTask","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async runTask(J){let X={cluster:J.cluster,taskDefinition:J.taskDefinition};if(J.count!==void 0)X.count=J.count;if(J.launchType)X.launchType=J.launchType;if(J.networkConfiguration)X.networkConfiguration=J.networkConfiguration;if(J.overrides)X.overrides=J.overrides;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.RunTask","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async registerTaskDefinition(J){return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.RegisterTaskDefinition","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(J)})}async deregisterTaskDefinition(J){return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DeregisterTaskDefinition","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({taskDefinition:J})})}async describeTaskDefinition(J){return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DescribeTaskDefinition","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({taskDefinition:J,include:["TAGS"]})})}async listTaskDefinitionFamilies(J){let X={};if(J?.familyPrefix)X.familyPrefix=J.familyPrefix;if(J?.status)X.status=J.status;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.ListTaskDefinitionFamilies","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async waitForServiceStable(J,X,G=40,$=15000){for(let Y=0;Y<G;Y++){let L=(await this.describeServices({cluster:J,services:[X]})).services?.[0];if(L){let O=L.deployments?.find((Q)=>Q.status==="PRIMARY");if(O&&O.runningCount===O.desiredCount&&L.deployments?.length===1)return!0}await new Promise((O)=>setTimeout(O,$))}return!1}async forceNewDeployment(J,X){return this.updateService({cluster:J,service:X,forceNewDeployment:!0})}async scaleService(J,X,G){return this.updateService({cluster:J,service:X,desiredCount:G})}}class t1{client;region;constructor(J="us-east-1",X){this.region=J,this.client=new W(void 0,{profile:X})}async getCallerIdentity(){let J=await this.client.request({service:"sts",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:"Action=GetCallerIdentity&Version=2011-06-15"});if(typeof J==="string"){let G=J.match(/<Account>(\d+)<\/Account>/),$=J.match(/<UserId>([^<]+)<\/UserId>/),Y=J.match(/<Arn>([^<]+)<\/Arn>/);return{Account:G?.[1],UserId:$?.[1],Arn:Y?.[1]}}let X=J?.GetCallerIdentityResponse?.GetCallerIdentityResult||J?.GetCallerIdentityResult;if(X)return{Account:String(X.Account),UserId:X.UserId,Arn:X.Arn};if(J?.Account)return{Account:String(J.Account),UserId:J.UserId,Arn:J.Arn};return{Account:void 0,UserId:void 0,Arn:void 0}}}class r1{client;region;constructor(J="us-east-1",X){this.region=J,this.client=new W}async createSecret(J){let X={Name:J.Name};if(J.Description)X.Description=J.Description;if(J.KmsKeyId)X.KmsKeyId=J.KmsKeyId;if(J.SecretBinary)X.SecretBinary=J.SecretBinary;if(J.SecretString)X.SecretString=J.SecretString;if(J.Tags&&J.Tags.length>0)X.Tags=J.Tags;if(J.AddReplicaRegions&&J.AddReplicaRegions.length>0)X.AddReplicaRegions=J.AddReplicaRegions;if(J.ForceOverwriteReplicaSecret!==void 0)X.ForceOverwriteReplicaSecret=J.ForceOverwriteReplicaSecret;X.ClientRequestToken=J.ClientRequestToken||crypto.randomUUID();let G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.CreateSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ARN:G.ARN,Name:G.Name,VersionId:G.VersionId,ReplicationStatus:G.ReplicationStatus}}async updateSecret(J){let X={SecretId:J.SecretId};if(J.Description)X.Description=J.Description;if(J.KmsKeyId)X.KmsKeyId=J.KmsKeyId;if(J.SecretBinary)X.SecretBinary=J.SecretBinary;if(J.SecretString)X.SecretString=J.SecretString;let G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.UpdateSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ARN:G.ARN,Name:G.Name,VersionId:G.VersionId}}async putSecretValue(J){let X={SecretId:J.SecretId};if(J.SecretBinary)X.SecretBinary=J.SecretBinary;if(J.SecretString)X.SecretString=J.SecretString;if(J.VersionStages&&J.VersionStages.length>0)X.VersionStages=J.VersionStages;if(J.ClientRequestToken)X.ClientRequestToken=J.ClientRequestToken;let G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.PutSecretValue","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ARN:G.ARN,Name:G.Name,VersionId:G.VersionId,VersionStages:G.VersionStages}}async getSecretValue(J){let X={SecretId:J.SecretId};if(J.VersionId)X.VersionId=J.VersionId;if(J.VersionStage)X.VersionStage=J.VersionStage;let G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.GetSecretValue","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ARN:G.ARN,Name:G.Name,VersionId:G.VersionId,SecretBinary:G.SecretBinary,SecretString:G.SecretString,VersionStages:G.VersionStages,CreatedDate:G.CreatedDate}}async describeSecret(J){let X={SecretId:J},G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.DescribeSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return this.parseSecret(G)}async listSecrets(J){let X={};if(J?.MaxResults)X.MaxResults=J.MaxResults;if(J?.NextToken)X.NextToken=J.NextToken;if(J?.Filters&&J.Filters.length>0)X.Filters=J.Filters;if(J?.SortOrder)X.SortOrder=J.SortOrder;let G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.ListSecrets","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{SecretList:G.SecretList?.map(($)=>this.parseSecret($)),NextToken:G.NextToken}}async deleteSecret(J){let X={SecretId:J.SecretId};if(J.RecoveryWindowInDays!==void 0)X.RecoveryWindowInDays=J.RecoveryWindowInDays;if(J.ForceDeleteWithoutRecovery!==void 0)X.ForceDeleteWithoutRecovery=J.ForceDeleteWithoutRecovery;let G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.DeleteSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ARN:G.ARN,Name:G.Name,DeletionDate:G.DeletionDate}}async restoreSecret(J){let X={SecretId:J},G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.RestoreSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ARN:G.ARN,Name:G.Name}}async rotateSecret(J){let X={SecretId:J.SecretId};if(J.ClientRequestToken)X.ClientRequestToken=J.ClientRequestToken;if(J.RotationLambdaARN)X.RotationLambdaARN=J.RotationLambdaARN;if(J.RotationRules)X.RotationRules=J.RotationRules;if(J.RotateImmediately!==void 0)X.RotateImmediately=J.RotateImmediately;let G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.RotateSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ARN:G.ARN,Name:G.Name,VersionId:G.VersionId}}async cancelRotateSecret(J){let X={SecretId:J},G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.CancelRotateSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ARN:G.ARN,Name:G.Name}}async getResourcePolicy(J){let X={SecretId:J},G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.GetResourcePolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ARN:G.ARN,Name:G.Name,ResourcePolicy:G.ResourcePolicy}}async putResourcePolicy(J){let X={SecretId:J.SecretId,ResourcePolicy:J.ResourcePolicy};if(J.BlockPublicPolicy!==void 0)X.BlockPublicPolicy=J.BlockPublicPolicy;let G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.PutResourcePolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ARN:G.ARN,Name:G.Name}}async deleteResourcePolicy(J){let X={SecretId:J},G=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.DeleteResourcePolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ARN:G.ARN,Name:G.Name}}async tagResource(J){let X={SecretId:J.SecretId,Tags:J.Tags};await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.TagResource","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async untagResource(J){let X={SecretId:J.SecretId,TagKeys:J.TagKeys};await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.UntagResource","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async setString(J,X,G){try{let $=await this.putSecretValue({SecretId:J,SecretString:X});return{ARN:$.ARN,VersionId:$.VersionId}}catch($){if($.code==="ResourceNotFoundException"){let Y=await this.createSecret({Name:J,SecretString:X,Description:G?.description,KmsKeyId:G?.kmsKeyId,Tags:G?.tags});return{ARN:Y.ARN,VersionId:Y.VersionId}}throw $}}async setJson(J,X,G){return this.setString(J,JSON.stringify(X),G)}async getString(J){return(await this.getSecretValue({SecretId:J})).SecretString}async getJson(J){let X=await this.getString(J);if(X)return JSON.parse(X);return}async listAll(){let J=[],X;do{let G=await this.listSecrets({NextToken:X});if(G.SecretList)J.push(...G.SecretList);X=G.NextToken}while(X);return J}parseSecret(J){return{ARN:J.ARN,Name:J.Name,Description:J.Description,KmsKeyId:J.KmsKeyId,RotationEnabled:J.RotationEnabled,RotationLambdaARN:J.RotationLambdaARN,RotationRules:J.RotationRules,LastRotatedDate:J.LastRotatedDate,LastChangedDate:J.LastChangedDate,LastAccessedDate:J.LastAccessedDate,DeletedDate:J.DeletedDate,NextRotationDate:J.NextRotationDate,Tags:J.Tags,SecretVersionsToStages:J.SecretVersionsToStages,CreatedDate:J.CreatedDate,PrimaryRegion:J.PrimaryRegion}}}class S{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}buildFormBody(J){return Object.entries(J).filter(([,G])=>G!==void 0).map(([G,$])=>`${encodeURIComponent(G)}=${encodeURIComponent($)}`).join("&")}async createTopic(J){let X={Action:"CreateTopic",Version:"2010-03-31",Name:J.Name};if(J.DisplayName)X["Attributes.entry.1.key"]="DisplayName",X["Attributes.entry.1.value"]=J.DisplayName;if(J.Tags)J.Tags.forEach(($,Y)=>{X[`Tags.member.${Y+1}.Key`]=$.Key,X[`Tags.member.${Y+1}.Value`]=$.Value});if(J.Attributes){let $=J.DisplayName?2:1;Object.entries(J.Attributes).forEach(([Y,Z])=>{X[`Attributes.entry.${$}.key`]=Y,X[`Attributes.entry.${$}.value`]=Z,$++})}let G=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(X)});return{TopicArn:G?.CreateTopicResponse?.CreateTopicResult?.TopicArn||G?.TopicArn}}async deleteTopic(J){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"DeleteTopic",Version:"2010-03-31",TopicArn:J})})}async listTopics(J){let X={Action:"ListTopics",Version:"2010-03-31"};if(J)X.NextToken=J;let G=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(X)}),$=G?.ListTopicsResponse?.ListTopicsResult||G?.ListTopicsResult,Y=$?.Topics?.member;return{Topics:Array.isArray(Y)?Y:Y?[Y]:[],NextToken:$?.NextToken}}async getTopicAttributes(J){let G=(await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"GetTopicAttributes",Version:"2010-03-31",TopicArn:J})}))?.GetTopicAttributesResponse?.GetTopicAttributesResult?.Attributes?.entry,$={TopicArn:J};if(Array.isArray(G))G.forEach((Y)=>{$[Y.key]=Y.value});return $}async setTopicAttributes(J){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"SetTopicAttributes",Version:"2010-03-31",TopicArn:J.TopicArn,AttributeName:J.AttributeName,AttributeValue:J.AttributeValue})})}async subscribe(J){let X={Action:"Subscribe",Version:"2010-03-31",TopicArn:J.TopicArn,Protocol:J.Protocol,Endpoint:J.Endpoint};if(J.ReturnSubscriptionArn)X.ReturnSubscriptionArn="true";if(J.Attributes){let $=1;Object.entries(J.Attributes).forEach(([Y,Z])=>{X[`Attributes.entry.${$}.key`]=Y,X[`Attributes.entry.${$}.value`]=Z,$++})}let G=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(X)});return{SubscriptionArn:G?.SubscribeResponse?.SubscribeResult?.SubscriptionArn||G?.SubscriptionArn}}async unsubscribe(J){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"Unsubscribe",Version:"2010-03-31",SubscriptionArn:J})})}async listSubscriptionsByTopic(J,X){let G={Action:"ListSubscriptionsByTopic",Version:"2010-03-31",TopicArn:J};if(X)G.NextToken=X;let $=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(G)}),Y=$?.ListSubscriptionsByTopicResponse?.ListSubscriptionsByTopicResult?.Subscriptions?.member;return{Subscriptions:Array.isArray(Y)?Y:Y?[Y]:[],NextToken:$?.ListSubscriptionsByTopicResponse?.ListSubscriptionsByTopicResult?.NextToken}}async publish(J){let X={Action:"Publish",Version:"2010-03-31",Message:J.Message};if(J.TopicArn)X.TopicArn=J.TopicArn;if(J.TargetArn)X.TargetArn=J.TargetArn;if(J.PhoneNumber)X.PhoneNumber=J.PhoneNumber;if(J.Subject)X.Subject=J.Subject;if(J.MessageStructure)X.MessageStructure=J.MessageStructure;if(J.MessageAttributes){let $=1;Object.entries(J.MessageAttributes).forEach(([Y,Z])=>{if(X[`MessageAttributes.entry.${$}.Name`]=Y,X[`MessageAttributes.entry.${$}.Value.DataType`]=Z.DataType,Z.StringValue)X[`MessageAttributes.entry.${$}.Value.StringValue`]=Z.StringValue;if(Z.BinaryValue)X[`MessageAttributes.entry.${$}.Value.BinaryValue`]=Z.BinaryValue;$++})}let G=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(X)});return{MessageId:G?.PublishResponse?.PublishResult?.MessageId||G?.MessageId}}async publishSMS(J,X,G){let $={};if(G)$["AWS.SNS.SMS.SenderID"]={DataType:"String",StringValue:G};return this.publish({PhoneNumber:J,Message:X,MessageAttributes:Object.keys($).length>0?$:void 0})}async subscribeEmail(J,X){return this.subscribe({TopicArn:J,Protocol:"email",Endpoint:X})}async subscribeLambda(J,X){return this.subscribe({TopicArn:J,Protocol:"lambda",Endpoint:X})}async subscribeSqs(J,X,G){let $={};if(G)$.RawMessageDelivery="true";return this.subscribe({TopicArn:J,Protocol:"sqs",Endpoint:X,Attributes:Object.keys($).length>0?$:void 0})}async subscribeHttp(J,X,G){let $=X.startsWith("https")?"https":"http",Y={};if(G)Y.RawMessageDelivery="true";return this.subscribe({TopicArn:J,Protocol:$,Endpoint:X,Attributes:Object.keys(Y).length>0?Y:void 0})}async subscribeSms(J,X){return this.subscribe({TopicArn:J,Protocol:"sms",Endpoint:X})}async topicExists(J){try{return await this.getTopicAttributes(J),!0}catch(X){if(X.code==="NotFound"||X.statusCode===404)return!1;throw X}}async getSMSAttributes(){let X=(await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"GetSMSAttributes",Version:"2010-03-31"})}))?.GetSMSAttributesResponse?.GetSMSAttributesResult?.attributes?.entry,G={};if(Array.isArray(X))X.forEach(($)=>{G[$.key]=$.value});else if(X)G[X.key]=X.value;return G}async setSMSAttributes(J){let X={Action:"SetSMSAttributes",Version:"2010-03-31"},G=1;Object.entries(J).forEach(([$,Y])=>{if(Y!==void 0)X[`attributes.entry.${G}.key`]=$,X[`attributes.entry.${G}.value`]=Y,G++}),await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(X)})}async checkIfPhoneNumberIsOptedOut(J){return(await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"CheckIfPhoneNumberIsOptedOut",Version:"2010-03-31",phoneNumber:J})}))?.CheckIfPhoneNumberIsOptedOutResponse?.CheckIfPhoneNumberIsOptedOutResult?.isOptedOut==="true"}async listPhoneNumbersOptedOut(J){let X={Action:"ListPhoneNumbersOptedOut",Version:"2010-03-31"};if(J)X.nextToken=J;let G=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(X)}),$=G?.ListPhoneNumbersOptedOutResponse?.ListPhoneNumbersOptedOutResult?.phoneNumbers?.member;return{phoneNumbers:Array.isArray($)?$:$?[$]:[],nextToken:G?.ListPhoneNumbersOptedOutResponse?.ListPhoneNumbersOptedOutResult?.nextToken}}async optInPhoneNumber(J){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"OptInPhoneNumber",Version:"2010-03-31",phoneNumber:J})})}async listSMSSandboxPhoneNumbers(J){let X={Action:"ListSMSSandboxPhoneNumbers",Version:"2010-03-31"};if(J)X.NextToken=J;let G=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(X)}),$=G?.ListSMSSandboxPhoneNumbersResponse?.ListSMSSandboxPhoneNumbersResult?.PhoneNumbers?.member;return{PhoneNumbers:Array.isArray($)?$:$?[$]:[],NextToken:G?.ListSMSSandboxPhoneNumbersResponse?.ListSMSSandboxPhoneNumbersResult?.NextToken}}async createSMSSandboxPhoneNumber(J,X){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"CreateSMSSandboxPhoneNumber",Version:"2010-03-31",PhoneNumber:J,LanguageCode:X||"en-US"})})}async verifySMSSandboxPhoneNumber(J,X){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"VerifySMSSandboxPhoneNumber",Version:"2010-03-31",PhoneNumber:J,OneTimePassword:X})})}async deleteSMSSandboxPhoneNumber(J){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"DeleteSMSSandboxPhoneNumber",Version:"2010-03-31",PhoneNumber:J})})}async getSMSSandboxAccountStatus(){return{IsInSandbox:(await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"GetSMSSandboxAccountStatus",Version:"2010-03-31"})}))?.GetSMSSandboxAccountStatusResponse?.GetSMSSandboxAccountStatusResult?.IsInSandbox==="true"}}}class o1{client;region;constructor(J="us-east-1",X){this.region=J,this.client=new W}async createQueue(J){let G={Action:"CreateQueue",QueueName:J.fifo&&!J.queueName.endsWith(".fifo")?`${J.queueName}.fifo`:J.queueName,Version:"2012-11-05"},$=1;if(J.visibilityTimeout!==void 0)G[`Attribute.${$}.Name`]="VisibilityTimeout",G[`Attribute.${$}.Value`]=J.visibilityTimeout.toString(),$++;if(J.messageRetentionPeriod!==void 0)G[`Attribute.${$}.Name`]="MessageRetentionPeriod",G[`Attribute.${$}.Value`]=J.messageRetentionPeriod.toString(),$++;if(J.delaySeconds!==void 0)G[`Attribute.${$}.Name`]="DelaySeconds",G[`Attribute.${$}.Value`]=J.delaySeconds.toString(),$++;if(J.maxMessageSize!==void 0)G[`Attribute.${$}.Name`]="MaximumMessageSize",G[`Attribute.${$}.Value`]=J.maxMessageSize.toString(),$++;if(J.receiveMessageWaitTime!==void 0)G[`Attribute.${$}.Name`]="ReceiveMessageWaitTimeSeconds",G[`Attribute.${$}.Value`]=J.receiveMessageWaitTime.toString(),$++;if(J.fifo){if(G[`Attribute.${$}.Name`]="FifoQueue",G[`Attribute.${$}.Value`]="true",$++,J.contentBasedDeduplication)G[`Attribute.${$}.Name`]="ContentBasedDeduplication",G[`Attribute.${$}.Value`]="true",$++}if(J.deadLetterTargetArn&&J.maxReceiveCount)G[`Attribute.${$}.Name`]="RedrivePolicy",G[`Attribute.${$}.Value`]=JSON.stringify({deadLetterTargetArn:J.deadLetterTargetArn,maxReceiveCount:J.maxReceiveCount}),$++;if(J.tags&&Object.keys(J.tags).length>0){let Z=1;for(let[L,O]of Object.entries(J.tags))G[`Tag.${Z}.Key`]=L,G[`Tag.${Z}.Value`]=O,Z++}let Y=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(G).toString()});return{QueueUrl:Y.QueueUrl||Y.CreateQueueResult?.QueueUrl}}async listQueues(J){let X={Action:"ListQueues",Version:"2012-11-05"};if(J)X.QueueNamePrefix=J;let G=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(X).toString()}),$=[];if(G.QueueUrl)$.push(G.QueueUrl);else if(G.ListQueuesResult?.QueueUrl)if(Array.isArray(G.ListQueuesResult.QueueUrl))$.push(...G.ListQueuesResult.QueueUrl);else $.push(G.ListQueuesResult.QueueUrl);return{QueueUrls:$}}async getQueueAttributes(J){let X={Action:"GetQueueAttributes",QueueUrl:J,Version:"2012-11-05","AttributeName.1":"All"},G=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(X).toString()});return{Attributes:G.Attributes||G.GetQueueAttributesResult?.Attributes||{}}}async getQueueUrl(J){let X={Action:"GetQueueUrl",QueueName:J,Version:"2012-11-05"},G=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(X).toString()});return{QueueUrl:G.QueueUrl||G.GetQueueUrlResult?.QueueUrl}}async deleteQueue(J){let X={Action:"DeleteQueue",QueueUrl:J,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(X).toString()})}async purgeQueue(J){let X={Action:"PurgeQueue",QueueUrl:J,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(X).toString()})}async sendMessage(J){let X={Action:"SendMessage",QueueUrl:J.queueUrl,MessageBody:J.messageBody,Version:"2012-11-05"};if(J.delaySeconds!==void 0)X.DelaySeconds=J.delaySeconds;if(J.messageGroupId)X.MessageGroupId=J.messageGroupId;if(J.messageDeduplicationId)X.MessageDeduplicationId=J.messageDeduplicationId;let G=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(X).toString()});return{MessageId:G.MessageId||G.SendMessageResult?.MessageId}}async receiveMessages(J){let X={Action:"ReceiveMessage",QueueUrl:J.queueUrl,Version:"2012-11-05"};if(J.maxMessages!==void 0)X.MaxNumberOfMessages=J.maxMessages;if(J.visibilityTimeout!==void 0)X.VisibilityTimeout=J.visibilityTimeout;if(J.waitTimeSeconds!==void 0)X.WaitTimeSeconds=J.waitTimeSeconds;let G=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(X).toString()}),$=[],Y=G.Message||G.ReceiveMessageResult?.Message;if(Y)if(Array.isArray(Y))$.push(...Y.map((Z)=>({MessageId:Z.MessageId,ReceiptHandle:Z.ReceiptHandle,Body:Z.Body})));else $.push({MessageId:Y.MessageId,ReceiptHandle:Y.ReceiptHandle,Body:Y.Body});return{Messages:$}}async deleteMessage(J,X){let G={Action:"DeleteMessage",QueueUrl:J,ReceiptHandle:X,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(G).toString()})}}import{deflateRawSync as e1}from"zlib";function L1(J,X){let G=typeof X==="string"?Buffer.from(X,"utf-8"):X,$=e1(G),Y=a1(G),Z=new Date,L=(Z.getHours()<<11|Z.getMinutes()<<5|Z.getSeconds()>>1)&65535,O=(Z.getFullYear()-1980<<9|Z.getMonth()+1<<5|Z.getDate())&65535,Q=Buffer.from(J,"utf-8"),V=Buffer.alloc(30+Q.length);V.writeUInt32LE(67324752,0),V.writeUInt16LE(20,4),V.writeUInt16LE(0,6),V.writeUInt16LE(8,8),V.writeUInt16LE(L,10),V.writeUInt16LE(O,12),V.writeUInt32LE(Y,14),V.writeUInt32LE($.length,18),V.writeUInt32LE(G.length,22),V.writeUInt16LE(Q.length,26),V.writeUInt16LE(0,28),Q.copy(V,30);let _=Buffer.alloc(46+Q.length);_.writeUInt32LE(33639248,0),_.writeUInt16LE(20,4),_.writeUInt16LE(20,6),_.writeUInt16LE(0,8),_.writeUInt16LE(8,10),_.writeUInt16LE(L,12),_.writeUInt16LE(O,14),_.writeUInt32LE(Y,16),_.writeUInt32LE($.length,20),_.writeUInt32LE(G.length,24),_.writeUInt16LE(Q.length,28),_.writeUInt16LE(0,30),_.writeUInt16LE(0,32),_.writeUInt16LE(0,34),_.writeUInt16LE(0,36),_.writeUInt32LE(0,38),_.writeUInt32LE(0,42),Q.copy(_,46);let E=V.length+$.length,z=_.length,F=Buffer.alloc(22);return F.writeUInt32LE(101010256,0),F.writeUInt16LE(0,4),F.writeUInt16LE(0,6),F.writeUInt16LE(1,8),F.writeUInt16LE(1,10),F.writeUInt32LE(z,12),F.writeUInt32LE(E,16),F.writeUInt16LE(0,20),Buffer.concat([V,$,_,F])}function a1(J){let X=[];for(let $=0;$<256;$++){let Y=$;for(let Z=0;Z<8;Z++)Y=Y&1?3988292384^Y>>>1:Y>>>1;X[$]=Y}let G=4294967295;for(let $=0;$<J.length;$++)G=X[(G^J[$])&255]^G>>>8;return(G^4294967295)>>>0}class s1{client;region;constructor(J="us-east-1",X){this.region=J,this.client=new W(void 0,{profile:X})}async createFunction(J){return await this.client.request({service:"lambda",region:this.region,method:"POST",path:"/2015-03-31/functions",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getFunction(J){return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2015-03-31/functions/${encodeURIComponent(J)}`,headers:{"Content-Type":"application/json"}})}async updateFunctionCode(J){let{FunctionName:X,...G}=J;return await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(X)}/code`,headers:{"Content-Type":"application/json"},body:JSON.stringify(G)})}async updateFunctionCodeInline(J,X,G="index.js"){let $=L1(G,X);return this.updateFunctionCode({FunctionName:J,ZipFile:$.toString("base64")})}async updateFunctionConfiguration(J){let{FunctionName:X,...G}=J;return await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(X)}/configuration`,headers:{"Content-Type":"application/json"},body:JSON.stringify(G)})}async deleteFunction(J){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2015-03-31/functions/${encodeURIComponent(J)}`,headers:{"Content-Type":"application/json"}})}async invoke(J){let{FunctionName:X,InvocationType:G="RequestResponse",Payload:$,LogType:Y}=J,Z={"Content-Type":"application/json","X-Amz-Invocation-Type":G};if(Y)Z["X-Amz-Log-Type"]=Y;let L=$?typeof $==="string"?$:JSON.stringify($):void 0,O=await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(X)}/invocations`,headers:Z,body:L,returnHeaders:!0});return{StatusCode:O.statusCode||200,FunctionError:O.headers?.["x-amz-function-error"],LogResult:O.headers?.["x-amz-log-result"],Payload:typeof O.body==="string"?O.body:JSON.stringify(O.body),ExecutedVersion:O.headers?.["x-amz-executed-version"]}}async listFunctions(J){let X={};if(J?.MaxItems)X.MaxItems=String(J.MaxItems);if(J?.Marker)X.Marker=J.Marker;if(J?.FunctionVersion)X.FunctionVersion=J.FunctionVersion;return await this.client.request({service:"lambda",region:this.region,method:"GET",path:"/2015-03-31/functions",queryParams:Object.keys(X).length>0?X:void 0,headers:{"Content-Type":"application/json"}})}async addPermission(J){let{FunctionName:X,...G}=J;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(X)}/policy`,headers:{"Content-Type":"application/json"},body:JSON.stringify(G)})}async removePermission(J,X){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2015-03-31/functions/${encodeURIComponent(J)}/policy/${encodeURIComponent(X)}`,headers:{"Content-Type":"application/json"}})}async publishVersion(J){let{FunctionName:X,...G}=J;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(X)}/versions`,headers:{"Content-Type":"application/json"},body:JSON.stringify(G)})}async createAlias(J){let{FunctionName:X,...G}=J;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(X)}/aliases`,headers:{"Content-Type":"application/json"},body:JSON.stringify(G)})}async updateAlias(J){let{FunctionName:X,Name:G,...$}=J;return this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(X)}/aliases/${encodeURIComponent(G)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify($)})}async getAlias(J,X){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2015-03-31/functions/${encodeURIComponent(J)}/aliases/${encodeURIComponent(X)}`})}catch(G){if(/ResourceNotFound/i.test(String(G?.message)))return null;throw G}}async getProvisionedConcurrencyConfig(J,X){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2019-09-30/functions/${encodeURIComponent(J)}/provisioned-concurrency`,queryParams:{Qualifier:X}})}catch(G){if(/ProvisionedConcurrencyConfigNotFound|ResourceNotFound/i.test(String(G?.message)))return null;throw G}}async putProvisionedConcurrencyConfig(J){let{FunctionName:X,Qualifier:G,ProvisionedConcurrentExecutions:$}=J;return this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2019-09-30/functions/${encodeURIComponent(X)}/provisioned-concurrency`,queryParams:{Qualifier:G},headers:{"Content-Type":"application/json"},body:JSON.stringify({ProvisionedConcurrentExecutions:$})})}async getFunctionConcurrency(J){try{return(await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2019-10-31/functions/${encodeURIComponent(J)}/concurrency`}))?.ReservedConcurrentExecutions??null}catch(X){if(/ResourceNotFound|ProvisionedConcurrencyConfigNotFound/i.test(String(X?.message)))return null;throw X}}async putFunctionConcurrency(J,X){await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2019-10-31/functions/${encodeURIComponent(J)}/concurrency`,headers:{"Content-Type":"application/json"},body:JSON.stringify({ReservedConcurrentExecutions:X})})}async deleteFunctionConcurrency(J){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2019-10-31/functions/${encodeURIComponent(J)}/concurrency`})}async deleteProvisionedConcurrencyConfig(J,X){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2019-09-30/functions/${encodeURIComponent(J)}/provisioned-concurrency`,queryParams:{Qualifier:X}})}async waitForFunctionActive(J,X=60){let G=Date.now(),$=X*1000;while(Date.now()-G<$)try{let Y=await this.getFunction(J),Z=Y.Configuration?.State;if(Z==="Active")return Y.Configuration;if(Z==="Failed")throw Error(`Function ${J} failed: ${Y.Configuration?.StateReason}`);await new Promise((L)=>setTimeout(L,2000))}catch(Y){if(Y.code==="ResourceNotFoundException"){await new Promise((Z)=>setTimeout(Z,2000));continue}throw Y}throw Error(`Timeout waiting for function ${J} to become active`)}async functionExists(J){try{return await this.getFunction(J),!0}catch(X){if(X.code==="ResourceNotFoundException"||X.statusCode===404)return!1;throw X}}async createFunctionUrl(J){let{FunctionName:X,...G}=J;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2021-10-31/functions/${encodeURIComponent(X)}/url`,headers:{"Content-Type":"application/json"},body:JSON.stringify(G)})}async getFunctionUrl(J){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2021-10-31/functions/${encodeURIComponent(J)}/url`,headers:{"Content-Type":"application/json"}})}catch(X){if(X.statusCode===404)return null;throw X}}async deleteFunctionUrl(J){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2021-10-31/functions/${encodeURIComponent(J)}/url`,headers:{"Content-Type":"application/json"}})}async createFunctionWithCode(J){let{Code:X,Filename:G="index.js",...$}=J,Y=L1(G,X);return this.createFunction({...$,Code:{ZipFile:Y.toString("base64")}})}async addFunctionUrlPermission(J){return this.addPermission({FunctionName:J,StatementId:"FunctionURLAllowPublicAccess",Action:"lambda:InvokeFunctionUrl",Principal:"*",FunctionUrlAuthType:"NONE"})}async publishLayerVersion(J){let{LayerName:X,...G}=J;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2018-10-31/layers/${encodeURIComponent(X)}/versions`,headers:{"Content-Type":"application/json"},body:JSON.stringify(G)})}async listLayerVersions(J,X){let G={};if(X?.CompatibleRuntime)G.CompatibleRuntime=X.CompatibleRuntime;if(X?.CompatibleArchitecture)G.CompatibleArchitecture=X.CompatibleArchitecture;if(X?.MaxItems)G.MaxItems=String(X.MaxItems);if(X?.Marker)G.Marker=X.Marker;return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2018-10-31/layers/${encodeURIComponent(J)}/versions`,queryParams:Object.keys(G).length>0?G:void 0,headers:{"Content-Type":"application/json"}})}async getLayerVersion(J,X){return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2018-10-31/layers/${encodeURIComponent(J)}/versions/${X}`,headers:{"Content-Type":"application/json"}})}async addLayerVersionPermission(J){let{LayerName:X,VersionNumber:G,...$}=J;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2018-10-31/layers/${encodeURIComponent(X)}/versions/${G}/policy`,headers:{"Content-Type":"application/json"},body:JSON.stringify($)})}async deleteLayerVersion(J,X){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2018-10-31/layers/${encodeURIComponent(J)}/versions/${X}`,headers:{"Content-Type":"application/json"}})}}class J0{client;region;constructor(J="us-east-1",X){this.region=J,this.client=new W(void 0,{profile:X})}async createLogGroup(J,X){await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.CreateLogGroup","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({logGroupName:J,...X?{tags:X}:{}})})}async putRetentionPolicy(J,X){if(![1,3,5,7,14,30,60,90,120,150,180,365,400,545,731,1096,1827,2192,2557,2922,3288,3653].includes(X))throw Error("Unsupported CloudWatch Logs retention period");await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.PutRetentionPolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({logGroupName:J,retentionInDays:X})})}async describeLogStreams(J){let X={logGroupName:J.logGroupName};if(J.logStreamNamePrefix)X.logStreamNamePrefix=J.logStreamNamePrefix;if(J.orderBy)X.orderBy=J.orderBy;if(J.descending!==void 0)X.descending=J.descending;if(J.limit)X.limit=J.limit;return await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.DescribeLogStreams","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async getLogEvents(J){let X={logGroupName:J.logGroupName,logStreamName:J.logStreamName};if(J.startTime)X.startTime=J.startTime;if(J.endTime)X.endTime=J.endTime;if(J.limit)X.limit=J.limit;if(J.startFromHead!==void 0)X.startFromHead=J.startFromHead;return await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.GetLogEvents","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async describeLogGroups(J){let X={};if(J?.logGroupNamePrefix)X.logGroupNamePrefix=J.logGroupNamePrefix;if(J?.limit)X.limit=J.limit;return await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.DescribeLogGroups","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async deleteLogGroup(J){await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.DeleteLogGroup","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({logGroupName:J})})}async filterLogEvents(J){let X={logGroupName:J.logGroupName};if(J.logStreamNames)X.logStreamNames=J.logStreamNames;if(J.startTime)X.startTime=J.startTime;if(J.endTime)X.endTime=J.endTime;if(J.filterPattern)X.filterPattern=J.filterPattern;if(J.limit)X.limit=J.limit;return await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.FilterLogEvents","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}}class g{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async createInstance(J){let X={InstanceAlias:J.InstanceAlias,IdentityManagementType:J.IdentityManagementType||"CONNECT_MANAGED",InboundCallsEnabled:J.InboundCallsEnabled??!0,OutboundCallsEnabled:J.OutboundCallsEnabled??!0};if(J.DirectoryId)X.DirectoryId=J.DirectoryId;if(J.ClientToken)X.ClientToken=J.ClientToken;if(J.Tags)X.Tags=J.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:"/instance",headers:{"Content-Type":"application/json"},body:JSON.stringify(X)})}async deleteInstance(J){await this.client.request({service:"connect",region:this.region,method:"DELETE",path:`/instance/${J}`})}async describeInstance(J){let X=await this.client.request({service:"connect",region:this.region,method:"GET",path:`/instance/${J}`});return X.Instance||X}async listInstances(J){let X={};if(J?.MaxResults)X.maxResults=String(J.MaxResults);if(J?.NextToken)X.nextToken=J.NextToken;return await this.client.request({service:"connect",region:this.region,method:"GET",path:"/instance",queryParams:X})}async searchAvailablePhoneNumbers(J){let X={TargetArn:J.TargetArn,PhoneNumberCountryCode:J.PhoneNumberCountryCode,PhoneNumberType:J.PhoneNumberType};if(J.PhoneNumberPrefix)X.PhoneNumberPrefix=J.PhoneNumberPrefix;if(J.MaxResults)X.MaxResults=J.MaxResults;if(J.NextToken)X.NextToken=J.NextToken;return await this.client.request({service:"connect",region:this.region,method:"POST",path:"/phone-number/search-available",headers:{"Content-Type":"application/json"},body:JSON.stringify(X)})}async claimPhoneNumber(J){let X={TargetArn:J.TargetArn,PhoneNumber:J.PhoneNumber};if(J.PhoneNumberDescription)X.PhoneNumberDescription=J.PhoneNumberDescription;if(J.Tags)X.Tags=J.Tags;if(J.ClientToken)X.ClientToken=J.ClientToken;return await this.client.request({service:"connect",region:this.region,method:"POST",path:"/phone-number/claim",headers:{"Content-Type":"application/json"},body:JSON.stringify(X)})}async releasePhoneNumber(J,X){let G={};if(X)G.clientToken=X;await this.client.request({service:"connect",region:this.region,method:"DELETE",path:`/phone-number/${J}`,queryParams:G})}async listPhoneNumbers(J){let X={};if(J.TargetArn)X.TargetArn=J.TargetArn;if(J.InstanceId)X.InstanceId=J.InstanceId;if(J.PhoneNumberTypes)X.PhoneNumberTypes=J.PhoneNumberTypes;if(J.PhoneNumberCountryCodes)X.PhoneNumberCountryCodes=J.PhoneNumberCountryCodes;if(J.MaxResults)X.MaxResults=J.MaxResults;if(J.NextToken)X.NextToken=J.NextToken;return await this.client.request({service:"connect",region:this.region,method:"POST",path:"/phone-number/list",headers:{"Content-Type":"application/json"},body:JSON.stringify(X)})}async createContactFlow(J){let X={Name:J.Name,Type:J.Type,Content:J.Content};if(J.Description)X.Description=J.Description;if(J.Tags)X.Tags=J.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/contact-flows/${J.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(X)})}async updateContactFlowContent(J){await this.client.request({service:"connect",region:this.region,method:"POST",path:`/contact-flows/${J.InstanceId}/${J.ContactFlowId}/content`,headers:{"Content-Type":"application/json"},body:JSON.stringify({Content:J.Content})})}async listContactFlows(J){let X={};if(J.ContactFlowTypes)X.contactFlowTypes=J.ContactFlowTypes.join(",");if(J.MaxResults)X.maxResults=String(J.MaxResults);if(J.NextToken)X.nextToken=J.NextToken;return await this.client.request({service:"connect",region:this.region,method:"GET",path:`/contact-flows-summary/${J.InstanceId}`,queryParams:X})}async createQueue(J){let X={Name:J.Name,HoursOfOperationId:J.HoursOfOperationId};if(J.Description)X.Description=J.Description;if(J.MaxContacts)X.MaxContacts=J.MaxContacts;if(J.OutboundCallerConfig)X.OutboundCallerConfig=J.OutboundCallerConfig;if(J.Tags)X.Tags=J.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/queues/${J.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(X)})}async createHoursOfOperation(J){let X={Name:J.Name,TimeZone:J.TimeZone,Config:J.Config};if(J.Description)X.Description=J.Description;if(J.Tags)X.Tags=J.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/hours-of-operations/${J.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(X)})}async associatePhoneNumberContactFlow(J){await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/phone-number/${J.PhoneNumberId}/contact-flow`,headers:{"Content-Type":"application/json"},body:JSON.stringify({InstanceId:J.InstanceId,ContactFlowId:J.ContactFlowId})})}async createRoutingProfile(J){let X={Name:J.Name,DefaultOutboundQueueId:J.DefaultOutboundQueueId,MediaConcurrencies:J.MediaConcurrencies};if(J.Description)X.Description=J.Description;if(J.QueueConfigs)X.QueueConfigs=J.QueueConfigs;if(J.Tags)X.Tags=J.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/routing-profiles/${J.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(X)})}async instanceExists(J){try{return(await this.listInstances({MaxResults:100})).InstanceSummaryList?.some((G)=>G.InstanceAlias===J)||!1}catch{return!1}}async startOutboundVoiceContact(J){let X={ContactFlowId:J.ContactFlowId,DestinationPhoneNumber:J.DestinationPhoneNumber};if(J.SourcePhoneNumber)X.SourcePhoneNumber=J.SourcePhoneNumber;if(J.QueueId)X.QueueId=J.QueueId;if(J.Attributes)X.Attributes=J.Attributes;if(J.AnswerMachineDetectionConfig)X.AnswerMachineDetectionConfig=J.AnswerMachineDetectionConfig;if(J.CampaignId)X.CampaignId=J.CampaignId;if(J.TrafficType)X.TrafficType=J.TrafficType;if(J.ClientToken)X.ClientToken=J.ClientToken;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/contact/outbound-voice/${J.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(X)})}async makeCall(J){return this.startOutboundVoiceContact({InstanceId:J.instanceId,ContactFlowId:J.contactFlowId,DestinationPhoneNumber:J.to,SourcePhoneNumber:J.from,Attributes:J.attributes})}async stopContact(J){await this.client.request({service:"connect",region:this.region,method:"POST",path:`/contact/stop/${J.InstanceId}/${J.ContactId}`})}async describeContact(J){return this.client.request({service:"connect",region:this.region,method:"GET",path:`/contacts/${J.InstanceId}/${J.ContactId}`})}async updateContactAttributes(J){await this.client.request({service:"connect",region:this.region,method:"POST",path:`/contact/attributes/${J.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify({InitialContactId:J.InitialContactId,Attributes:J.Attributes})})}async createUser(J){let X={Username:J.Username,PhoneConfig:J.PhoneConfig,SecurityProfileIds:J.SecurityProfileIds,RoutingProfileId:J.RoutingProfileId};if(J.Password)X.Password=J.Password;if(J.IdentityInfo)X.IdentityInfo=J.IdentityInfo;if(J.DirectoryUserId)X.DirectoryUserId=J.DirectoryUserId;if(J.HierarchyGroupId)X.HierarchyGroupId=J.HierarchyGroupId;if(J.Tags)X.Tags=J.Tags;return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/users/${J.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(X)})}async deleteUser(J){await this.client.request({service:"connect",region:this.region,method:"DELETE",path:`/users/${J.InstanceId}/${J.UserId}`})}async listUsers(J){let X={};if(J.NextToken)X.nextToken=J.NextToken;if(J.MaxResults)X.maxResults=String(J.MaxResults);return this.client.request({service:"connect",region:this.region,method:"GET",path:`/users-summary/${J.InstanceId}`,queryParams:X})}async createPrompt(J){let X={Name:J.Name,S3Uri:J.S3Uri};if(J.Description)X.Description=J.Description;if(J.Tags)X.Tags=J.Tags;return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/prompts/${J.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(X)})}async listPrompts(J){let X={};if(J.NextToken)X.nextToken=J.NextToken;if(J.MaxResults)X.maxResults=String(J.MaxResults);return this.client.request({service:"connect",region:this.region,method:"GET",path:`/prompts-summary/${J.InstanceId}`,queryParams:X})}async createQuickConnect(J){let X={Name:J.Name,QuickConnectConfig:J.QuickConnectConfig};if(J.Description)X.Description=J.Description;if(J.Tags)X.Tags=J.Tags;return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/quick-connects/${J.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(X)})}async startChatContact(J){return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/contact/chat/${J.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async startTaskContact(J){return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/contact/task/${J.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}createOutboundIvrFlow(J){let X=J.voiceId||"Joanna";return JSON.stringify({Version:"2019-10-30",StartAction:"play-prompt",Actions:{"play-prompt":{Type:"MessageParticipant",Parameters:{Text:J.message,TextToSpeechVoice:X,TextToSpeechEngine:"neural"},Transitions:{NextAction:"disconnect",Errors:[{NextAction:"disconnect",ErrorType:"NoMatchingError"}]}},disconnect:{Type:"DisconnectParticipant",Parameters:{},Transitions:{}}}})}createInputCollectionFlow(J){let X=J.voiceId||"Joanna",G=J.inputTimeout||5,$=J.maxDigits||1;return JSON.stringify({Version:"2019-10-30",StartAction:"get-input",Actions:{"get-input":{Type:"GetParticipantInput",Parameters:{Text:J.promptMessage,TextToSpeechVoice:X,TextToSpeechEngine:"neural",InputTimeLimitSeconds:String(G),MaxDigits:$,EncryptEntry:!1},Transitions:{NextAction:J.successNextAction||"disconnect",Conditions:[],Errors:[{NextAction:"disconnect",ErrorType:"NoMatchingCondition"},{NextAction:"disconnect",ErrorType:"NoMatchingError"}]}},disconnect:{Type:"DisconnectParticipant",Parameters:{},Transitions:{}}}})}async getCurrentMetricData(J){return this.client.request({service:"connect",region:this.region,method:"POST",path:`/metrics/current/${J.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}}class X0{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async describeLoadBalancers(J){let X={};if(J?.LoadBalancerArns)J.LoadBalancerArns.forEach(($,Y)=>{X[`LoadBalancerArns.member.${Y+1}`]=$});if(J?.Names)J.Names.forEach(($,Y)=>{X[`Names.member.${Y+1}`]=$});if(J?.Marker)X.Marker=J.Marker;if(J?.PageSize)X.PageSize=J.PageSize;let G=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeLoadBalancers",X)});return this.normalizeResult(G,"DescribeLoadBalancersResult")}async describeTargetGroups(J){let X={};if(J?.LoadBalancerArn)X.LoadBalancerArn=J.LoadBalancerArn;if(J?.TargetGroupArns)J.TargetGroupArns.forEach(($,Y)=>{X[`TargetGroupArns.member.${Y+1}`]=$});if(J?.Names)J.Names.forEach(($,Y)=>{X[`Names.member.${Y+1}`]=$});if(J?.Marker)X.Marker=J.Marker;if(J?.PageSize)X.PageSize=J.PageSize;let G=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeTargetGroups",X)});return this.normalizeResult(G,"DescribeTargetGroupsResult")}async describeTargetHealth(J){let X={TargetGroupArn:J.TargetGroupArn};if(J.Targets)J.Targets.forEach(($,Y)=>{if(X[`Targets.member.${Y+1}.Id`]=$.Id,$.Port)X[`Targets.member.${Y+1}.Port`]=$.Port;if($.AvailabilityZone)X[`Targets.member.${Y+1}.AvailabilityZone`]=$.AvailabilityZone});let G=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeTargetHealth",X)});return this.normalizeResult(G,"DescribeTargetHealthResult")}async describeListeners(J){let X={};if(J?.LoadBalancerArn)X.LoadBalancerArn=J.LoadBalancerArn;if(J?.ListenerArns)J.ListenerArns.forEach(($,Y)=>{X[`ListenerArns.member.${Y+1}`]=$});if(J?.Marker)X.Marker=J.Marker;if(J?.PageSize)X.PageSize=J.PageSize;let G=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeListeners",X)});return this.normalizeResult(G,"DescribeListenersResult")}async describeRules(J){let X={};if(J?.ListenerArn)X.ListenerArn=J.ListenerArn;if(J?.RuleArns)J.RuleArns.forEach(($,Y)=>{X[`RuleArns.member.${Y+1}`]=$});if(J?.Marker)X.Marker=J.Marker;if(J?.PageSize)X.PageSize=J.PageSize;let G=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeRules",X)});return this.normalizeResult(G,"DescribeRulesResult")}async describeLoadBalancerAttributes(J){let X={LoadBalancerArn:J},G=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeLoadBalancerAttributes",X)});return this.normalizeResult(G,"DescribeLoadBalancerAttributesResult")}async describeTargetGroupAttributes(J){let X={TargetGroupArn:J},G=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeTargetGroupAttributes",X)});return this.normalizeResult(G,"DescribeTargetGroupAttributesResult")}async createLoadBalancer(J){let X={Name:J.Name};if(J.Subnets)J.Subnets.forEach(($,Y)=>{X[`Subnets.member.${Y+1}`]=$});if(J.SubnetMappings)J.SubnetMappings.forEach(($,Y)=>{if(X[`SubnetMappings.member.${Y+1}.SubnetId`]=$.SubnetId,$.AllocationId)X[`SubnetMappings.member.${Y+1}.AllocationId`]=$.AllocationId;if($.PrivateIPv4Address)X[`SubnetMappings.member.${Y+1}.PrivateIPv4Address`]=$.PrivateIPv4Address;if($.IPv6Address)X[`SubnetMappings.member.${Y+1}.IPv6Address`]=$.IPv6Address});if(J.SecurityGroups)J.SecurityGroups.forEach(($,Y)=>{X[`SecurityGroups.member.${Y+1}`]=$});if(J.Scheme)X.Scheme=J.Scheme;if(J.Type)X.Type=J.Type;if(J.IpAddressType)X.IpAddressType=J.IpAddressType;if(J.Tags)J.Tags.forEach(($,Y)=>{X[`Tags.member.${Y+1}.Key`]=$.Key,X[`Tags.member.${Y+1}.Value`]=$.Value});let G=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("CreateLoadBalancer",X)});return this.normalizeResult(G,"CreateLoadBalancerResult")}async deleteLoadBalancer(J){let X={LoadBalancerArn:J};await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DeleteLoadBalancer",X)})}async createTargetGroup(J){let X={Name:J.Name};if(J.Protocol)X.Protocol=J.Protocol;if(J.ProtocolVersion)X.ProtocolVersion=J.ProtocolVersion;if(J.Port)X.Port=J.Port;if(J.VpcId)X.VpcId=J.VpcId;if(J.HealthCheckProtocol)X.HealthCheckProtocol=J.HealthCheckProtocol;if(J.HealthCheckPort)X.HealthCheckPort=J.HealthCheckPort;if(J.HealthCheckEnabled!==void 0)X.HealthCheckEnabled=J.HealthCheckEnabled;if(J.HealthCheckPath)X.HealthCheckPath=J.HealthCheckPath;if(J.HealthCheckIntervalSeconds)X.HealthCheckIntervalSeconds=J.HealthCheckIntervalSeconds;if(J.HealthCheckTimeoutSeconds)X.HealthCheckTimeoutSeconds=J.HealthCheckTimeoutSeconds;if(J.HealthyThresholdCount)X.HealthyThresholdCount=J.HealthyThresholdCount;if(J.UnhealthyThresholdCount)X.UnhealthyThresholdCount=J.UnhealthyThresholdCount;if(J.TargetType)X.TargetType=J.TargetType;if(J.IpAddressType)X.IpAddressType=J.IpAddressType;if(J.Matcher){if(J.Matcher.HttpCode)X["Matcher.HttpCode"]=J.Matcher.HttpCode;if(J.Matcher.GrpcCode)X["Matcher.GrpcCode"]=J.Matcher.GrpcCode}if(J.Tags)J.Tags.forEach(($,Y)=>{X[`Tags.member.${Y+1}.Key`]=$.Key,X[`Tags.member.${Y+1}.Value`]=$.Value});let G=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("CreateTargetGroup",X)});return this.normalizeResult(G,"CreateTargetGroupResult")}async deleteTargetGroup(J){let X={TargetGroupArn:J};await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DeleteTargetGroup",X)})}async registerTargets(J){let X={TargetGroupArn:J.TargetGroupArn};J.Targets.forEach((G,$)=>{if(X[`Targets.member.${$+1}.Id`]=G.Id,G.Port)X[`Targets.member.${$+1}.Port`]=G.Port;if(G.AvailabilityZone)X[`Targets.member.${$+1}.AvailabilityZone`]=G.AvailabilityZone}),await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("RegisterTargets",X)})}async deregisterTargets(J){let X={TargetGroupArn:J.TargetGroupArn};J.Targets.forEach((G,$)=>{if(X[`Targets.member.${$+1}.Id`]=G.Id,G.Port)X[`Targets.member.${$+1}.Port`]=G.Port;if(G.AvailabilityZone)X[`Targets.member.${$+1}.AvailabilityZone`]=G.AvailabilityZone}),await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DeregisterTargets",X)})}async createListener(J){let X={LoadBalancerArn:J.LoadBalancerArn,Port:J.Port};if(J.Protocol)X.Protocol=J.Protocol;if(J.SslPolicy)X.SslPolicy=J.SslPolicy;if(J.Certificates)J.Certificates.forEach(($,Y)=>{X[`Certificates.member.${Y+1}.CertificateArn`]=$.CertificateArn});if(J.DefaultActions.forEach(($,Y)=>{if(X[`DefaultActions.member.${Y+1}.Type`]=$.Type,$.TargetGroupArn)X[`DefaultActions.member.${Y+1}.TargetGroupArn`]=$.TargetGroupArn;if($.Order!==void 0)X[`DefaultActions.member.${Y+1}.Order`]=$.Order;if($.RedirectConfig){let Z=$.RedirectConfig;if(Z.Protocol)X[`DefaultActions.member.${Y+1}.RedirectConfig.Protocol`]=Z.Protocol;if(Z.Port)X[`DefaultActions.member.${Y+1}.RedirectConfig.Port`]=Z.Port;if(Z.Host)X[`DefaultActions.member.${Y+1}.RedirectConfig.Host`]=Z.Host;if(Z.Path)X[`DefaultActions.member.${Y+1}.RedirectConfig.Path`]=Z.Path;if(Z.Query)X[`DefaultActions.member.${Y+1}.RedirectConfig.Query`]=Z.Query;X[`DefaultActions.member.${Y+1}.RedirectConfig.StatusCode`]=Z.StatusCode}if($.FixedResponseConfig){let Z=$.FixedResponseConfig;if(Z.MessageBody)X[`DefaultActions.member.${Y+1}.FixedResponseConfig.MessageBody`]=Z.MessageBody;if(X[`DefaultActions.member.${Y+1}.FixedResponseConfig.StatusCode`]=Z.StatusCode,Z.ContentType)X[`DefaultActions.member.${Y+1}.FixedResponseConfig.ContentType`]=Z.ContentType}}),J.AlpnPolicy)J.AlpnPolicy.forEach(($,Y)=>{X[`AlpnPolicy.member.${Y+1}`]=$});if(J.Tags)J.Tags.forEach(($,Y)=>{X[`Tags.member.${Y+1}.Key`]=$.Key,X[`Tags.member.${Y+1}.Value`]=$.Value});let G=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("CreateListener",X)});return this.normalizeResult(G,"CreateListenerResult")}async deleteListener(J){let X={ListenerArn:J};await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DeleteListener",X)})}async modifyListener(J){let X={ListenerArn:J.ListenerArn};if(J.Port)X.Port=J.Port;if(J.Protocol)X.Protocol=J.Protocol;if(J.SslPolicy)X.SslPolicy=J.SslPolicy;if(J.Certificates)J.Certificates.forEach(($,Y)=>{X[`Certificates.member.${Y+1}.CertificateArn`]=$.CertificateArn});if(J.DefaultActions)J.DefaultActions.forEach(($,Y)=>{if($.Type)X[`DefaultActions.member.${Y+1}.Type`]=$.Type;if($.TargetGroupArn)X[`DefaultActions.member.${Y+1}.TargetGroupArn`]=$.TargetGroupArn;if($.Order!==void 0)X[`DefaultActions.member.${Y+1}.Order`]=$.Order});if(J.AlpnPolicy)J.AlpnPolicy.forEach(($,Y)=>{X[`AlpnPolicy.member.${Y+1}`]=$});let G=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("ModifyListener",X)});return this.normalizeResult(G,"ModifyListenerResult")}buildFormBody(J,X){let G={Action:J,Version:"2015-12-01"};for(let[$,Y]of Object.entries(X))if(Y!==void 0&&Y!==null)G[$]=String(Y);return Object.entries(G).map(([$,Y])=>`${encodeURIComponent($)}=${encodeURIComponent(Y)}`).join("&")}normalizeResult(J,X){if(J&&J[X])return this.normalizeArrays(J[X]);let G=X.replace("Result","Response");if(J&&J[G]&&J[G][X])return this.normalizeArrays(J[G][X]);return this.normalizeArrays(J)}normalizeArrays(J){if(!J||typeof J!=="object")return J;if(Array.isArray(J))return J.map((G)=>this.normalizeArrays(G));let X={};for(let[G,$]of Object.entries(J)){let Y=["LoadBalancers","TargetGroups","Listeners","Rules","TargetHealthDescriptions","Attributes","SecurityGroups","AvailabilityZones","Certificates","DefaultActions","Conditions","Actions","member"];if(G==="member"){if(Array.isArray($))return $.map((Z)=>this.normalizeArrays(Z));return[this.normalizeArrays($)]}if(Y.includes(G))if($&&typeof $==="object"&&"member"in $){let Z=$.member;X[G]=Array.isArray(Z)?Z.map((L)=>this.normalizeArrays(L)):[this.normalizeArrays(Z)]}else if(Array.isArray($))X[G]=$.map((Z)=>this.normalizeArrays(Z));else if($)X[G]=[this.normalizeArrays($)];else X[G]=[];else if(typeof $==="object")X[G]=this.normalizeArrays($);else X[G]=$}return X}}class K{client;region;endpoint;constructor(J="us-east-1",X){this.region=J,this.endpoint=X?.endpoint,this.client=new W}async request(J,X){if(this.endpoint){let G=await fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/x-amz-json-1.0","X-Amz-Target":`DynamoDB_20120810.${J}`},body:JSON.stringify(X)});if(!G.ok){let $=await G.text();throw Error(`DynamoDB request failed: ${G.status} ${$}`)}return G.json()}return this.client.request({service:"dynamodb",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.0","X-Amz-Target":`DynamoDB_20120810.${J}`},body:JSON.stringify(X)})}async createTable(J){return this.request("CreateTable",J)}async deleteTable(J){return this.request("DeleteTable",J)}async describeTable(J){return this.request("DescribeTable",J)}async listTables(J){return this.request("ListTables",J||{})}async putItem(J){return this.request("PutItem",J)}async getItem(J){return this.request("GetItem",J)}async updateItem(J){return this.request("UpdateItem",J)}async deleteItem(J){return this.request("DeleteItem",J)}async query(J){return this.request("Query",J)}async scan(J){return this.request("Scan",J)}async batchWriteItem(J){return this.request("BatchWriteItem",J)}async batchGetItem(J){return this.request("BatchGetItem",J)}async updateTimeToLive(J){return this.request("UpdateTimeToLive",J)}static marshal(J){let X={};for(let[G,$]of Object.entries(J))X[G]=K.marshalValue($);return X}static marshalValue(J){if(J===null||J===void 0)return{NULL:!0};if(typeof J==="string")return{S:J};if(typeof J==="number")return{N:String(J)};if(typeof J==="boolean")return{BOOL:J};if(Array.isArray(J))return{L:J.map((X)=>K.marshalValue(X))};if(typeof J==="object")return{M:K.marshal(J)};return{S:String(J)}}static unmarshal(J){let X={};for(let[G,$]of Object.entries(J))X[G]=K.unmarshalValue($);return X}static unmarshalValue(J){if(J.S!==void 0)return J.S;if(J.N!==void 0)return Number(J.N);if(J.BOOL!==void 0)return J.BOOL;if(J.NULL!==void 0)return null;if(J.L!==void 0)return J.L.map((X)=>K.unmarshalValue(X));if(J.M!==void 0)return K.unmarshal(J.M);if(J.SS!==void 0)return J.SS;if(J.NS!==void 0)return J.NS.map(Number);return null}}class G0{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async createDomain(J){return this.client.request({service:"es",region:this.region,method:"POST",path:"/2021-01-01/opensearch/domain",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async deleteDomain(J){return this.client.request({service:"es",region:this.region,method:"DELETE",path:`/2021-01-01/opensearch/domain/${J}`})}async describeDomain(J){return this.client.request({service:"es",region:this.region,method:"GET",path:`/2021-01-01/opensearch/domain/${J}`})}async listDomainNames(){return this.client.request({service:"es",region:this.region,method:"GET",path:"/2021-01-01/domain"})}async updateDomainConfig(J){let{DomainName:X,...G}=J;return this.client.request({service:"es",region:this.region,method:"POST",path:`/2021-01-01/opensearch/domain/${X}/config`,headers:{"Content-Type":"application/json"},body:JSON.stringify(G)})}}class c{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async request(J,X){return this.client.request({service:"transcribe",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`Transcribe.${J}`},body:JSON.stringify(X)})}async startTranscriptionJob(J){return this.request("StartTranscriptionJob",J)}async getTranscriptionJob(J){return this.request("GetTranscriptionJob",J)}async listTranscriptionJobs(J){return this.request("ListTranscriptionJobs",J||{})}async deleteTranscriptionJob(J){return this.request("DeleteTranscriptionJob",J)}}class u{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async invokeModel(J){let X=typeof J.body==="string"?J.body:J.body instanceof Uint8Array?new TextDecoder().decode(J.body):JSON.stringify(J.body),G={"Content-Type":J.contentType||"application/json",Accept:J.accept||"application/json"};if(J.trace)G["X-Amzn-Bedrock-Trace"]=J.trace;if(J.guardrailIdentifier)G["X-Amzn-Bedrock-GuardrailIdentifier"]=J.guardrailIdentifier;if(J.guardrailVersion)G["X-Amzn-Bedrock-GuardrailVersion"]=J.guardrailVersion;let $=await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/model/${encodeURIComponent(J.modelId)}/invoke`,headers:G,body:X,rawResponse:!0,returnHeaders:!0});return{body:new TextEncoder().encode($.body),contentType:$.headers?.["content-type"]||"application/json"}}async invokeModelWithResponseStream(J){let X=typeof J.body==="string"?J.body:J.body instanceof Uint8Array?new TextDecoder().decode(J.body):JSON.stringify(J.body),G={"Content-Type":J.contentType||"application/json",Accept:J.accept||"application/vnd.amazon.eventstream"};if(J.trace)G["X-Amzn-Bedrock-Trace"]=J.trace;if(J.guardrailIdentifier)G["X-Amzn-Bedrock-GuardrailIdentifier"]=J.guardrailIdentifier;if(J.guardrailVersion)G["X-Amzn-Bedrock-GuardrailVersion"]=J.guardrailVersion;return{body:await this.makeStreamRequest(J.modelId,G,X),contentType:"application/vnd.amazon.eventstream"}}async makeStreamRequest(J,X,G){let $=this.getCredentialsFromEnv(),Y=`https://bedrock-runtime.${this.region}.amazonaws.com/model/${encodeURIComponent(J)}/invoke-with-response-stream`,Z=this.signStreamRequest("POST",`/model/${encodeURIComponent(J)}/invoke-with-response-stream`,X,G,$),L=await fetch(Y,{method:"POST",headers:Z,body:G});if(!L.ok){let Q=await L.text();throw Error(`Bedrock streaming error (${L.status}): ${Q}`)}let O=L.body?.getReader();if(!O)throw Error("No response body for streaming");return this.parseEventStream(O)}async*parseEventStream(J){let X=new TextDecoder,G="";try{while(!0){let{done:$,value:Y}=await J.read();if($)break;G+=X.decode(Y,{stream:!0});let Z=this.extractJsonChunks(G);for(let L of Z.parsed)yield{chunk:{bytes:new TextEncoder().encode(JSON.stringify(L))}};G=Z.remaining}}finally{J.releaseLock()}}extractJsonChunks(J){let X=[],G=J,$=0,Y=-1;for(let Z=0;Z<G.length;Z++)if(G[Z]==="{"){if($===0)Y=Z;$++}else if(G[Z]==="}"){if($--,$===0&&Y!==-1)try{let L=JSON.parse(G.slice(Y,Z+1));X.push(L),G=G.slice(Z+1),Z=-1,Y=-1}catch{}}return{parsed:X,remaining:G}}getCredentialsFromEnv(){let J=process.env.AWS_ACCESS_KEY_ID,X=process.env.AWS_SECRET_ACCESS_KEY,G=process.env.AWS_SESSION_TOKEN;if(!J||!X)throw Error("AWS credentials not found in environment variables");return{accessKeyId:J,secretAccessKey:X,sessionToken:G}}signStreamRequest(J,X,G,$,Y){let Z=O1("node:crypto"),L="bedrock-runtime",O=this.region,Q=`bedrock-runtime.${O}.amazonaws.com`,V=new Date,_=V.toISOString().replace(/[:-]|\.\d{3}/g,""),E=V.toISOString().slice(0,10).replace(/-/g,""),z={host:Q,"x-amz-date":_,...G};if(Y.sessionToken)z["x-amz-security-token"]=Y.sessionToken;let F=Z.createHash("sha256").update($,"utf8").digest("hex");z["x-amz-content-sha256"]=F,z["content-length"]=Buffer.byteLength($).toString();let R=Object.keys(z).sort((N,N1)=>N.toLowerCase().localeCompare(N1.toLowerCase())),U=R.map((N)=>`${N.toLowerCase()}:${z[N].trim()}
2
- `).join(""),B=R.map((N)=>N.toLowerCase()).join(";"),T=[J,X,"",U,B,F].join(`
3
- `),M="AWS4-HMAC-SHA256",A=`${E}/${O}/bedrock-runtime/aws4_request`,t=[M,_,A,Z.createHash("sha256").update(T).digest("hex")].join(`
4
- `),H1=Z.createHmac("sha256",`AWS4${Y.secretAccessKey}`).update(E).digest(),w1=Z.createHmac("sha256",H1).update(O).digest(),D1=Z.createHmac("sha256",w1).update("bedrock-runtime").digest(),M1=Z.createHmac("sha256",D1).update("aws4_request").digest(),A1=Z.createHmac("sha256",M1).update(t).digest("hex"),K1=`${M} Credential=${Y.accessKeyId}/${A}, SignedHeaders=${B}, Signature=${A1}`;return{...z,Authorization:K1}}async invokeClaudeMessages(J){let X=J.modelId||"anthropic.claude-3-haiku-20240307-v1:0",G={anthropic_version:"bedrock-2023-05-31",max_tokens:J.maxTokens||1024,messages:J.messages};if(J.temperature!==void 0)G.temperature=J.temperature;if(J.topP!==void 0)G.top_p=J.topP;if(J.topK!==void 0)G.top_k=J.topK;if(J.stopSequences)G.stop_sequences=J.stopSequences;if(J.system)G.system=J.system;if(J.tools)G.tools=J.tools;if(J.toolChoice)G.tool_choice=J.toolChoice;return await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/model/${encodeURIComponent(X)}/invoke`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(G)})}async converse(J){let X={modelId:J.modelId,messages:J.messages};if(J.system)X.system=J.system;if(J.inferenceConfig)X.inferenceConfig=J.inferenceConfig;if(J.toolConfig)X.toolConfig=J.toolConfig;if(J.guardrailConfig)X.guardrailConfig=J.guardrailConfig;return await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/model/${encodeURIComponent(J.modelId)}/converse`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(X)})}async generateEmbeddings(J){let X=J.modelId||"amazon.titan-embed-text-v1",G;if(X.includes("cohere"))G={texts:Array.isArray(J.inputText)?J.inputText:[J.inputText],input_type:"search_document"};else if(X.includes("titan")){if(G={inputText:Array.isArray(J.inputText)?J.inputText[0]:J.inputText},J.dimensions)G.dimensions=J.dimensions;if(J.normalize!==void 0)G.normalize=J.normalize}else G={inputText:Array.isArray(J.inputText)?J.inputText[0]:J.inputText};return await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/model/${encodeURIComponent(X)}/invoke`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(G)})}async applyGuardrail(J){return await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/guardrail/${encodeURIComponent(J.guardrailIdentifier)}/version/${encodeURIComponent(J.guardrailVersion)}/apply`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({source:J.source,content:J.content})})}}class d{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async listFoundationModels(J){let X={};if(J?.byProvider)X.byProvider=J.byProvider;if(J?.byCustomizationType)X.byCustomizationType=J.byCustomizationType;if(J?.byOutputModality)X.byOutputModality=J.byOutputModality;if(J?.byInferenceType)X.byInferenceType=J.byInferenceType;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/foundation-models",queryParams:Object.keys(X).length>0?X:void 0})}async getFoundationModel(J){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/foundation-models/${encodeURIComponent(J.modelIdentifier)}`})}async createModelCustomizationJob(J){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/model-customization-jobs",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getModelCustomizationJob(J){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/model-customization-jobs/${encodeURIComponent(J.jobIdentifier)}`})}async listModelCustomizationJobs(J){let X={};if(J?.creationTimeAfter)X.creationTimeAfter=J.creationTimeAfter;if(J?.creationTimeBefore)X.creationTimeBefore=J.creationTimeBefore;if(J?.statusEquals)X.statusEquals=J.statusEquals;if(J?.nameContains)X.nameContains=J.nameContains;if(J?.maxResults)X.maxResults=J.maxResults.toString();if(J?.nextToken)X.nextToken=J.nextToken;if(J?.sortBy)X.sortBy=J.sortBy;if(J?.sortOrder)X.sortOrder=J.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/model-customization-jobs",queryParams:Object.keys(X).length>0?X:void 0})}async stopModelCustomizationJob(J){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:`/model-customization-jobs/${encodeURIComponent(J.jobIdentifier)}/stop`,headers:{"Content-Type":"application/json"}})}async listCustomModels(J){let X={};if(J?.creationTimeBefore)X.creationTimeBefore=J.creationTimeBefore;if(J?.creationTimeAfter)X.creationTimeAfter=J.creationTimeAfter;if(J?.nameContains)X.nameContains=J.nameContains;if(J?.baseModelArnEquals)X.baseModelArnEquals=J.baseModelArnEquals;if(J?.foundationModelArnEquals)X.foundationModelArnEquals=J.foundationModelArnEquals;if(J?.maxResults)X.maxResults=J.maxResults.toString();if(J?.nextToken)X.nextToken=J.nextToken;if(J?.sortBy)X.sortBy=J.sortBy;if(J?.sortOrder)X.sortOrder=J.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/custom-models",queryParams:Object.keys(X).length>0?X:void 0})}async getCustomModel(J){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/custom-models/${encodeURIComponent(J.modelIdentifier)}`})}async deleteCustomModel(J){return this.client.request({service:"bedrock",region:this.region,method:"DELETE",path:`/custom-models/${encodeURIComponent(J.modelIdentifier)}`})}async requestModelAccess(J){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/foundation-model-entitlement",headers:{"Content-Type":"application/json"},body:JSON.stringify({modelId:J.modelId})})}async createGuardrail(J){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/guardrails",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getGuardrail(J){let X=`/guardrails/${encodeURIComponent(J.guardrailIdentifier)}`;if(J.guardrailVersion)X+=`?guardrailVersion=${encodeURIComponent(J.guardrailVersion)}`;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:X})}async listGuardrails(J){let X={};if(J?.guardrailIdentifier)X.guardrailIdentifier=J.guardrailIdentifier;if(J?.maxResults)X.maxResults=J.maxResults.toString();if(J?.nextToken)X.nextToken=J.nextToken;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/guardrails",queryParams:Object.keys(X).length>0?X:void 0})}async deleteGuardrail(J){let X=`/guardrails/${encodeURIComponent(J.guardrailIdentifier)}`;if(J.guardrailVersion)X+=`?guardrailVersion=${encodeURIComponent(J.guardrailVersion)}`;return this.client.request({service:"bedrock",region:this.region,method:"DELETE",path:X})}async listModelInvocationJobs(J){let X={};if(J?.submitTimeAfter)X.submitTimeAfter=J.submitTimeAfter;if(J?.submitTimeBefore)X.submitTimeBefore=J.submitTimeBefore;if(J?.statusEquals)X.statusEquals=J.statusEquals;if(J?.nameContains)X.nameContains=J.nameContains;if(J?.maxResults)X.maxResults=J.maxResults.toString();if(J?.nextToken)X.nextToken=J.nextToken;if(J?.sortBy)X.sortBy=J.sortBy;if(J?.sortOrder)X.sortOrder=J.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/model-invocation-jobs",queryParams:Object.keys(X).length>0?X:void 0})}async waitForModelCustomizationJob(J,X){let G=X?.maxWaitMs??3600000,$=X?.pollIntervalMs??30000,Y=Date.now();while(Date.now()-Y<G){let Z=await this.getModelCustomizationJob({jobIdentifier:J});if(Z.status==="Completed"||Z.status==="Failed"||Z.status==="Stopped")return Z;await new Promise((L)=>setTimeout(L,$))}throw Error(`Timeout waiting for model customization job ${J}`)}async requestAccessToModels(J){let X=[];for(let G of J)try{let $=await this.requestModelAccess({modelId:G});X.push({modelId:G,status:$.status})}catch($){let Y=$ instanceof Error?$.message:String($);X.push({modelId:G,status:"ERROR",error:Y})}return X}async listModelsByProvider(J){return(await this.listFoundationModels({byProvider:J})).modelSummaries||[]}async listClaudeModels(){return this.listModelsByProvider("Anthropic")}async listEmbeddingModels(){return(await this.listFoundationModels({byOutputModality:"EMBEDDING"})).modelSummaries||[]}async createModelInvocationJob(J){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/model-invocation-jobs",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getModelInvocationJob(J){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/model-invocation-jobs/${encodeURIComponent(J.jobIdentifier)}`})}async stopModelInvocationJob(J){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:`/model-invocation-jobs/${encodeURIComponent(J.jobIdentifier)}/stop`,headers:{"Content-Type":"application/json"}})}async createProvisionedModelThroughput(J){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/provisioned-model-throughput",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getProvisionedModelThroughput(J){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/provisioned-model-throughput/${encodeURIComponent(J.provisionedModelId)}`})}async listProvisionedModelThroughputs(J){let X={};if(J?.creationTimeAfter)X.creationTimeAfter=J.creationTimeAfter;if(J?.creationTimeBefore)X.creationTimeBefore=J.creationTimeBefore;if(J?.statusEquals)X.statusEquals=J.statusEquals;if(J?.modelArnEquals)X.modelArnEquals=J.modelArnEquals;if(J?.nameContains)X.nameContains=J.nameContains;if(J?.maxResults)X.maxResults=J.maxResults.toString();if(J?.nextToken)X.nextToken=J.nextToken;if(J?.sortBy)X.sortBy=J.sortBy;if(J?.sortOrder)X.sortOrder=J.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/provisioned-model-throughput",queryParams:Object.keys(X).length>0?X:void 0})}async updateProvisionedModelThroughput(J){return this.client.request({service:"bedrock",region:this.region,method:"PATCH",path:`/provisioned-model-throughput/${encodeURIComponent(J.provisionedModelId)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify({desiredProvisionedModelName:J.desiredProvisionedModelName,desiredModelId:J.desiredModelId})})}async deleteProvisionedModelThroughput(J){return this.client.request({service:"bedrock",region:this.region,method:"DELETE",path:`/provisioned-model-throughput/${encodeURIComponent(J.provisionedModelId)}`})}async createEvaluationJob(J){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/evaluation-jobs",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getEvaluationJob(J){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/evaluation-jobs/${encodeURIComponent(J.jobIdentifier)}`})}async listEvaluationJobs(J){let X={};if(J?.creationTimeAfter)X.creationTimeAfter=J.creationTimeAfter;if(J?.creationTimeBefore)X.creationTimeBefore=J.creationTimeBefore;if(J?.statusEquals)X.statusEquals=J.statusEquals;if(J?.nameContains)X.nameContains=J.nameContains;if(J?.maxResults)X.maxResults=J.maxResults.toString();if(J?.nextToken)X.nextToken=J.nextToken;if(J?.sortBy)X.sortBy=J.sortBy;if(J?.sortOrder)X.sortOrder=J.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/evaluation-jobs",queryParams:Object.keys(X).length>0?X:void 0})}async stopEvaluationJob(J){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:`/evaluation-jobs/${encodeURIComponent(J.jobIdentifier)}/stop`,headers:{"Content-Type":"application/json"}})}async getInferenceProfile(J){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/inference-profiles/${encodeURIComponent(J.inferenceProfileIdentifier)}`})}async listInferenceProfiles(J){let X={};if(J?.maxResults)X.maxResults=J.maxResults.toString();if(J?.nextToken)X.nextToken=J.nextToken;if(J?.typeEquals)X.typeEquals=J.typeEquals;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/inference-profiles",queryParams:Object.keys(X).length>0?X:void 0})}async createInferenceProfile(J){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/inference-profiles",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async deleteInferenceProfile(J){return this.client.request({service:"bedrock",region:this.region,method:"DELETE",path:`/inference-profiles/${encodeURIComponent(J.inferenceProfileIdentifier)}`})}async createModelCopyJob(J){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/model-copy-jobs",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getModelCopyJob(J){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/model-copy-jobs/${encodeURIComponent(J.jobArn)}`})}async listModelCopyJobs(J){let X={};if(J?.creationTimeAfter)X.creationTimeAfter=J.creationTimeAfter;if(J?.creationTimeBefore)X.creationTimeBefore=J.creationTimeBefore;if(J?.statusEquals)X.statusEquals=J.statusEquals;if(J?.sourceAccountEquals)X.sourceAccountEquals=J.sourceAccountEquals;if(J?.sourceModelArnEquals)X.sourceModelArnEquals=J.sourceModelArnEquals;if(J?.targetModelNameContains)X.targetModelNameContains=J.targetModelNameContains;if(J?.maxResults)X.maxResults=J.maxResults.toString();if(J?.nextToken)X.nextToken=J.nextToken;if(J?.sortBy)X.sortBy=J.sortBy;if(J?.sortOrder)X.sortOrder=J.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/model-copy-jobs",queryParams:Object.keys(X).length>0?X:void 0})}}class $0{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async invokeAgent(J){let X={inputText:J.inputText};if(J.endSession!==void 0)X.endSession=J.endSession;if(J.enableTrace!==void 0)X.enableTrace=J.enableTrace;if(J.memoryId)X.memoryId=J.memoryId;if(J.sessionState)X.sessionState=J.sessionState;return await this.client.request({service:"bedrock-agent-runtime",region:this.region,method:"POST",path:`/agents/${encodeURIComponent(J.agentId)}/agentAliases/${encodeURIComponent(J.agentAliasId)}/sessions/${encodeURIComponent(J.sessionId)}/text`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(X)})}async retrieve(J){return this.client.request({service:"bedrock-agent-runtime",region:this.region,method:"POST",path:`/knowledgebases/${encodeURIComponent(J.knowledgeBaseId)}/retrieve`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({retrievalQuery:J.retrievalQuery,retrievalConfiguration:J.retrievalConfiguration,nextToken:J.nextToken})})}async retrieveAndGenerate(J){return this.client.request({service:"bedrock-agent-runtime",region:this.region,method:"POST",path:"/retrieveAndGenerate",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(J)})}}class Y0{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async createAgent(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:"/agents/",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getAgent(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/agents/${encodeURIComponent(J.agentId)}/`})}async listAgents(J){let X={};if(J?.maxResults)X.maxResults=J.maxResults.toString();if(J?.nextToken)X.nextToken=J.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:"/agents/",queryParams:Object.keys(X).length>0?X:void 0})}async deleteAgent(J){let X={};if(J.skipResourceInUseCheck!==void 0)X.skipResourceInUseCheck=J.skipResourceInUseCheck.toString();return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/agents/${encodeURIComponent(J.agentId)}/`,queryParams:Object.keys(X).length>0?X:void 0})}async prepareAgent(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/agents/${encodeURIComponent(J.agentId)}/`,headers:{"Content-Type":"application/json"}})}async createKnowledgeBase(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:"/knowledgebases/",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getKnowledgeBase(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/knowledgebases/${encodeURIComponent(J.knowledgeBaseId)}`})}async listKnowledgeBases(J){let X={};if(J?.maxResults)X.maxResults=J.maxResults.toString();if(J?.nextToken)X.nextToken=J.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:"/knowledgebases/",queryParams:Object.keys(X).length>0?X:void 0})}async deleteKnowledgeBase(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/knowledgebases/${encodeURIComponent(J.knowledgeBaseId)}`})}async createDataSource(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:`/knowledgebases/${encodeURIComponent(J.knowledgeBaseId)}/datasources/`,headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getDataSource(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/knowledgebases/${encodeURIComponent(J.knowledgeBaseId)}/datasources/${encodeURIComponent(J.dataSourceId)}`})}async listDataSources(J){let X={};if(J.maxResults)X.maxResults=J.maxResults.toString();if(J.nextToken)X.nextToken=J.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/knowledgebases/${encodeURIComponent(J.knowledgeBaseId)}/datasources/`,queryParams:Object.keys(X).length>0?X:void 0})}async updateDataSource(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:`/knowledgebases/${encodeURIComponent(J.knowledgeBaseId)}/datasources/${encodeURIComponent(J.dataSourceId)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async deleteDataSource(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/knowledgebases/${encodeURIComponent(J.knowledgeBaseId)}/datasources/${encodeURIComponent(J.dataSourceId)}`})}async startIngestionJob(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:`/knowledgebases/${encodeURIComponent(J.knowledgeBaseId)}/datasources/${encodeURIComponent(J.dataSourceId)}/ingestionjobs/`,headers:{"Content-Type":"application/json"},body:JSON.stringify({clientToken:J.clientToken,description:J.description})})}async getIngestionJob(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/knowledgebases/${encodeURIComponent(J.knowledgeBaseId)}/datasources/${encodeURIComponent(J.dataSourceId)}/ingestionjobs/${encodeURIComponent(J.ingestionJobId)}`})}async listIngestionJobs(J){let X={};if(J.maxResults)X.maxResults=J.maxResults.toString();if(J.nextToken)X.nextToken=J.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/knowledgebases/${encodeURIComponent(J.knowledgeBaseId)}/datasources/${encodeURIComponent(J.dataSourceId)}/ingestionjobs/`,headers:{"Content-Type":"application/json"},body:JSON.stringify({filters:J.filters,sortBy:J.sortBy,maxResults:J.maxResults,nextToken:J.nextToken})})}async createPrompt(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:"/prompts/",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getPrompt(J){let X={};if(J.promptVersion)X.promptVersion=J.promptVersion;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/prompts/${encodeURIComponent(J.promptIdentifier)}/`,queryParams:Object.keys(X).length>0?X:void 0})}async listPrompts(J){let X={};if(J?.promptIdentifier)X.promptIdentifier=J.promptIdentifier;if(J?.maxResults)X.maxResults=J.maxResults.toString();if(J?.nextToken)X.nextToken=J.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:"/prompts/",queryParams:Object.keys(X).length>0?X:void 0})}async deletePrompt(J){let X={};if(J.promptVersion)X.promptVersion=J.promptVersion;return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/prompts/${encodeURIComponent(J.promptIdentifier)}/`,queryParams:Object.keys(X).length>0?X:void 0})}async createPromptVersion(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/prompts/${encodeURIComponent(J.promptIdentifier)}/versions/`,headers:{"Content-Type":"application/json"},body:JSON.stringify({description:J.description,clientToken:J.clientToken,tags:J.tags})})}async createFlow(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:"/flows/",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getFlow(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/flows/${encodeURIComponent(J.flowIdentifier)}/`})}async listFlows(J){let X={};if(J?.maxResults)X.maxResults=J.maxResults.toString();if(J?.nextToken)X.nextToken=J.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:"/flows/",queryParams:Object.keys(X).length>0?X:void 0})}async updateFlow(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:`/flows/${encodeURIComponent(J.flowIdentifier)}/`,headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async deleteFlow(J){let X={};if(J.skipResourceInUseCheck!==void 0)X.skipResourceInUseCheck=J.skipResourceInUseCheck.toString();return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/flows/${encodeURIComponent(J.flowIdentifier)}/`,queryParams:Object.keys(X).length>0?X:void 0})}async prepareFlow(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/flows/${encodeURIComponent(J.flowIdentifier)}/`,headers:{"Content-Type":"application/json"}})}async createFlowVersion(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/flows/${encodeURIComponent(J.flowIdentifier)}/versions/`,headers:{"Content-Type":"application/json"},body:JSON.stringify({description:J.description,clientToken:J.clientToken})})}async createFlowAlias(J){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/flows/${encodeURIComponent(J.flowIdentifier)}/aliases/`,headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}}async function TJ(J,X="us-east-1"){return new d(X).requestAccessToModels(J)}async function HJ(J="us-east-1"){return new d(J).listClaudeModels()}async function wJ(J,X){let Y=(await new u(X?.region||"us-east-1").invokeClaudeMessages({modelId:X?.modelId||"anthropic.claude-3-haiku-20240307-v1:0",messages:[{role:"user",content:J}],maxTokens:X?.maxTokens||1024,temperature:X?.temperature})).content.find((Z)=>Z.type==="text");return Y?.type==="text"?Y.text:""}async function DJ(J,X){let $=await new u(X?.region||"us-east-1").generateEmbeddings({modelId:X?.modelId||"amazon.titan-embed-text-v1",inputText:J});return $.embeddings||$.embedding||[]}class q{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async request(J,X){return this.client.request({service:"comprehend",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`Comprehend_20171127.${J}`},body:JSON.stringify(X)})}async detectSentiment(J){return this.request("DetectSentiment",J)}async detectEntities(J){return this.request("DetectEntities",J)}async detectKeyPhrases(J){return this.request("DetectKeyPhrases",J)}async detectDominantLanguage(J){return this.request("DetectDominantLanguage",J)}async detectPiiEntities(J){return this.request("DetectPiiEntities",J)}async containsPiiEntities(J){return this.request("ContainsPiiEntities",J)}async detectSyntax(J){return this.request("DetectSyntax",J)}async detectTargetedSentiment(J){return this.request("DetectTargetedSentiment",J)}async classifyDocument(J){return this.request("ClassifyDocument",J)}async batchDetectSentiment(J){return this.request("BatchDetectSentiment",J)}async batchDetectEntities(J){return this.request("BatchDetectEntities",J)}async batchDetectKeyPhrases(J){return this.request("BatchDetectKeyPhrases",J)}async batchDetectDominantLanguage(J){return this.request("BatchDetectDominantLanguage",J)}async batchDetectSyntax(J){return this.request("BatchDetectSyntax",J)}async startSentimentDetectionJob(J){return this.request("StartSentimentDetectionJob",J)}async startEntitiesDetectionJob(J){return this.request("StartEntitiesDetectionJob",J)}async startKeyPhrasesDetectionJob(J){return this.request("StartKeyPhrasesDetectionJob",J)}async startPiiEntitiesDetectionJob(J){return this.request("StartPiiEntitiesDetectionJob",J)}async describeSentimentDetectionJob(J){return this.request("DescribeSentimentDetectionJob",J)}async analyzeSentiment(J,X="en"){let G=await this.detectSentiment({Text:J,LanguageCode:X});return{sentiment:G.Sentiment,scores:{positive:G.SentimentScore.Positive,negative:G.SentimentScore.Negative,neutral:G.SentimentScore.Neutral,mixed:G.SentimentScore.Mixed}}}async extractEntities(J,X="en"){return(await this.detectEntities({Text:J,LanguageCode:X})).Entities.map(($)=>({text:$.Text||"",type:$.Type||"UNKNOWN",score:$.Score||0}))}async extractKeyPhrases(J,X="en"){return(await this.detectKeyPhrases({Text:J,LanguageCode:X})).KeyPhrases.map(($)=>$.Text||"").filter(Boolean)}async detectLanguage(J){let G=(await this.detectDominantLanguage({Text:J})).Languages[0];return{languageCode:G?.LanguageCode||"unknown",confidence:G?.Score||0}}async findPii(J,X="en"){return(await this.detectPiiEntities({Text:J,LanguageCode:X})).Entities.map(($)=>({type:$.Type||"UNKNOWN",beginOffset:$.BeginOffset||0,endOffset:$.EndOffset||0,score:$.Score||0}))}async hasPii(J,X="en"){return(await this.detectPiiEntities({Text:J,LanguageCode:X})).Entities.length>0}async redactPii(J,X="en"){let $=[...(await this.detectPiiEntities({Text:J,LanguageCode:X})).Entities].sort((Z,L)=>(L.EndOffset||0)-(Z.EndOffset||0)),Y=J;for(let Z of $)if(Z.BeginOffset!==void 0&&Z.EndOffset!==void 0)Y=Y.slice(0,Z.BeginOffset)+`[${Z.Type}]`+Y.slice(Z.EndOffset);return Y}}async function KJ(J,X){let $=await new q(X?.region||"us-east-1").analyzeSentiment(J,X?.languageCode||"en"),Y=Math.max($.scores.positive,$.scores.negative,$.scores.neutral,$.scores.mixed);return{sentiment:$.sentiment,confidence:Y}}async function NJ(J,X){return new q(X?.region||"us-east-1").extractEntities(J,X?.languageCode||"en")}async function SJ(J,X){return(await new q(X||"us-east-1").detectLanguage(J)).languageCode}async function jJ(J,X){return new q(X?.region||"us-east-1").hasPii(J,X?.languageCode||"en")}class P{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async request(J,X){return this.client.request({service:"rekognition",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`RekognitionService.${J}`},body:JSON.stringify(X)})}async detectFaces(J){return this.request("DetectFaces",J)}async detectLabels(J){return this.request("DetectLabels",J)}async detectText(J){return this.request("DetectText",J)}async detectModerationLabels(J){return this.request("DetectModerationLabels",J)}async recognizeCelebrities(J){return this.request("RecognizeCelebrities",J)}async compareFaces(J){return this.request("CompareFaces",J)}async createCollection(J){return this.request("CreateCollection",J)}async deleteCollection(J){return this.request("DeleteCollection",J)}async listCollections(J){return this.request("ListCollections",J||{})}async indexFaces(J){return this.request("IndexFaces",J)}async searchFacesByImage(J){return this.request("SearchFacesByImage",J)}async searchFaces(J){return this.request("SearchFaces",J)}async startLabelDetection(J){return this.request("StartLabelDetection",J)}async getLabelDetection(J){return this.request("GetLabelDetection",J)}async startFaceDetection(J){return this.request("StartFaceDetection",J)}async getFaceDetection(J){return this.request("GetFaceDetection",J)}async startContentModeration(J){return this.request("StartContentModeration",J)}async getContentModeration(J){return this.request("GetContentModeration",J)}async analyzeS3Image(J,X,G){return(await this.detectLabels({Image:{S3Object:{Bucket:J,Name:X}},MaxLabels:G?.maxLabels,MinConfidence:G?.minConfidence})).Labels||[]}async analyzeImageBytes(J,X){return(await this.detectLabels({Image:{Bytes:J},MaxLabels:X?.maxLabels,MinConfidence:X?.minConfidence})).Labels||[]}async isImageSafe(J,X=50){return((await this.detectModerationLabels({Image:J,MinConfidence:X})).ModerationLabels?.length||0)===0}async countFaces(J){return(await this.detectFaces({Image:J,Attributes:["DEFAULT"]})).FaceDetails?.length||0}async extractText(J){return(await this.detectText({Image:J})).TextDetections?.filter((G)=>G.Type==="LINE").map((G)=>G.DetectedText||"")||[]}async findFace(J,X,G=80){try{return(await this.searchFacesByImage({CollectionId:J,Image:X,FaceMatchThreshold:G,MaxFaces:1})).FaceMatches?.[0]||null}catch($){if($ instanceof Error&&$.message.includes("InvalidParameterException"))return null;throw $}}}async function Z0(J,X,G){return(await new P(G?.region||"us-east-1").analyzeS3Image(J,X,{maxLabels:G?.maxLabels})).map((Z)=>Z.Name||"").filter(Boolean)}async function L0(J,X,G){return new P(G||"us-east-1").countFaces({S3Object:{Bucket:J,Name:X}})}async function O0(J,X,G){return new P(G?.region||"us-east-1").isImageSafe({S3Object:{Bucket:J,Name:X}},G?.threshold)}class C{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async request(J,X){return this.client.request({service:"textract",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`Textract.${J}`},body:JSON.stringify(X)})}async detectDocumentText(J){return this.request("DetectDocumentText",J)}async analyzeDocument(J){return this.request("AnalyzeDocument",J)}async analyzeExpense(J){return this.request("AnalyzeExpense",J)}async analyzeID(J){return this.request("AnalyzeID",J)}async startDocumentTextDetection(J){return this.request("StartDocumentTextDetection",J)}async getDocumentTextDetection(J){return this.request("GetDocumentTextDetection",J)}async startDocumentAnalysis(J){return this.request("StartDocumentAnalysis",J)}async getDocumentAnalysis(J){return this.request("GetDocumentAnalysis",J)}async startExpenseAnalysis(J){return this.request("StartExpenseAnalysis",J)}async getExpenseAnalysis(J){return this.request("GetExpenseAnalysis",J)}async startLendingAnalysis(J){return this.request("StartLendingAnalysis",J)}async getLendingAnalysis(J){return this.request("GetLendingAnalysis",J)}async extractText(J){return(await this.detectDocumentText({Document:J})).Blocks?.filter((G)=>G.BlockType==="LINE").map((G)=>G.Text||"")||[]}async extractTextFromS3(J,X){return this.extractText({S3Object:{Bucket:J,Name:X}})}async extractForms(J){let G=(await this.analyzeDocument({Document:J,FeatureTypes:["FORMS"]})).Blocks||[],$=new Map;G.forEach((Z)=>Z.Id&&$.set(Z.Id,Z));let Y=[];for(let Z of G)if(Z.BlockType==="KEY_VALUE_SET"&&Z.EntityTypes?.includes("KEY")){let L=this.getBlockText(Z,$),O=Z.Relationships?.find((V)=>V.Type==="VALUE"),Q="";if(O?.Ids)for(let V of O.Ids){let _=$.get(V);if(_)Q+=this.getBlockText(_,$)+" "}Y.push({key:L.trim(),value:Q.trim(),confidence:Z.Confidence||0})}return Y}async extractTables(J){let G=(await this.analyzeDocument({Document:J,FeatureTypes:["TABLES"]})).Blocks||[],$=new Map;G.forEach((Z)=>Z.Id&&$.set(Z.Id,Z));let Y=[];for(let Z of G)if(Z.BlockType==="TABLE"){let O=(Z.Relationships?.find((E)=>E.Type==="CHILD")?.Ids||[]).map((E)=>$.get(E)).filter(Boolean),Q=0,V=0;for(let E of O){if(E.RowIndex&&E.RowIndex>Q)Q=E.RowIndex;if(E.ColumnIndex&&E.ColumnIndex>V)V=E.ColumnIndex}let _=Array.from({length:Q},()=>Array.from({length:V},()=>""));for(let E of O)if(E.RowIndex&&E.ColumnIndex)_[E.RowIndex-1][E.ColumnIndex-1]=this.getBlockText(E,$);Y.push({rows:_})}return Y}async extractExpenseSummary(J){let G=(await this.analyzeExpense({Document:J})).ExpenseDocuments?.[0];if(!G)return{items:[]};let $={};for(let Z of G.SummaryFields||[]){let L=Z.Type?.Text?.toUpperCase(),O=Z.ValueDetection?.Text;if(L==="VENDOR_NAME")$.vendor=O;if(L==="TOTAL")$.total=O;if(L==="INVOICE_RECEIPT_DATE")$.date=O}let Y=[];for(let Z of G.LineItemGroups||[])for(let L of Z.LineItems||[]){let O={};for(let Q of L.LineItemExpenseFields||[]){let V=Q.Type?.Text?.toUpperCase(),_=Q.ValueDetection?.Text;if(V==="ITEM")O.description=_;if(V==="QUANTITY")O.quantity=_;if(V==="PRICE")O.price=_}if(O.description||O.price)Y.push(O)}return{...$,items:Y}}async queryDocument(J,X){let $=(await this.analyzeDocument({Document:J,FeatureTypes:["QUERIES"],QueriesConfig:{Queries:X.map((Z)=>({Text:Z}))}})).Blocks||[],Y=[];for(let Z of $)if(Z.BlockType==="QUERY_RESULT"&&Z.Text){let L=$.find((O)=>O.BlockType==="QUERY"&&O.Relationships?.some((Q)=>Q.Type==="ANSWER"&&Q.Ids?.includes(Z.Id||"")));Y.push({question:L?.Query?.Text||"",answer:Z.Text,confidence:Z.Confidence||0})}return Y}async waitForJob(J,X,G){let $=G?.maxWaitMs??300000,Y=G?.pollIntervalMs??5000,Z=Date.now();while(Date.now()-Z<$){let L=await X(J);if(L.JobStatus==="SUCCEEDED"||L.JobStatus==="PARTIAL_SUCCESS")return;if(L.JobStatus==="FAILED")throw Error(`Textract job ${J} failed`);await new Promise((O)=>setTimeout(O,Y))}throw Error(`Timeout waiting for Textract job ${J}`)}getBlockText(J,X){if(J.Text)return J.Text;return(J.Relationships?.find(($)=>$.Type==="CHILD")?.Ids||[]).map(($)=>X.get($)?.Text||"").join(" ")}}async function Q0(J,X,G){return(await new C(G||"us-east-1").extractTextFromS3(J,X)).join(`
5
- `)}async function _0(J,X,G){let Y=await new C(G||"us-east-1").extractForms({S3Object:{Bucket:J,Name:X}});return Object.fromEntries(Y.map((Z)=>[Z.key,Z.value]))}async function V0(J,X,G){return(await new C(G||"us-east-1").extractTables({S3Object:{Bucket:J,Name:X}})).map((Z)=>Z.rows)}class l{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async synthesizeSpeech(J){let X=await this.client.request({service:"polly",region:this.region,method:"POST",path:"/v1/speech",headers:{"Content-Type":"application/json"},body:JSON.stringify({Engine:J.Engine,LanguageCode:J.LanguageCode,LexiconNames:J.LexiconNames,OutputFormat:J.OutputFormat,SampleRate:J.SampleRate,SpeechMarkTypes:J.SpeechMarkTypes,Text:J.Text,TextType:J.TextType,VoiceId:J.VoiceId}),rawResponse:!0,returnHeaders:!0});return{AudioStream:new TextEncoder().encode(X.body),ContentType:X.headers?.["content-type"],RequestCharacters:X.headers?.["x-amzn-requestcharacters"]?Number.parseInt(X.headers["x-amzn-requestcharacters"]):void 0}}async startSpeechSynthesisTask(J){return this.client.request({service:"polly",region:this.region,method:"POST",path:"/v1/synthesisTasks",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}async getSpeechSynthesisTask(J){return this.client.request({service:"polly",region:this.region,method:"GET",path:`/v1/synthesisTasks/${encodeURIComponent(J.TaskId)}`})}async listSpeechSynthesisTasks(J){let X={};if(J?.MaxResults)X.MaxResults=J.MaxResults.toString();if(J?.NextToken)X.NextToken=J.NextToken;if(J?.Status)X.Status=J.Status;return this.client.request({service:"polly",region:this.region,method:"GET",path:"/v1/synthesisTasks",queryParams:Object.keys(X).length>0?X:void 0})}async describeVoices(J){let X={};if(J?.Engine)X.Engine=J.Engine;if(J?.LanguageCode)X.LanguageCode=J.LanguageCode;if(J?.IncludeAdditionalLanguageCodes!==void 0)X.IncludeAdditionalLanguageCodes=J.IncludeAdditionalLanguageCodes.toString();if(J?.NextToken)X.NextToken=J.NextToken;return this.client.request({service:"polly",region:this.region,method:"GET",path:"/v1/voices",queryParams:Object.keys(X).length>0?X:void 0})}async putLexicon(J){return this.client.request({service:"polly",region:this.region,method:"PUT",path:`/v1/lexicons/${encodeURIComponent(J.Name)}`,headers:{"Content-Type":"application/pls+xml"},body:J.Content})}async getLexicon(J){return this.client.request({service:"polly",region:this.region,method:"GET",path:`/v1/lexicons/${encodeURIComponent(J.Name)}`})}async deleteLexicon(J){return this.client.request({service:"polly",region:this.region,method:"DELETE",path:`/v1/lexicons/${encodeURIComponent(J.Name)}`})}async listLexicons(J){let X={};if(J?.NextToken)X.NextToken=J.NextToken;return this.client.request({service:"polly",region:this.region,method:"GET",path:"/v1/lexicons",queryParams:Object.keys(X).length>0?X:void 0})}async textToSpeech(J,X){return(await this.synthesizeSpeech({Text:J,VoiceId:X?.voiceId||"Joanna",Engine:X?.engine||"neural",LanguageCode:X?.languageCode,OutputFormat:"mp3"})).AudioStream||new Uint8Array}async ssmlToSpeech(J,X){return(await this.synthesizeSpeech({Text:J,TextType:"ssml",VoiceId:X?.voiceId||"Joanna",Engine:X?.engine||"neural",LanguageCode:X?.languageCode,OutputFormat:"mp3"})).AudioStream||new Uint8Array}async saveToS3(J,X,G,$){let Y=await this.startSpeechSynthesisTask({Text:J,TextType:$?.textType||"text",VoiceId:$?.voiceId||"Joanna",Engine:$?.engine||"neural",LanguageCode:$?.languageCode,OutputFormat:"mp3",OutputS3BucketName:X,OutputS3KeyPrefix:G});return{taskId:Y.SynthesisTask?.TaskId||"",outputUri:Y.SynthesisTask?.OutputUri||""}}async listVoicesForLanguage(J){return(await this.describeVoices({LanguageCode:J})).Voices||[]}async listNeuralVoices(){return(await this.describeVoices({Engine:"neural"})).Voices||[]}async waitForTask(J,X){let G=X?.maxWaitMs??300000,$=X?.pollIntervalMs??5000,Y=Date.now();while(Date.now()-Y<G){let L=(await this.getSpeechSynthesisTask({TaskId:J})).SynthesisTask;if(L?.TaskStatus==="completed")return L;if(L?.TaskStatus==="failed")throw Error(`Polly task ${J} failed: ${L.TaskStatusReason}`);await new Promise((O)=>setTimeout(O,$))}throw Error(`Timeout waiting for Polly task ${J}`)}}async function kJ(J,X){return new l(X?.region||"us-east-1").textToSpeech(J,X)}async function xJ(J){return(await new l(J?.region||"us-east-1").describeVoices({LanguageCode:J?.languageCode,Engine:J?.engine})).Voices||[]}function bJ(J,X){let G="<speak>";if(X?.rate||X?.pitch||X?.volume){if(G+="<prosody",X.rate)G+=` rate="${X.rate}"`;if(X.pitch)G+=` pitch="${X.pitch}"`;if(X.volume)G+=` volume="${X.volume}"`;G+=`>${J}</prosody>`}else G+=J;return G+="</speak>",G}class I{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async request(J,X){return this.client.request({service:"translate",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AWSShineFrontendService_20170701.${J}`},body:JSON.stringify(X)})}async translateText(J){return this.request("TranslateText",J)}async translateDocument(J){return this.request("TranslateDocument",J)}async startTextTranslationJob(J){return this.request("StartTextTranslationJob",J)}async describeTextTranslationJob(J){return this.request("DescribeTextTranslationJob",J)}async listTextTranslationJobs(J){return this.request("ListTextTranslationJobs",J||{})}async stopTextTranslationJob(J){return this.request("StopTextTranslationJob",J)}async listLanguages(J){return this.request("ListLanguages",J||{})}async importTerminology(J){return this.request("ImportTerminology",J)}async getTerminology(J){return this.request("GetTerminology",J)}async listTerminologies(J){return this.request("ListTerminologies",J||{})}async deleteTerminology(J){return this.request("DeleteTerminology",J)}async createParallelData(J){return this.request("CreateParallelData",J)}async getParallelData(J){return this.request("GetParallelData",J)}async listParallelData(J){return this.request("ListParallelData",J||{})}async deleteParallelData(J){return this.request("DeleteParallelData",J)}async translate(J,X,G="auto"){return(await this.translateText({Text:J,SourceLanguageCode:G,TargetLanguageCode:X})).TranslatedText}async translateFormal(J,X,G="auto",$="FORMAL"){return(await this.translateText({Text:J,SourceLanguageCode:G,TargetLanguageCode:X,Settings:{Formality:$}})).TranslatedText}async translateToMultiple(J,X,G="auto"){let $={};for(let Y of X)$[Y]=await this.translate(J,Y,G);return $}async waitForJob(J,X){let G=X?.maxWaitMs??3600000,$=X?.pollIntervalMs??30000,Y=Date.now();while(Date.now()-Y<G){let L=(await this.describeTextTranslationJob({JobId:J})).TextTranslationJobProperties;if(L?.JobStatus==="COMPLETED"||L?.JobStatus==="COMPLETED_WITH_ERROR")return L;if(L?.JobStatus==="FAILED"||L?.JobStatus==="STOPPED")throw Error(`Translation job ${J} failed: ${L.Message}`);await new Promise((O)=>setTimeout(O,$))}throw Error(`Timeout waiting for translation job ${J}`)}async getSupportedLanguages(){return(await this.listLanguages()).Languages?.map((X)=>X.LanguageCode||"").filter(Boolean)||[]}}async function gJ(J,X,G){return new I(G?.region||"us-east-1").translate(J,X,G?.sourceLanguage||"auto")}async function cJ(J,X,G){return new I(G?.region||"us-east-1").translateToMultiple(J,X,G?.sourceLanguage||"auto")}async function uJ(J){return(await new I(J||"us-east-1").listLanguages()).Languages||[]}class E0{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async request(J,X){return this.client.request({service:"personalize",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AmazonPersonalize.${J}`},body:JSON.stringify(X)})}async createDatasetGroup(J){return this.request("CreateDatasetGroup",J)}async describeDatasetGroup(J){return this.request("DescribeDatasetGroup",J)}async listDatasetGroups(J){return this.request("ListDatasetGroups",J||{})}async createSchema(J){return this.request("CreateSchema",J)}async createDataset(J){return this.request("CreateDataset",J)}async createDatasetImportJob(J){return this.request("CreateDatasetImportJob",J)}async describeDatasetImportJob(J){return this.request("DescribeDatasetImportJob",J)}async createSolution(J){return this.request("CreateSolution",J)}async createSolutionVersion(J){return this.request("CreateSolutionVersion",J)}async describeSolutionVersion(J){return this.request("DescribeSolutionVersion",J)}async createCampaign(J){return this.request("CreateCampaign",J)}async describeCampaign(J){return this.request("DescribeCampaign",J)}async createRecommender(J){return this.request("CreateRecommender",J)}async describeRecommender(J){return this.request("DescribeRecommender",J)}async listRecommenders(J){return this.request("ListRecommenders",J||{})}async createEventTracker(J){return this.request("CreateEventTracker",J)}async describeEventTracker(J){return this.request("DescribeEventTracker",J)}async createFilter(J){return this.request("CreateFilter",J)}async listRecipes(J){return this.request("ListRecipes",J||{})}async waitForSolutionVersion(J,X){let G=X?.maxWaitMs??7200000,$=X?.pollIntervalMs??60000,Y=Date.now();while(Date.now()-Y<G){let L=(await this.describeSolutionVersion({solutionVersionArn:J})).solutionVersion;if(L?.status==="ACTIVE")return L;if(L?.status==="CREATE FAILED")throw Error(`Solution version failed: ${L.failureReason}`);await new Promise((O)=>setTimeout(O,$))}throw Error(`Timeout waiting for solution version ${J}`)}async waitForCampaign(J,X){let G=X?.maxWaitMs??1800000,$=X?.pollIntervalMs??30000,Y=Date.now();while(Date.now()-Y<G){let L=(await this.describeCampaign({campaignArn:J})).campaign;if(L?.status==="ACTIVE")return L;if(L?.status==="CREATE FAILED")throw Error(`Campaign failed: ${L.failureReason}`);await new Promise((O)=>setTimeout(O,$))}throw Error(`Timeout waiting for campaign ${J}`)}async waitForDatasetImportJob(J,X){let G=X?.maxWaitMs??3600000,$=X?.pollIntervalMs??30000,Y=Date.now();while(Date.now()-Y<G){let L=(await this.describeDatasetImportJob({datasetImportJobArn:J})).datasetImportJob;if(L?.status==="ACTIVE")return L;if(L?.status==="CREATE FAILED")throw Error(`Dataset import job failed: ${L.failureReason}`);await new Promise((O)=>setTimeout(O,$))}throw Error(`Timeout waiting for dataset import job ${J}`)}}class m{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async request(J,X){return this.client.request({service:"personalize-runtime",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AmazonPersonalizeRuntime.${J}`},body:JSON.stringify(X)})}async getRecommendations(J){return this.request("GetRecommendations",J)}async getPersonalizedRanking(J){return this.request("GetPersonalizedRanking",J)}async recommendForUser(J,X,G=10){return(await this.getRecommendations({campaignArn:J,userId:X,numResults:G})).itemList?.map((Y)=>Y.itemId||"").filter(Boolean)||[]}async getSimilarItems(J,X,G=10){return(await this.getRecommendations({campaignArn:J,itemId:X,numResults:G})).itemList?.map((Y)=>Y.itemId||"").filter(Boolean)||[]}async rankItems(J,X,G){return(await this.getPersonalizedRanking({campaignArn:J,userId:X,inputList:G})).personalizedRanking?.map((Y)=>Y.itemId||"").filter(Boolean)||[]}}class Q1{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async request(J,X){return this.client.request({service:"personalize-events",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AmazonPersonalizeEvents.${J}`},body:JSON.stringify(X)})}async putEvents(J){return this.request("PutEvents",J)}async putItems(J){return this.request("PutItems",J)}async putUsers(J){return this.request("PutUsers",J)}async trackEvent(J,X,G,$,Y="click"){await this.putEvents({trackingId:J,sessionId:X,userId:G,eventList:[{eventType:Y,itemId:$,sentAt:new Date().toISOString()}]})}async trackPurchase(J,X,G,$,Y){await this.putEvents({trackingId:J,sessionId:X,userId:G,eventList:[{eventType:"purchase",eventValue:Y,itemId:$,sentAt:new Date().toISOString()}]})}}async function mJ(J,X,G){return new m(G?.region||"us-east-1").recommendForUser(J,X,G?.numResults)}async function pJ(J,X,G){return new m(G?.region||"us-east-1").getSimilarItems(J,X,G?.numResults)}async function nJ(J,X,G,$,Y="click",Z){await new Q1(Z||"us-east-1").trackEvent(J,X,G,$,Y)}class v{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async request(J,X){return this.client.request({service:"kendra",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AWSKendraFrontendService.${J}`},body:JSON.stringify(X)})}async createIndex(J){return this.request("CreateIndex",J)}async describeIndex(J){return this.request("DescribeIndex",J)}async listIndices(J){return this.request("ListIndices",J||{})}async deleteIndex(J){return this.request("DeleteIndex",J)}async createDataSource(J){return this.request("CreateDataSource",J)}async describeDataSource(J){return this.request("DescribeDataSource",J)}async listDataSources(J){return this.request("ListDataSources",J)}async startDataSourceSyncJob(J){return this.request("StartDataSourceSyncJob",J)}async stopDataSourceSyncJob(J){return this.request("StopDataSourceSyncJob",J)}async query(J){return this.request("Query",J)}async retrieve(J){return this.request("Retrieve",J)}async batchPutDocument(J){return this.request("BatchPutDocument",J)}async batchDeleteDocument(J){return this.request("BatchDeleteDocument",J)}async search(J,X,G){return(await this.query({IndexId:J,QueryText:X,PageSize:G?.pageSize,PageNumber:G?.pageNumber,AttributeFilter:G?.attributeFilter})).ResultItems||[]}async retrieveDocuments(J,X,G){return(await this.retrieve({IndexId:J,QueryText:X,PageSize:G?.pageSize,PageNumber:G?.pageNumber})).ResultItems||[]}async addDocument(J,X){let G=X.attributes?Object.entries(X.attributes).map(([Y,Z])=>({Key:Y,Value:typeof Z==="number"?{LongValue:Z}:Array.isArray(Z)?{StringListValue:Z}:{StringValue:Z}})):void 0,$=await this.batchPutDocument({IndexId:J,Documents:[{Id:X.id,Title:X.title,Blob:new TextEncoder().encode(X.content),ContentType:"PLAIN_TEXT",Attributes:G}]});if($.FailedDocuments?.length)throw Error(`Failed to add document: ${$.FailedDocuments[0].ErrorMessage}`)}async addDocuments(J,X){let G=X.map((Z)=>{let L=Z.attributes?Object.entries(Z.attributes).map(([O,Q])=>({Key:O,Value:typeof Q==="number"?{LongValue:Q}:Array.isArray(Q)?{StringListValue:Q}:{StringValue:Q}})):void 0;return{Id:Z.id,Title:Z.title,Blob:new TextEncoder().encode(Z.content),ContentType:"PLAIN_TEXT",Attributes:L}}),Y=(await this.batchPutDocument({IndexId:J,Documents:G})).FailedDocuments?.map((Z)=>({id:Z.Id||"unknown",error:Z.ErrorMessage||"Unknown error"}))||[];return{succeeded:X.length-Y.length,failed:Y}}async deleteDocuments(J,X){let G=await this.batchDeleteDocument({IndexId:J,DocumentIdList:X});if(G.FailedDocuments?.length)throw Error(`Failed to delete documents: ${G.FailedDocuments.map(($)=>$.Id).join(", ")}`)}async waitForIndex(J,X){let G=X?.maxWaitMs??3600000,$=X?.pollIntervalMs??30000,Y=Date.now();while(Date.now()-Y<G){let Z=await this.describeIndex({Id:J});if(Z.Status==="ACTIVE")return Z;if(Z.Status==="FAILED")throw Error(`Index creation failed: ${Z.ErrorMessage}`);await new Promise((L)=>setTimeout(L,$))}throw Error(`Timeout waiting for index ${J}`)}async waitForDataSource(J,X,G){let $=G?.maxWaitMs??1800000,Y=G?.pollIntervalMs??30000,Z=Date.now();while(Date.now()-Z<$){let L=await this.describeDataSource({Id:X,IndexId:J});if(L.Status==="ACTIVE")return L;if(L.Status==="FAILED")throw Error(`Data source creation failed: ${L.ErrorMessage}`);await new Promise((O)=>setTimeout(O,Y))}throw Error(`Timeout waiting for data source ${X}`)}}async function z0(J,X,G){return(await new v(G?.region||"us-east-1").search(J,X,{pageSize:G?.pageSize})).map((Z)=>({title:Z.DocumentTitle?.Text||"",excerpt:Z.DocumentExcerpt?.Text||"",uri:Z.DocumentURI||"",score:Z.ScoreAttributes?.ScoreConfidence||"NOT_AVAILABLE"}))}async function F0(J,X,G){return(await new v(G?.region||"us-east-1").retrieveDocuments(J,X,{pageSize:G?.pageSize})).map((Z)=>({content:Z.Content||"",uri:Z.DocumentURI||"",score:Z.ScoreAttributes?.ScoreConfidence||"NOT_AVAILABLE"}))}class R0{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async request(J,X){return this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AWSEvents.${J}`},body:JSON.stringify(X)})}async putRule(J){return this.request("PutRule",J)}async deleteRule(J){return this.request("DeleteRule",J)}async describeRule(J){return this.request("DescribeRule",J)}async listRules(J){return this.request("ListRules",J||{})}async listEventBuses(J){return this.request("ListEventBuses",J||{})}async enableRule(J){return this.request("EnableRule",J)}async disableRule(J){return this.request("DisableRule",J)}async putTargets(J){return this.request("PutTargets",J)}async removeTargets(J){return this.request("RemoveTargets",J)}async listTargetsByRule(J){return this.request("ListTargetsByRule",J)}async putEvents(J){return this.request("PutEvents",J)}async createSchedule(J){return this.client.request({service:"scheduler",region:this.region,method:"POST",path:`/schedules/${J.Name}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})}}class W0{client;region;constructor(J="us-east-1",X){this.region=J,this.client=new W}async describeCacheClusters(J){let X={Action:"DescribeCacheClusters",Version:"2015-02-02",ShowCacheNodeInfo:"true"};if(J)X.CacheClusterId=J;let G=await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(X).toString()});return{CacheClusters:this.parseCacheClusters(G)}}async describeReplicationGroups(J){let X={Action:"DescribeReplicationGroups",Version:"2015-02-02"};if(J)X.ReplicationGroupId=J;let G=await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(X).toString()});return{ReplicationGroups:[]}}async createCacheCluster(J){let X={Action:"CreateCacheCluster",Version:"2015-02-02",CacheClusterId:J.cacheClusterId,Engine:J.engine,CacheNodeType:J.cacheNodeType};if(J.numCacheNodes)X.NumCacheNodes=J.numCacheNodes;if(J.engineVersion)X.EngineVersion=J.engineVersion;if(J.port)X.Port=J.port;if(J.securityGroupIds&&J.securityGroupIds.length>0)J.securityGroupIds.forEach(($,Y)=>{X[`SecurityGroupIds.member.${Y+1}`]=$});if(J.subnetGroupName)X.CacheSubnetGroupName=J.subnetGroupName;if(J.tags&&J.tags.length>0)J.tags.forEach(($,Y)=>{X[`Tags.member.${Y+1}.Key`]=$.Key,X[`Tags.member.${Y+1}.Value`]=$.Value});let G=await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(X).toString()});return{CacheCluster:this.parseCacheCluster(G)}}async deleteCacheCluster(J,X){let G={Action:"DeleteCacheCluster",Version:"2015-02-02",CacheClusterId:J};if(X)G.FinalSnapshotIdentifier=X;await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(G).toString()})}async rebootCacheCluster(J,X){let G={Action:"RebootCacheCluster",Version:"2015-02-02",CacheClusterId:J};X.forEach(($,Y)=>{G[`CacheNodeIdsToReboot.member.${Y+1}`]=$}),await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(G).toString()})}async describeCacheEngineVersions(J){let X={Action:"DescribeCacheEngineVersions",Version:"2015-02-02"};if(J)X.Engine=J;let G=await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(X).toString()});return{CacheEngineVersions:[]}}async getCacheStatistics(J){let X=await this.describeCacheClusters(J);if(!X.CacheClusters||X.CacheClusters.length===0)throw Error(`Cache cluster ${J} not found`);return{cpuUtilization:0,evictions:0,hits:0,misses:0,connections:0}}parseCacheClusters(J){if(J.CacheClusterId)return[{CacheClusterId:J.CacheClusterId,CacheClusterStatus:J.CacheClusterStatus||"available",Engine:J.Engine||"redis",EngineVersion:J.EngineVersion||"7.0",CacheNodeType:J.CacheNodeType||"cache.t3.micro",NumCacheNodes:Number.parseInt(J.NumCacheNodes||"1"),CacheClusterCreateTime:J.CacheClusterCreateTime||new Date().toISOString()}];return[]}parseCacheCluster(J){return{CacheClusterId:J.CacheClusterId,CacheClusterStatus:J.CacheClusterStatus||"creating",Engine:J.Engine||"redis",EngineVersion:J.EngineVersion||"7.0",CacheNodeType:J.CacheNodeType||"cache.t3.micro",NumCacheNodes:Number.parseInt(J.NumCacheNodes||"1"),CacheClusterCreateTime:J.CacheClusterCreateTime||new Date().toISOString()}}}class p{client;region;constructor(J="us-east-1",X){this.region=J,this.client=new W}async createRule(J){let X={Action:"PutRule",Name:J.name,ScheduleExpression:J.scheduleExpression,Version:"2015-10-07"};if(J.description)X.Description=J.description;if(J.state)X.State=J.state;else X.State="ENABLED";return{RuleArn:(await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.PutRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:J.name,ScheduleExpression:J.scheduleExpression,State:J.state||"ENABLED",Description:J.description})})).RuleArn}}async putTargets(J,X){await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.PutTargets","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Rule:J,Targets:X})})}async listRules(J){let X={};if(J)X.NamePrefix=J;return{Rules:(await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.ListRules","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})).Rules||[]}}async describeRule(J){let X=await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.DescribeRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:J})});return{Name:X.Name,Arn:X.Arn,ScheduleExpression:X.ScheduleExpression,State:X.State,Description:X.Description}}async listTargetsByRule(J){return{Targets:(await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.ListTargetsByRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Rule:J})})).Targets||[]}}async deleteRule(J,X){if(X)try{let G=await this.listTargetsByRule(J);if(G.Targets&&G.Targets.length>0)await this.removeTargets(J,G.Targets.map(($)=>$.Id))}catch{}await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.DeleteRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:J,Force:X||!1})})}async removeTargets(J,X){await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.RemoveTargets","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Rule:J,Ids:X})})}async enableRule(J){await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.EnableRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:J})})}async disableRule(J){await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.DisableRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:J})})}async createLambdaSchedule(J){let X=await this.createRule({name:J.name,scheduleExpression:J.scheduleExpression,description:J.description,state:"ENABLED"});return await this.putTargets(J.name,[{Id:"1",Arn:J.functionArn,Input:J.input}]),X}async createEcsSchedule(J){let X=await this.createRule({name:J.name,scheduleExpression:J.scheduleExpression,description:J.description,state:"ENABLED"});return await this.putTargets(J.name,[{Id:"1",Arn:J.clusterArn,RoleArn:J.roleArn,Input:JSON.stringify({containerOverrides:[]})}]),X}async listSchedules(J){let X={};if(J?.NamePrefix)X.NamePrefix=J.NamePrefix;if(J?.State)X.State=J.State;let G=J?.GroupName||"default";return{Schedules:(await this.client.request({service:"scheduler",region:this.region,method:"GET",path:"/schedules",queryParams:{...X,ScheduleGroup:G}}))?.Schedules||[]}}async getSchedule(J){try{let X={};if(J.GroupName)X.groupName=J.GroupName;return await this.client.request({service:"scheduler",region:this.region,method:"GET",path:`/schedules/${encodeURIComponent(J.Name)}`,queryParams:Object.keys(X).length>0?X:void 0})}catch(X){if(X.statusCode===404||X.code==="ResourceNotFoundException")return null;throw X}}async createSchedule(J){let X={ScheduleExpression:J.ScheduleExpression,FlexibleTimeWindow:J.FlexibleTimeWindow,Target:J.Target};if(J.GroupName)X.GroupName=J.GroupName;if(J.ScheduleExpressionTimezone)X.ScheduleExpressionTimezone=J.ScheduleExpressionTimezone;if(J.Description)X.Description=J.Description;if(J.State)X.State=J.State;if(J.StartDate)X.StartDate=J.StartDate.toISOString();if(J.EndDate)X.EndDate=J.EndDate.toISOString();return{ScheduleArn:(await this.client.request({service:"scheduler",region:this.region,method:"POST",path:`/schedules/${encodeURIComponent(J.Name)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(X)}))?.ScheduleArn||""}}async updateSchedule(J){let X={};if(J.GroupName)X.GroupName=J.GroupName;if(J.ScheduleExpression)X.ScheduleExpression=J.ScheduleExpression;if(J.ScheduleExpressionTimezone)X.ScheduleExpressionTimezone=J.ScheduleExpressionTimezone;if(J.Description!==void 0)X.Description=J.Description;if(J.State)X.State=J.State;if(J.FlexibleTimeWindow)X.FlexibleTimeWindow=J.FlexibleTimeWindow;if(J.Target)X.Target=J.Target;return{ScheduleArn:(await this.client.request({service:"scheduler",region:this.region,method:"PUT",path:`/schedules/${encodeURIComponent(J.Name)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(X)}))?.ScheduleArn||""}}async deleteSchedule(J){let X={};if(J.GroupName)X.groupName=J.GroupName;await this.client.request({service:"scheduler",region:this.region,method:"DELETE",path:`/schedules/${encodeURIComponent(J.Name)}`,queryParams:Object.keys(X).length>0?X:void 0})}async listScheduleGroups(J){let X={};if(J?.NamePrefix)X.NamePrefix=J.NamePrefix;return{ScheduleGroups:(await this.client.request({service:"scheduler",region:this.region,method:"GET",path:"/schedule-groups",queryParams:Object.keys(X).length>0?X:void 0}))?.ScheduleGroups||[]}}}class U0{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async registerScalableTarget(J){let X={ServiceNamespace:J.serviceNamespace,ResourceId:J.resourceId,ScalableDimension:J.scalableDimension,MinCapacity:J.minCapacity,MaxCapacity:J.maxCapacity};if(J.roleARN)X.RoleARN=J.roleARN;if(J.suspendedState)X.SuspendedState={DynamicScalingInSuspended:J.suspendedState.dynamicScalingInSuspended,DynamicScalingOutSuspended:J.suspendedState.dynamicScalingOutSuspended,ScheduledScalingSuspended:J.suspendedState.scheduledScalingSuspended};await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.RegisterScalableTarget","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async describeScalableTargets(J){let X={ServiceNamespace:J.serviceNamespace};if(J.resourceIds&&J.resourceIds.length>0)X.ResourceIds=J.resourceIds;if(J.scalableDimension)X.ScalableDimension=J.scalableDimension;if(J.maxResults)X.MaxResults=J.maxResults;if(J.nextToken)X.NextToken=J.nextToken;let G=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DescribeScalableTargets","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ScalableTargets:G.ScalableTargets||[],NextToken:G.NextToken}}async deregisterScalableTarget(J){let X={ServiceNamespace:J.serviceNamespace,ResourceId:J.resourceId,ScalableDimension:J.scalableDimension};await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DeregisterScalableTarget","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async putScalingPolicy(J){let X={PolicyName:J.policyName,ServiceNamespace:J.serviceNamespace,ResourceId:J.resourceId,ScalableDimension:J.scalableDimension,PolicyType:J.policyType};if(J.targetTrackingScalingPolicyConfiguration)X.TargetTrackingScalingPolicyConfiguration=J.targetTrackingScalingPolicyConfiguration;if(J.stepScalingPolicyConfiguration)X.StepScalingPolicyConfiguration=J.stepScalingPolicyConfiguration;let G=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.PutScalingPolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{PolicyARN:G.PolicyARN||"",Alarms:G.Alarms||[]}}async describeScalingPolicies(J){let X={ServiceNamespace:J.serviceNamespace};if(J.policyNames&&J.policyNames.length>0)X.PolicyNames=J.policyNames;if(J.resourceId)X.ResourceId=J.resourceId;if(J.scalableDimension)X.ScalableDimension=J.scalableDimension;if(J.maxResults)X.MaxResults=J.maxResults;if(J.nextToken)X.NextToken=J.nextToken;let G=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DescribeScalingPolicies","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ScalingPolicies:G.ScalingPolicies||[],NextToken:G.NextToken}}async deleteScalingPolicy(J){let X={PolicyName:J.policyName,ServiceNamespace:J.serviceNamespace,ResourceId:J.resourceId,ScalableDimension:J.scalableDimension};await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DeleteScalingPolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async putScheduledAction(J){let X={ScheduledActionName:J.scheduledActionName,ServiceNamespace:J.serviceNamespace,ResourceId:J.resourceId,ScalableDimension:J.scalableDimension,Schedule:J.schedule};if(J.timezone)X.Timezone=J.timezone;if(J.startTime)X.StartTime=J.startTime.toISOString();if(J.endTime)X.EndTime=J.endTime.toISOString();if(J.scalableTargetAction)X.ScalableTargetAction=J.scalableTargetAction;await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.PutScheduledAction","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async describeScheduledActions(J){let X={ServiceNamespace:J.serviceNamespace};if(J.scheduledActionNames&&J.scheduledActionNames.length>0)X.ScheduledActionNames=J.scheduledActionNames;if(J.resourceId)X.ResourceId=J.resourceId;if(J.scalableDimension)X.ScalableDimension=J.scalableDimension;if(J.maxResults)X.MaxResults=J.maxResults;if(J.nextToken)X.NextToken=J.nextToken;let G=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DescribeScheduledActions","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ScheduledActions:G.ScheduledActions||[],NextToken:G.NextToken}}async deleteScheduledAction(J){let X={ScheduledActionName:J.scheduledActionName,ServiceNamespace:J.serviceNamespace,ResourceId:J.resourceId,ScalableDimension:J.scalableDimension};await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DeleteScheduledAction","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)})}async describeScalingActivities(J){let X={ServiceNamespace:J.serviceNamespace};if(J.resourceId)X.ResourceId=J.resourceId;if(J.scalableDimension)X.ScalableDimension=J.scalableDimension;if(J.maxResults)X.MaxResults=J.maxResults;if(J.nextToken)X.NextToken=J.nextToken;if(J.includeNotScaledActivities!==void 0)X.IncludeNotScaledActivities=J.includeNotScaledActivities;let G=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DescribeScalingActivities","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(X)});return{ScalingActivities:G.ScalingActivities||[],NextToken:G.NextToken}}getECSServiceResourceId(J,X){return`service/${J}/${X}`}async registerECSServiceScaling(J){let X=this.getECSServiceResourceId(J.clusterName,J.serviceName);await this.registerScalableTarget({serviceNamespace:"ecs",resourceId:X,scalableDimension:"ecs:service:DesiredCount",minCapacity:J.minCapacity,maxCapacity:J.maxCapacity})}async createECSCPUScalingPolicy(J){let X=this.getECSServiceResourceId(J.clusterName,J.serviceName);return this.putScalingPolicy({policyName:J.policyName,serviceNamespace:"ecs",resourceId:X,scalableDimension:"ecs:service:DesiredCount",policyType:"TargetTrackingScaling",targetTrackingScalingPolicyConfiguration:{TargetValue:J.targetCPUPercent,PredefinedMetricSpecification:{PredefinedMetricType:"ECSServiceAverageCPUUtilization"},ScaleOutCooldown:J.scaleOutCooldown??300,ScaleInCooldown:J.scaleInCooldown??300,DisableScaleIn:J.disableScaleIn??!1}})}async createECSMemoryScalingPolicy(J){let X=this.getECSServiceResourceId(J.clusterName,J.serviceName);return this.putScalingPolicy({policyName:J.policyName,serviceNamespace:"ecs",resourceId:X,scalableDimension:"ecs:service:DesiredCount",policyType:"TargetTrackingScaling",targetTrackingScalingPolicyConfiguration:{TargetValue:J.targetMemoryPercent,PredefinedMetricSpecification:{PredefinedMetricType:"ECSServiceAverageMemoryUtilization"},ScaleOutCooldown:J.scaleOutCooldown??300,ScaleInCooldown:J.scaleInCooldown??300,DisableScaleIn:J.disableScaleIn??!1}})}async createECSRequestCountScalingPolicy(J){let X=this.getECSServiceResourceId(J.clusterName,J.serviceName),G=J.targetGroupArn.split(":").pop()||"",$=J.loadBalancerArn.split(":").pop()||"",Y=G.replace("targetgroup/",""),L=`${$.replace("loadbalancer/","")}/${Y}`;return this.putScalingPolicy({policyName:J.policyName,serviceNamespace:"ecs",resourceId:X,scalableDimension:"ecs:service:DesiredCount",policyType:"TargetTrackingScaling",targetTrackingScalingPolicyConfiguration:{TargetValue:J.targetRequestsPerTarget,PredefinedMetricSpecification:{PredefinedMetricType:"ALBRequestCountPerTarget",ResourceLabel:L},ScaleOutCooldown:J.scaleOutCooldown??300,ScaleInCooldown:J.scaleInCooldown??300,DisableScaleIn:J.disableScaleIn??!1}})}async getECSServiceScalingPolicies(J,X){let G=this.getECSServiceResourceId(J,X);return(await this.describeScalingPolicies({serviceNamespace:"ecs",resourceId:G,scalableDimension:"ecs:service:DesiredCount"})).ScalingPolicies}async removeECSServiceScaling(J,X){let G=this.getECSServiceResourceId(J,X),$=await this.getECSServiceScalingPolicies(J,X);for(let Y of $)await this.deleteScalingPolicy({policyName:Y.PolicyName,serviceNamespace:"ecs",resourceId:G,scalableDimension:"ecs:service:DesiredCount"});await this.deregisterScalableTarget({serviceNamespace:"ecs",resourceId:G,scalableDimension:"ecs:service:DesiredCount"})}async createECSScheduledScaling(J){let X=this.getECSServiceResourceId(J.clusterName,J.serviceName);await this.putScheduledAction({scheduledActionName:J.actionName,serviceNamespace:"ecs",resourceId:X,scalableDimension:"ecs:service:DesiredCount",schedule:J.schedule,timezone:J.timezone,scalableTargetAction:{minCapacity:J.minCapacity,maxCapacity:J.maxCapacity}})}async getECSScalingActivities(J,X,G=20){let $=this.getECSServiceResourceId(J,X);return(await this.describeScalingActivities({serviceNamespace:"ecs",resourceId:$,scalableDimension:"ecs:service:DesiredCount",maxResults:G})).ScalingActivities.map((Z)=>({ActivityId:Z.ActivityId,Description:Z.Description,Cause:Z.Cause,StartTime:Z.StartTime,EndTime:Z.EndTime,StatusCode:Z.StatusCode,StatusMessage:Z.StatusMessage}))}}import*as _1 from"node:crypto";import*as V1 from"node:net";import*as x from"node:tls";import{readFileSync as k}from"node:fs";class E1{config;s3;server;tlsServer;sessions=new Map;messageCache=new Map;flagsCache=new Map;uidMappingCache=new Map;nextUidCache=new Map;cacheTimestamp=new Map;uidCounter=new Map;CACHE_TTL_MS=1e4;constructor(J){this.config={port:143,sslPort:993,host:"0.0.0.0",prefix:"incoming/",...J},this.s3=new w(J.region||"us-east-1")}async start(){if(this.server=V1.createServer((J)=>{this.handleConnection(J)}),this.server.listen(this.config.port,this.config.host,()=>{console.log(`IMAP server listening on ${this.config.host}:${this.config.port}`)}),this.config.tls?.key&&this.config.tls?.cert){let J={key:k(this.config.tls.key),cert:k(this.config.tls.cert)};this.tlsServer=x.createServer(J,(X)=>{this.handleConnection(X)}),this.tlsServer.listen(this.config.sslPort,this.config.host,()=>{console.log(`IMAPS server listening on ${this.config.host}:${this.config.sslPort}`)})}}async stop(){if(this.server)this.server.close();if(this.tlsServer)this.tlsServer.close();for(let J of this.sessions.values())J.socket.destroy();this.sessions.clear()}handleConnection(J){let X=_1.randomUUID(),G={id:X,socket:J,state:"not_authenticated"};this.sessions.set(X,G),this.send(G,`* OK [CAPABILITY IMAP4rev1 STARTTLS AUTH=PLAIN] ${this.config.domain} IMAP4rev1 ready`);let $="";J.on("data",async(Y)=>{$+=Y.toString();let Z;while((Z=$.indexOf(`\r
6
- `))!==-1){let L=$.substring(0,Z);$=$.substring(Z+2);try{await this.processCommand(G,L)}catch(O){console.error(`Error processing command: ${O}`),this.send(G,"* BAD Internal server error")}}}),J.on("close",()=>{this.sessions.delete(X)}),J.on("error",(Y)=>{console.error(`Socket error: ${Y}`),this.sessions.delete(X)})}send(J,X){J.socket.write(`${X}\r
7
- `)}async processCommand(J,X){if(console.log(`IMAP CMD [${J.username||"unauth"}]: ${X}`),X.toUpperCase()==="DONE"){if(J.idling&&J.idleTag)J.idling=!1,this.send(J,`${J.idleTag} OK IDLE terminated`),J.idleTag=void 0;return}let G=X.match(/^(\S+)\s+(\S+)(?:\s+(.*))?$/);if(!G){this.send(J,"* BAD Invalid command");return}let[,$,Y,Z]=G,L=Y.toUpperCase();switch(L){case"CAPABILITY":await this.handleCapability(J,$);break;case"NOOP":this.send(J,`${$} OK NOOP completed`);break;case"LOGOUT":await this.handleLogout(J,$);break;case"LOGIN":await this.handleLogin(J,$,Z||"");break;case"AUTHENTICATE":await this.handleAuthenticate(J,$,Z||"");break;case"SELECT":await this.handleSelect(J,$,Z||"");break;case"EXAMINE":await this.handleExamine(J,$,Z||"");break;case"LIST":await this.handleList(J,$,Z||"");break;case"LSUB":await this.handleLsub(J,$,Z||"");break;case"STATUS":await this.handleStatus(J,$,Z||"");break;case"FETCH":await this.handleFetch(J,$,Z||"");break;case"UID":await this.handleUid(J,$,Z||"");break;case"SEARCH":await this.handleSearch(J,$,Z||"");break;case"CLOSE":await this.handleClose(J,$);break;case"EXPUNGE":await this.handleExpunge(J,$);break;case"STORE":await this.handleStore(J,$,Z||"");break;case"COPY":await this.handleCopy(J,$,Z||"");break;case"IDLE":await this.handleIdle(J,$);break;case"STARTTLS":await this.handleStartTls(J,$);break;case"NAMESPACE":await this.handleNamespace(J,$);break;case"XLIST":await this.handleXlist(J,$,Z||"");break;case"CREATE":await this.handleCreate(J,$,Z||"");break;case"DELETE":await this.handleDelete(J,$,Z||"");break;case"SUBSCRIBE":await this.handleSubscribe(J,$,Z||"");break;case"UNSUBSCRIBE":await this.handleUnsubscribe(J,$,Z||"");break;case"RENAME":await this.handleRename(J,$,Z||"");break;case"APPEND":await this.handleAppend(J,$,Z||"");break;case"CHECK":await this.handleCheck(J,$);break;case"MOVE":await this.handleMove(J,$,Z||"");break;default:this.send(J,`${$} BAD Unknown command ${L}`)}}async handleCapability(J,X){let G=["IMAP4rev1","STARTTLS","AUTH=PLAIN","AUTH=LOGIN","IDLE","NAMESPACE","UIDPLUS","UNSELECT","CHILDREN","SPECIAL-USE","MOVE"];this.send(J,`* CAPABILITY ${G.join(" ")}`),this.send(J,`${X} OK CAPABILITY completed`)}async handleLogout(J,X){this.send(J,`* BYE ${this.config.domain} IMAP4rev1 server logging out`),this.send(J,`${X} OK LOGOUT completed`),J.state="logout",J.socket.end()}async handleLogin(J,X,G){let $=G.match(/^"?([^"\s]+)"?\s+"?([^"\s]+)"?$/);if(!$){this.send(J,`${X} BAD Invalid LOGIN syntax`);return}let[,Y,Z]=$,L=this.config.users[Y];if(!L||L.password!==Z){this.send(J,`${X} NO LOGIN failed`);return}J.username=Y,J.email=L.email,J.state="authenticated",this.send(J,`${X} OK LOGIN completed`)}async handleAuthenticate(J,X,G){this.send(J,`${X} NO Use LOGIN command`)}async handleSelect(J,X,G){if(J.state==="not_authenticated"){this.send(J,`${X} NO Must authenticate first`);return}let $=G.replace(/^"(.*)"$/,"$1").toUpperCase();J.selectedMailbox=$,J.state="selected",await this.loadMessages(J,!0);let Y=this.getMessagesForFolder(J.email||"",$),Z=Y.length,L=Y.filter((E)=>E.flags.includes("\\Recent")).length,O=Y.findIndex((E)=>!E.flags.includes("\\Seen")),Q=O>=0?O+1:0,V=this.getUidCounterForFolder(J.email||"",$)+1,_=this.getUidValidity(J.email||"");this.send(J,`* ${Z} EXISTS`),this.send(J,`* ${L} RECENT`),this.send(J,`* OK [UNSEEN ${Q||1}] First unseen message`),this.send(J,`* OK [UIDVALIDITY ${_}]`),this.send(J,`* OK [UIDNEXT ${V}]`),this.send(J,"* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)"),this.send(J,"* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft \\*)]"),this.send(J,`${X} OK [READ-WRITE] SELECT completed`)}async handleExamine(J,X,G){await this.handleSelect(J,X,G)}async handleNoop(J,X){if(J.state==="selected"&&J.selectedMailbox==="INBOX"){let $=this.getMessagesForFolder(J.email||"",J.selectedMailbox||"INBOX").length;await this.loadMessages(J,!0);let Y=this.getMessagesForFolder(J.email||"",J.selectedMailbox||"INBOX"),Z=Y.length;if(Z!==$){this.send(J,`* ${Z} EXISTS`);let L=Y.filter((O)=>O.flags.includes("\\Recent")).length;this.send(J,`* ${L} RECENT`)}}this.send(J,`${X} OK NOOP completed`)}async handleCheck(J,X){if(J.state==="selected"){await this.loadMessages(J,!0);let G=this.getMessagesForFolder(J.email||"",J.selectedMailbox||"INBOX");this.send(J,`* ${G.length} EXISTS`)}this.send(J,`${X} OK CHECK completed`)}async handleList(J,X,G){if(J.state==="not_authenticated"){this.send(J,`${X} NO Must authenticate first`);return}let $=G.match(/^"?([^"]*)"?\s+"?([^"]*)"?$/);if(!$){this.send(J,`${X} BAD Invalid LIST syntax`);return}let[,Y,Z]=$;if(Z==="*"||Z==="%"||Z==="")this.send(J,'* LIST (\\HasNoChildren) "/" "INBOX"'),this.send(J,'* LIST (\\HasNoChildren \\Sent) "/" "Sent"'),this.send(J,'* LIST (\\HasNoChildren \\Drafts) "/" "Drafts"'),this.send(J,'* LIST (\\HasNoChildren \\Trash) "/" "Trash"'),this.send(J,'* LIST (\\HasNoChildren \\Junk) "/" "Junk"'),this.send(J,'* LIST (\\HasNoChildren \\Archive) "/" "Archive"'),this.send(J,'* LIST (\\HasNoChildren \\All) "/" "All Mail"');else if(Z.toUpperCase()==="INBOX")this.send(J,'* LIST (\\HasNoChildren) "/" "INBOX"');else{let L=Z.toUpperCase();if(L==="SENT"||L==="*SENT*")this.send(J,'* LIST (\\HasNoChildren \\Sent) "/" "Sent"');if(L==="DRAFTS"||L==="*DRAFT*")this.send(J,'* LIST (\\HasNoChildren \\Drafts) "/" "Drafts"');if(L==="TRASH"||L==="*TRASH*")this.send(J,'* LIST (\\HasNoChildren \\Trash) "/" "Trash"');if(L==="JUNK"||L==="SPAM"||L==="*JUNK*"||L==="*SPAM*")this.send(J,'* LIST (\\HasNoChildren \\Junk) "/" "Junk"');if(L==="ARCHIVE"||L==="*ARCHIVE*")this.send(J,'* LIST (\\HasNoChildren \\Archive) "/" "Archive"')}this.send(J,`${X} OK LIST completed`)}async handleLsub(J,X,G){if(J.state==="not_authenticated"){this.send(J,`${X} NO Must authenticate first`);return}let $=G.match(/^"?([^"]*)"?\s+"?([^"]*)"?$/);if(!$){this.send(J,`${X} BAD Invalid LSUB syntax`);return}let[,Y,Z]=$;if(Z==="*"||Z==="%"||Z==="")this.send(J,'* LSUB (\\HasNoChildren) "/" "INBOX"'),this.send(J,'* LSUB (\\HasNoChildren \\Sent) "/" "Sent"'),this.send(J,'* LSUB (\\HasNoChildren \\Drafts) "/" "Drafts"'),this.send(J,'* LSUB (\\HasNoChildren \\Trash) "/" "Trash"'),this.send(J,'* LSUB (\\HasNoChildren \\Junk) "/" "Junk"'),this.send(J,'* LSUB (\\HasNoChildren \\Archive) "/" "Archive"'),this.send(J,'* LSUB (\\HasNoChildren \\All) "/" "All Mail"');else if(Z.toUpperCase()==="INBOX")this.send(J,'* LSUB (\\HasNoChildren) "/" "INBOX"');this.send(J,`${X} OK LSUB completed`)}async handleStatus(J,X,G){if(J.state==="not_authenticated"){this.send(J,`${X} NO Must authenticate first`);return}let $=G.match(/^"?([^"]+)"?\s+\(([^)]+)\)$/i);if(!$){this.send(J,`${X} BAD Invalid STATUS syntax`);return}let[,Y,Z]=$;await this.loadMessagesForFolder(J,Y);let L=this.getMessagesForFolder(J.email||"",Y)||[],O=Z.toUpperCase().split(/\s+/),Q=[];for(let V of O)switch(V){case"MESSAGES":Q.push(`MESSAGES ${L.length}`);break;case"RECENT":Q.push(`RECENT ${L.filter((_)=>_.flags.includes("\\Recent")).length}`);break;case"UIDNEXT":Q.push(`UIDNEXT ${this.getUidCounterForFolder(J.email||"",Y)+1}`);break;case"UIDVALIDITY":Q.push(`UIDVALIDITY ${this.getUidValidity(J.email||"")}`);break;case"UNSEEN":Q.push(`UNSEEN ${L.filter((_)=>!_.flags.includes("\\Seen")).length}`);break}this.send(J,`* STATUS "${Y}" (${Q.join(" ")})`),this.send(J,`${X} OK STATUS completed`)}async handleFetch(J,X,G){if(J.state!=="selected"){this.send(J,`${X} NO Must select mailbox first`);return}let $=G.match(/^(\S+)\s+(.+)$/i);if(!$){this.send(J,`${X} BAD Invalid FETCH syntax`);return}let[,Y,Z]=$,L=J.selectedMailbox||"INBOX",O=this.getMessagesForFolder(J.email||"",L),Q=this.parseSequenceSet(Y,O.length);for(let V of Q){let _=O[V-1];if(!_)continue;let E=await this.buildFetchResponse(J,_,V,Z);this.send(J,`* ${V} FETCH ${E}`)}this.send(J,`${X} OK FETCH completed`)}async handleUid(J,X,G){if(J.state!=="selected"){this.send(J,`${X} NO Must select mailbox first`);return}let $=G.match(/^(\S+)\s+(.+)$/i);if(!$){this.send(J,`${X} BAD Invalid UID syntax`);return}let[,Y,Z]=$;switch(Y.toUpperCase()){case"FETCH":await this.handleUidFetch(J,X,Z);break;case"SEARCH":await this.handleUidSearch(J,X,Z);break;case"STORE":await this.handleUidStore(J,X,Z);break;case"COPY":await this.handleUidCopy(J,X,Z);break;case"MOVE":await this.handleUidMove(J,X,Z);break;case"EXPUNGE":await this.handleUidExpunge(J,X,Z);break;default:this.send(J,`${X} BAD Unknown UID command`)}}async handleUidFetch(J,X,G){let $=G.match(/^(\S+)\s+(.+)$/i);if(!$){this.send(J,`${X} BAD Invalid UID FETCH syntax`);return}let[,Y,Z]=$,L=J.selectedMailbox||"INBOX",O=this.getMessagesForFolder(J.email||"",L),Q=O.length>0?Math.max(...O.map((_)=>_.uid)):0,V=this.parseSequenceSet(Y,Q);for(let _ of V){let E=O.findIndex((R)=>R.uid===_);if(E===-1)continue;let z=O[E],F=await this.buildFetchResponse(J,z,E+1,Z,!0);this.send(J,`* ${E+1} FETCH ${F}`)}this.send(J,`${X} OK UID FETCH completed`)}async handleSearch(J,X,G){if(J.state!=="selected"){this.send(J,`${X} NO Must select mailbox first`);return}let $=J.selectedMailbox||"INBOX",Y=this.getMessagesForFolder(J.email||"",$);if(Y.length===0)this.send(J,"* SEARCH");else{let Z=Y.map((L,O)=>O+1);this.send(J,`* SEARCH ${Z.join(" ")}`)}this.send(J,`${X} OK SEARCH completed`)}async handleUidSearch(J,X,G){let $=J.selectedMailbox||"INBOX",Y=this.getMessagesForFolder(J.email||"",$);if(Y.length===0)this.send(J,"* SEARCH");else{let Z=Y.map((L)=>L.uid);this.send(J,`* SEARCH ${Z.join(" ")}`)}this.send(J,`${X} OK UID SEARCH completed`)}async handleStore(J,X,G){if(J.state!=="selected"){this.send(J,`${X} NO Must select mailbox first`);return}let $=G.match(/^(\S+)\s+([+-]?FLAGS(?:\.SILENT)?)\s+\(([^)]*)\)/i);if(!$){this.send(J,`${X} BAD Invalid STORE syntax`);return}let[,Y,Z,L]=$,O=J.selectedMailbox||"INBOX",Q=this.getMessagesForFolder(J.email||"",O),V=this.parseSequenceSet(Y,Q.length),_=Z.toUpperCase().includes(".SILENT"),E=L.split(/\s+/).filter((F)=>F),z=await this.loadFlags(J.email||"");for(let F of V){let R=Q[F-1];if(!R)continue;if(Z.startsWith("+")){for(let U of E)if(!R.flags.includes(U))R.flags.push(U)}else if(Z.startsWith("-"))R.flags=R.flags.filter((U)=>!E.includes(U));else R.flags=[...E];if(z[R.key]=[...R.flags],!_)this.send(J,`* ${F} FETCH (FLAGS (${R.flags.join(" ")}))`)}await this.saveFlags(J.email||""),this.send(J,`${X} OK STORE completed`)}async handleUidStore(J,X,G){if(J.state!=="selected"){this.send(J,`${X} NO Must select mailbox first`);return}let $=G.match(/^(\S+)\s+([+-]?FLAGS(?:\.SILENT)?)\s+\(([^)]*)\)/i);if(!$){this.send(J,`${X} BAD Invalid UID STORE syntax`);return}let[,Y,Z,L]=$,O=J.selectedMailbox||"INBOX",Q=this.getMessagesForFolder(J.email||"",O),V=Q.length>0?Math.max(...Q.map((R)=>R.uid)):0,_=this.parseSequenceSet(Y,V),E=Z.toUpperCase().includes(".SILENT"),z=L.split(/\s+/).filter((R)=>R),F=await this.loadFlags(J.email||"");for(let R of _){let U=Q.findIndex((T)=>T.uid===R);if(U===-1)continue;let B=Q[U];if(Z.startsWith("+")){for(let T of z)if(!B.flags.includes(T))B.flags.push(T)}else if(Z.startsWith("-"))B.flags=B.flags.filter((T)=>!z.includes(T));else B.flags=[...z];if(F[B.key]=[...B.flags],!E)this.send(J,`* ${U+1} FETCH (UID ${B.uid} FLAGS (${B.flags.join(" ")}))`)}await this.saveFlags(J.email||""),this.send(J,`${X} OK UID STORE completed`)}async handleCopy(J,X,G){if(J.state!=="selected"){this.send(J,`${X} NO Must select mailbox first`);return}let $=G.match(/^(\S+)\s+"?([^"]+)"?$/i);if(!$){this.send(J,`${X} BAD Invalid COPY syntax`);return}let[,Y,Z]=$,L=J.selectedMailbox||"INBOX",O=this.getMessagesForFolder(J.email||"",L),Q=this.parseSequenceSet(Y,O.length),V=this.getFolderPrefix(Z);for(let _ of Q){let E=O[_-1];if(!E)continue;try{let z=E.raw||await this.s3.getObject(this.config.bucket,E.key),F=E.key.split("/").pop()||`${Date.now()}`,R=`${V}${F}`;await this.s3.putObject({bucket:this.config.bucket,key:R,body:z,contentType:"message/rfc822"}),console.log(`Copied message from ${E.key} to ${R}`)}catch(z){console.error(`Failed to copy message: ${z}`)}}this.send(J,`${X} OK COPY completed`)}async handleUidCopy(J,X,G){if(J.state!=="selected"){this.send(J,`${X} NO Must select mailbox first`);return}let $=G.match(/^(\S+)\s+"?([^"]+)"?$/i);if(!$){this.send(J,`${X} BAD Invalid UID COPY syntax`);return}let[,Y,Z]=$,L=J.selectedMailbox||"INBOX",O=this.getMessagesForFolder(J.email||"",L),Q=O.length>0?Math.max(...O.map((E)=>E.uid)):0,V=this.parseSequenceSet(Y,Q),_=this.getFolderPrefix(Z);for(let E of V){let z=O.find((F)=>F.uid===E);if(!z)continue;try{let F=z.raw||await this.s3.getObject(this.config.bucket,z.key),R=z.key.split("/").pop()||`${Date.now()}`,U=`${_}${R}`;await this.s3.putObject({bucket:this.config.bucket,key:U,body:F,contentType:"message/rfc822"}),console.log(`UID COPY: Copied message from ${z.key} to ${U}`)}catch(F){console.error(`Failed to copy message: ${F}`)}}this.send(J,`${X} OK UID COPY completed`)}async handleMove(J,X,G){if(J.state!=="selected"){this.send(J,`${X} NO Must select mailbox first`);return}let $=G.match(/^(\S+)\s+"?([^"]+)"?$/i);if(!$){this.send(J,`${X} BAD Invalid MOVE syntax`);return}let[,Y,Z]=$,L=J.selectedMailbox||"INBOX",O=this.getMessagesForFolder(J.email||"",L),Q=this.parseSequenceSet(Y,O.length),V=this.getFolderPrefix(Z),_=[];for(let F of Q){let R=O[F-1];if(!R)continue;try{let U=R.raw||await this.s3.getObject(this.config.bucket,R.key),B=R.key.split("/").pop()||`${Date.now()}`,T=`${V}${B}`;await this.s3.putObject({bucket:this.config.bucket,key:T,body:U,contentType:"message/rfc822"}),await this.s3.deleteObject(this.config.bucket,R.key),console.log(`MOVE: ${R.key} -> ${T}`),_.push(F)}catch(U){console.error(`Failed to move message: ${U}`)}}let E=[..._].sort((F,R)=>R-F);for(let F of E)this.send(J,`* ${F} EXPUNGE`);let z=O.filter((F,R)=>!_.includes(R+1));this.setMessagesForFolder(J.email||"",L,z),this.send(J,`* ${z.length} EXISTS`),this.send(J,`${X} OK MOVE completed`)}async handleUidMove(J,X,G){if(J.state!=="selected"){this.send(J,`${X} NO Must select mailbox first`);return}let $=G.match(/^(\S+)\s+"?([^"]+)"?$/i);if(!$){this.send(J,`${X} BAD Invalid UID MOVE syntax`);return}let[,Y,Z]=$,L=J.selectedMailbox||"INBOX",O=this.getMessagesForFolder(J.email||"",L),Q=O.length>0?Math.max(...O.map((R)=>R.uid)):0,V=this.parseSequenceSet(Y,Q),_=this.getFolderPrefix(Z),E=[];for(let R of V){let U=O.findIndex((T)=>T.uid===R);if(U===-1)continue;let B=O[U];try{let T=B.raw||await this.s3.getObject(this.config.bucket,B.key),M=B.key.split("/").pop()||`${Date.now()}`,A=`${_}${M}`;await this.s3.putObject({bucket:this.config.bucket,key:A,body:T,contentType:"message/rfc822"}),await this.s3.deleteObject(this.config.bucket,B.key),console.log(`UID MOVE: ${B.key} -> ${A}`),E.push(U+1)}catch(T){console.error(`Failed to move message: ${T}`)}}let z=[...E].sort((R,U)=>U-R);for(let R of z)this.send(J,`* ${R} EXPUNGE`);let F=O.filter((R,U)=>!E.includes(U+1));this.setMessagesForFolder(J.email||"",L,F),this.send(J,`* ${F.length} EXISTS`),this.send(J,`${X} OK UID MOVE completed`)}async handleUidExpunge(J,X,G){if(J.state!=="selected"){this.send(J,`${X} NO Must select mailbox first`);return}let $=J.selectedMailbox||"INBOX",Y=this.getMessagesForFolder(J.email||"",$),Z=G.trim(),L=Y.length>0?Math.max(...Y.map((E)=>E.uid)):0,O=this.parseSequenceSet(Z,L),Q=[],V=[];for(let E=Y.length-1;E>=0;E--){let z=Y[E];if(O.includes(z.uid)&&z.flags.includes("\\Deleted"))Q.push(E+1),V.push(z.key)}for(let E of V)try{await this.s3.deleteObject(this.config.bucket,E),console.log(`Deleted from S3: ${E}`)}catch(z){console.error(`Failed to delete from S3: ${E}`,z)}for(let E of Q)this.send(J,`* ${E} EXPUNGE`);let _=Y.filter((E,z)=>!Q.includes(z+1));if(this.setMessagesForFolder(J.email||"",$,_),Q.length>0)this.send(J,`* ${_.length} EXISTS`);this.send(J,`${X} OK UID EXPUNGE completed`)}async handleClose(J,X){J.state="authenticated",J.selectedMailbox=void 0,this.send(J,`${X} OK CLOSE completed`)}async handleExpunge(J,X){if(J.state!=="selected"){this.send(J,`${X} NO Must select mailbox first`);return}let G=J.selectedMailbox||"INBOX",$=this.getMessagesForFolder(J.email||"",G),Y=[],Z=[];for(let O=$.length-1;O>=0;O--)if($[O].flags.includes("\\Deleted"))Y.push(O+1),Z.push($[O].key);for(let O of Z)try{await this.s3.deleteObject(this.config.bucket,O),console.log(`EXPUNGE: Deleted from S3: ${O}`)}catch(Q){console.error(`Failed to delete from S3: ${O}`,Q)}for(let O of Y)this.send(J,`* ${O} EXPUNGE`);let L=$.filter((O)=>!O.flags.includes("\\Deleted"));if(this.setMessagesForFolder(J.email||"",G,L),Y.length>0)this.send(J,`* ${L.length} EXISTS`);this.send(J,`${X} OK EXPUNGE completed`)}async handleIdle(J,X){J.idling=!0,J.idleTag=X,this.send(J,"+ idling")}async handleStartTls(J,X){if(!this.config.tls?.key||!this.config.tls?.cert){this.send(J,`${X} NO TLS not configured`);return}this.send(J,`${X} OK Begin TLS negotiation`);let G={key:k(this.config.tls.key),cert:k(this.config.tls.cert),isServer:!0},$=new x.TLSSocket(J.socket,G);J.socket=$}async handleNamespace(J,X){this.send(J,'* NAMESPACE (("" "/")) NIL NIL'),this.send(J,`${X} OK NAMESPACE completed`)}async loadMessages(J,X=!1){let G=J.email,$=J.selectedMailbox||"INBOX";if(!G)return;let Y=`${G}:${$}`,Z=this.cacheTimestamp.get(Y)||0,O=Date.now()-Z;if(!X&&O<this.CACHE_TTL_MS){if(this.getMessagesForFolder(G,$).length>0)return}let Q=await this.loadFlags(G);await this.loadUidMapping(G);try{if(this.isAllMailFolder($)){await this.loadAllMailFolder(G,Q);return}let V=this.getFolderPrefix($),_=await this.s3.list({bucket:this.config.bucket,prefix:V,maxKeys:1000}),E=[],z=!1;for(let R of _){if(!R.Key)continue;let U="";try{U=await this.s3.getObject(this.config.bucket,R.Key)}catch{continue}let B=this.parseHeaders(U);if($==="INBOX"){if(!(B.to||"").toLowerCase().includes(G.toLowerCase()))continue}let T=this.uidMappingCache.get(G)?.[R.Key],M=this.getOrAssignUid(G,R.Key);if(!T)z=!0;let A=Q[R.Key]||[];E.push({uid:M,key:R.Key,size:R.Size||U.length,date:new Date(R.LastModified||Date.now()),flags:[...A],from:B.from,to:B.to,subject:B.subject,raw:U})}if(E.sort((R,U)=>R.uid-U.uid),z)await this.saveUidMapping(G);let F=E.length>0?Math.max(...E.map((R)=>R.uid)):0;this.setUidCounterForFolder(G,$,F),this.setMessagesForFolder(G,$,E),this.cacheTimestamp.set(Y,Date.now()),console.log(`Loaded ${E.length} messages for ${G} in ${$} from S3 (hasNewMessages=${z})`)}catch(V){console.error(`Error loading messages from S3: ${V}`)}}async loadAllMailFolder(J,X){let $=`${J}:ALL MAIL`;await this.loadUidMapping(J);let Y=[this.config.prefix||"incoming/","sent/","trash/","drafts/","junk/","archive/"],Z=[],L=new Set,O=!1;for(let V of Y)try{let _=await this.s3.list({bucket:this.config.bucket,prefix:V,maxKeys:1000});for(let E of _){if(!E.Key||L.has(E.Key))continue;L.add(E.Key);let z="";try{z=await this.s3.getObject(this.config.bucket,E.Key)}catch{continue}let F=this.parseHeaders(z);if(V===(this.config.prefix||"incoming/")){if(!(F.to||"").toLowerCase().includes(J.toLowerCase()))continue}let R=this.uidMappingCache.get(J)?.[E.Key],U=this.getOrAssignUid(J,E.Key);if(!R)O=!0;let B=X[E.Key]||[];Z.push({uid:U,key:E.Key,size:E.Size||z.length,date:new Date(E.LastModified||Date.now()),flags:[...B],from:F.from,to:F.to,subject:F.subject,raw:z})}}catch(_){console.error(`Error loading messages from prefix ${V}: ${_}`)}if(Z.sort((V,_)=>V.uid-_.uid),O)await this.saveUidMapping(J);let Q=Z.length>0?Math.max(...Z.map((V)=>V.uid)):0;this.setUidCounterForFolder(J,"ALL MAIL",Q),this.setMessagesForFolder(J,"ALL MAIL",Z),this.cacheTimestamp.set($,Date.now()),console.log(`Loaded ${Z.length} total messages for ${J} in All Mail from S3 (hasNewMessages=${O})`)}async loadMessagesForFolder(J,X){let G=J.email;if(!G)return;let $=`${G}:${X}`,Y=this.cacheTimestamp.get($)||0;if(Date.now()-Y<this.CACHE_TTL_MS){if(this.getMessagesForFolder(G,X).length>0)return}let O=await this.loadFlags(G);if(await this.loadUidMapping(G),this.isAllMailFolder(X)){await this.loadAllMailFolder(G,O);return}try{let Q=this.getFolderPrefix(X),V=await this.s3.list({bucket:this.config.bucket,prefix:Q,maxKeys:1000}),_=[],E=!1;for(let F of V){if(!F.Key)continue;let R="";try{R=await this.s3.getObject(this.config.bucket,F.Key)}catch{continue}let U=this.parseHeaders(R);if(X.toUpperCase()==="INBOX"){if(!(U.to||"").toLowerCase().includes(G.toLowerCase()))continue}let B=this.uidMappingCache.get(G)?.[F.Key],T=this.getOrAssignUid(G,F.Key);if(!B)E=!0;let M=O[F.Key]||[];_.push({uid:T,key:F.Key,size:F.Size||R.length,date:new Date(F.LastModified||Date.now()),flags:[...M],from:U.from,to:U.to,subject:U.subject,raw:R})}if(_.sort((F,R)=>F.uid-R.uid),E)await this.saveUidMapping(G);let z=_.length>0?Math.max(..._.map((F)=>F.uid)):0;this.setUidCounterForFolder(G,X,z),this.setMessagesForFolder(G,X,_),this.cacheTimestamp.set($,Date.now())}catch(Q){console.error(`Error loading messages for folder ${X}: ${Q}`),this.setMessagesForFolder(G,X,[])}}parseHeaders(J){let X={},$=(J.split(`\r
8
- \r
9
- `)[0]||J.split(`
10
-
11
- `)[0]||"").split(/\r?\n/),Y="",Z="";for(let L of $)if(L.startsWith(" ")||L.startsWith("\t"))Z+=` ${L.trim()}`;else{if(Y)X[Y.toLowerCase()]=Z;let O=L.indexOf(":");if(O>0)Y=L.substring(0,O).trim(),Z=L.substring(O+1).trim()}if(Y)X[Y.toLowerCase()]=Z;return X}async buildFetchResponse(J,X,G,$,Y=!1){let Z=$.toUpperCase(),L=[];if(Y||Z.includes("UID"))L.push(`UID ${X.uid}`);if(Z.includes("FLAGS"))L.push(`FLAGS (${X.flags.join(" ")})`);if(Z.includes("RFC822.SIZE"))L.push(`RFC822.SIZE ${X.size}`);if(Z.includes("INTERNALDATE"))L.push(`INTERNALDATE "${this.formatImapDate(X.date)}"`);if(Z.includes("ENVELOPE")){let O=this.buildEnvelope(X);L.push(`ENVELOPE ${O}`)}if(Z.includes("BODYSTRUCTURE")||Z.includes("BODY.PEEK[STRUCTURE]"))L.push(`BODYSTRUCTURE ("TEXT" "PLAIN" ("CHARSET" "UTF-8") NIL NIL "7BIT" ${X.size} ${Math.ceil(X.size/80)} NIL NIL NIL)`);if(Z.includes("BODY[]")||Z.includes("BODY.PEEK[]")||Z.includes("RFC822")){let O=X.raw||await this.s3.getObject(this.config.bucket,X.key);L.push(`BODY[] {${O.length}}\r
12
- ${O}`)}if(Z.includes("BODY[HEADER]")||Z.includes("BODY.PEEK[HEADER]")){let O=X.raw||await this.s3.getObject(this.config.bucket,X.key),Q=O.split(`\r
13
- \r
14
- `)[0]||O.split(`
15
-
16
- `)[0]||"";L.push(`BODY[HEADER] {${Q.length+2}}\r
17
- ${Q}\r
18
- `)}if(Z.includes("BODY[TEXT]")||Z.includes("BODY.PEEK[TEXT]")){let O=X.raw||await this.s3.getObject(this.config.bucket,X.key),V=O.split(`\r
19
- \r
20
- `).slice(1).join(`\r
21
- \r
22
- `)||O.split(`
23
-
24
- `).slice(1).join(`
25
-
26
- `);L.push(`BODY[TEXT] {${V.length}}\r
27
- ${V}`)}return`(${L.join(" ")})`}buildEnvelope(J){let X=(L)=>L?`"${L.replace(/"/g,"\\\"")}"`:"NIL",G=X(J.date.toUTCString()),$=X(J.subject),Y=J.from?`((NIL NIL "${J.from.split("@")[0]}" "${J.from.split("@")[1]||""}"))`:"NIL",Z=J.to?`((NIL NIL "${J.to.split("@")[0]}" "${J.to.split("@")[1]||""}"))`:"NIL";return`(${G} ${$} ${Y} ${Y} ${Y} ${Z} NIL NIL NIL NIL)`}formatImapDate(J){let X=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],G=J.getDate().toString().padStart(2,"0"),$=X[J.getMonth()],Y=J.getFullYear(),Z=J.getHours().toString().padStart(2,"0"),L=J.getMinutes().toString().padStart(2,"0"),O=J.getSeconds().toString().padStart(2,"0"),Q="+0000";return`${G}-${$}-${Y} ${Z}:${L}:${O} +0000`}parseSequenceSet(J,X){let G=[];for(let $ of J.split(","))if($.includes(":")){let[Y,Z]=$.split(":"),L=Y==="*"?X:Number.parseInt(Y,10),O=Z==="*"?X:Number.parseInt(Z,10);for(let Q=Math.min(L,O);Q<=Math.max(L,O);Q++)if(Q>0&&Q<=X)G.push(Q)}else{let Y=$==="*"?X:Number.parseInt($,10);if(Y>0&&Y<=X)G.push(Y)}return[...new Set(G)].sort(($,Y)=>$-Y)}getUidValidity(J){let X=0;for(let G=0;G<J.length;G++)X=(X<<5)-X+J.charCodeAt(G),X=X&X;return Math.abs(X)||1}getFolderPrefix(J){switch(J.toUpperCase()){case"INBOX":return this.config.prefix||"incoming/";case"TRASH":return"trash/";case"SENT":return"sent/";case"DRAFTS":return"drafts/";case"JUNK":return"junk/";case"ARCHIVE":return"archive/";case"ALL MAIL":return"";default:return`folders/${J.toLowerCase()}/`}}isAllMailFolder(J){return J.toUpperCase()==="ALL MAIL"}async loadFlags(J){let X=this.flagsCache.get(J);if(X)return X;try{let G=`flags/${J.replace("@","_at_")}.json`,$=await this.s3.getObject(this.config.bucket,G),Y=JSON.parse($);return this.flagsCache.set(J,Y),Y}catch{let G={};return this.flagsCache.set(J,G),G}}async saveFlags(J){let X=this.flagsCache.get(J);if(!X)return;try{let G=`flags/${J.replace("@","_at_")}.json`;await this.s3.putObject({bucket:this.config.bucket,key:G,body:JSON.stringify(X),contentType:"application/json"}),console.log(`Saved flags for ${J}`)}catch(G){console.error(`Failed to save flags for ${J}:`,G)}}async loadUidMapping(J){let X=this.uidMappingCache.get(J),G=this.nextUidCache.get(J);if(X&&G!==void 0)return{mapping:X,nextUid:G};try{let $=`uids/${J.replace("@","_at_")}.json`,Y=await this.s3.getObject(this.config.bucket,$),Z=JSON.parse(Y),L=Z.mapping||{},O=Z.nextUid||1;return this.uidMappingCache.set(J,L),this.nextUidCache.set(J,O),{mapping:L,nextUid:O}}catch{let $={};return this.uidMappingCache.set(J,$),this.nextUidCache.set(J,1),{mapping:$,nextUid:1}}}async saveUidMapping(J){let X=this.uidMappingCache.get(J),G=this.nextUidCache.get(J);if(!X)return;try{let $=`uids/${J.replace("@","_at_")}.json`;await this.s3.putObject({bucket:this.config.bucket,key:$,body:JSON.stringify({mapping:X,nextUid:G}),contentType:"application/json"})}catch($){console.error(`Failed to save UID mapping for ${J}:`,$)}}getOrAssignUid(J,X){let G=this.uidMappingCache.get(J);if(!G)G={},this.uidMappingCache.set(J,G);if(G[X])return G[X];let $=this.nextUidCache.get(J)||1;return G[X]=$,$++,this.nextUidCache.set(J,$),G[X]}getMessagesForFolder(J,X){let G=this.messageCache.get(J);if(!G)return[];return G.get(X.toUpperCase())||[]}setMessagesForFolder(J,X,G){let $=this.messageCache.get(J);if(!$)$=new Map,this.messageCache.set(J,$);$.set(X.toUpperCase(),G)}getUidCounterForFolder(J,X){let G=this.uidCounter.get(J);if(!G)return 0;return G.get(X.toUpperCase())||0}setUidCounterForFolder(J,X,G){let $=this.uidCounter.get(J);if(!$)$=new Map,this.uidCounter.set(J,$);$.set(X.toUpperCase(),G)}async handleXlist(J,X,G){if(J.state==="not_authenticated"){this.send(J,`${X} NO Must authenticate first`);return}let $=G.match(/^"?([^"]*)"?\s+"?([^"]*)"?$/);if(!$){this.send(J,`${X} BAD Invalid XLIST syntax`);return}let[,Y,Z]=$;if(Z==="*"||Z==="%"||Z==="")this.send(J,'* XLIST (\\HasNoChildren \\Inbox) "/" "INBOX"'),this.send(J,'* XLIST (\\HasNoChildren \\Sent) "/" "Sent"'),this.send(J,'* XLIST (\\HasNoChildren \\Drafts) "/" "Drafts"'),this.send(J,'* XLIST (\\HasNoChildren \\Trash) "/" "Trash"'),this.send(J,'* XLIST (\\HasNoChildren \\Spam) "/" "Junk"'),this.send(J,'* XLIST (\\HasNoChildren \\AllMail) "/" "All Mail"'),this.send(J,'* XLIST (\\HasNoChildren) "/" "Archive"');this.send(J,`${X} OK XLIST completed`)}async handleCreate(J,X,G){if(J.state==="not_authenticated"){this.send(J,`${X} NO Must authenticate first`);return}let $=G.replace(/^"(.*)"$/,"$1");this.send(J,`${X} OK CREATE completed`)}async handleDelete(J,X,G){if(J.state==="not_authenticated"){this.send(J,`${X} NO Must authenticate first`);return}let $=G.replace(/^"(.*)"$/,"$1").toUpperCase();if(["INBOX","SENT","DRAFTS","TRASH","JUNK","ARCHIVE","ALL MAIL"].includes($)){this.send(J,`${X} NO Cannot delete system folder`);return}this.send(J,`${X} OK DELETE completed`)}async handleSubscribe(J,X,G){if(J.state==="not_authenticated"){this.send(J,`${X} NO Must authenticate first`);return}this.send(J,`${X} OK SUBSCRIBE completed`)}async handleUnsubscribe(J,X,G){if(J.state==="not_authenticated"){this.send(J,`${X} NO Must authenticate first`);return}this.send(J,`${X} OK UNSUBSCRIBE completed`)}async handleRename(J,X,G){if(J.state==="not_authenticated"){this.send(J,`${X} NO Must authenticate first`);return}let $=G.match(/^"?([^"\s]+)"?\s+"?([^"\s]+)"?$/);if(!$){this.send(J,`${X} BAD Invalid RENAME syntax`);return}let Y=$[1].toUpperCase();if(["INBOX","SENT","DRAFTS","TRASH","JUNK","ARCHIVE","ALL MAIL"].includes(Y)){this.send(J,`${X} NO Cannot rename system folder`);return}this.send(J,`${X} OK RENAME completed`)}async handleAppend(J,X,G){if(J.state==="not_authenticated"){this.send(J,`${X} NO Must authenticate first`);return}this.send(J,`${X} OK APPEND completed`)}}async function L2(J){let X=new E1(J);return await X.start(),X}import*as F1 from"node:crypto";import*as R1 from"node:net";import*as f from"node:tls";import{readFileSync as b}from"node:fs";class W1{config;ses;s3;server;tlsServer;sessions=new Map;constructor(J){if(this.config={port:587,tlsPort:465,host:"0.0.0.0",...J},this.ses=new z1(J.region||"us-east-1"),J.sentBucket)this.s3=new w(J.region||"us-east-1")}async start(){if(this.server=R1.createServer((J)=>{this.handleConnection(J,!1)}),this.server.listen(this.config.port,this.config.host,()=>{console.log(`SMTP server listening on ${this.config.host}:${this.config.port} (STARTTLS)`)}),this.config.tls?.key&&this.config.tls?.cert){let J={key:b(this.config.tls.key),cert:b(this.config.tls.cert)};this.tlsServer=f.createServer(J,(X)=>{this.handleConnection(X,!0)}),this.tlsServer.listen(this.config.tlsPort,this.config.host,()=>{console.log(`SMTP server listening on ${this.config.host}:${this.config.tlsPort} (TLS)`)})}}async stop(){if(this.server)this.server.close();if(this.tlsServer)this.tlsServer.close();for(let J of this.sessions.values())J.socket.destroy();this.sessions.clear()}handleConnection(J,X){let G=F1.randomUUID(),$={id:G,socket:J,secure:X,state:"greeting",authenticated:!1,rcptTo:[],dataBuffer:"",tlsUpgraded:X};this.sessions.set(G,$),console.log(`SMTP connection from ${J.remoteAddress} (session: ${G.slice(0,8)})`),this.send($,`220 ${this.config.domain} ESMTP Mail Server`),$.state="ready";let Y="";J.on("data",async(Z)=>{Y+=Z.toString();let L;while((L=Y.indexOf(`\r
28
- `))!==-1){let O=Y.slice(0,L);if(Y=Y.slice(L+2),$.state==="data")await this.handleDataLine($,O);else await this.handleCommand($,O)}}),J.on("close",()=>{console.log(`SMTP session ${G.slice(0,8)} closed`),this.sessions.delete(G)}),J.on("error",(Z)=>{console.error(`SMTP session ${G.slice(0,8)} error:`,Z.message),this.sessions.delete(G)})}send(J,X){if(!J.socket.destroyed)J.socket.write(X+`\r
29
- `)}async handleCommand(J,X){let G=X.split(" ")[0].toUpperCase(),$=X.slice(G.length).trim();switch(console.log(`SMTP CMD [${J.username||"anon"}]: ${G} ${$.includes("AUTH")?"***":$}`),G){case"EHLO":case"HELO":await this.handleEhlo(J,$);break;case"STARTTLS":await this.handleStartTls(J);break;case"AUTH":await this.handleAuth(J,$);break;case"MAIL":await this.handleMailFrom(J,$);break;case"RCPT":await this.handleRcptTo(J,$);break;case"DATA":await this.handleData(J);break;case"RSET":this.resetSession(J),this.send(J,"250 OK");break;case"NOOP":this.send(J,"250 OK");break;case"QUIT":this.send(J,`221 ${this.config.domain} closing connection`),J.socket.end();break;default:this.send(J,"500 Unrecognized command")}}async handleEhlo(J,X){let G=[`250-${this.config.domain} Hello ${X}`,"250-SIZE 26214400","250-8BITMIME","250-PIPELINING"];if(!J.secure&&this.config.tls?.key)G.push("250-STARTTLS");G.push("250-AUTH PLAIN LOGIN"),G.push("250 OK");for(let $ of G)this.send(J,$)}async handleStartTls(J){if(J.secure||J.tlsUpgraded){this.send(J,"503 TLS already active");return}if(!this.config.tls?.key||!this.config.tls?.cert){this.send(J,"454 TLS not available");return}this.send(J,"220 Ready to start TLS");let X={key:b(this.config.tls.key),cert:b(this.config.tls.cert),isServer:!0},G=new f.TLSSocket(J.socket,X);J.socket=G,J.secure=!0,J.tlsUpgraded=!0,this.resetSession(J)}async handleAuth(J,X){let G=X.split(" "),$=G[0].toUpperCase();if($==="PLAIN")if(G[1])await this.handleAuthPlain(J,G[1]);else this.send(J,"334 "),J.state="ready";else if($==="LOGIN"){this.send(J,"334 VXNlcm5hbWU6");let Y=J.socket.listeners("data")[0];J.socket.removeAllListeners("data");let Z="username",L="";J.socket.on("data",async(O)=>{let Q=O.toString().trim();if(Z==="username")L=Buffer.from(Q,"base64").toString("utf-8"),Z="password",this.send(J,"334 UGFzc3dvcmQ6");else if(Z==="password"){let V=Buffer.from(Q,"base64").toString("utf-8");J.socket.removeAllListeners("data"),J.socket.on("data",Y),await this.authenticateUser(J,L,V)}})}else this.send(J,"504 Unrecognized authentication mechanism")}async handleAuthPlain(J,X){try{let $=Buffer.from(X,"base64").toString("utf-8").split("\x00"),Y=$.length===3?$[1]:$[0],Z=$.length===3?$[2]:$[1];await this.authenticateUser(J,Y,Z)}catch(G){this.send(J,"535 Authentication failed")}}async authenticateUser(J,X,G){let $=X.includes("@")?X.split("@")[0]:X,Y=this.config.users[$];if(Y&&Y.password===G)J.authenticated=!0,J.username=$,J.email=Y.email,this.send(J,"235 Authentication successful"),console.log(`SMTP AUTH success: ${$}`);else this.send(J,"535 Authentication failed"),console.log(`SMTP AUTH failed: ${X}`)}async handleMailFrom(J,X){if(!J.authenticated){this.send(J,"530 Authentication required");return}let G=X.match(/FROM:\s*<([^>]*)>/i);if(!G){this.send(J,"501 Syntax error in MAIL FROM");return}let $=G[1];if(!$.endsWith(`@${this.config.domain}`)){this.send(J,`553 Sender address must be from @${this.config.domain}`);return}J.mailFrom=$,J.state="mail",this.send(J,"250 OK")}async handleRcptTo(J,X){if(!J.authenticated){this.send(J,"530 Authentication required");return}if(!J.mailFrom){this.send(J,"503 MAIL FROM required first");return}let G=X.match(/TO:\s*<([^>]*)>/i);if(!G){this.send(J,"501 Syntax error in RCPT TO");return}J.rcptTo.push(G[1]),J.state="rcpt",this.send(J,"250 OK")}async handleData(J){if(!J.authenticated){this.send(J,"530 Authentication required");return}if(J.rcptTo.length===0){this.send(J,"503 RCPT TO required first");return}J.state="data",J.dataBuffer="",this.send(J,"354 Start mail input; end with <CRLF>.<CRLF>")}async handleDataLine(J,X){if(X===".")await this.sendEmail(J);else{let G=X.startsWith(".")?X.slice(1):X;J.dataBuffer+=G+`\r
30
- `}}async sendEmail(J){try{let X=J.dataBuffer,G=await this.ses.sendRawEmail({source:J.mailFrom,destinations:J.rcptTo,rawMessage:X});if(console.log(`SMTP: Email sent via SES, MessageId: ${G.MessageId}`),this.s3&&this.config.sentBucket)try{let $=`${this.config.sentPrefix||"sent/"}${J.email}/${Date.now()}-${G.MessageId}`;await this.s3.putObject({bucket:this.config.sentBucket,key:$,body:X,contentType:"message/rfc822"}),console.log(`SMTP: Email stored in S3: ${$}`)}catch($){console.error("SMTP: Failed to store sent email in S3 (email was sent successfully):",$.message)}this.send(J,`250 OK Message accepted, ID: ${G.MessageId}`),this.resetSession(J)}catch(X){console.error("SMTP: Failed to send email:",X.message),this.send(J,`451 Failed to send: ${X.message}`),this.resetSession(J)}}resetSession(J){J.state="ready",J.mailFrom=void 0,J.rcptTo=[],J.dataBuffer=""}}async function E2(J){let X=new W1(J);return await X.start(),X}class h{config;sns;s3;scheduler;constructor(J={}){if(this.config={region:"us-east-1",inboxPrefix:"sms/inbox/",scheduledPrefix:"sms/scheduled/",receiptPrefix:"sms/receipts/",...J},this.sns=new S(this.config.region),this.config.inboxBucket||this.config.scheduledBucket)this.s3=new w(this.config.region);if(this.config.schedulerLambdaArn)this.scheduler=new p(this.config.region)}async send(J){let{to:X,from:G,type:$,scheduledAt:Y,templateId:Z,templateVariables:L}=J,O=G||this.config.defaultSender,Q=J.body;if(Z){let _=await this.getTemplate(Z);if(_)Q=this.applyTemplate(_.body,L||{})}if(Y&&Y>new Date)return{messageId:"",scheduledId:(await this.scheduleMessage({to:X,body:Q,from:O,scheduledAt:Y,templateId:Z,templateVariables:L})).id};return{messageId:(await this.sns.publish({PhoneNumber:X,Message:Q,MessageAttributes:{"AWS.SNS.SMS.SMSType":{DataType:"String",StringValue:$||"Transactional"},...O&&{"AWS.SNS.SMS.SenderID":{DataType:"String",StringValue:O}}}})).MessageId||""}}async sendText(J,X,G){return this.send({to:J,body:X,from:G})}async getInbox(J={}){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let X=J.prefix||this.config.inboxPrefix||"sms/inbox/",G=await this.s3.list({bucket:this.config.inboxBucket,prefix:X,maxKeys:J.maxResults||100}),$=[];for(let Y of G||[]){if(!Y.Key)continue;try{let Z=await this.s3.getObject(this.config.inboxBucket,Y.Key),L=this.parseIncomingSms(Z,Y.Key);if(L)$.push(L)}catch(Z){console.error(`Failed to read SMS ${Y.Key}:`,Z)}}return $.sort((Y,Z)=>Z.timestamp.getTime()-Y.timestamp.getTime())}async getMessage(J){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");try{let X=await this.s3.getObject(this.config.inboxBucket,J);return this.parseIncomingSms(X,J)}catch(X){return null}}async deleteMessage(J){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");await this.s3.deleteObject(this.config.inboxBucket,J)}async moveMessage(J,X){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let G=await this.s3.getObject(this.config.inboxBucket,J),$=J.split("/").pop()||`${Date.now()}.json`,Y=`${X}${$}`;return await this.s3.putObject({bucket:this.config.inboxBucket,key:Y,body:G,contentType:"application/json"}),await this.s3.deleteObject(this.config.inboxBucket,J),Y}async archiveMessage(J){return this.moveMessage(J,"sms/archive/")}async markAsRead(J){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let X=await this.s3.getObject(this.config.inboxBucket,J),G=JSON.parse(X);G.read=!0,G.readAt=new Date().toISOString(),await this.s3.putObject({bucket:this.config.inboxBucket,key:J,body:JSON.stringify(G,null,2),contentType:"application/json"})}async markAsUnread(J){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let X=await this.s3.getObject(this.config.inboxBucket,J),G=JSON.parse(X);G.read=!1,delete G.readAt,await this.s3.putObject({bucket:this.config.inboxBucket,key:J,body:JSON.stringify(G,null,2),contentType:"application/json"})}async getUnreadCount(){return(await this.getInbox({maxResults:1000})).filter((X)=>!X.read).length}async markManyAsRead(J){await Promise.all(J.map((X)=>this.markAsRead(X)))}async deleteMany(J){await Promise.all(J.map((X)=>this.deleteMessage(X)))}async getInboxCount(){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");return(await this.s3.list({bucket:this.config.inboxBucket,prefix:this.config.inboxPrefix||"sms/inbox/",maxKeys:1000}))?.length||0}getConversationId(J,X){let G=[D(J),D(X)].sort();return`${G[0]}_${G[1]}`}async getConversation(J,X){let G=await this.getInbox({maxResults:1000}),$=D(J);return G.filter((Y)=>{let Z=D(Y.from),L=D(Y.to);return Z===$||L===$}).sort((Y,Z)=>Y.timestamp.getTime()-Z.timestamp.getTime())}async getConversations(){let J=await this.getInbox({maxResults:1000}),X=new Map;for(let G of J){let $=D(G.from);if(!X.has($))X.set($,{phoneNumber:$,messages:[]});X.get($).messages.push(G)}return Array.from(X.values()).map((G)=>({phoneNumber:G.phoneNumber,lastMessage:G.messages[0],messageCount:G.messages.length,unreadCount:G.messages.filter(($)=>!$.read).length})).sort((G,$)=>$.lastMessage.timestamp.getTime()-G.lastMessage.timestamp.getTime())}async storeIncomingSms(J){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let X=J.timestamp||new Date,G=J.messageId||`${Date.now()}-${Math.random().toString(36).slice(2)}`,$=`${this.config.inboxPrefix}${X.toISOString().split("T")[0]}/${G}.json`,Y={from:J.from,to:J.to,body:J.body,messageId:G,timestamp:X.toISOString(),raw:J.raw};return await this.s3.putObject({bucket:this.config.inboxBucket,key:$,body:JSON.stringify(Y,null,2),contentType:"application/json"}),$}async isOptedOut(J){return this.sns.checkIfPhoneNumberIsOptedOut(J)}async getOptedOutNumbers(){return(await this.sns.listPhoneNumbersOptedOut()).phoneNumbers||[]}async optIn(J){await this.sns.optInPhoneNumber(J)}async isInSandbox(){return(await this.sns.getSMSSandboxAccountStatus()).IsInSandbox}async addSandboxNumber(J){await this.sns.createSMSSandboxPhoneNumber(J)}async verifySandboxNumber(J,X){await this.sns.verifySMSSandboxPhoneNumber(J,X)}async listSandboxNumbers(){return(await this.sns.listSMSSandboxPhoneNumbers())?.PhoneNumbers||[]}async scheduleMessage(J){let X=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!X)throw Error("Scheduled bucket not configured");let G=`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,$=`${this.config.scheduledPrefix}${G}.json`,Y={id:G,to:J.to,body:J.body,from:J.from,scheduledAt:J.scheduledAt,status:"pending",createdAt:new Date,templateId:J.templateId,templateVariables:J.templateVariables};if(await this.s3.putObject({bucket:X,key:$,body:JSON.stringify(Y,null,2),contentType:"application/json"}),this.scheduler&&this.config.schedulerLambdaArn&&this.config.schedulerRoleArn){let Z=`at(${J.scheduledAt.toISOString().replace(/\.\d{3}Z$/,"")})`;await this.scheduler.createLambdaSchedule({name:`sms-${G}`,scheduleExpression:Z,functionArn:this.config.schedulerLambdaArn,input:JSON.stringify({scheduledSmsId:G,bucket:X,key:$})})}return Y}async getScheduledMessages(){let J=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!J)throw Error("Scheduled bucket not configured");let X=await this.s3.list({bucket:J,prefix:this.config.scheduledPrefix||"sms/scheduled/",maxKeys:1000}),G=[];for(let $ of X||[]){if(!$.Key)continue;try{let Y=await this.s3.getObject(J,$.Key),Z=JSON.parse(Y);if(Z.scheduledAt=new Date(Z.scheduledAt),Z.createdAt=new Date(Z.createdAt),Z.sentAt)Z.sentAt=new Date(Z.sentAt);G.push(Z)}catch{}}return G.sort(($,Y)=>$.scheduledAt.getTime()-Y.scheduledAt.getTime())}async getScheduledMessage(J){let X=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!X)throw Error("Scheduled bucket not configured");let G=`${this.config.scheduledPrefix}${J}.json`;try{let $=await this.s3.getObject(X,G),Y=JSON.parse($);if(Y.scheduledAt=new Date(Y.scheduledAt),Y.createdAt=new Date(Y.createdAt),Y.sentAt)Y.sentAt=new Date(Y.sentAt);return Y}catch{return null}}async cancelScheduledMessage(J){let X=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!X)throw Error("Scheduled bucket not configured");let G=`${this.config.scheduledPrefix}${J}.json`,$=await this.getScheduledMessage(J);if(!$)throw Error(`Scheduled SMS ${J} not found`);if($.status="cancelled",await this.s3.putObject({bucket:X,key:G,body:JSON.stringify($,null,2),contentType:"application/json"}),this.scheduler)try{await this.scheduler.deleteRule(`sms-${J}`,!0)}catch{}}async sendScheduledMessage(J){let X=await this.getScheduledMessage(J);if(!X)throw Error(`Scheduled SMS ${J} not found`);if(X.status!=="pending")throw Error(`Scheduled SMS ${J} is not pending (status: ${X.status})`);try{let G=await this.send({to:X.to,body:X.body,from:X.from}),$=this.config.scheduledBucket||this.config.inboxBucket,Y=`${this.config.scheduledPrefix}${J}.json`;return X.status="sent",X.sentAt=new Date,X.messageId=G.messageId,await this.s3.putObject({bucket:$,key:Y,body:JSON.stringify(X,null,2),contentType:"application/json"}),G}catch(G){let $=this.config.scheduledBucket||this.config.inboxBucket,Y=`${this.config.scheduledPrefix}${J}.json`;throw X.status="failed",X.error=G.message,await this.s3.putObject({bucket:$,key:Y,body:JSON.stringify(X,null,2),contentType:"application/json"}),G}}async sendAt(J,X,G,$){return this.scheduleMessage({to:J,body:X,scheduledAt:G,from:$})}async sendAfter(J,X,G,$){let Y=new Date(Date.now()+G*60*1000);return this.scheduleMessage({to:J,body:X,scheduledAt:Y,from:$})}async createTemplate(J){let X=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!X)throw Error("Templates bucket not configured");let G=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,$=`sms/templates/${G}.json`,Z=(J.body.match(/\{\{(\w+)\}\}/g)||[]).map((O)=>O.replace(/\{\{|\}\}/g,"")),L={id:G,name:J.name,body:J.body,description:J.description,variables:[...new Set(Z)],createdAt:new Date};return await this.s3.putObject({bucket:X,key:$,body:JSON.stringify(L,null,2),contentType:"application/json"}),L}async getTemplates(){let J=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!J)throw Error("Templates bucket not configured");let X=await this.s3.list({bucket:J,prefix:"sms/templates/",maxKeys:1000}),G=[];for(let $ of X||[]){if(!$.Key)continue;try{let Y=await this.s3.getObject(J,$.Key),Z=JSON.parse(Y);if(Z.createdAt=new Date(Z.createdAt),Z.updatedAt)Z.updatedAt=new Date(Z.updatedAt);G.push(Z)}catch{}}return G.sort(($,Y)=>$.name.localeCompare(Y.name))}async getTemplate(J){let X=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!X)return null;let G=`sms/templates/${J}.json`;try{let $=await this.s3.getObject(X,G),Y=JSON.parse($);if(Y.createdAt=new Date(Y.createdAt),Y.updatedAt)Y.updatedAt=new Date(Y.updatedAt);return Y}catch{return null}}async getTemplateByName(J){return(await this.getTemplates()).find((G)=>G.name===J)||null}async updateTemplate(J,X){let G=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!G)throw Error("Templates bucket not configured");let $=await this.getTemplate(J);if(!$)throw Error(`Template ${J} not found`);if(X.name)$.name=X.name;if(X.body){$.body=X.body;let Z=X.body.match(/\{\{(\w+)\}\}/g)||[];$.variables=[...new Set(Z.map((L)=>L.replace(/\{\{|\}\}/g,"")))]}if(X.description!==void 0)$.description=X.description;$.updatedAt=new Date;let Y=`sms/templates/${J}.json`;return await this.s3.putObject({bucket:G,key:Y,body:JSON.stringify($,null,2),contentType:"application/json"}),$}async deleteTemplate(J){let X=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!X)throw Error("Templates bucket not configured");await this.s3.deleteObject(X,`sms/templates/${J}.json`)}async sendTemplate(J,X,G,$){let Y=await this.getTemplate(X);if(!Y)throw Error(`Template ${X} not found`);let Z=this.applyTemplate(Y.body,G);return this.send({to:J,body:Z,from:$})}applyTemplate(J,X){return J.replace(/\{\{(\w+)\}\}/g,(G,$)=>{return X[$]!==void 0?X[$]:G})}async storeDeliveryReceipt(J){let X=this.config.receiptBucket||this.config.inboxBucket;if(!this.s3||!X)throw Error("Receipt bucket not configured");let G=J.timestamp||new Date,$=`${this.config.receiptPrefix}${G.toISOString().split("T")[0]}/${J.messageId}.json`,Y={messageId:J.messageId,status:J.status,timestamp:G,to:J.to,from:J.from,errorCode:J.errorCode,errorMessage:J.errorMessage,carrierName:J.carrierName,priceInUsd:J.priceInUsd,messagePartCount:J.messagePartCount,raw:J.raw};return await this.s3.putObject({bucket:X,key:$,body:JSON.stringify(Y,null,2),contentType:"application/json"}),$}async getDeliveryReceipt(J){let X=this.config.receiptBucket||this.config.inboxBucket;if(!this.s3||!X)return null;let G=new Date;for(let $=0;$<7;$++){let Y=new Date(G);Y.setDate(Y.getDate()-$);let Z=Y.toISOString().split("T")[0],L=`${this.config.receiptPrefix}${Z}/${J}.json`;try{let O=await this.s3.getObject(X,L),Q=JSON.parse(O);return Q.timestamp=new Date(Q.timestamp),Q}catch{}}return null}async getDeliveryReceipts(J={}){let X=this.config.receiptBucket||this.config.inboxBucket;if(!this.s3||!X)throw Error("Receipt bucket not configured");let G=await this.s3.list({bucket:X,prefix:this.config.receiptPrefix,maxKeys:J.maxResults||100}),$=[];for(let Y of G||[]){if(!Y.Key||!Y.Key.endsWith(".json"))continue;try{let Z=await this.s3.getObject(X,Y.Key),L=JSON.parse(Z);if(L.timestamp=new Date(L.timestamp),J.status&&L.status!==J.status)continue;$.push(L)}catch{}}return $.sort((Y,Z)=>Z.timestamp.getTime()-Y.timestamp.getTime())}async getDeliveryStatus(J){return(await this.getDeliveryReceipt(J))?.status||"unknown"}async waitForDelivery(J,X={}){let G=X.timeoutMs||30000,$=X.pollIntervalMs||1000,Y=Date.now();while(Date.now()-Y<G){let Z=await this.getDeliveryReceipt(J);if(Z&&(Z.status==="delivered"||Z.status==="failed"))return Z;await new Promise((L)=>setTimeout(L,$))}return await this.getDeliveryReceipt(J)}async getFailedMessages(J=100){return this.getDeliveryReceipts({maxResults:J,status:"failed"})}async getDeliveryStats(J={}){let X=await this.getDeliveryReceipts({maxResults:J.maxMessages||1000}),G=J.since||new Date(0),$=X.filter((V)=>V.timestamp>=G),Y=$.filter((V)=>V.status==="delivered").length,Z=$.filter((V)=>V.status==="failed").length,L=$.filter((V)=>V.status==="pending"||V.status==="sent").length,O=$.filter((V)=>V.priceInUsd!==void 0).map((V)=>V.priceInUsd),Q=O.length>0?O.reduce((V,_)=>V+_,0)/O.length:0;return{total:$.length,delivered:Y,failed:Z,pending:L,deliveryRate:$.length>0?Y/$.length:0,averagePriceUsd:Q}}async sendAndTrack(J){let X=await this.send(J);return{messageId:X.messageId,trackDelivery:()=>this.getDeliveryReceipt(X.messageId),waitForDelivery:(G)=>this.waitForDelivery(X.messageId,{timeoutMs:G})}}parseIncomingSms(J,X){try{let G=JSON.parse(J);if(G.Type==="Notification"&&G.Message){let $=JSON.parse(G.Message);return this.extractSmsFields($,X,G.Timestamp)}return this.extractSmsFields(G,X)}catch{return{key:X,from:"unknown",to:"unknown",body:J,timestamp:new Date}}}extractSmsFields(J,X,G){return{key:X,from:J.from||J.originationNumber||J.OriginationNumber||J.sourceNumber||"unknown",to:J.to||J.destinationNumber||J.DestinationNumber||J.destinationAddress||"unknown",body:J.body||J.message||J.messageBody||J.Message||J.text||"",timestamp:new Date(G||J.timestamp||J.Timestamp||Date.now()),messageId:J.messageId||J.MessageId||J.inboundMessageId,originationNumber:J.originationNumber||J.OriginationNumber,destinationNumber:J.destinationNumber||J.DestinationNumber,raw:J}}}function U2(J){let X=new h({region:J.region||"us-east-1",inboxBucket:J.bucket,inboxPrefix:J.prefix||"sms/inbox/"});return async(G)=>{if(console.log("Incoming SMS event:",JSON.stringify(G)),G.Records){for(let $ of G.Records)if($.Sns){let Y=$.Sns,Z;try{Z=JSON.parse(Y.Message)}catch{Z={body:Y.Message}}let L={from:Z.originationNumber||Z.from||"unknown",to:Z.destinationNumber||Z.to||"unknown",body:Z.messageBody||Z.body||Z.message||"",messageId:Z.inboundMessageId||Y.MessageId,timestamp:new Date(Y.Timestamp),raw:Z},O=await X.storeIncomingSms(L);if(console.log(`Stored incoming SMS: ${O}`),J.onMessage){let Q=await X.getMessage(O);if(Q)await J.onMessage(Q)}}}return{statusCode:200,body:JSON.stringify({message:"SMS processed"})}}}function B2(J){let X=new h({region:J.region||"us-east-1",scheduledBucket:J.bucket,scheduledPrefix:J.scheduledPrefix||"sms/scheduled/"});return async(G)=>{console.log("Scheduled SMS event:",JSON.stringify(G));let{scheduledSmsId:$}=G;if(!$)return console.error("Missing scheduledSmsId in event"),{statusCode:400,body:JSON.stringify({error:"Missing scheduledSmsId"})};try{let Y=await X.sendScheduledMessage($);if(console.log(`Sent scheduled SMS ${$}: ${Y.messageId}`),J.onSent){let Z=await X.getScheduledMessage($);if(Z)await J.onSent(Z)}return{statusCode:200,body:JSON.stringify({messageId:Y.messageId})}}catch(Y){if(console.error(`Failed to send scheduled SMS ${$}:`,Y.message),J.onError){let Z=await X.getScheduledMessage($);if(Z)await J.onError(Z,Y)}return{statusCode:500,body:JSON.stringify({error:Y.message})}}}}function T2(J){return new h(J)}function H2(J){let X=new h({region:J.region||"us-east-1",receiptBucket:J.bucket,receiptPrefix:J.receiptPrefix||"sms/receipts/"});return async(G)=>{console.log("Delivery receipt event:",JSON.stringify(G));let $=[];if(G.Records){for(let Y of G.Records)if(Y.Sns){let Z=Y.Sns,L;try{L=JSON.parse(Z.Message)}catch{L=Z.Message}let O=B0(L,Z);if(O)$.push(O)}}if(G.notification?.messageId){let Y=T0(G);if(Y)$.push(Y)}for(let Y of $){if(await X.storeDeliveryReceipt(Y),console.log(`Stored delivery receipt: ${Y.messageId} - ${Y.status}`),J.onReceipt)await J.onReceipt(Y);if(Y.status==="delivered"&&J.onDelivered)await J.onDelivered(Y);if(Y.status==="failed"&&J.onFailed)await J.onFailed(Y);if(J.webhookUrl)await H0(J.webhookUrl,Y,J.webhookSecret)}return{statusCode:200,body:JSON.stringify({processed:$.length})}}}function B0(J,X){if(J.status!==void 0&&J.PhoneNumber){let G=J.status==="SUCCESS"?"delivered":J.status==="FAILURE"?"failed":J.status==="PENDING"?"pending":"unknown";return{messageId:J.messageId||X.MessageId,status:G,timestamp:new Date(J.timestamp||X.Timestamp),to:J.PhoneNumber||J.destination||"",from:J.SenderId,errorCode:J.providerResponse?.statusCode,errorMessage:J.providerResponse?.statusMessage||J.providerResponse?.errorMessage,carrierName:J.providerResponse?.carrierName,priceInUsd:J.priceInUSD,messagePartCount:J.numberOfMessageParts,raw:J}}if(J.messageId)return{messageId:J.messageId,status:U1(J.status||J.deliveryStatus||"unknown"),timestamp:new Date(J.timestamp||X?.Timestamp||Date.now()),to:J.to||J.destination||J.phoneNumber||"",from:J.from||J.source,errorCode:J.errorCode,errorMessage:J.errorMessage||J.error,raw:J};return null}function T0(J){let X=J.notification;return{messageId:X.messageId,status:U1(X.status),timestamp:new Date(X.timestamp||Date.now()),to:J.destination||X.destination,from:X.senderId,errorCode:X.providerResponse?.statusCode,errorMessage:X.providerResponse?.statusMessage,carrierName:X.providerResponse?.carrierName,priceInUsd:X.priceInUSD,messagePartCount:X.numberOfMessageParts,raw:J}}function U1(J){let X=(J||"").toUpperCase();if(X==="DELIVERED"||X==="SUCCESS"||X==="TEXT_DELIVERED")return"delivered";if(X==="FAILED"||X==="FAILURE"||X==="TEXT_FAILED")return"failed";if(X==="SENT"||X==="TEXT_SENT")return"sent";if(X==="PENDING"||X==="QUEUED")return"pending";return"unknown"}async function H0(J,X,G){let $=JSON.stringify(X),Y={"Content-Type":"application/json"};if(G){let L=(await import("node:crypto")).createHmac("sha256",G).update($).digest("hex");Y["X-SMS-Signature"]=L,Y["X-SMS-Timestamp"]=Date.now().toString()}try{let Z=await fetch(J,{method:"POST",headers:Y,body:$});if(!Z.ok)console.error(`Webhook failed: ${Z.status} ${Z.statusText}`)}catch(Z){console.error(`Webhook error: ${Z.message}`)}}function D(J){if(!J)return"";let X=J.replace(/[^\d+]/g,"");if(!X.startsWith("+")){if(X.length===10)X=`+1${X}`;else if(X.length===11&&X.startsWith("1"))X=`+${X}`}return X}function w2(J,X="national"){let G=D(J);if(X==="e164")return G;if(G.startsWith("+1")&&G.length===12){let $=G.slice(2),Y=$.slice(0,3),Z=$.slice(3,6),L=$.slice(6);if(X==="national")return`(${Y}) ${Z}-${L}`;return`+1 (${Y}) ${Z}-${L}`}return G}function D2(J){let X=D(J);if(!X.startsWith("+"))return!1;let G=X.slice(1);if(G.length<10||G.length>15)return!1;return/^\d+$/.test(G)}function M2(J){let X=D(J);if(!X.startsWith("+"))return null;let G={"1":"US/CA","7":"RU/KZ","20":"EG","27":"ZA","30":"GR","31":"NL","32":"BE","33":"FR","34":"ES","36":"HU","39":"IT","40":"RO","41":"CH","43":"AT","44":"GB","45":"DK","46":"SE","47":"NO","48":"PL","49":"DE","52":"MX","54":"AR","55":"BR","56":"CL","57":"CO","60":"MY","61":"AU","62":"ID","63":"PH","64":"NZ","65":"SG","66":"TH","81":"JP","82":"KR","84":"VN","86":"CN","90":"TR","91":"IN","92":"PK","93":"AF","94":"LK","98":"IR"},$=X.slice(1);for(let Y of[1,2,3]){let Z=$.slice(0,Y);if(G[Z])return G[Z]}return null}function A2(J,X){return D(J)===D(X)}class y{config;connect;s3;transcribe;constructor(J={}){if(this.config={region:"us-east-1",voicemailPrefix:"voicemail/",recordingsPrefix:"recordings/",transcriptionLanguage:"en-US",...J},this.config.connectInstanceId)this.connect=new g(this.config.region);if(this.config.voicemailBucket)this.s3=new w(this.config.region);if(this.config.enableTranscription)this.transcribe=new c(this.config.region)}async call(J){if(!this.connect||!this.config.connectInstanceId)throw Error("Connect instance ID required for voice calls. Set connectInstanceId in config.");let X=J.from||this.config.defaultCallerId,G=J.contactFlowId||this.config.connectContactFlowId;if(!G)throw Error("Contact flow ID required for Connect calls");return{callId:(await this.connect.makeCall({instanceId:this.config.connectInstanceId,contactFlowId:G,to:J.to,from:X,attributes:J.attributes})).ContactId||""}}async sendVoiceMessage(J){return{messageId:(await this.call({to:J.to,from:J.from,attributes:{message:J.message,voiceId:J.voiceId||"Joanna",languageCode:J.languageCode||"en-US"}})).callId}}async speak(J,X,G){return this.sendVoiceMessage({to:J,message:X,voiceId:G})}async getVoicemails(J={}){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let X=J.prefix||this.config.voicemailPrefix||"voicemail/",G=await this.s3.list({bucket:this.config.voicemailBucket,prefix:X,maxKeys:J.maxResults||100}),$=[];for(let Y of G||[]){if(!Y.Key)continue;if(Y.Key.endsWith(".json"))continue;try{let Z=await this.getVoicemailMetadata(Y.Key);if(Z)$.push({...Z,size:Y.Size})}catch(Z){console.error(`Failed to read voicemail ${Y.Key}:`,Z)}}return $.sort((Y,Z)=>Z.timestamp.getTime()-Y.timestamp.getTime())}async getVoicemail(J){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");return this.getVoicemailMetadata(J)}async getVoicemailAudioUrl(J,X=3600){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");return this.s3.getSignedUrl({bucket:this.config.voicemailBucket,key:J,expiresIn:X})}async deleteVoicemail(J){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");await this.s3.deleteObject(this.config.voicemailBucket,J);let X=J.replace(/\.[^/.]+$/,".json");try{await this.s3.deleteObject(this.config.voicemailBucket,X)}catch{}}async archiveVoicemail(J){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let G=`voicemail/archive/${J.split("/").pop()||`${Date.now()}.wav`}`;return await this.s3.copyObject({sourceBucket:this.config.voicemailBucket,sourceKey:J,destinationBucket:this.config.voicemailBucket,destinationKey:G}),await this.s3.deleteObject(this.config.voicemailBucket,J),G}async getVoicemailCount(){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");return(await this.s3.list({bucket:this.config.voicemailBucket,prefix:this.config.voicemailPrefix||"voicemail/",maxKeys:1000})||[]).filter((X)=>X.Key&&!X.Key.endsWith(".json")&&!X.Key.endsWith("/")).length}async getUnreadCount(){return(await this.getVoicemails({maxResults:1000})).filter((X)=>!X.read).length}async markAsRead(J){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let X=J.replace(/\.[^/.]+$/,".json");try{let G=await this.s3.getObject(this.config.voicemailBucket,X),$=JSON.parse(G);$.read=!0,$.readAt=new Date().toISOString(),await this.s3.putObject({bucket:this.config.voicemailBucket,key:X,body:JSON.stringify($,null,2),contentType:"application/json"})}catch{await this.s3.putObject({bucket:this.config.voicemailBucket,key:X,body:JSON.stringify({read:!0,readAt:new Date().toISOString()},null,2),contentType:"application/json"})}}async markAsUnread(J){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let X=J.replace(/\.[^/.]+$/,".json");try{let G=await this.s3.getObject(this.config.voicemailBucket,X),$=JSON.parse(G);$.read=!1,delete $.readAt,await this.s3.putObject({bucket:this.config.voicemailBucket,key:X,body:JSON.stringify($,null,2),contentType:"application/json"})}catch{}}async markManyAsRead(J){await Promise.all(J.map((X)=>this.markAsRead(X)))}async deleteMany(J){await Promise.all(J.map((X)=>this.deleteVoicemail(X)))}async transcribeVoicemail(J){if(!this.transcribe)throw Error("Transcription not enabled. Set enableTranscription: true in config");if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let X=`voicemail-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,G=`s3://${this.config.voicemailBucket}/${J}`,$=J.split(".").pop()?.toLowerCase(),Y=$==="mp3"?"mp3":$==="wav"?"wav":"wav";await this.transcribe.startTranscriptionJob({TranscriptionJobName:X,LanguageCode:this.config.transcriptionLanguage||"en-US",Media:{MediaFileUri:G},MediaFormat:Y,OutputBucketName:this.config.voicemailBucket,OutputKey:J.replace(/\.[^/.]+$/,"-transcript.json")});let Z=J.replace(/\.[^/.]+$/,".json");try{let L=await this.s3.getObject(this.config.voicemailBucket,Z),O=JSON.parse(L);O.transcriptionJobName=X,O.transcriptionStatus="processing",await this.s3.putObject({bucket:this.config.voicemailBucket,key:Z,body:JSON.stringify(O,null,2),contentType:"application/json"})}catch{await this.s3.putObject({bucket:this.config.voicemailBucket,key:Z,body:JSON.stringify({transcriptionJobName:X,transcriptionStatus:"processing"},null,2),contentType:"application/json"})}return{jobName:X}}async getTranscriptionStatus(J){if(!this.transcribe)throw Error("Transcription not enabled");let X=await this.transcribe.getTranscriptionJob({TranscriptionJobName:J}),G=X.TranscriptionJob?.TranscriptionJobStatus;if(G==="COMPLETED"&&X.TranscriptionJob?.Transcript?.TranscriptFileUri){let $=X.TranscriptionJob.Transcript.TranscriptFileUri;try{if(this.s3&&this.config.voicemailBucket&&$.includes(this.config.voicemailBucket)){let Y=$.split(this.config.voicemailBucket+"/")[1];if(Y){let Z=await this.s3.getObject(this.config.voicemailBucket,Y);return{status:"COMPLETED",transcription:JSON.parse(Z).results?.transcripts?.[0]?.transcript||""}}}}catch{}}return{status:G}}async updateTranscription(J,X){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let G=J.replace(/\.[^/.]+$/,".json");try{let $=await this.s3.getObject(this.config.voicemailBucket,G),Y=JSON.parse($);Y.transcription=X,Y.transcriptionStatus="completed",await this.s3.putObject({bucket:this.config.voicemailBucket,key:G,body:JSON.stringify(Y,null,2),contentType:"application/json"})}catch{await this.s3.putObject({bucket:this.config.voicemailBucket,key:G,body:JSON.stringify({transcription:X,transcriptionStatus:"completed"},null,2),contentType:"application/json"})}}async createGreeting(J){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let X=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,G;if(J.audioData)G=`greetings/${X}.wav`,await this.s3.putObject({bucket:this.config.voicemailBucket,key:G,body:J.audioData,contentType:"audio/wav"});let $={id:X,name:J.name,type:J.type,text:J.text,audioKey:G,voiceId:J.voiceId||"Joanna",languageCode:J.languageCode||"en-US",isActive:J.setActive||!1,createdAt:new Date};if(J.setActive)await this.deactivateGreetingsOfType(J.type),$.isActive=!0;return await this.s3.putObject({bucket:this.config.voicemailBucket,key:`greetings/${X}.json`,body:JSON.stringify($,null,2),contentType:"application/json"}),$}async getGreetings(){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let J=await this.s3.list({bucket:this.config.voicemailBucket,prefix:"greetings/",maxKeys:100}),X=[];for(let G of J||[]){if(!G.Key||!G.Key.endsWith(".json"))continue;try{let $=await this.s3.getObject(this.config.voicemailBucket,G.Key),Y=JSON.parse($);if(Y.createdAt=new Date(Y.createdAt),Y.updatedAt)Y.updatedAt=new Date(Y.updatedAt);X.push(Y)}catch{}}return X.sort((G,$)=>G.name.localeCompare($.name))}async getGreeting(J){if(!this.s3||!this.config.voicemailBucket)return null;try{let X=await this.s3.getObject(this.config.voicemailBucket,`greetings/${J}.json`),G=JSON.parse(X);if(G.createdAt=new Date(G.createdAt),G.updatedAt)G.updatedAt=new Date(G.updatedAt);return G}catch{return null}}async getActiveGreeting(J){return(await this.getGreetings()).find((G)=>G.type===J&&G.isActive)||null}async setActiveGreeting(J){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let X=await this.getGreeting(J);if(!X)throw Error(`Greeting ${J} not found`);await this.deactivateGreetingsOfType(X.type),X.isActive=!0,X.updatedAt=new Date,await this.s3.putObject({bucket:this.config.voicemailBucket,key:`greetings/${J}.json`,body:JSON.stringify(X,null,2),contentType:"application/json"})}async deactivateGreetingsOfType(J){let X=await this.getGreetings();for(let G of X)if(G.type===J&&G.isActive)G.isActive=!1,G.updatedAt=new Date,await this.s3.putObject({bucket:this.config.voicemailBucket,key:`greetings/${G.id}.json`,body:JSON.stringify(G,null,2),contentType:"application/json"})}async updateGreeting(J,X){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let G=await this.getGreeting(J);if(!G)throw Error(`Greeting ${J} not found`);if(X.name)G.name=X.name;if(X.text)G.text=X.text;if(X.audioData){let $=`greetings/${J}.wav`;await this.s3.putObject({bucket:this.config.voicemailBucket,key:$,body:X.audioData,contentType:"audio/wav"}),G.audioKey=$}return G.updatedAt=new Date,await this.s3.putObject({bucket:this.config.voicemailBucket,key:`greetings/${J}.json`,body:JSON.stringify(G,null,2),contentType:"application/json"}),G}async deleteGreeting(J){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let X=await this.getGreeting(J);if(X?.audioKey)try{await this.s3.deleteObject(this.config.voicemailBucket,X.audioKey)}catch{}await this.s3.deleteObject(this.config.voicemailBucket,`greetings/${J}.json`)}async getGreetingAudioUrl(J,X=3600){let G=await this.getGreeting(J);if(!G?.audioKey||!this.s3||!this.config.voicemailBucket)return null;return this.s3.getSignedUrl({bucket:this.config.voicemailBucket,key:G.audioKey,expiresIn:X})}async createForwardingRule(J){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let X=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,G={id:X,name:J.name,enabled:J.enabled!==!1,condition:J.condition,forwardTo:J.forwardTo,ringTimeout:J.ringTimeout||20,businessHours:J.businessHours,priority:J.priority||100,createdAt:new Date};return await this.s3.putObject({bucket:this.config.voicemailBucket,key:`forwarding/${X}.json`,body:JSON.stringify(G,null,2),contentType:"application/json"}),G}async getForwardingRules(){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let J=await this.s3.list({bucket:this.config.voicemailBucket,prefix:"forwarding/",maxKeys:100}),X=[];for(let G of J||[]){if(!G.Key||!G.Key.endsWith(".json"))continue;try{let $=await this.s3.getObject(this.config.voicemailBucket,G.Key),Y=JSON.parse($);if(Y.createdAt=new Date(Y.createdAt),Y.updatedAt)Y.updatedAt=new Date(Y.updatedAt);X.push(Y)}catch{}}return X.sort((G,$)=>G.priority-$.priority)}async getForwardingRule(J){if(!this.s3||!this.config.voicemailBucket)return null;try{let X=await this.s3.getObject(this.config.voicemailBucket,`forwarding/${J}.json`),G=JSON.parse(X);if(G.createdAt=new Date(G.createdAt),G.updatedAt)G.updatedAt=new Date(G.updatedAt);return G}catch{return null}}async updateForwardingRule(J,X){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let G=await this.getForwardingRule(J);if(!G)throw Error(`Forwarding rule ${J} not found`);if(X.name!==void 0)G.name=X.name;if(X.enabled!==void 0)G.enabled=X.enabled;if(X.condition!==void 0)G.condition=X.condition;if(X.forwardTo!==void 0)G.forwardTo=X.forwardTo;if(X.ringTimeout!==void 0)G.ringTimeout=X.ringTimeout;if(X.businessHours!==void 0)G.businessHours=X.businessHours;if(X.priority!==void 0)G.priority=X.priority;return G.updatedAt=new Date,await this.s3.putObject({bucket:this.config.voicemailBucket,key:`forwarding/${J}.json`,body:JSON.stringify(G,null,2),contentType:"application/json"}),G}async setForwardingRuleEnabled(J,X){await this.updateForwardingRule(J,{enabled:X})}async deleteForwardingRule(J){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");await this.s3.deleteObject(this.config.voicemailBucket,`forwarding/${J}.json`)}async getApplicableForwardingRule(J={}){let X=await this.getForwardingRules(),G=new Date;for(let $ of X){if(!$.enabled)continue;switch($.condition){case"always":return $;case"busy":if(J.isBusy)return $;break;case"no_answer":if(J.noAnswer)return $;break;case"unreachable":if(J.isUnreachable)return $;break;case"after_hours":if($.businessHours&&!this.isWithinBusinessHours(G,$.businessHours))return $;break}}return null}isWithinBusinessHours(J,X){let $=["sun","mon","tue","wed","thu","fri","sat"][J.getDay()],Y=`${J.getHours().toString().padStart(2,"0")}:${J.getMinutes().toString().padStart(2,"0")}`;for(let Z of X.schedule)if(Z.day===$){if(Y>=Z.start&&Y<=Z.end)return!0}return!1}async getRecordings(J={}){if(!this.s3||!this.config.voicemailBucket)throw Error("Recordings bucket not configured");let X=J.prefix||this.config.recordingsPrefix||"recordings/",G=await this.s3.list({bucket:this.config.voicemailBucket,prefix:X,maxKeys:J.maxResults||100}),$=[];for(let Y of G||[]){if(!Y.Key||Y.Key.endsWith(".json")||Y.Key.endsWith("/"))continue;try{let Z=Y.Key.replace(/\.[^/.]+$/,".json"),L={};try{let O=await this.s3.getObject(this.config.voicemailBucket,Z);L=JSON.parse(O)}catch{}$.push({key:Y.Key,contactId:L.contactId||Y.Key.split("/").pop()?.split(".")[0]||"",from:L.from,to:L.to,duration:L.duration||0,timestamp:new Date(Y.LastModified||Date.now()),contentType:"audio/wav",size:Y.Size})}catch(Z){console.error(`Failed to read recording ${Y.Key}:`,Z)}}return $.sort((Y,Z)=>Z.timestamp.getTime()-Y.timestamp.getTime())}async getRecordingUrl(J,X=3600){if(!this.s3||!this.config.voicemailBucket)throw Error("Recordings bucket not configured");return this.s3.getSignedUrl({bucket:this.config.voicemailBucket,key:J,expiresIn:X})}async storeVoicemail(J){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let X=J.timestamp||new Date,G=`${Date.now()}-${Math.random().toString(36).slice(2)}`,$=J.contentType==="audio/mp3"?"mp3":"wav",Y=`${this.config.voicemailPrefix}${X.toISOString().split("T")[0]}/${G}.${$}`,Z=`${this.config.voicemailPrefix}${X.toISOString().split("T")[0]}/${G}.json`;await this.s3.putObject({bucket:this.config.voicemailBucket,key:Y,body:J.audioData,contentType:J.contentType||"audio/wav"});let L={from:J.from,to:J.to,duration:J.duration||0,transcription:J.transcription,timestamp:X.toISOString(),audioKey:Y};return await this.s3.putObject({bucket:this.config.voicemailBucket,key:Z,body:JSON.stringify(L,null,2),contentType:"application/json"}),Y}async storeRecording(J){if(!this.s3||!this.config.voicemailBucket)throw Error("Recordings bucket not configured");let X=J.timestamp||new Date,G=J.contentType==="audio/mp3"?"mp3":"wav",$=`${this.config.recordingsPrefix}${X.toISOString().split("T")[0]}/${J.contactId}.${G}`,Y=`${this.config.recordingsPrefix}${X.toISOString().split("T")[0]}/${J.contactId}.json`;await this.s3.putObject({bucket:this.config.voicemailBucket,key:$,body:J.audioData,contentType:J.contentType||"audio/wav"});let Z={contactId:J.contactId,from:J.from,to:J.to,duration:J.duration||0,timestamp:X.toISOString(),audioKey:$};return await this.s3.putObject({bucket:this.config.voicemailBucket,key:Y,body:JSON.stringify(Z,null,2),contentType:"application/json"}),$}async getVoicemailMetadata(J){if(!this.s3||!this.config.voicemailBucket)return null;let X=J.replace(/\.[^/.]+$/,".json");try{let G=await this.s3.getObject(this.config.voicemailBucket,X),$=JSON.parse(G);return{key:J,from:$.from||"unknown",to:$.to||"unknown",duration:$.duration||0,timestamp:new Date($.timestamp||Date.now()),transcription:$.transcription,contentType:J.endsWith(".mp3")?"audio/mp3":"audio/wav",raw:$}}catch{return{key:J,from:"unknown",to:"unknown",duration:0,timestamp:new Date,contentType:J.endsWith(".mp3")?"audio/mp3":"audio/wav"}}}}function q2(J){let X=new y({region:J.region||"us-east-1",voicemailBucket:J.bucket,voicemailPrefix:J.prefix||"voicemail/"});return async(G)=>{if(console.log("Incoming voicemail event:",JSON.stringify(G)),G.Records){for(let $ of G.Records)if($.s3){let Y=$.s3.bucket.name,Z=decodeURIComponent($.s3.object.key.replace(/\+/g," "));if(Z.endsWith(".json"))continue;if(console.log(`Processing voicemail: ${Y}/${Z}`),J.onVoicemail){let L=await X.getVoicemail(Z);if(L)await J.onVoicemail(L)}}}if(G.Details?.ContactData){let $=G.Details.ContactData;if(console.log(`Connect voicemail from: ${$.CustomerEndpoint?.Address}`),J.onVoicemail&&G.audioData){let Y=await X.storeVoicemail({from:$.CustomerEndpoint?.Address||"unknown",to:$.SystemEndpoint?.Address||"unknown",audioData:G.audioData,duration:G.duration,transcription:G.transcription}),Z=await X.getVoicemail(Y);if(Z)await J.onVoicemail(Z)}}return{statusCode:200,body:JSON.stringify({message:"Voicemail processed"})}}}function P2(J){let X=new y({region:J.region||"us-east-1",voicemailBucket:J.bucket,recordingsPrefix:J.prefix||"recordings/"});return async(G)=>{if(console.log("Recording event:",JSON.stringify(G)),G.Records){for(let $ of G.Records)if($.s3){let Y=$.s3.bucket.name,Z=decodeURIComponent($.s3.object.key.replace(/\+/g," "));if(Z.endsWith(".json"))continue;if(console.log(`Processing recording: ${Y}/${Z}`),J.onRecording){let L=await X.getRecordings({prefix:Z});if(L.length>0)await J.onRecording(L[0])}}}return{statusCode:200,body:JSON.stringify({message:"Recording processed"})}}}function C2(J){return new y(J)}class n{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async createCase(J){return await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.CreateCase"},body:JSON.stringify({subject:J.subject,communicationBody:J.communicationBody,serviceCode:J.serviceCode,categoryCode:J.categoryCode,severityCode:J.severityCode||"normal",ccEmailAddresses:J.ccEmailAddresses,language:J.language||"en",issueType:J.issueType||"customer-service",attachmentSetId:J.attachmentSetId})})}async describeCase(J){return(await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.DescribeCases"},body:JSON.stringify({caseIdList:[J],includeResolvedCases:!0,includeCommunications:!0})})).cases?.[0]||null}async listCases(J){return await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.DescribeCases"},body:JSON.stringify({includeResolvedCases:J?.includeResolved??!1,maxResults:J?.maxResults,nextToken:J?.nextToken,includeCommunications:!0})})}async addCommunication(J,X,G){return(await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.AddCommunicationToCase"},body:JSON.stringify({caseId:J,communicationBody:X,ccEmailAddresses:G})})).result??!0}async resolveCase(J){return await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.ResolveCase"},body:JSON.stringify({caseId:J})})}async describeServices(J){return(await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.DescribeServices"},body:JSON.stringify({serviceCodeList:J,language:"en"})})).services||[]}async describeSeverityLevels(){return(await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.DescribeSeverityLevels"},body:JSON.stringify({language:"en"})})).severityLevels||[]}}var i={smsSandboxExit:(J)=>({subject:"Request to exit SMS sandbox for production use",serviceCode:"service-limit-increase",categoryCode:"service-limit-increase-sms-pinpoint",severityCode:"normal",communicationBody:`Hello,
31
-
32
- I would like to request that our AWS account be moved out of the SMS sandbox to enable production SMS messaging.
33
-
34
- **Company/Project**: ${J.companyName}
35
- **Website**: ${J.websiteUrl||"N/A"}
36
-
37
- **Use Case**:
38
- ${J.useCase}
39
-
40
- **Expected Monthly SMS Volume**: ${J.expectedMonthlyVolume.toLocaleString()} messages
41
-
42
- **Message Types**:
43
- - Transactional (verification codes, order confirmations, etc.)
44
- - Account notifications
45
-
46
- **Opt-out Handling**:
47
- We have implemented standard opt-out handling with STOP, UNSUBSCRIBE, CANCEL, END, and QUIT keywords.
48
-
49
- **Compliance**:
50
- - We will only send SMS to users who have explicitly opted in
51
- - We will include opt-out instructions in promotional messages
52
- - We will honor all opt-out requests immediately
53
-
54
- Thank you for reviewing this request.`}),smsSpendLimitIncrease:(J)=>({subject:`Request to increase SMS spending limit from $${J.currentLimit} to $${J.requestedLimit}`,serviceCode:"service-limit-increase",categoryCode:"service-limit-increase-sms-pinpoint",severityCode:"normal",communicationBody:`Hello,
55
-
56
- I would like to request an increase to our monthly SMS spending limit.
57
-
58
- **Company/Project**: ${J.companyName}
59
-
60
- **Current Limit**: $${J.currentLimit}/month
61
- **Requested Limit**: $${J.requestedLimit}/month
62
-
63
- **Justification**:
64
- ${J.useCase}
65
-
66
- **Message Types**:
67
- - Transactional notifications
68
- - Verification codes
69
- - Account alerts
70
-
71
- We have proper opt-out handling in place and comply with all SMS messaging regulations.
72
-
73
- Thank you for reviewing this request.`}),sesSandboxExit:(J)=>({subject:"Request to move out of Amazon SES sandbox",serviceCode:"service-limit-increase",categoryCode:"service-limit-increase-ses-702",severityCode:"normal",communicationBody:`Hello,
74
-
75
- I would like to request that our AWS account be moved out of the Amazon SES sandbox to enable production email sending.
76
-
77
- **Company/Project**: ${J.companyName}
78
- **Website**: ${J.websiteUrl}
79
-
80
- **Use Case**:
81
- ${J.useCase}
82
-
83
- **Expected Daily Email Volume**: ${J.expectedDailyVolume.toLocaleString()} emails
84
-
85
- **Email Types**:
86
- - Transactional emails (password resets, order confirmations, etc.)
87
- - Account notifications
88
- - System alerts
89
-
90
- **Compliance**:
91
- - We will only send emails to users who have explicitly opted in
92
- - We have implemented proper bounce and complaint handling
93
- - We will include unsubscribe links in all marketing emails
94
- - We maintain a clean mailing list and honor all unsubscribe requests
95
-
96
- **Technical Setup**:
97
- - Domain verification: Complete (DKIM, SPF, DMARC configured)
98
- - Bounce/complaint handling: SNS notifications configured
99
- - Email authentication: Fully implemented
100
-
101
- Thank you for reviewing this request.`}),connectPhoneNumberIncrease:(J)=>({subject:`Request to increase Amazon Connect phone number limit from ${J.currentLimit} to ${J.requestedLimit}`,serviceCode:"service-limit-increase",categoryCode:"service-limit-increase-connect",severityCode:"normal",communicationBody:`Hello,
102
-
103
- I would like to request an increase to our Amazon Connect phone number limit.
104
-
105
- **Company/Project**: ${J.companyName}
106
- **Connect Instance ID**: ${J.instanceId}
107
-
108
- **Current Limit**: ${J.currentLimit} phone numbers
109
- **Requested Limit**: ${J.requestedLimit} phone numbers
110
-
111
- **Use Case**:
112
- ${J.useCase}
113
-
114
- Thank you for reviewing this request.`})};async function w0(J){let X=J.region||"us-east-1",G={success:!0,errors:[],warnings:[]},$=new S(X),Y=new w(X),Z=new n(X),L=new W;console.log("Setting up SMS infrastructure..."),console.log(" Checking SMS account status...");try{let O=await B1($);if(G.sandboxStatus=O.inSandbox?"IN_SANDBOX":"OUT_OF_SANDBOX",O.inSandbox){if(console.log(" Account is in SMS sandbox"),J.sandbox?.autoRequestExit&&J.sandbox.companyName){console.log(" Requesting SMS sandbox exit via AWS Support...");try{let Q=i.smsSandboxExit({companyName:J.sandbox.companyName,useCase:J.sandbox.useCase||"Transactional notifications and verification codes",expectedMonthlyVolume:J.sandbox.expectedMonthlyVolume||1000,websiteUrl:J.sandbox.websiteUrl}),V=await Z.createCase(Q);G.supportCaseId=V.caseId,G.sandboxStatus="EXIT_REQUESTED",console.log(` Support case created: ${V.caseId}`)}catch(Q){G.warnings.push(`Failed to create sandbox exit support case: ${Q.message}`),console.log(` Warning: Could not create support case: ${Q.message}`)}}}if(G.spendingLimit=O.spendingLimit,console.log(` Current spending limit: $${O.spendingLimit}/month`),J.spending?.autoRequestIncrease&&J.spending.monthlyLimit&&O.spendingLimit<J.spending.monthlyLimit){console.log(` Requesting spending limit increase to $${J.spending.monthlyLimit}/month...`);try{await D0(L,X,J.spending.monthlyLimit),G.spendingLimit=J.spending.monthlyLimit,console.log(" Spending limit updated successfully")}catch(Q){if(J.sandbox?.companyName)try{let V=i.smsSpendLimitIncrease({companyName:J.sandbox.companyName,currentLimit:O.spendingLimit,requestedLimit:J.spending.monthlyLimit,useCase:J.sandbox.useCase||"Production SMS messaging"}),_=await Z.createCase(V);G.supportCaseId=_.caseId,G.warnings.push(`Spending limit increase requested via support case: ${_.caseId}`),console.log(` Support case created for limit increase: ${_.caseId}`)}catch(V){G.warnings.push(`Failed to request spending limit increase: ${V.message}`)}else G.warnings.push("Spending limit increase requires AWS Support ticket. Provide companyName in config.")}}}catch(O){G.errors.push(`Failed to check SMS account status: ${O.message}`),console.log(` Error checking status: ${O.message}`)}if(J.inbox?.enabled&&J.inbox.bucket){console.log(" Setting up S3 inbox...");try{await M0(Y,{bucket:J.inbox.bucket,prefix:J.inbox.prefix||"sms/inbox/",retentionDays:J.inbox.retentionDays}),G.inboxBucket=J.inbox.bucket,G.inboxPrefix=J.inbox.prefix||"sms/inbox/",console.log(` Inbox configured: s3://${J.inbox.bucket}/${G.inboxPrefix}`)}catch(O){G.errors.push(`Failed to set up S3 inbox: ${O.message}`),console.log(` Error setting up inbox: ${O.message}`)}}if(J.twoWay?.enabled){console.log(" Setting up two-way SMS...");try{let O=J.twoWay.topicName||`${J.accountName||"stacks"}-sms-inbox`,Q=await T1($,L,X,O,J.accountId);G.twoWayTopicArn=Q,console.log(` Two-way topic: ${Q}`)}catch(O){G.errors.push(`Failed to set up two-way SMS topic: ${O.message}`),console.log(` Error setting up two-way: ${O.message}`)}}if(J.deliveryReceipts?.enabled){console.log(" Setting up delivery receipts...");try{let O=J.deliveryReceipts.topicName||`${J.accountName||"stacks"}-sms-delivery-receipts`,Q=await A0($,L,X,O,J.accountId);G.deliveryReceiptTopicArn=Q,console.log(` Delivery receipts topic: ${Q}`)}catch(O){G.errors.push(`Failed to set up delivery receipts: ${O.message}`),console.log(` Error setting up delivery receipts: ${O.message}`)}}if(G.success=G.errors.length===0,console.log(G.success?" SMS setup completed successfully!":" SMS setup completed with errors"),G.success)G.warnings.push("For dedicated phone numbers, use AWS End User Messaging console. SNS uses shared pool by default.");return G}async function B1(J){let X=!0,G=1,$=0;try{X=(await J.getSMSSandboxAccountStatus()).IsInSandbox}catch{X=!0}try{let Y=await J.getSMSAttributes();if(Y.MonthlySpendLimit)G=parseFloat(Y.MonthlySpendLimit)}catch{}return{inSandbox:X,spendingLimit:G,usedThisMonth:$}}async function D0(J,X,G){let $=new URLSearchParams({Action:"SetSMSAttributes",Version:"2010-03-31","attributes.entry.1.key":"MonthlySpendLimit","attributes.entry.1.value":G.toString()});await J.request({service:"sns",region:X,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:$.toString()})}async function M0(J,X){try{if(!(await J.listBuckets()).Buckets?.some((Z)=>Z.Name===X.bucket))await J.createBucket(X.bucket);let Y=[`${X.prefix}.keep`,"sms/sent/.keep","sms/conversations/.keep","sms/templates/.keep","sms/scheduled/.keep","sms/receipts/.keep"];for(let Z of Y)try{await J.putObject({bucket:X.bucket,key:Z,body:`SMS folder created ${new Date().toISOString()}`,contentType:"text/plain"})}catch{}if(X.retentionDays)try{await J.putBucketLifecycleConfiguration(X.bucket,[{ID:"SmsInboxRetention",Status:"Enabled",Filter:{Prefix:X.prefix},Expiration:{Days:X.retentionDays}},{ID:"SmsReceiptsRetention",Status:"Enabled",Filter:{Prefix:"sms/receipts/"},Expiration:{Days:X.retentionDays}}])}catch(Z){console.log(` Note: Could not set lifecycle rules: ${Z.message}`)}}catch(G){throw Error(`Failed to set up S3 inbox: ${G.message}`)}}async function T1(J,X,G,$,Y){let L=(await J.listTopics()).Topics?.find((E)=>E.TopicArn?.endsWith(`:${$}`));if(L)return L.TopicArn;let O=new URLSearchParams({Action:"CreateTopic",Version:"2010-03-31",Name:$}),V=(await X.request({service:"sns",region:G,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:O.toString()}))?.CreateTopicResponse?.CreateTopicResult?.TopicArn;if(!V)throw Error("Failed to create SNS topic");let _=new URLSearchParams({Action:"SetTopicAttributes",Version:"2010-03-31",TopicArn:V,AttributeName:"Policy",AttributeValue:JSON.stringify({Version:"2012-10-17",Statement:[{Sid:"AllowSMSVoicePublish",Effect:"Allow",Principal:{Service:"sms-voice.amazonaws.com"},Action:"sns:Publish",Resource:V}]})});return await X.request({service:"sns",region:G,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:_.toString()}),V}async function A0(J,X,G,$,Y){return T1(J,X,G,$,Y)}async function y2(J){let X=J.region||"us-east-1",G=new S(X),$=await B1(G),Z=((await G.listTopics()).Topics||[]).filter((L)=>L.TopicArn?.includes("sms")).map((L)=>({name:L.TopicArn?.split(":").pop()||"",arn:L.TopicArn||""}));return{sandboxStatus:$.inSandbox?"IN_SANDBOX":"OUT_OF_SANDBOX",spendingLimit:$.spendingLimit,topics:Z}}async function g2(J){if(!J.enabled)return{success:!0,errors:[],warnings:["SMS is disabled in config"]};let X={region:"us-east-1",accountName:"stacks",inbox:J.inbox?{enabled:J.inbox.enabled,bucket:J.inbox.bucket,prefix:J.inbox.prefix,retentionDays:J.inbox.retentionDays}:void 0,twoWay:J.twoWay?{enabled:J.twoWay.enabled}:void 0,spending:{monthlyLimit:J.maxSpendPerMonth,autoRequestIncrease:!0},sandbox:{autoRequestExit:!0,companyName:"Stacks",useCase:"Transactional notifications, verification codes, and account alerts for web applications built with Stacks framework.",expectedMonthlyVolume:5000,websiteUrl:"https://stacksjs.com"},deliveryReceipts:{enabled:!0}};return w0(X)}class K0{client;region;constructor(J="us-east-1"){this.region=J,this.client=new W}async describeFileSystems(J){let X=[];if(J?.FileSystemId)X.push(`FileSystemId=${encodeURIComponent(J.FileSystemId)}`);if(J?.CreationToken)X.push(`CreationToken=${encodeURIComponent(J.CreationToken)}`);let G=`/2015-02-01/file-systems${X.length>0?`?${X.join("&")}`:""}`;return{FileSystems:((await this.client.request({service:"elasticfilesystem",region:this.region,method:"GET",path:G,headers:{"Content-Type":"application/json"}})).FileSystems||[]).map((Y)=>({FileSystemId:Y.FileSystemId,Name:Y.Name,CreationTime:Y.CreationTime,LifeCycleState:Y.LifeCycleState,NumberOfMountTargets:Y.NumberOfMountTargets,SizeInBytes:Y.SizeInBytes?{Value:Y.SizeInBytes.Value,Timestamp:Y.SizeInBytes.Timestamp}:void 0,PerformanceMode:Y.PerformanceMode,Encrypted:Y.Encrypted,ThroughputMode:Y.ThroughputMode,Tags:Y.Tags}))}}}export{t1 as Jd,S1 as Kd,r as Ld,o as Md,q0 as Nd,C1 as Od,I1 as Pd,a as Qd,p1 as Rd,n1 as Sd,i1 as Td,r1 as Ud,S as Vd,o1 as Wd,s1 as Xd,J0 as Yd,g as Zd,X0 as _d,K as $d,G0 as ae,c as be,u as ce,d as de,$0 as ee,Y0 as fe,TJ as ge,HJ as he,wJ as ie,DJ as je,q as ke,KJ as le,NJ as me,SJ as ne,jJ as oe,P as pe,Z0 as qe,L0 as re,O0 as se,C as te,Q0 as ue,_0 as ve,V0 as we,l as xe,kJ as ye,xJ as ze,bJ as Ae,I as Be,gJ as Ce,cJ as De,uJ as Ee,E0 as Fe,m as Ge,Q1 as He,mJ as Ie,pJ as Je,nJ as Ke,v as Le,z0 as Me,F0 as Ne,R0 as Oe,W0 as Pe,p as Qe,U0 as Re,E1 as Se,L2 as Te,W1 as Ue,E2 as Ve,h as We,U2 as Xe,B2 as Ye,T2 as Ze,H2 as _e,D as $e,w2 as af,D2 as bf,M2 as cf,A2 as df,y as ef,q2 as ff,P2 as gf,C2 as hf,n as if,i as jf,w0 as kf,y2 as lf,g2 as mf,K0 as nf};