Monorepo for Tangled

appview,knot,spindle: use DevDirectory in dev mode #3

open opened by nolith.dev targeting master from local-dev

Wire DefaultDevResolver into all three components when running in dev mode. This enables .test TLD handle resolution via the local PDS's XRPC endpoint.

  • appview: uses existing config.Pds.Host for the PDS URL
  • knotserver: uses hardcoded localhost:2583 (PDS runs inside the VM)
  • spindle: same as knotserver

No new config fields are added to knot or spindle.

AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.6) Signed-off-by: Alessio Caiazza code.git@caiazza.info

Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:plc:nzep3slobztdph3kxswzbing/sh.tangled.repo.pull/3mgmn4nau5g22
+40 -7
Diff #1
+11 -4
appview/state/state.go
··· 84 84 return nil, fmt.Errorf("failed to create enforcer: %w", err) 85 85 } 86 86 87 - res, err := idresolver.RedisResolver(config.Redis.ToURL(), config.Plc.PLCURL) 88 - if err != nil { 89 - logger.Error("failed to create redis resolver", "err", err) 90 - res = idresolver.DefaultResolver(config.Plc.PLCURL) 87 + var res *idresolver.Resolver 88 + if config.Core.Dev { 89 + // In dev mode, resolve .test TLD handles via the local PDS's 90 + // com.atproto.identity.resolveHandle endpoint instead of DNS/HTTP. 91 + res = idresolver.DefaultDevResolver(config.Plc.PLCURL, config.Pds.Host) 92 + } else { 93 + res, err = idresolver.RedisResolver(config.Redis.ToURL(), config.Plc.PLCURL) 94 + if err != nil { 95 + logger.Error("failed to create redis resolver", "err", err) 96 + res = idresolver.DefaultResolver(config.Plc.PLCURL) 97 + } 91 98 } 92 99 93 100 posthog, err := posthog.NewWithConfig(config.Posthog.ApiKey, posthog.Config{Endpoint: config.Posthog.Endpoint})
+7 -1
knotserver/internal.go
··· 411 411 r := chi.NewRouter() 412 412 l := log.FromContext(ctx) 413 413 l = log.SubLogger(l, "internal") 414 - res := idresolver.DefaultResolver(c.Server.PlcUrl) 414 + 415 + var res *idresolver.Resolver 416 + if c.Server.Dev { 417 + res = idresolver.DefaultDevResolver(c.Server.PlcUrl, devPDSURL) 418 + } else { 419 + res = idresolver.DefaultResolver(c.Server.PlcUrl) 420 + } 415 421 416 422 h := InternalHandle{ 417 423 db,
+12 -1
knotserver/router.go
··· 29 29 resolver *idresolver.Resolver 30 30 } 31 31 32 + // devPDSURL is the default PDS endpoint for local development. 33 + // In dev mode, PLC/PDS/Jetstream all run on localhost inside the VM. 34 + const devPDSURL = "http://localhost:2583" 35 + 32 36 func Setup(ctx context.Context, c *config.Config, db *db.DB, e *rbac.Enforcer, jc *jetstream.JetstreamClient, n *notifier.Notifier) (http.Handler, error) { 37 + var resolver *idresolver.Resolver 38 + if c.Server.Dev { 39 + resolver = idresolver.DefaultDevResolver(c.Server.PlcUrl, devPDSURL) 40 + } else { 41 + resolver = idresolver.DefaultResolver(c.Server.PlcUrl) 42 + } 43 + 33 44 h := Knot{ 34 45 c: c, 35 46 db: db, ··· 37 48 l: log.FromContext(ctx), 38 49 jc: jc, 39 50 n: n, 40 - resolver: idresolver.DefaultResolver(c.Server.PlcUrl), 51 + resolver: resolver, 41 52 } 42 53 43 54 err := e.AddKnot(rbac.ThisServer)
+10 -1
spindle/server.go
··· 35 35 36 36 const ( 37 37 rbacDomain = "thisserver" 38 + 39 + // devPDSURL is the default PDS endpoint for local development. 40 + // In dev mode, PLC/PDS/Jetstream all run on localhost inside the VM. 41 + devPDSURL = "http://localhost:2583" 38 42 ) 39 43 40 44 type Spindle struct { ··· 118 122 jc.AddDid(d) 119 123 } 120 124 121 - resolver := idresolver.DefaultResolver(cfg.Server.PlcUrl) 125 + var resolver *idresolver.Resolver 126 + if cfg.Server.Dev { 127 + resolver = idresolver.DefaultDevResolver(cfg.Server.PlcUrl, devPDSURL) 128 + } else { 129 + resolver = idresolver.DefaultResolver(cfg.Server.PlcUrl) 130 + } 122 131 123 132 spindle := &Spindle{ 124 133 jc: jc,

History

2 rounds 0 comments
sign up or login to add to the discussion
1 commit
expand
appview,knot,spindle: use DevDirectory in dev mode
no conflicts, ready to merge
expand 0 comments
1 commit
expand
appview,knot,spindle: use DevDirectory in dev mode
expand 0 comments