local-serverless-stack 0.10.0 → 0.12.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 (53) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +107 -11
  3. package/dist/server/engine/backends/self-backend.d.ts.map +1 -1
  4. package/dist/server/engine/backends/self-backend.js +4 -2
  5. package/dist/server/engine/backends/self-backend.js.map +1 -1
  6. package/dist/server/engine/emulators/s3/index.d.ts +2 -0
  7. package/dist/server/engine/emulators/s3/index.d.ts.map +1 -1
  8. package/dist/server/engine/emulators/s3/index.js +86 -0
  9. package/dist/server/engine/emulators/s3/index.js.map +1 -1
  10. package/dist/server/engine/emulators/s3/multipart.d.ts +9 -0
  11. package/dist/server/engine/emulators/s3/multipart.d.ts.map +1 -0
  12. package/dist/server/engine/emulators/s3/multipart.js +88 -0
  13. package/dist/server/engine/emulators/s3/multipart.js.map +1 -0
  14. package/dist/server/engine/emulators/secretsmanager/index.d.ts +29 -0
  15. package/dist/server/engine/emulators/secretsmanager/index.d.ts.map +1 -0
  16. package/dist/server/engine/emulators/secretsmanager/index.js +450 -0
  17. package/dist/server/engine/emulators/secretsmanager/index.js.map +1 -0
  18. package/dist/server/engine/http/router.d.ts.map +1 -1
  19. package/dist/server/engine/http/router.js +4 -0
  20. package/dist/server/engine/http/router.js.map +1 -1
  21. package/dist/server/engine/types.d.ts +1 -1
  22. package/dist/server/engine/types.d.ts.map +1 -1
  23. package/dist/server/index.js +2 -0
  24. package/dist/server/index.js.map +1 -1
  25. package/dist/server/routes/secrets.d.ts +3 -0
  26. package/dist/server/routes/secrets.d.ts.map +1 -0
  27. package/dist/server/routes/secrets.js +0 -0
  28. package/dist/server/routes/secrets.js.map +1 -0
  29. package/dist/server/services/secrets-explorer.d.ts +39 -0
  30. package/dist/server/services/secrets-explorer.d.ts.map +1 -0
  31. package/dist/server/services/secrets-explorer.js +105 -0
  32. package/dist/server/services/secrets-explorer.js.map +1 -0
  33. package/dist/ui/assets/{ApisPage-DyjG-weG.js → ApisPage-Dg-fuYQY.js} +1 -1
  34. package/dist/ui/assets/{BucketDetailPage-Bvrk1L6q.js → BucketDetailPage-By9deUkc.js} +1 -1
  35. package/dist/ui/assets/{BucketsPage-KgeLoK6e.js → BucketsPage-idHR6yXh.js} +1 -1
  36. package/dist/ui/assets/{DynamoPage-C8rwaEIi.js → DynamoPage-k8NQGeJ_.js} +1 -1
  37. package/dist/ui/assets/{DynamoTablePage-CN5P5f7S.js → DynamoTablePage-C-LPU3I7.js} +1 -1
  38. package/dist/ui/assets/{LambdaDetailPage-BPhEkF44.js → LambdaDetailPage-D8HVidB_.js} +1 -1
  39. package/dist/ui/assets/{LambdasPage-Dz4wxjVd.js → LambdasPage-B19rwgUM.js} +1 -1
  40. package/dist/ui/assets/{OpenSearchCollectionPage-B3s964oC.js → OpenSearchCollectionPage-Bmc8gI8s.js} +1 -1
  41. package/dist/ui/assets/{OpenSearchPage-0fTJJovd.js → OpenSearchPage-CDFY7dS9.js} +1 -1
  42. package/dist/ui/assets/OverviewPage-CWrXkA8s.js +1 -0
  43. package/dist/ui/assets/{QueueDetailPage-peLph1_v.js → QueueDetailPage-CGcXlOrN.js} +1 -1
  44. package/dist/ui/assets/{QueuesPage-CF9yiBkq.js → QueuesPage-BMU0DBMz.js} +1 -1
  45. package/dist/ui/assets/SecretsPage-Dnkt3P3P.css +1 -0
  46. package/dist/ui/assets/SecretsPage-RgJc26ab.js +1 -0
  47. package/dist/ui/assets/{ServiceDetailPage-ZGLPswmY.js → ServiceDetailPage-BZnTIbac.js} +1 -1
  48. package/dist/ui/assets/{ServicesPage-DsoZBBxo.js → ServicesPage-BJCWxYkd.js} +1 -1
  49. package/dist/ui/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
  50. package/dist/ui/assets/{index-BP9zQ9L-.js → index-DGkmrq2b.js} +9 -9
  51. package/dist/ui/index.html +1 -1
  52. package/package.json +2 -1
  53. package/dist/ui/assets/OverviewPage-B13l71G0.js +0 -1
