···6868type processor func(context.Context, *models.Event) error69697070func (j *JetstreamClient) withDidFilter(processFunc processor) processor {7171- // empty filter => all dids allowed7272- if len(j.wantedDids) == 0 {7373- return processFunc7474- }7571 // since this closure references j.WantedDids; it should auto-update7672 // existing instances of the closure when j.WantedDids is mutated7773 return func(ctx context.Context, evt *models.Event) error {7474+7575+ // empty filter => all dids allowed7676+ if len(j.wantedDids) == 0 {7777+ return processFunc(ctx, evt)7878+ }7979+7880 if _, ok := j.wantedDids[evt.Did]; ok {7981 return processFunc(ctx, evt)8082 } else {
+5-5
knotserver/handler.go
···5252 return nil, fmt.Errorf("failed to setup enforcer: %w", err)5353 }54545555- err = h.jc.StartJetstream(ctx, h.processMessages)5656- if err != nil {5757- return nil, fmt.Errorf("failed to start jetstream: %w", err)5858- }5959-6055 // Check if the knot knows about any Dids;6156 // if it does, it is already initialized and we can repopulate the6257 // Jetstream subscriptions.···6671 for _, d := range dids {6772 h.jc.AddDid(d)6873 }7474+ }7575+7676+ err = h.jc.StartJetstream(ctx, h.processMessages)7777+ if err != nil {7878+ return nil, fmt.Errorf("failed to start jetstream: %w", err)6979 }70807181 r.Get("/", h.Index)
+47-43
knotserver/ingester.go
···2525 "tangled.sh/tangled.sh/core/workflow"2626)27272828-func (h *Handle) processPublicKey(ctx context.Context, did string, record tangled.PublicKey) error {2828+func (h *Handle) processPublicKey(ctx context.Context, event *models.Event) error {2929 l := log.FromContext(ctx)3030+ raw := json.RawMessage(event.Commit.Record)3131+ did := event.Did3232+3333+ var record tangled.PublicKey3434+ if err := json.Unmarshal(raw, &record); err != nil {3535+ return fmt.Errorf("failed to unmarshal record: %w", err)3636+ }3737+3038 pk := db.PublicKey{3139 Did: did,3240 PublicKey: record,···4739 return nil4840}49415050-func (h *Handle) processKnotMember(ctx context.Context, did string, record tangled.KnotMember) error {4242+func (h *Handle) processKnotMember(ctx context.Context, event *models.Event) error {5143 l := log.FromContext(ctx)4444+ raw := json.RawMessage(event.Commit.Record)4545+ did := event.Did4646+4747+ var record tangled.KnotMember4848+ if err := json.Unmarshal(raw, &record); err != nil {4949+ return fmt.Errorf("failed to unmarshal record: %w", err)5050+ }52515352 if record.Domain != h.c.Server.Hostname {5453 l.Error("domain mismatch", "domain", record.Domain, "expected", h.c.Server.Hostname)···8772 return nil8873}89749090-func (h *Handle) processPull(ctx context.Context, did string, record tangled.RepoPull) error {7575+func (h *Handle) processPull(ctx context.Context, event *models.Event) error {7676+ raw := json.RawMessage(event.Commit.Record)7777+ did := event.Did7878+7979+ var record tangled.RepoPull8080+ if err := json.Unmarshal(raw, &record); err != nil {8181+ return fmt.Errorf("failed to unmarshal record: %w", err)8282+ }8383+9184 l := log.FromContext(ctx)9285 l = l.With("handler", "processPull")9386 l = l.With("did", did)···223200 return nil224201 }225202226226- event := db.Event{203203+ ev := db.Event{227204 Rkey: TID(),228205 Nsid: tangled.PipelineNSID,229206 EventJson: string(eventJson),230207 }231208232232- return h.db.InsertEvent(event, h.n)209209+ return h.db.InsertEvent(ev, h.n)233210}234211235212// duplicated from add collaborator236236-func (h *Handle) processCollaborator(ctx context.Context, did string, record tangled.RepoCollaborator) error {213213+func (h *Handle) processCollaborator(ctx context.Context, event *models.Event) error {214214+ raw := json.RawMessage(event.Commit.Record)215215+ did := event.Did216216+217217+ var record tangled.RepoCollaborator218218+ if err := json.Unmarshal(raw, &record); err != nil {219219+ return fmt.Errorf("failed to unmarshal record: %w", err)220220+ }221221+237222 repoAt, err := syntax.ParseATURI(record.Repo)238223 if err != nil {239224 return err···274243 didSlashRepo, _ := securejoin.SecureJoin(owner.DID.String(), repo.Name)275244276245 // check perms for this user277277- if ok, err := h.e.IsCollaboratorInviteAllowed(owner.DID.String(), rbac.ThisServer, didSlashRepo); !ok || err != nil {246246+ if ok, err := h.e.IsCollaboratorInviteAllowed(did, rbac.ThisServer, didSlashRepo); !ok || err != nil {278247 return fmt.Errorf("insufficient permissions: %w", err)279248 }280249···334303}335304336305func (h *Handle) processMessages(ctx context.Context, event *models.Event) error {337337- did := event.Did338306 if event.Kind != models.EventKindCommit {339307 return nil340308 }···347317 }348318 }()349319350350- raw := json.RawMessage(event.Commit.Record)351351-352320 switch event.Commit.Collection {353321 case tangled.PublicKeyNSID:354354- var record tangled.PublicKey355355- if err := json.Unmarshal(raw, &record); err != nil {356356- return fmt.Errorf("failed to unmarshal record: %w", err)357357- }358358- if err := h.processPublicKey(ctx, did, record); err != nil {359359- return fmt.Errorf("failed to process public key: %w", err)360360- }361361-322322+ err = h.processPublicKey(ctx, event)362323 case tangled.KnotMemberNSID:363363- var record tangled.KnotMember364364- if err := json.Unmarshal(raw, &record); err != nil {365365- return fmt.Errorf("failed to unmarshal record: %w", err)366366- }367367- if err := h.processKnotMember(ctx, did, record); err != nil {368368- return fmt.Errorf("failed to process knot member: %w", err)369369- }370370-324324+ err = h.processKnotMember(ctx, event)371325 case tangled.RepoPullNSID:372372- var record tangled.RepoPull373373- if err := json.Unmarshal(raw, &record); err != nil {374374- return fmt.Errorf("failed to unmarshal record: %w", err)375375- }376376- if err := h.processPull(ctx, did, record); err != nil {377377- return fmt.Errorf("failed to process knot member: %w", err)378378- }379379-326326+ err = h.processPull(ctx, event)380327 case tangled.RepoCollaboratorNSID:381381- var record tangled.RepoCollaborator382382- if err := json.Unmarshal(raw, &record); err != nil {383383- return fmt.Errorf("failed to unmarshal record: %w", err)384384- }385385- if err := h.processCollaborator(ctx, did, record); err != nil {386386- return fmt.Errorf("failed to process knot member: %w", err)387387- }388388-328328+ err = h.processCollaborator(ctx, event)389329 }390330391391- return err331331+ if err != nil {332332+ h.l.Debug("failed to process event", "nsid", event.Commit.Collection, "err", err)333333+ }334334+335335+ return nil392336}
+3-1
log/log.go
···99// NewHandler sets up a new slog.Handler with the service name1010// as an attribute1111func NewHandler(name string) slog.Handler {1212- handler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{})1212+ handler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{1313+ Level: slog.LevelDebug,1414+ })13151416 var attrs []slog.Attr1517 attrs = append(attrs, slog.Attr{Key: "service", Value: slog.StringValue(name)})
+8-4
spindle/ingester.go
···40404141 switch e.Commit.Collection {4242 case tangled.SpindleMemberNSID:4343- s.ingestMember(ctx, e)4343+ err = s.ingestMember(ctx, e)4444 case tangled.RepoNSID:4545- s.ingestRepo(ctx, e)4545+ err = s.ingestRepo(ctx, e)4646 case tangled.RepoCollaboratorNSID:4747- s.ingestCollaborator(ctx, e)4747+ err = s.ingestCollaborator(ctx, e)4848 }49495050- return err5050+ if err != nil {5151+ s.l.Debug("failed to process message", "nsid", e.Commit.Collection, "err", err)5252+ }5353+5454+ return nil5155 }5256}5357