Skip to content

Commit

Permalink
refactor: use SDK for console list
Browse files Browse the repository at this point in the history
  • Loading branch information
JonathanWbn committed Nov 30, 2022
1 parent 7f33d47 commit 7fa9558
Show file tree
Hide file tree
Showing 209 changed files with 468 additions and 2,259 deletions.
Binary file removed extensions/amazon-aws/assets/aws-icons/a.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/a2i.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/a4b.png
Binary file not shown.
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/acm-pca.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/acm.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/activate.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/aesop.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/ag.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/airflow.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/amazonmq.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/amda.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/amplify.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/appconfig.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/appflow.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/appmesh.png
Binary file not shown.
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/appsync.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/aps.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/artifact.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/athena.png
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/b.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/backup.png
Binary file not shown.
Binary file removed extensions/amazon-aws/assets/aws-icons/batch.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/braket.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/budgets.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/c.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cc.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cd.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cfg.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cfgr.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cfo.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cfr.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/chatbot.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/chime.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cloud9.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cloudhsm.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cloudmap.png
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/codeguru.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/codestar.png
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/connect.png
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cp.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cr.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cs.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ctr.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/cw.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/datasync.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/dc.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ddb.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/deeplens.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/deepracer.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/detective.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/df.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/discovery.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/dms.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/docdb.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/dp.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ds.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/eb.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ec2.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ec2sp.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ecr.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ecs.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/efs.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/eks.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/elc.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/emr.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/es.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ets.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/events.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/fh.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/forecast.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/freertos.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/fsx.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/gal.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/gl.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/glue.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/grafana.png
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/guardduty.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/home.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/honeycode.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/iam.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/imex.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ins.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/iot.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/iot1click.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/iotdm.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/iotevents.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/iotv2.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/iq.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ivs.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/kendra.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/keyspaces.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ki.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/kia.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/kms.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/lam.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/lex.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/lightsail.png
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/macie.png
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/medialive.png
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/mh.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ml.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/monitron.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/msk.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/neptune.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ops.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/outposts.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/panorama.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/phd.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/pinpoint.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/polly.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/proton.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/qldb.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/qs.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/qsvm.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/qsw.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/r.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/r53.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ram.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/rds.png
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/robomaker.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/rs.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/s.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/s3.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/sagemaker.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/sc.png
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ses.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/sg.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/signer.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/sns.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/spt.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/sqs.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/sso.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/states.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/sumerian.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/swf.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/ta.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/textract.png
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/transfer.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/translate.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/vpc.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/waf.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/wam.png
Diff not rendered.
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/wkm.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/wks.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/worklink.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/xray.png
Diff not rendered.
Binary file removed extensions/amazon-aws/assets/aws-icons/z.png
Diff not rendered.
2,222 changes: 0 additions & 2,222 deletions extensions/amazon-aws/assets/aws-services.json

This file was deleted.

373 changes: 373 additions & 0 deletions extensions/amazon-aws/package-lock.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions extensions/amazon-aws/package.json
Expand Up @@ -92,6 +92,7 @@
"@aws-sdk/client-lambda": "^3.216.0",
"@aws-sdk/client-s3": "^3.216.0",
"@aws-sdk/client-sqs": "^3.216.0",
"@aws-sdk/client-ssm": "^3.218.0",
"@aws-sdk/shared-ini-file-loader": "^3.215.0",
"@raycast/api": "^1.38.2",
"@raycast/utils": "^1.4.9"
Expand Down
131 changes: 94 additions & 37 deletions extensions/amazon-aws/src/console.tsx
@@ -1,50 +1,107 @@
import { ActionPanel, List, Action } from "@raycast/api";
import { readFile } from "fs/promises";
import { GetParametersByPathCommand, GetParametersCommand, SSMClient } from "@aws-sdk/client-ssm";
import { Action, ActionPanel, Icon, List } from "@raycast/api";
import { useCachedPromise } from "@raycast/utils";
import { AWS_URL_BASE } from "./util/aws-profile-dropdown";
import { useEffect, useState } from "react";
import AWSProfileDropdown, { AWS_URL_BASE } from "./util/aws-profile-dropdown";

