unoverse 0.1.97 → 0.1.99

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.
@@ -41,7 +41,11 @@ provider "aws" {
41
41
  # membership list, so it stays correct as the ground grows without anyone maintaining it.
42
42
  resource "aws_resourcegroups_group" "universe" {
43
43
  name = var.name
44
- description = "unoverse universe: ${var.name}"
44
+ # AWS Resource Groups allow ONLY [\sa-zA-Z0-9_.-] in a description no colon, no
45
+ # parentheses. "unoverse universe: name" failed CreateGroup after four minutes of ALB
46
+ # provisioning, and terraform validate cannot see it: the rule lives in the AWS API, not
47
+ # in the schema.
48
+ description = "unoverse universe ${var.name}"
45
49
 
46
50
  resource_query {
47
51
  query = jsonencode({
@@ -149,7 +153,9 @@ resource "aws_security_group" "app" {
149
153
  vpc_id = data.aws_vpc.default.id
150
154
 
151
155
  ingress {
152
- description = "Platform (api.<domain>) from the ALB only"
156
+ # Security group descriptions forbid angle brackets. "api.<domain>" reads naturally in
157
+ # prose and is rejected by the API.
158
+ description = "Platform api host, from the ALB only"
153
159
  from_port = 4105
154
160
  to_port = 4105
155
161
  protocol = "tcp"
@@ -377,6 +377,25 @@ _ensure_ground_config() {
377
377
  info "${DIM}(Auth0 or any OIDC provider; the issuer looks like https://your-tenant.auth0.com)${NC}"
378
378
  fi
379
379
  fi
380
+ # AWS ONLY. Cognito needs a first administrator, and nothing else in the CLI collects an
381
+ # email — so this was left FILL_ME and the deploy gave up. It is one question.
382
+ if [ "$cloud" = "aws" ] && grep -q '^admin_email[[:space:]]*=[[:space:]]*"FILL_ME"' "$tfv" 2>/dev/null; then
383
+ local admin_email=""
384
+ echo ""
385
+ echo -e " ${CYAN}${BOLD}Who is the first administrator?${NC}"
386
+ echo -e " ${DIM}They get a Cognito account with every role, and an invitation by email.${NC}"
387
+ echo ""
388
+ while [ -z "$admin_email" ]; do
389
+ read -r -p " Email: " admin_email
390
+ case "$admin_email" in
391
+ *@*.*) : ;;
392
+ *) [ -n "$admin_email" ] && warn "That does not look like an email address"; admin_email="" ;;
393
+ esac
394
+ done
395
+ _tf_put admin_email "$admin_email"
396
+ ok "First administrator: ${BOLD}$admin_email${NC}"
397
+ fi
398
+
380
399
  _tf_fill auth_issuer AUTH_ISSUER "AUTH_ISSUER"
381
400
  _tf_fill auth_client_id AUTH_CLIENT_ID "AUTH_CLIENT_ID"
382
401
 
@@ -384,9 +403,16 @@ _ensure_ground_config() {
384
403
  # it declared a complete file blank.
385
404
  if grep -qE '=[[:space:]]*"FILL_ME"' "$tfv" 2>/dev/null; then
386
405
  echo ""
387
- warn "Some values are still blank in ${BOLD}infra/$cloud/terraform.tfvars${NC} fill them, then:"
388
- info " cd infra/$cloud && terraform init && terraform apply"
389
- info " cd ../.. && unoverse deploy"
406
+ # NAME THE VALUES, AND NEVER HAND BACK TERRAFORM. This said "fill them, then cd
407
+ # infra/<cloud> && terraform init && terraform apply" — the homework this CLI exists to
408
+ # remove and then named `unoverse deploy` without the ground, which on a universe with
409
+ # two grounds is a command that refuses. Say which values, say where, say the command
410
+ # that resumes.
411
+ warn "These still need a value in ${BOLD}infra/$cloud/terraform.tfvars${NC}:"
412
+ echo ""
413
+ grep -nE '=[[:space:]]*"FILL_ME"' "$tfv" | sed -E 's/^([0-9]+):([a-z_]+).*/ line \1 \2/' | while read -r l; do echo -e " ${DIM}$l${NC}"; done
414
+ echo ""
415
+ info "Fill them in, then: ${BOLD}unoverse deploy $cloud${NC}"
390
416
  echo ""
391
417
  exit 1
392
418
  fi
@@ -291,8 +291,9 @@ openai_api_key = "FILL_ME"
291
291
  # hyperbrowser_api_key = "" # optional — page intelligence
292
292
 
293
293
  oauth_callback_urls = [
294
- $( if [ -n "$zone_domain" ]; then echo " \"https://$zone_domain\","; else echo " \"https://FILL_ME\","; fi )
294
+ $( if [ -n "$zone_domain" ]; then echo " \"https://canvas.$zone_domain\","; fi )
295
295
  "http://localhost:5173", # local Studio/Canvas dev against this universe
296
+ # Add your Canvas URL here once a domain is set (https://canvas.<domain>).
296
297
  ]
297
298
 
298
299
  # RBAC roles (noun:verb). Each becomes a Cognito group; put a user in the group
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unoverse",
3
- "version": "0.1.97",
3
+ "version": "0.1.99",
4
4
  "description": "The Unoverse front door — create a Studio project, a universe, or a client app, and launch Studio.",
5
5
  "license": "SEE LICENSE IN README.md",
6
6
  "type": "module",