Commit Graph

88 Commits

Author SHA1 Message Date
Zakaria 49b9ed1dea Merge pull request 'feat(frontend): show how to mount an EFS file system on an EC2 instance' (#31) from feat/efs-mount-instructions into main
CI / checks (push) Successful in 27m54s
Reviewed-on: #31
2026-10-26 02:47:47 +00:00
Zakaria 09b7eba9c4 feat(frontend): show how to mount an EFS file system on an EC2 instance
CI / checks (pull_request) Successful in 28m13s
The EFS page gains an EC2 instances section like the AWS console's Attach
dialog: the file system's DNS name, the commands to install the NFS client,
and mount commands by DNS name, with the EFS mount helper, and by each
available mount target's address, each with a copy button. It appears once
a mount target is available, and the page refreshes while one is creating.

TheCloud serves plain NFS, so the mount helper's tls and accesspoint options
are called out as unsupported.
2026-10-25 21:13:38 -04:00
Zakaria 62faf162de Merge pull request 'feat(api): add AppSync GraphQL APIs to the cloud explorer' (#30) from feat/appsync into main
CI / checks (push) Successful in 27m59s
Reviewed-on: #30
2026-10-25 23:46:33 +00:00
Zakaria 1c0ef3091e Merge pull request 'feat(api): add the Glue Data Catalog to the cloud explorer' (#29) from feat/athena into main
CI / checks (push) Has been cancelled
Reviewed-on: #29
2026-10-25 23:46:09 +00:00
Zakaria a2a9c19ff6 Merge pull request 'feat(api): add EFS file systems to the cloud explorer' (#27) from feat/efs into main
CI / checks (push) Has been cancelled
Reviewed-on: #27
2026-10-25 23:44:41 +00:00
Zakaria ca3e67a803 feat(api): add AppSync GraphQL APIs to the cloud explorer
CI / checks (pull_request) Successful in 28m38s
Create GraphQL APIs with API-key (the first key is made for you), IAM or
Cognito user pool authorization, then edit the schema (a starter schema is
offered, and a rejected one is explained), create and delete API keys, create
data sources for a DynamoDB table, a Lambda function or none, and attach
JavaScript resolvers to fields of the schema from a template for the data
source.

TheCloud's endpoint checks queries against the schema and the API key but does
not run resolvers yet, so the page says so and offers no query runner.
2026-10-25 18:21:46 -04:00
Zakaria 5eee0b7e9b feat(api): add Athena workgroups and a query editor to the cloud explorer
CI / checks (pull_request) Successful in 28m25s
Create and delete Athena workgroups (with a result folder, optionally
enforced), and run SQL in one: pick a database from the Glue Data Catalog,
preview a table, run with Ctrl+Enter, cancel a running query, read up to 1,000
rows and download the full result CSV from S3. Recent queries in the workgroup
can be reopened. TheCloud runs the SQL for real over the files a Glue table
points at. The Glue page links to the editor.
2026-10-25 18:10:33 -04:00
Zakaria 69d80c60a3 feat(api): add the Glue Data Catalog to the cloud explorer
CI / checks (pull_request) Successful in 28m15s
Create and delete Glue databases, and describe a folder of CSV, JSON-lines or
Parquet files in S3 as a table: its columns, and for CSV the delimiter and
whether the first line is a header. Tables are written with the storage
settings Athena expects, so TheCloud's Athena can query one as soon as it
exists. Glue jobs and crawlers are not offered: the runtime stores them but
never runs them.
2026-10-25 17:51:16 -04:00
Zakaria 26b635db0b feat(api): add EFS file systems to the cloud explorer
CI / checks (pull_request) Successful in 28m26s
Create file systems (with a mount target in each default subnet unless asked
not to), add and remove mount targets, create and delete access points, and
attach a file system to a Lambda function through an access point. A function
not yet in a VPC is put in the file system's mount target subnets with the
default security group, as Lambda requires. TheCloud's mounts are real, so two
functions on one access point share files.

Deleting a file system removes its access points and mount targets first, and
is refused while a function still mounts it.
2026-10-25 17:33:19 -04:00
Zakaria efaa2e6826 Merge pull request 'feat(api): add EventBridge Pipes to the cloud explorer' (#26) from feat/ec2-auto-scaling into main
CI / checks (push) Successful in 27m18s
Reviewed-on: #26
2026-10-25 17:22:16 +00:00
Zakaria 48114da772 Merge pull request 'feat(api): add ACM certificates to the cloud explorer' (#23) from feat/acm into main
CI / checks (push) Has been cancelled
Reviewed-on: #23
2026-10-25 17:21:28 +00:00
Zakaria 70cfd4bc96 feat(api): add EC2 Auto Scaling groups to the cloud explorer
CI / checks (pull_request) Successful in 26m54s
Create groups from a launch template (in the default subnets unless given),
change their minimum, desired and maximum capacity, replace or remove an
instance, and follow the launches and terminations TheCloud's reconciler makes.
Deleting a group terminates its instances. Scaling policies are not offered:
the runtime stores them but its alarms only drive ECS scaling.
2026-10-25 13:02:49 -04:00
Zakaria 12b50f4868 feat(api): add EventBridge Pipes to the cloud explorer
CI / checks (pull_request) Successful in 27m2s
Create pipes from SQS, Kinesis, DynamoDB streams or MSK to Lambda, SQS, SNS,
EventBridge buses or Step Functions, with an optional filter, enrichment and
input template; start and stop them, see the flow with links to each resource,
and send a test message to an SQS source. Sources and targets the runtime's
poller cannot deliver between are refused on create.
2026-10-25 13:00:13 -04:00
Zakaria 6e0bb98844 feat(api): add ACM certificates to the cloud explorer
CI / checks (pull_request) Successful in 27m28s
Request public certificates (optionally exportable) or import your own, see
each domain's DNS validation records and what uses a certificate, download the
certificate and chain, export an exportable one with its encrypted key, and
revoke it. ListCertificates asks for every key type, since AWS otherwise
leaves EC certificates out.
2026-10-25 12:41:42 -04:00
Zakaria d4726950da Merge pull request 'fix(frontend): stop MSK breaking the Console Home resource count' (#22) from fix/console-home-resource-count into main
CI / checks (push) Successful in 27m6s
Reviewed-on: #22
2026-10-25 14:29:25 +00:00
Zakaria eeadeef664 fix(frontend): stop MSK breaking the Console Home resource count
CI / checks (pull_request) Successful in 26m59s
Console Home counted every available service through the generic resource
list, but MSK and MSK Connect are available through their own pre-SPI pages
with no adapter behind /resources, so each answered 501 and the Resources tile
read "Resource load failed". Service descriptors now say whether the generic
list serves them (listable, true when an adapter is registered), and Console
Home counts only those; the MSK cards still link to their pages.
2026-10-25 10:09:35 -04:00
Zakaria 9f1ea32183 Merge pull request 'docs: rebrand the README as TheCloud' (#21) from chore/readme-thecloud into main
CI / checks (push) Has been cancelled
Reviewed-on: #21
2026-10-25 14:00:14 +00:00
Zakaria 811791603c docs: rebrand the README as TheCloud
CI / checks (pull_request) Successful in 27m5s
Replace the Floci logo, screenshots and architecture diagram with TheCloud's
logo, a current screenshot and a redrawn diagram; say TheCloud in prose while
keeping literal identifiers (env vars, image and compose service names); point
the runtime setup at FlociClone; drop the upstream release and Docker badges
and the upstream community section; keep the credit to Floci under License.
2026-10-25 09:57:22 -04:00
Zakaria 67660858eb Merge pull request 'feat(api): add HTTP and WebSocket APIs (API Gateway v2) to the API Gateway page' (#20) from feat/apigateway-v2 into main
CI / checks (push) Has been cancelled
Reviewed-on: #20
2026-10-25 13:49:09 +00:00
Zakaria bb5ca85a88 feat(api): add HTTP and WebSocket APIs (API Gateway v2) to the API Gateway page
CI / checks (pull_request) Successful in 26m49s
API Gateway v2 is a separate AWS API from REST APIs, so HTTP and WebSocket APIs
made with the SDK, SAM, CDK or Terraform never showed up. The API Gateway page
now lists all three kinds with a Type column, creates each from the same form,
and opens HTTP and WebSocket APIs in their own panel:

- Quick create: an HTTP API with a Lambda gets a catch-all route on an
  auto-deployed $default stage, plus the Lambda permission.
- Routes to Lambda (payload 2.0) or HTTP backends; deleting a route removes
  the integration and Lambda permission only it used.
- Stages with or without automatic deployment, and deploy on demand.
- JWT authorizers filled in from a Cognito pool's OpenID Connect discovery
  document and an app client, or from any issuer; protect routes with them.
- CORS configuration.
- A tester that sends a real request to a stage, and for WebSocket APIs one
  that connects, sends a message and collects the replies.

Capabilities are advertised under a new httpApiActions group, covered by the
cloudProxy guard test. Verified end to end against TheCloud's runtime.
2026-10-25 09:18:50 -04:00
Zakaria 6acd3656a1 Merge pull request 'feat(api): add CloudWatch alarms and metric charts to the cloud explorer' (#19) from feat/cloudwatch into main
CI / checks (push) Successful in 26m58s
Reviewed-on: #19
2026-10-25 03:08:02 +00:00
Zakaria 6dd33b8f65 feat(api): add CloudWatch alarms and metric charts to the cloud explorer
CI / checks (pull_request) Successful in 27m29s
2026-10-24 22:48:41 -04:00
Zakaria f4b3e45f3d Merge pull request 'chore: show TheCloud instead of Floci in console text and messages' (#18) from chore/rebrand-thecloud into main
CI / checks (push) Successful in 25m42s
Reviewed-on: #18
2026-10-24 18:32:47 +00:00
Zakaria 91ce11274d chore: show TheCloud instead of Floci in console text and messages
CI / checks (pull_request) Successful in 25m47s
Labels, empty states, error messages and defaults the console shows now name
TheCloud or its runtimes. Identifiers that must match the emulator (FLOCI_*
settings, the X-Floci-CSRF header, emulator-returned host names) are unchanged.
2026-10-24 14:30:44 -04:00
Zakaria 7669b5387f Merge pull request 'fix(api): show CloudFront distributions at <id>.cloudfront.localhost' (#17) from feat/cloudfront-thecloud-url into main
CI / checks (push) Has been cancelled
Reviewed-on: #17
2026-10-24 18:26:25 +00:00
Zakaria a86bee443b fix(api): show CloudFront distributions at <id>.cloudfront.localhost
CI / checks (pull_request) Successful in 26m17s
Distributions were linked under localhost.floci.io, another project's domain.
Every .localhost name resolves to the machine itself, so the brand-neutral
<id>.cloudfront.localhost reaches the runtime with no DNS or hosts entry.
2026-10-24 14:25:35 -04:00
Zakaria 9cb164f211 Merge pull request 'feat(api): add CloudFront distributions to the cloud explorer' (#16) from feat/cloudfront into main
CI / checks (push) Has been cancelled
Reviewed-on: #16
2026-10-24 18:13:39 +00:00
Zakaria 6586f48539 feat(api): add CloudFront distributions to the cloud explorer
CI / checks (pull_request) Successful in 26m22s
2026-10-24 14:10:16 -04:00
Zakaria 5c3c73c582 Merge pull request 'feat(api): add Route 53 hosted zones and DNS records to the cloud explorer' (#15) from feat/route53 into main
CI / checks (push) Successful in 25m44s
Reviewed-on: #15
2026-10-24 17:10:52 +00:00
Zakaria 2b4d4b146d feat(api): add Route 53 hosted zones and DNS records to the cloud explorer
CI / checks (pull_request) Successful in 25m40s
2026-10-24 13:07:57 -04:00
Zakaria ac58bfc98b Merge pull request 'test(api): stop tests leaking module mocks and env into later files' (#14) from fix/ci-test-isolation into main
CI / checks (push) Successful in 25m29s
Reviewed-on: #14
2026-10-24 15:36:52 +00:00
Zakaria 51a0a60a73 test(api): stop tests leaking module mocks and env into later files
CI / checks (pull_request) Successful in 25m28s
CI failed on a different set of tests each run because bun runs every test
file in one process and the file order differs between machines:

- the secretsmanager route test replaced the whole ../aws module, so files
  loaded after it lost awsClients, lambda and defaultAccountId (API Gateway,
  SES)
- the Lightsail tests restored FLOCI_ENDPOINT by assigning undefined, which
  stores the string "undefined" (runtime diagnostics)
- the auth tests used full-strength argon2 for ~30 sign-ins and timed out on
  slower runners; the OIDC cleanup test cached a discovery document without
  userinfo_endpoint for the shared issuer

Checked with 20 runs under bun test --randomize.
2026-10-24 11:30:46 -04:00
Zakaria a5c9de25d0 Merge pull request 'feat(api): show a user pool's Lambda triggers' (#13) from feat/cognito-app-client-settings into main
CI / checks (push) Has been cancelled
Reviewed-on: #13
2026-10-24 15:22:35 +00:00
Zakaria 238bb1a3d5 feat(frontend): hosted sign-in and OAuth settings for Cognito app clients
CI / checks (pull_request) Successful in 26m7s
2026-10-24 11:17:42 -04:00
Zakaria d411f632c9 feat(api): show a user pool's Lambda triggers 2026-10-24 02:07:18 -04:00
Zakaria 954e2e8a47 Merge pull request 'feat(frontend): newest emails first, mailbox above the SES tools' (#12) from feat/mailbox-newest-first into main
CI / checks (push) Failing after 12m26s
Reviewed-on: #12
2026-10-24 06:02:06 +00:00
Zakaria ce444f0851 feat(frontend): newest emails first, mailbox above the SES tools
CI / checks (pull_request) Failing after 12m24s
2026-10-24 02:01:14 -04:00
Zakaria 18c1f5067f Merge pull request 'feat(api): show the verification code in the SES mailbox' (#10) from feat/emails-page into main
CI / checks (push) Has been cancelled
Reviewed-on: #10
2026-10-24 05:29:58 +00:00
Zakaria d457c08b12 feat(api): show the verification code in the SES mailbox
CI / checks (pull_request) Failing after 12m24s
2026-10-24 01:23:56 -04:00
Zakaria 4bc8da6ee1 Merge pull request 'feat(api): Cognito user actions, groups and test sign-in' (#9) from feat/cognito-round-2 into main
CI / checks (push) Failing after 12m34s
Reviewed-on: #9
2026-10-23 22:56:19 +00:00
Zakaria bafe799d00 feat(frontend): manage Cognito users and groups, and test sign-in
CI / checks (pull_request) Failing after 12m24s
The Cognito panel gains a test sign-in that shows the decoded ID and
access token claims, a groups section, and a per-user panel to enable or
disable, confirm, sign out everywhere, reset or set a password and change
group membership.

Delete confirmations (row and bulk) now say what else goes, driven by
the schema's deleteImpact, and the inspector follows list refreshes
instead of the click-time snapshot.
2026-10-23 17:54:15 -04:00
Zakaria 43f4cae9b5 fix(api): count Cognito pool users directly
The runtime leaves EstimatedNumberOfUsers at 0, so the pool metadata now
carries a userCount from ListUsers (capped at 1000), which the delete
confirmation reads.
2026-10-23 17:54:15 -04:00
Zakaria b4c2cadf5c feat(api): Cognito user actions, groups and test sign-in
Adds enable, disable, confirm, sign-out, password reset and set-password
for one user; user group membership; group list, create and delete; and a
test sign-in that returns decoded token claims. A refused test sign-in is
an outcome rather than a 401, which would end the console session.

Also adds a generic GET for one flat item and a schema deleteImpact so
delete confirmations can say what else goes with a resource.
2026-10-23 17:38:26 -04:00
Zakaria 8803498498 Merge pull request 'feat(api): add Cognito user pools to the cloud explorer' (#8) from feat/cognito-user-pools into main
CI / checks (push) Failing after 12m33s
Reviewed-on: #8
2026-10-23 18:41:30 +00:00
Zakaria f6b9a62811 Merge pull request 'fix(frontend): share one theme setting between the login page and console' (#7) from chore/ui-quick-wins into main
CI / checks (push) Has been cancelled
Reviewed-on: #7
2026-10-23 18:41:01 +00:00
Zakaria f1574b89df docs: regenerate the service matrix
CI / checks (pull_request) Successful in 26m4s
Adds Cognito and the services the table had drifted behind on (ECS, Fargate, Lightsail, ElastiCache, MSK, Kinesis and others).
2026-10-23 12:12:40 -04:00
Zakaria fe70e88bcc feat(frontend): manage Cognito app clients and users
Adds a users panel under the selected user pool: copyable app client ids, a create-user form that follows the pool's sign-in method, and the user list with delete. Maps the userpools icon key to the Cognito artwork.
2026-10-23 12:12:40 -04:00
Zakaria 4156afccfe feat(api): add Cognito user pools to the cloud explorer
Adds a userpools catalog entry, schema and AwsUserPoolsAdapter, verified
against Floci core:

- list/get/create/delete user pools; create can set email or username
  sign-in, a relaxed password policy for local test users, and a public
  app client (on by default) whose id is surfaced in the pool metadata
- users as the pool's child items: list (paged), get, create and delete;
  passwords are set permanent by default so users can sign in at once
- map Cognito's HTTP-400 error names (UserNotFoundException,
  UsernameExistsException, AliasExistsException, InvalidPasswordException)
- link Floci's cognito-idp service to the new page on the diagnostics page
2026-10-23 12:12:40 -04:00
Zakaria 8b166d86d4 feat(frontend): collapse responding services on the diagnostics page
CI / checks (pull_request) Failing after 12m12s
Failing console services stay visible; responding ones are behind a toggle.
2026-10-23 12:00:10 -04:00
Zakaria f956d977ca fix(frontend): fit the top bar on phone-width screens
Below 640px the search shrinks, the account switcher shows only its icon, and the connection indicator collapses to its status dot with the label kept for screen readers.
2026-10-23 12:00:10 -04:00