@@ -5,7 +5,7 @@
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>LSS Orchestrator</title>
8
- <script type="module" crossorigin src="/assets/index-BP9zQ9L-.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-DGkmrq2b.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-DH7RTkRh.css">
10
10
  </head>
11
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "local-serverless-stack",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "Local control plane for serverless development with LocalStack orchestration",
5
5
  "author": "LSS Contributors",
6
6
  "license": "MIT",
@@ -69,6 +69,7 @@
69
69
  "@aws-sdk/client-lambda": "^3.709.0",
70
70
  "@aws-sdk/client-opensearchserverless": "^3.1085.0",
71
71
  "@aws-sdk/client-s3": "^3.1051.0",
72
+ "@aws-sdk/client-secrets-manager": "^3.1085.0",
72
73
  "@aws-sdk/client-sns": "^3.709.0",
73
74
  "@aws-sdk/client-sqs": "^3.709.0",
74
75
  "@aws-sdk/lib-dynamodb": "^3.709.0",
@@ -1 +0,0 @@
1
- import{k as W,l as G,o as J,e as m,Z as a,U as e,t as i,a as w,r as b,m as v,j as n,d as o,p,i as d,T as u,q as z,g as h,s as K,u as N,v as X,F as O,n as I,f as R,w as q,x as y,R as Y,y as ee,b as g}from"./index-BP9zQ9L-.js";const te={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},ae={class:"mono"},ne={class:"mono",style:{"font-size":"0.8rem"}},se={class:"mono"},oe={class:"mono"},le={key:0,class:"muted"},re={class:"mono",style:{"font-size":"0.75rem"}},ie={class:"mono",style:{"font-size":"0.75rem"}},ue={style:{"font-size":"1.05rem"}},ce={class:"muted",style:{"font-size":"0.825rem"}},de=W({__name:"OverviewPage",setup($){const f=b(null),c=b(null),_=b([]),S=b([]),A=b([]),k=b({tables:[],queues:[],topics:[],buckets:[],collections:[]}),C=b(!0);let D=null;async function T(){try{const[r,t,s,l,L,B]=await Promise.all([w.checkHealth(),w.getConfig(),w.listServices(),w.listResources(),w.listLambdas().catch(()=>[]),w.listApis().catch(()=>[])]);f.value=r,c.value=t,_.value=s,k.value=l,S.value=L,A.value=B}catch(r){console.error("Overview load failed:",r)}finally{C.value=!1}}const F=g(()=>_.value.filter(r=>r.status==="running").length),V=g(()=>_.value.length),Q=g(()=>S.value.filter(r=>r.status==="online").length),M=g(()=>S.value.length),U=g(()=>A.value.reduce((r,t)=>r+t.routes.length,0)),Z=g(()=>{var r;return(r=f.value)!=null&&r.localstack?"success":"danger"}),E=g(()=>{var r,t;return!!((t=(r=f.value)==null?void 0:r.dynamoProxy)!=null&&t.enabled)}),j=g(()=>{var r,t;return!!((t=(r=f.value)==null?void 0:r.dynamoProxy)!=null&&t.running)}),x=g(()=>{var r;return!!((r=c.value)!=null&&r.autoPackage)}),P=g(()=>{var r;return!!((r=c.value)!=null&&r.persistence)}),H=[{type:"SNS Topics",description:"Pub/sub fan-out for cross-service events",status:"covered",to:null},{type:"SQS Queues",description:"Async message queues with consumer monitoring",status:"covered",to:"/queues"},{type:"DynamoDB Tables",description:"Tables, indexes, items explorer and seeds",status:"covered",to:"/dynamo"},{type:"S3 Buckets",description:"Buckets, objects browser, upload/download, Lambda notifications",status:"covered",to:"/buckets"}];return G(()=>{T(),D=window.setInterval(T,15e3)}),J(()=>{D&&window.clearInterval(D)}),(r,t)=>(v(),m(e(i),{direction:"vertical",gap:"1.5rem"},{default:a(()=>[n(e(z),{variant:"outline",class:"overview-hero"},{default:a(()=>[n(e(i),{direction:"vertical",gap:"1rem"},{default:a(()=>[n(e(i),{direction:"horizontal",gap:"0.75rem",align:"center",wrap:""},{default:a(()=>[t[1]||(t[1]=o("span",{style:{"font-size":"1.75rem"}},"⚡",-1)),n(e(i),{direction:"vertical",gap:"0.125rem"},{default:a(()=>[...t[0]||(t[0]=[o("strong",{style:{"font-size":"1.5rem"}},"Local Serverless Stack",-1),o("span",{class:"muted"},"One LocalStack. Every microservice. Zero docker juggling.",-1)])]),_:1})]),_:1}),t[3]||(t[3]=o("p",{style:{"max-width":"70ch","line-height":"1.55"}}," A single control plane for your local serverless workflow. Register a Serverless Framework project and LSS parses its CloudFormation template, provisions the resources in a shared LocalStack instance, wires up event-source mappings, and gives you live visibility into every queue, table, and topic — without spinning up a separate LocalStack per service. ",-1)),n(e(i),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:a(()=>[n(e(p),{tone:Z.value,variant:"soft"},{default:a(()=>{var s;return[d(" LocalStack "+u((s=f.value)!=null&&s.localstack?"running":"offline"),1)]}),_:1},8,["tone"]),E.value?(v(),m(e(p),{key:0,tone:j.value?"success":"warning",variant:"soft"},{default:a(()=>[d(" Dynamo Proxy "+u(j.value?"on":"enabled (not listening)"),1)]),_:1},8,["tone"])):(v(),m(e(p),{key:1,tone:"neutral",variant:"soft"},{default:a(()=>[...t[2]||(t[2]=[d("Dynamo Proxy off",-1)])]),_:1})),n(e(p),{tone:x.value?"info":"neutral",variant:"soft"},{default:a(()=>[d(" Auto-package "+u(x.value?"on":"off"),1)]),_:1},8,["tone"]),n(e(p),{tone:P.value?"info":"neutral",variant:"soft"},{default:a(()=>[d(" Persistence "+u(P.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1})]),_:1})]),_:1}),C.value&&!f.value?(v(),h("div",te,[n(e(K),{label:"Loading overview..."})])):(v(),h(O,{key:1},[n(e(q),{columns:2,gap:"1rem"},{default:a(()=>[n(e(z),{variant:"outline"},{header:a(()=>[...t[4]||(t[4]=[o("strong",null,"Server status",-1)])]),default:a(()=>[n(e(i),{direction:"vertical",gap:"0.75rem"},{default:a(()=>[n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var s;return[t[5]||(t[5]=o("span",{class:"muted"},"LocalStack",-1)),n(e(p),{tone:(s=f.value)!=null&&s.localstack?"success":"danger",variant:"soft"},{default:a(()=>{var l;return[d(u((l=f.value)!=null&&l.localstack?"Running":"Offline"),1)]}),_:1},8,["tone"])]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var s,l;return[t[6]||(t[6]=o("span",{class:"muted"},"Endpoint",-1)),o("span",ae,u(((l=(s=c.value)==null?void 0:s.localstack)==null?void 0:l.endpoint)||"—"),1)]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var s,l;return[t[7]||(t[7]=o("span",{class:"muted"},"Image",-1)),o("span",ne,u(((l=(s=c.value)==null?void 0:s.localstack)==null?void 0:l.image)||"—"),1)]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[8]||(t[8]=o("span",{class:"muted"},"Mode",-1)),n(e(N),{size:"sm",variant:"soft"},{default:a(()=>{var s,l;return[d(u(((l=(s=c.value)==null?void 0:s.localstack)==null?void 0:l.mode)||"—"),1)]}),_:1})]),_:1}),n(e(X)),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[10]||(t[10]=o("span",{class:"muted"},"Dynamo Proxy",-1)),n(e(i),{direction:"horizontal",gap:"0.375rem",align:"center"},{default:a(()=>[E.value?(v(),m(e(p),{key:0,tone:j.value?"success":"warning",variant:"soft"},{default:a(()=>{var s,l;return[d(u(j.value?`Listening :${(l=(s=f.value)==null?void 0:s.dynamoProxy)==null?void 0:l.port}`:"Enabled, not listening"),1)]}),_:1},8,["tone"])):(v(),m(e(p),{key:1,tone:"neutral",variant:"soft"},{default:a(()=>[...t[9]||(t[9]=[d("Disabled",-1)])]),_:1}))]),_:1})]),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[11]||(t[11]=o("span",{class:"muted"},"Auto-package",-1)),n(e(p),{tone:x.value?"info":"neutral",variant:"soft"},{default:a(()=>[d(u(x.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[12]||(t[12]=o("span",{class:"muted"},"Persistence",-1)),n(e(p),{tone:P.value?"info":"neutral",variant:"soft"},{default:a(()=>[d(u(P.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1})]),_:1})]),_:1}),n(e(z),{variant:"outline"},{header:a(()=>[...t[13]||(t[13]=[o("strong",null,"LESC configuration",-1)])]),default:a(()=>[n(e(i),{direction:"vertical",gap:"0.75rem"},{default:a(()=>{var s;return[n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var l;return[t[14]||(t[14]=o("span",{class:"muted"},"Default region",-1)),o("span",se,u(((l=c.value)==null?void 0:l.region)||"—"),1)]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var l;return[t[15]||(t[15]=o("span",{class:"muted"},"Server port",-1)),o("span",oe,u(((l=c.value)==null?void 0:l.serverPort)||"—"),1)]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"start",wrap:""},{default:a(()=>[t[16]||(t[16]=o("span",{class:"muted"},"LocalStack services",-1)),n(e(i),{direction:"horizontal",gap:"0.25rem",wrap:"",justify:"flex-end"},{default:a(()=>{var l,L;return[(v(!0),h(O,null,I(((l=c.value)==null?void 0:l.services)||[],B=>(v(),m(e(N),{key:B,size:"sm",variant:"soft"},{default:a(()=>[d(u(B),1)]),_:2},1024))),128)),(((L=c.value)==null?void 0:L.services)||[]).length?R("",!0):(v(),h("span",le,"—"))]}),_:1})]),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var l;return[t[17]||(t[17]=o("span",{class:"muted"},"Seeds dir",-1)),o("span",re,u(((l=c.value)==null?void 0:l.seedsDir)||"—"),1)]}),_:1}),(s=c.value)!=null&&s.configPath?(v(),m(e(i),{key:0,direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[18]||(t[18]=o("span",{class:"muted"},"Config file",-1)),o("span",ie,u(c.value.configPath),1)]),_:1})):R("",!0)]}),_:1})]),_:1})]),_:1}),n(e(q),{columns:5,gap:"1rem"},{default:a(()=>{var s;return[n(e(y),{label:"Services running",value:`${F.value} / ${V.value}`,tone:"success"},null,8,["value"]),n(e(y),{label:"Lambdas online",value:`${Q.value} / ${M.value}`,tone:"success"},null,8,["value"]),n(e(y),{label:"API routes",value:U.value,tone:"info"},null,8,["value"]),n(e(y),{label:"DynamoDB tables",value:k.value.tables.length,tone:"info"},null,8,["value"]),n(e(y),{label:"SQS queues",value:k.value.queues.length,tone:"warning"},null,8,["value"]),n(e(y),{label:"SNS topics",value:k.value.topics.length,tone:"info"},null,8,["value"]),n(e(y),{label:"S3 buckets",value:k.value.buckets.length,tone:"neutral"},null,8,["value"]),n(e(y),{label:"OpenSearch collections",value:((s=k.value.collections)==null?void 0:s.length)??0,tone:"info"},null,8,["value"])]}),_:1}),n(e(z),{variant:"outline"},{header:a(()=>[n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[...t[19]||(t[19]=[o("strong",null,"What's covered",-1),o("span",{class:"muted",style:{"font-size":"0.75rem"}}," Resource types LSS understands today ",-1)])]),_:1})]),default:a(()=>[n(e(q),{columns:2,gap:"0.75rem"},{default:a(()=>[(v(),h(O,null,I(H,s=>n(e(z),{key:s.type,variant:"soft"},{default:a(()=>[n(e(i),{direction:"horizontal",gap:"0.75rem",align:"center",justify:"space-between"},{default:a(()=>[n(e(i),{direction:"vertical",gap:"0.125rem"},{default:a(()=>[n(e(i),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:a(()=>[o("span",ue,u(s.status==="covered"?"✓":"⏳"),1),o("strong",null,u(s.type),1),n(e(p),{tone:s.status==="covered"?"success":"neutral",variant:"soft"},{default:a(()=>[d(u(s.status==="covered"?"Supported":"Planned"),1)]),_:2},1032,["tone"])]),_:2},1024),o("span",ce,u(s.description),1)]),_:2},1024),s.to?(v(),m(e(Y),{key:0,to:s.to,style:{"text-decoration":"none"}},{default:a(()=>[n(e(ee),{size:"sm",variant:"ghost"},{default:a(()=>[...t[20]||(t[20]=[d("Open →",-1)])]),_:1})]),_:1},8,["to"])):R("",!0)]),_:2},1024)]),_:2},1024)),64))]),_:1})]),_:1})],64))]),_:1}))}}),ve=($,f)=>{const c=$.__vccOpts||$;for(const[_,S]of f)c[_]=S;return c},pe=ve(de,[["__scopeId","data-v-7b113cd8"]]);export{pe as default};