export default function Console() {
const { data: services, isLoading } = useCachedPromise(loadJSON);
const { data: services, error, isLoading, revalidate } = useCachedPromise(loadServices);
const progressIcon = useProgressIcon({ show: isLoading && !services });

return (
<List isLoading={isLoading} searchBarPlaceholder="Filter services by name...">
{services?.map((service) => (
<List.Item
id={service.uid}
key={service.uid}
title={service.title}
subtitle={service.subtitle}
icon={service.icon.path}
actions={
<ActionPanel>
<Action.OpenInBrowser url={`${AWS_URL_BASE}${service.arg}`} />
</ActionPanel>
}
<List
isLoading={isLoading && !!services}
searchBarPlaceholder="Filter services by name..."
searchBarAccessory={<AWSProfileDropdown onProfileSelected={revalidate} />}
>
{error ? (
<List.EmptyView title={error.name} description={error.message} icon={Icon.Warning} />
) : progressIcon ? (
<List.EmptyView
title="Loading..."
icon={progressIcon}
description="The first run of this command will take a few seconds. But don't worry, the next time it'll already be very fast."
/>
))}
) : (
services?.map((service, index) => (
<List.Item
title={service?.name || service.id}
key={index}
actions={
<ActionPanel>
<Action.OpenInBrowser title="Open in Browser" url={`${AWS_URL_BASE}/${service.id}`} />
</ActionPanel>
}
/>
))
)}
</List>
);
}

type AWSService = {
uid: string;
title: string;
subtitle: string;
arg: string;
icon: AWSIcon;
};

type AWSIcon = {
path: string;
};

async function loadJSON() {
const file = await readFile(`${__dirname}/assets/aws-services.json`, "utf8");
const services = (JSON.parse(file).items as AWSService[])
.filter((service) => {
return !!service.title; // Only include services that have a title
interface Service {
id: string;
name: string;
}

async function loadServices(token?: string, accServices?: Service[]): Promise<Service[]> {
const ssm = new SSMClient({});
const prefix = "/aws/service/global-infrastructure";
const { Parameters: idParameters, NextToken } = await ssm.send(
new GetParametersByPathCommand({
Path: `${prefix}/regions/${process.env.AWS_REGION}/services`,
Recursive: true,
NextToken: token,
})
);

const serviceIds = (idParameters || []).map((p) => p.Value).filter((v): v is string => !!v);

const { Parameters: nameParameters } = await ssm.send(
new GetParametersCommand({ Names: serviceIds.map((id) => `${prefix}/services/${id}/longName`) })
);

const services = serviceIds
.map((id) => {
const name = nameParameters?.find((p) => p.Name?.split("/").at(-2) === id)?.Value;
return name && { id, name };
})
.sort((a, b) => (a.title > b.title ? 1 : b.title > a.title ? -1 : 0));
.filter((s): s is Service => !!s);

if (NextToken) {
return loadServices(NextToken, [...(accServices ?? []), ...services]);
}

return [...(accServices ?? []), ...services];
}

function useProgressIcon({ show }: { show: boolean }) {
const [progress, setProgress] = useState<
Icon.CircleProgress25 | Icon.CircleProgress50 | Icon.CircleProgress75 | Icon.CircleProgress100
>(Icon.CircleProgress25);

useEffect(() => {
if (!show) {
return;
}

const interval = setInterval(() => {
setProgress((progress) => {
switch (progress) {
case Icon.CircleProgress25:
return Icon.CircleProgress50;
case Icon.CircleProgress50:
return Icon.CircleProgress75;
case Icon.CircleProgress75:
return Icon.CircleProgress100;
case Icon.CircleProgress100:
return Icon.CircleProgress25;
}
});
}, 700);

return () => clearInterval(interval);
}, [show]);

return services;
return show ? progress : undefined;
}

0 comments on commit 7fa9558

Please sign in to comment.