unoverse 0.1.144 → 0.1.146
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.
|
@@ -212,7 +212,11 @@
|
|
|
212
212
|
echo "HTTP $RESULT"
|
|
213
213
|
[ "$RESULT" -ge 200 ] && [ "$RESULT" -lt 500 ]
|
|
214
214
|
loop:
|
|
215
|
-
|
|
215
|
+
# canvas.<domain>, NEVER the bare apex. Neither ground creates an apex record
|
|
216
|
+
# (aws/main.tf and digitalocean/main.tf publish api.<domain> and canvas.<domain>
|
|
217
|
+
# only), so `sub: ""` asked for a hostname that has no DNS at all and reported
|
|
218
|
+
# HTTP 000 FAILED on every healthy deploy.
|
|
219
|
+
- { name: "Canvas", sub: "canvas.", path: "/" }
|
|
216
220
|
- { name: "API Server", sub: "api.", path: "/health" }
|
|
217
221
|
register: domain_checks
|
|
218
222
|
ignore_errors: yes
|
|
@@ -112,6 +112,19 @@ locals {
|
|
|
112
112
|
# Where a person actually goes. Shared by the invitation email and the canvas_url output
|
|
113
113
|
# so the address in the email can never drift from the address in the deploy summary.
|
|
114
114
|
canvas_entry = var.domain != "" ? "https://canvas.${var.domain}" : "http://${aws_lb.public.dns_name}:3001"
|
|
115
|
+
# STUDIO IS A CALLBACK THIS GROUND OWNS, exactly like canvas_entry above.
|
|
116
|
+
#
|
|
117
|
+
# Studio signs in with `redirect_uri: window.location.origin` (packages/studio
|
|
118
|
+
# src/UniverseSession.tsx) and serves on a pinned 4108 (vite.config.ts, strictPort). On a
|
|
119
|
+
# BYO-OIDC ground the operator adds that to their own tenant; here the app client IS a
|
|
120
|
+
# resource of this module, so leaving it out means every developer who connects Studio to
|
|
121
|
+
# an AWS universe meets `redirect_mismatch` and has to discover a port number to put in a
|
|
122
|
+
# variable. The ground knows the address, so the ground allows it.
|
|
123
|
+
#
|
|
124
|
+
# Loopback only. It grants nothing on its own: the client is public, the flow is code with
|
|
125
|
+
# PKCE, and a code returned to 127.0.0.1 is redeemable only by the process that asked for
|
|
126
|
+
# it. The same reasoning already ships localhost:5173 in terraform.tfvars.example.
|
|
127
|
+
studio_entry = "http://localhost:4108"
|
|
115
128
|
api_host = "api.${var.domain}"
|
|
116
129
|
dns_auto = local.has_domain && var.route53_zone_id != ""
|
|
117
130
|
}
|
|
@@ -592,8 +605,8 @@ resource "aws_cognito_user_pool_client" "spa" {
|
|
|
592
605
|
# canvas_entry is the same expression the invitation email and the canvas_url output use,
|
|
593
606
|
# so the address a person is sent to is by construction an address they may return to.
|
|
594
607
|
# Anything else in the variable (localhost for dev, a second front end) is kept.
|
|
595
|
-
callback_urls = distinct(concat([local.canvas_entry], var.oauth_callback_urls))
|
|
596
|
-
logout_urls = distinct(concat([local.canvas_entry], var.oauth_callback_urls))
|
|
608
|
+
callback_urls = distinct(concat([local.canvas_entry, local.studio_entry], var.oauth_callback_urls))
|
|
609
|
+
logout_urls = distinct(concat([local.canvas_entry, local.studio_entry], var.oauth_callback_urls))
|
|
597
610
|
supported_identity_providers = ["COGNITO"]
|
|
598
611
|
}
|
|
599
612
|
|
|
@@ -30,9 +30,12 @@ docr_token = "dop_v1_..." # registry token (pulls platform images)
|
|
|
30
30
|
openai_api_key = "sk-..." # memory server + OpenAI nodes
|
|
31
31
|
# hyperbrowser_api_key = "" # optional — page intelligence
|
|
32
32
|
|
|
33
|
+
# EXTRA sign-in callbacks only. Your Canvas (canvas.<domain>, or the ALB address when
|
|
34
|
+
# there is no domain) and Studio (http://localhost:4108) are allowed automatically — the
|
|
35
|
+
# ground provisions the app client, so it knows those two addresses and adds them itself.
|
|
36
|
+
# List anything else here: a second front end, another dev port.
|
|
33
37
|
oauth_callback_urls = [
|
|
34
|
-
"
|
|
35
|
-
"http://localhost:5173", # local Studio/Canvas dev against this universe
|
|
38
|
+
"http://localhost:5173", # Canvas dev server
|
|
36
39
|
]
|
|
37
40
|
|
|
38
41
|
# RBAC roles (noun:verb — the grammar node manifests' requires.role matches).
|
package/operator/lib/deploy.sh
CHANGED
|
@@ -963,7 +963,11 @@ EOF
|
|
|
963
963
|
# Embed doorway is served AND compressed (identity-encoded JS was a live outage).
|
|
964
964
|
_smoke "embed.js gzipped" sh -c "curl -sf -m 10 -H 'accept-encoding: gzip' -D - '$smoke_api/embed.js' -o /dev/null | grep -qi '^content-encoding: gzip'"
|
|
965
965
|
# MCP lane accepts an initialize (every external connector dies here first).
|
|
966
|
-
|
|
966
|
+
# 200 (auth off) or 401 (auth on) prove the lane is ALIVE, the same judgement the
|
|
967
|
+
# database canary below makes. This used `curl -sf`, which fails on any error status,
|
|
968
|
+
# so a universe that boots "JWT enforced on /mcp" — every Cognito/AWS deployment —
|
|
969
|
+
# reported FAIL on a correctly protected endpoint and turned a healthy deploy red.
|
|
970
|
+
_smoke "MCP initialize" sh -c "code=\$(curl -s -m 10 -o /dev/null -w '%{http_code}' -X POST '$smoke_api/mcp' -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2025-06-18\",\"capabilities\":{},\"clientInfo\":{\"name\":\"smoke\",\"version\":\"0\"}}}'); [ \"\$code\" = 200 ] || [ \"\$code\" = 401 ]"
|
|
967
971
|
# Engine → Postgres canary: 200 (auth off) or 401 (auth on) prove the chain; a 500
|
|
968
972
|
# is the DB-unreachable incident that hides behind an otherwise healthy stack.
|
|
969
973
|
_smoke "engine reaches database" sh -c "code=\$(curl -s -m 10 -o /dev/null -w '%{http_code}' '$smoke_api/marketplace'); [ \"\$code\" = 200 ] || [ \"\$code\" = 401 ]"
|
package/package.json
CHANGED