diff --git a/CHANGELOG.md b/CHANGELOG.md
index 46f36569..f8c81fe7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -251,7 +251,7 @@ This release contains breaking changes. Most migrations will happen automaticall
- Fixes issue with GPX export when using Google Chrome (thanks [@tofublock](https://github.com/tofublock))
## Miscellaneous
-As the number of contributors to this project continues to grow (which I’m very happy about), I’ve set up a [Discord channel](https://discord.gg/MdpybUHc) for more direct communication. If you’re interested in helping with Wanderer, feel free to join!
+As the number of contributors to this project continues to grow (which I’m very happy about), I’ve set up a [Discord channel](https://discord.gg/MdpybUHc) for more direct communication. If you’re interested in helping with wanderer, feel free to join!
# v0.11.0
## Features
diff --git a/README.md b/README.md
index 8b23c60c..dd9b8f54 100644
--- a/README.md
+++ b/README.md
@@ -44,7 +44,7 @@ The first startup can take up to 90 seconds after which you can access the front
> ⚠️ if you are using wanderer in a production environment make sure to change the MEILI_MASTER_KEY variable.
-You can also run wanderer on bare-metal. Check out the [documentation](https://wanderer.to/getting-started/installation/#from-source) for a detailed how-to guide.
+You can also run wanderer on bare-metal. Check out the [documentation](https://wanderer.to/run/installation/#installation-from-source) for a detailed how-to guide.
## Support wanderer
diff --git a/db/Dockerfile b/db/Dockerfile
index f37eba24..4f7f6040 100644
--- a/db/Dockerfile
+++ b/db/Dockerfile
@@ -3,6 +3,7 @@ FROM alpine:3.16
WORKDIR /
COPY migrations ./migrations
+COPY templates ./templates
ARG TARGETARCH
RUN echo ${TARGETARCH}
diff --git a/db/federation/activity.go b/db/federation/activity.go
new file mode 100644
index 00000000..ed15940c
--- /dev/null
+++ b/db/federation/activity.go
@@ -0,0 +1,207 @@
+package federation
+
+import (
+ "bytes"
+ "context"
+ "crypto/x509"
+ "database/sql"
+ "encoding/pem"
+ "fmt"
+ "io"
+ "net/http"
+ "net/url"
+ "os"
+ "slices"
+ "strings"
+ "time"
+
+ pub "github.com/go-ap/activitypub"
+
+ "sync"
+
+ "github.com/go-ap/jsonld"
+ "github.com/go-fed/httpsig"
+ "github.com/pocketbase/pocketbase/core"
+ "github.com/pocketbase/pocketbase/tools/security"
+ "golang.org/x/sync/semaphore"
+)
+
+func PostActivity(app core.App, actor *core.Record, activity *pub.Activity, recipients []string) error {
+ encryptionKey := os.Getenv("POCKETBASE_ENCRYPTION_KEY")
+ if len(encryptionKey) == 0 {
+ return fmt.Errorf("POCKETBASE_ENCRYPTION_KEY not set")
+ }
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ algs := []httpsig.Algorithm{httpsig.RSA_SHA256}
+ postHeaders := []string{"(request-target)", "Date", "Digest", "Content-Type", "Host"}
+ expiresIn := 60
+
+ body, err := jsonld.WithContext(
+ jsonld.IRI(pub.ActivityBaseURI),
+ jsonld.IRI(pub.SecurityContextURI),
+ ).Marshal(activity)
+ if err != nil {
+ return err
+ }
+
+ decryptedPrivateKey, err := security.Decrypt(actor.GetString("private_key"), encryptionKey)
+ if err != nil {
+ return err
+ }
+ privateKey, err := x509.ParsePKCS1PrivateKey(decryptedPrivateKey)
+ if err != nil {
+ return err
+ }
+ pubID := actor.GetString("iri") + "#main-key"
+
+ client := &http.Client{}
+ var wg sync.WaitGroup
+
+ sem := semaphore.NewWeighted(5) // Limit to 5 concurrent sends
+
+ slices.Sort(recipients)
+ uniqueRecipients := slices.Compact(recipients)
+
+ for _, v := range uniqueRecipients {
+
+ wg.Add(1)
+ go func(inbox string) {
+ defer wg.Done()
+
+ signer, _, err := httpsig.NewSigner(algs, httpsig.DigestSha256, postHeaders, httpsig.Signature, int64(expiresIn))
+ if err != nil {
+ return
+ }
+
+ if err := sem.Acquire(context.Background(), 1); err != nil {
+ app.Logger().Error(fmt.Sprintf("Semaphore acquire failed: %s", err))
+ return
+ }
+ defer sem.Release(1)
+
+ buf := bytes.NewBuffer(body)
+ req, err := http.NewRequest(http.MethodPost, inbox, buf)
+ if err != nil {
+ app.Logger().Error(fmt.Sprintf("Request creation failed: %s", err))
+ return
+ }
+ req.Header.Add("Content-Type", "application/activity+json")
+ req.Header.Add("Date", strings.ReplaceAll(time.Now().UTC().Format(time.RFC1123), "UTC", "GMT"))
+ req.Header.Add("Host", req.Host)
+
+ if err := signer.SignRequest(privateKey, pubID, req, body); err != nil {
+ app.Logger().Error(fmt.Sprintf("Signing request failed: %s", err))
+ return
+ }
+
+ resp, err := client.Do(req)
+ if err != nil {
+ app.Logger().Error(fmt.Sprintf("Error sending request to inbox %s: %s", inbox, err))
+ return
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusAccepted {
+ body, _ := io.ReadAll(resp.Body)
+ app.Logger().Error(fmt.Sprintf("Inbox %s responded with %d: %s", inbox, resp.StatusCode, body))
+ }
+
+ app.Logger().Info(fmt.Sprintf("Sent %s to %s", activity.Type, inbox))
+ }(v)
+ }
+
+ wg.Wait()
+ return nil
+}
+
+func ProcessActivity(e *core.RequestEvent) error {
+
+ body, err := io.ReadAll(e.Request.Body)
+ if err != nil {
+ return err
+ }
+ var activity pub.Activity
+ activity.UnmarshalJSON(body)
+
+ actor, err := e.App.FindFirstRecordByData("activitypub_actors", "iri", activity.Actor.GetID().String())
+ if err != nil {
+ if err == sql.ErrNoRows {
+ actor, err = GetActorByIRI(e.App, activity.Actor.GetID().String(), false)
+ if err != nil {
+ return err
+ }
+ } else {
+ return err
+
+ }
+ }
+
+ verified, err := verifySignature(e.Request, actor.GetString("public_key"))
+ if err != nil || !verified {
+ return e.UnauthorizedError("Invalid http signature", err)
+ }
+
+ switch activity.Type {
+ case pub.FollowType:
+ ProcessFollowActivity(e.App, actor, activity)
+ case pub.AcceptType:
+ ProcessAcceptActivity(e.App, actor, activity)
+ case pub.UndoType:
+ ProcessUndoActivity(e.App, actor, activity)
+ case pub.UpdateType:
+ fallthrough
+ case pub.CreateType:
+ ProcessCreateOrUpdateActivity(e.App, actor, activity)
+ case pub.DeleteType:
+ ProcessDeleteActivity(e.App, actor, activity)
+ case pub.AnnounceType:
+ ProcessAnnounceActivity(e.App, actor, activity)
+ case pub.LikeType:
+ ProcessLikeActivity(e.App, actor, activity)
+ }
+ return e.JSON(http.StatusOK, nil)
+}
+
+func verifySignature(req *http.Request, publicKeyPem string) (bool, error) {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return false, fmt.Errorf("ORIGIN not set")
+ }
+ block, _ := pem.Decode([]byte(publicKeyPem))
+ if block == nil || block.Type != "PUBLIC KEY" {
+ return false, fmt.Errorf("could not decode publicKeyPem to PUBLIC KEY pem block type")
+ }
+
+ req.URL = &url.URL{
+ Path: req.Header.Get("X-Forwarded-Path"),
+ }
+
+ url, err := url.Parse(origin)
+ if err != nil {
+ return false, err
+ }
+
+ req.Header.Set("Host", url.Host)
+ req.Host = url.Host
+
+ publicKey, err := x509.ParsePKIXPublicKey(block.Bytes)
+ if err != nil {
+ return false, err
+ }
+
+ v, err := httpsig.NewVerifier(req)
+ if err != nil {
+ return false, err
+ }
+
+ err = v.Verify(publicKey, httpsig.RSA_SHA256)
+ if err != nil {
+ return false, err
+ }
+
+ return true, nil
+}
diff --git a/db/federation/actor.go b/db/federation/actor.go
new file mode 100644
index 00000000..65d7b520
--- /dev/null
+++ b/db/federation/actor.go
@@ -0,0 +1,284 @@
+package federation
+
+import (
+ "database/sql"
+ "encoding/json"
+ "fmt"
+ "net/http"
+ "net/url"
+ "os"
+ "strings"
+ "time"
+
+ pub "github.com/go-ap/activitypub"
+
+ "github.com/pocketbase/dbx"
+ "github.com/pocketbase/pocketbase/core"
+)
+
+type WebfingerResponse struct {
+ Subject string `json:"subject"`
+ Links []struct {
+ Rel string `json:"rel"`
+ Href string `json:"href"`
+ } `json:"links"`
+}
+
+func SplitHandle(handle string) (string, string) {
+
+ cleaned := strings.TrimPrefix(handle, "@")
+ cleaned = strings.TrimSpace(cleaned)
+
+ if !strings.Contains(cleaned, "@") {
+ return cleaned, ""
+ }
+
+ parts := strings.SplitN(cleaned, "@", 2)
+ user := parts[0]
+ domain := parts[1]
+
+ return user, domain
+}
+
+func GetActorByHandle(app core.App, handle string, includeFollows bool) (*core.Record, error) {
+ username, domain := SplitHandle(handle)
+
+ filter := "username={:username}&&"
+ if domain != "" {
+ filter += "domain={:domain}"
+ } else {
+ filter += "isLocal=true"
+ }
+
+ var dbActor *core.Record
+ dbActor, err := app.FindFirstRecordByFilter("activitypub_actors", filter, dbx.Params{"username": username, "domain": domain})
+ if err != nil && err == sql.ErrNoRows {
+ collection, err := app.FindCollectionByNameOrId("activitypub_actors")
+ if err != nil {
+ return nil, err
+ }
+
+ dbActor = core.NewRecord(collection)
+ dbActor.Set("isLocal", false)
+ iri, err := iriFromHandle(domain, username)
+ if err != nil {
+ return nil, err
+ }
+ dbActor.Set("iri", iri)
+
+ } else if err != nil {
+ return nil, err
+ }
+
+ return assembleActor(dbActor, app, includeFollows)
+}
+
+func GetActorByIRI(app core.App, iri string, includeFollows bool) (*core.Record, error) {
+ var dbActor *core.Record
+ dbActor, err := app.FindFirstRecordByFilter("activitypub_actors", "iri={:iri}", dbx.Params{"iri": iri})
+ if err != nil && err == sql.ErrNoRows {
+ collection, err := app.FindCollectionByNameOrId("activitypub_actors")
+ if err != nil {
+ return nil, err
+ }
+
+ dbActor = core.NewRecord(collection)
+ dbActor.Set("isLocal", false)
+ dbActor.Set("iri", iri)
+
+ } else if err != nil {
+ return nil, err
+ }
+
+ return assembleActor(dbActor, app, includeFollows)
+}
+
+func iriFromHandle(domain string, username string) (string, error) {
+ client := &http.Client{}
+
+ webfingerURL := fmt.Sprintf("https://%s/.well-known/webfinger?resource=acct:%s@%s", domain, username, domain)
+ resp, err := client.Get(webfingerURL)
+ if err != nil || resp.StatusCode != http.StatusOK {
+ return "", fmt.Errorf("webfinger request failed: %v", err)
+ }
+ defer resp.Body.Close()
+
+ var wf WebfingerResponse
+ if err := json.NewDecoder(resp.Body).Decode(&wf); err != nil {
+ return "", err
+ }
+
+ for _, link := range wf.Links {
+ if link.Rel == "self" {
+ return link.Href, nil
+ }
+ }
+ return "", fmt.Errorf("no iri in response")
+}
+
+func assembleActor(dbActor *core.Record, app core.App, includeFollows bool) (*core.Record, error) {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return nil, fmt.Errorf("ORIGIN environment variable not set")
+ }
+
+ if dbActor.GetBool("isLocal") {
+ user, err := app.FindRecordById("users", dbActor.GetString("user"))
+ if err != nil {
+ return nil, err
+ }
+ settings, err := app.FindFirstRecordByData("settings", "user", user.Id)
+ if err != nil {
+ return nil, err
+ }
+
+ if user.GetString("avatar") != "" {
+ dbActor.Set("icon", fmt.Sprintf("%s/api/v1/files/users/%s/%s", origin, user.Id, user.GetString("avatar")))
+ }
+ dbActor.Set("summary", settings.GetString("bio"))
+ followerCount, err := app.CountRecords("follows", dbx.NewExp("followee={:user}", dbx.Params{"user": dbActor.Id}))
+ if err != nil {
+ return nil, err
+ }
+ dbActor.Set("followerCount", followerCount)
+ followingCount, err := app.CountRecords("follows", dbx.NewExp("follower={:user}", dbx.Params{"user": dbActor.Id}))
+ if err != nil {
+ return nil, err
+ }
+ dbActor.Set("followingCount", followingCount)
+
+ dbActor.Set("last_fetched", time.Now())
+
+ privacy := settings.GetString("privacy")
+ result := make(map[string]interface{})
+ json.Unmarshal([]byte(privacy), &result)
+
+ private := result["account"] == "private"
+
+ if private {
+ return nil, fmt.Errorf("profile is private")
+ }
+
+ } else {
+
+ // check if value is still cached
+ twoHoursAgo := time.Now().Add(-2 * time.Hour)
+ if !includeFollows && dbActor.GetDateTime("last_fetched").Time().After(twoHoursAgo) {
+ return dbActor, nil
+ }
+ pubActor, followers, following, err := fetchRemoteActor(dbActor.GetString("iri"), includeFollows)
+ if err != nil {
+ if dbActor.Id != "" {
+ return dbActor, err
+ }
+ return nil, err
+ }
+
+ icon := ""
+ if pub.IsObject(pubActor.Icon) {
+ iconObject, err := pub.ToObject(pubActor.Icon)
+ if err == nil && iconObject.URL != nil {
+ icon = iconObject.URL.GetID().String()
+ }
+ }
+
+ parsedUrl, err := url.Parse(dbActor.GetString("iri"))
+ if err != nil {
+ return nil, err
+ }
+ domain := strings.TrimPrefix(parsedUrl.Hostname(), "www.")
+
+ dbActor.Set("domain", domain)
+ dbActor.Set("followers", pubActor.Followers.GetID().String())
+ dbActor.Set("inbox", pubActor.Inbox.GetID().String())
+ dbActor.Set("iri", pubActor.GetID().String())
+ dbActor.Set("username", pubActor.Name.String())
+ dbActor.Set("preferred_username", pubActor.PreferredUsername.String())
+ dbActor.Set("following", pubActor.Following.GetID().String())
+ dbActor.Set("summary", pubActor.Summary.String())
+ dbActor.Set("outbox", pubActor.Outbox.GetID().String())
+ dbActor.Set("icon", icon)
+ dbActor.Set("published", pubActor.Published.String())
+ dbActor.Set("public_key", pubActor.PublicKey.PublicKeyPem)
+ dbActor.Set("last_fetched", time.Now())
+
+ if includeFollows {
+ dbActor.Set("followerCount", int(followers.TotalItems))
+ dbActor.Set("followingCount", int(following.TotalItems))
+ }
+ }
+
+ err := app.Save(dbActor)
+ if err != nil && err.Error() == "iri: Value must be unique." {
+ dbActor, err = app.FindFirstRecordByData("activitypub_actors", "iri", dbActor.GetString("iri"))
+ if err != nil {
+ return nil, err
+ }
+ return dbActor, nil
+ } else if err != nil {
+ return nil, err
+ }
+
+ return dbActor, nil
+}
+
+// Fetches an AP actor and optionally followers/following collections
+func fetchRemoteActor(iri string, includeFollows bool) (*pub.Actor, *pub.OrderedCollection, *pub.OrderedCollection, error) {
+ client := &http.Client{}
+ headers := map[string]string{
+ "Accept": "application/ld+json",
+ }
+
+ req, _ := http.NewRequest("GET", iri, nil)
+ for k, v := range headers {
+ req.Header.Set(k, v)
+ }
+ resp, err := client.Do(req)
+ if err != nil {
+ return nil, nil, nil, fmt.Errorf("actor fetch failed: %v", err)
+ } else if resp.StatusCode != http.StatusOK {
+ return nil, nil, nil, fmt.Errorf("actor fetch failed: status %v", resp.StatusCode)
+ }
+
+ defer resp.Body.Close()
+
+ var pubActor pub.Actor
+ if err := json.NewDecoder(resp.Body).Decode(&pubActor); err != nil {
+ return nil, nil, nil, err
+ }
+
+ var followers, following pub.OrderedCollection
+
+ if includeFollows {
+ // Fetch followers
+ if data, err := fetchCollection(pubActor.Followers.GetID().String(), headers); err == nil {
+ followers = *data
+ }
+
+ // Fetch following
+ if data, err := fetchCollection(pubActor.Following.GetID().String(), headers); err == nil {
+ following = *data
+ }
+ }
+
+ return &pubActor, &followers, &following, nil
+}
+
+func fetchCollection(url string, headers map[string]string) (*pub.OrderedCollection, error) {
+ req, _ := http.NewRequest("GET", url, nil)
+ for k, v := range headers {
+ req.Header.Set(k, v)
+ }
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil || resp.StatusCode != http.StatusOK {
+ return nil, fmt.Errorf("collection fetch failed for %s: %v", url, err)
+ }
+ defer resp.Body.Close()
+
+ var collection pub.OrderedCollection
+ if err := json.NewDecoder(resp.Body).Decode(&collection); err != nil {
+ return nil, err
+ }
+
+ return &collection, nil
+}
diff --git a/db/federation/announce.go b/db/federation/announce.go
new file mode 100644
index 00000000..e757b61d
--- /dev/null
+++ b/db/federation/announce.go
@@ -0,0 +1,276 @@
+package federation
+
+import (
+ "database/sql"
+ "fmt"
+ "net/url"
+ "os"
+ "path"
+ "pocketbase/util"
+ "strings"
+ "time"
+
+ "github.com/pocketbase/dbx"
+ "github.com/pocketbase/pocketbase/core"
+ "github.com/pocketbase/pocketbase/tools/security"
+
+ pub "github.com/go-ap/activitypub"
+)
+
+type AnnounceType string
+
+const (
+ TrailAnnounceType AnnounceType = "trail"
+ ListAnnounceType AnnounceType = "list"
+)
+
+func CreateAnnounceActivity(app core.App, record *core.Record, typ AnnounceType) error {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ var subject *core.Record
+ var object pub.Item
+ var err error
+ if typ == TrailAnnounceType {
+ subject, err = app.FindRecordById("trails", record.GetString("trail"))
+ if err != nil {
+ return err
+ }
+ object, err = util.ObjectFromTrail(app, subject, nil)
+ if err != nil {
+ return err
+ }
+ } else if typ == ListAnnounceType {
+ subject, err = app.FindRecordById("lists", record.GetString("list"))
+ if err != nil {
+ return err
+ }
+ object, err = util.ObjectFromList(app, subject)
+ if err != nil {
+ return err
+ }
+
+ } else {
+ return fmt.Errorf("unknown announce type")
+ }
+
+ subjectActor, err := app.FindRecordById("activitypub_actors", subject.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ objectActor, err := app.FindRecordById("activitypub_actors", record.GetString("actor"))
+ if err != nil {
+ return err
+ }
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
+ to := objectActor.GetString("iri")
+ actor := subjectActor.GetString("iri")
+
+ activity := pub.AnnounceNew(pub.IRI(id), object)
+ activity.To = pub.ItemCollection{pub.IRI(to)}
+ activity.Actor = pub.IRI(actor)
+ activity.Tag = pub.ItemCollection{
+ pub.Object{
+ Type: pub.NoteType,
+ Name: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, "permission")),
+ Content: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, record.GetString("permission"))),
+ },
+ }
+
+ err = PostActivity(app, subjectActor, activity, []string{objectActor.GetString("inbox")})
+ if err != nil {
+ return err
+ }
+
+ activityRecord := core.NewRecord(collection)
+ activityRecord.Set("id", recordId)
+ activityRecord.Set("iri", id)
+ activityRecord.Set("to", []string{to})
+ activityRecord.Set("type", string(pub.AnnounceType))
+ activityRecord.Set("object", object)
+ activityRecord.Set("actor", actor)
+ activityRecord.Set("published", time.Now())
+
+ return app.Save(activityRecord)
+}
+
+// process incoming announce activity
+func ProcessAnnounceActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ object := activity.Object.GetID().String()
+
+ if strings.Contains(object, "/api/v1/trail") {
+ processTrailAnnounceActivity(app, actor, activity)
+
+ } else if strings.Contains(object, "/api/v1/list") {
+ processListAnnounceActivity(app, actor, activity)
+ } else {
+ return fmt.Errorf("unknown announce type")
+ }
+ return nil
+
+}
+
+func processTrailAnnounceActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+
+ objectActor, err := app.FindFirstRecordByData("activitypub_actors", "iri", activity.To[0].GetID().String())
+ if err != nil {
+ return err
+ }
+
+ var trail *core.Record
+ if !actor.GetBool("isLocal") {
+ trail, err = util.TrailFromActivity(activity, app, actor)
+ if err != nil {
+ return err
+ }
+
+ permission := "view"
+ // tags, err := pub.ToItemCollection(activity.Tag)
+ // if err != nil {
+ // return err
+ // }
+
+ // for _, tag := range tags.Collection() {
+ // tagObj, err := pub.ToObject(tag)
+ // if err != nil {
+ // continue
+ // }
+ // name := tagObj.Name.First().Value.String()
+ // content := tagObj.Content.First().Value.String()
+ // if name == "permission" {
+ // permission = content
+ // }
+ // }
+
+ record, err := app.FindFirstRecordByFilter("trail_share", "trail={:trailId}&&actor={:actorId}", dbx.Params{"trailId": trail.Id, "actorId": objectActor.Id})
+ if err != nil {
+ if err == sql.ErrNoRows {
+ collection, err := app.FindCollectionByNameOrId("trail_share")
+ if err != nil {
+ return err
+ }
+ record = core.NewRecord(collection)
+ record.Set("trail", trail.Id)
+ record.Set("actor", objectActor.Id)
+ } else {
+ return err
+ }
+ }
+
+ record.Set("permission", permission)
+
+ err = app.Save(record)
+ if err != nil {
+ return err
+ }
+ } else {
+ trailUrl, err := url.Parse(activity.Object.GetID().String())
+ if err != nil {
+ return err
+ }
+ trailId := path.Base(trailUrl.Path)
+ trail, err = app.FindRecordById("trails", trailId)
+ if err != nil {
+ return err
+ }
+ }
+
+ notification := util.Notification{
+ Type: util.TrailShare,
+ Metadata: map[string]string{
+ "id": trail.Id,
+ "trail": trail.GetString("name"),
+ "author": fmt.Sprintf("@%s@%s", actor.GetString("username"), actor.GetString("domain")),
+ },
+ Seen: false,
+ Author: actor.Id,
+ }
+ err = util.SendNotification(app, notification, objectActor)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func processListAnnounceActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+
+ objectActor, err := app.FindFirstRecordByData("activitypub_actors", "iri", activity.To[0].GetID().String())
+ if err != nil {
+ return err
+ }
+
+ var list *core.Record
+ if !actor.GetBool("isLocal") {
+ list, err = util.ListFromActivity(activity, app, actor)
+ if err != nil {
+ return err
+ }
+
+ record, err := app.FindFirstRecordByFilter("list_share", "list={:listId}&&actor={:actorId}", dbx.Params{"listId": list.Id, "actorId": objectActor.Id})
+ if err != nil {
+ if err == sql.ErrNoRows {
+ collection, err := app.FindCollectionByNameOrId("list_share")
+ if err != nil {
+ return err
+ }
+ record = core.NewRecord(collection)
+ record.Set("list", list.Id)
+ record.Set("actor", objectActor.Id)
+ record.Set("permission", "view")
+
+ } else {
+ return err
+ }
+ }
+
+ err = app.Save(record)
+ if err != nil {
+ return err
+ }
+ } else {
+ listUrl, err := url.Parse(activity.Object.GetID().String())
+ if err != nil {
+ return err
+ }
+ listId := path.Base(listUrl.Path)
+ list, err = app.FindRecordById("trails", listId)
+ if err != nil {
+ return err
+ }
+ }
+
+ notification := util.Notification{
+ Type: util.ListShare,
+ Metadata: map[string]string{
+ "id": list.Id,
+ "list": list.GetString("name"),
+ "author": fmt.Sprintf("@%s@%s", actor.GetString("username"), actor.GetString("domain")),
+ },
+ Seen: false,
+ Author: actor.Id,
+ }
+ err = util.SendNotification(app, notification, objectActor)
+ if err != nil {
+ return err
+ }
+
+ return nil
+
+}
diff --git a/db/federation/create.go b/db/federation/create.go
new file mode 100644
index 00000000..b8a5b382
--- /dev/null
+++ b/db/federation/create.go
@@ -0,0 +1,849 @@
+package federation
+
+import (
+ "context"
+ "database/sql"
+ "fmt"
+ "net/url"
+ "os"
+ "path"
+ "strconv"
+ "strings"
+ "time"
+
+ "pocketbase/util"
+
+ pub "github.com/go-ap/activitypub"
+ "github.com/pocketbase/dbx"
+ "github.com/pocketbase/pocketbase/core"
+ "github.com/pocketbase/pocketbase/tools/filesystem"
+ "github.com/pocketbase/pocketbase/tools/security"
+ "golang.org/x/net/html"
+)
+
+func CreateTrailActivity(app core.App, trail *core.Record, typ pub.ActivityVocabularyType) error {
+ if !trail.GetBool("public") {
+ // only broadcast the trail if it is public
+ return nil
+ }
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ trailAuthor, err := app.FindRecordById("activitypub_actors", trail.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
+ to := "https://www.w3.org/ns/activitystreams#Public"
+
+ mentionedActors, handles, err := ActorsFromMentions(app, trail.GetString("description"))
+ if err != nil {
+ return err
+ }
+
+ mentions := []string{}
+ cc := pub.ItemCollection{pub.IRI(trailAuthor.GetString("followers"))}
+ tags := pub.ItemCollection{}
+ for i, m := range mentionedActors {
+ inbox := m.GetString("inbox")
+ mention := pub.MentionNew(pub.IRI(m.GetString("iri")))
+ mention.Href = pub.IRI(m.GetString("iri"))
+ mention.Name = pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, handles[i]))
+ tags.Append(mention)
+
+ mentions = append(mentions, inbox)
+ cc.Append(pub.IRI(inbox))
+ }
+
+ trailObject, err := util.ObjectFromTrail(app, trail, &tags)
+ if err != nil {
+ return err
+ }
+
+ activity := pub.ActivityNew(pub.IRI(id), typ, trailObject)
+ activity.Actor = pub.IRI(trailAuthor.GetString("iri"))
+ activity.To = pub.ItemCollection{pub.IRI(to)}
+ activity.CC = cc
+ activity.Published = time.Now()
+
+ record := core.NewRecord(collection)
+ record.Set("id", recordId)
+ record.Set("iri", id)
+ record.Set("to", []string{to})
+ record.Set("cc", cc)
+ record.Set("type", string(typ))
+ record.Set("object", trailObject)
+ record.Set("actor", trailAuthor.GetString("iri"))
+ record.Set("published", time.Now())
+
+ err = app.Save(record)
+ if err != nil {
+ return err
+ }
+
+ follows, err := app.FindRecordsByFilter("follows", "followee={:followee}&&status='accepted'", "", -1, 0, dbx.Params{"followee": trailAuthor.Id})
+ if err != nil {
+ return err
+ }
+
+ recipients := mentions
+ for _, f := range follows {
+ follower, err := app.FindRecordById("activitypub_actors", f.GetString("follower"))
+ if err != nil {
+ return err
+ }
+ recipients = append(recipients, follower.GetString("inbox"))
+ }
+
+ return PostActivity(app, trailAuthor, activity, recipients)
+}
+
+func CreateCommentActivity(app core.App, comment *core.Record, typ pub.ActivityVocabularyType) error {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ // author of the comment
+ commentAuthor, err := app.FindRecordById("activitypub_actors", comment.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ commentTrail, err := app.FindRecordById("trails", comment.GetString("trail"))
+ if err != nil {
+ return err
+ }
+ commentTrailAuthor, err := app.FindRecordById("activitypub_actors", commentTrail.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ activityRecordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, activityRecordId)
+ to := "https://www.w3.org/ns/activitystreams#Public"
+
+ mentionedActors, handles, err := ActorsFromMentions(app, comment.GetString("text"))
+ if err != nil {
+ return err
+ }
+ recipients := []string{}
+ tags := pub.ItemCollection{}
+ for i, m := range mentionedActors {
+ mention := pub.MentionNew(pub.IRI(m.GetString("iri")))
+ mention.Href = pub.IRI(m.GetString("iri"))
+ mention.Name = pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, handles[i]))
+ tags.Append(mention)
+
+ recipients = append(recipients, m.GetString("inbox"))
+ }
+ recipients = append(recipients, commentTrailAuthor.GetString("inbox"))
+
+ cc := pub.ItemCollection{}
+ for _, r := range recipients {
+ cc.Append(pub.IRI(r))
+ }
+
+ author := commentAuthor.GetString("iri")
+
+ commentObject, err := util.ObjectFromComment(app, comment, &tags)
+ if err != nil {
+ return err
+ }
+
+ activity := pub.ActivityNew(pub.IRI(id), typ, commentObject)
+ activity.Actor = pub.IRI(author)
+ activity.To = pub.ItemCollection{pub.IRI(to)}
+ activity.CC = cc
+ activity.Published = time.Now()
+ activity.Object = commentObject
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ record := core.NewRecord(collection)
+ record.Set("id", activityRecordId)
+ record.Set("iri", id)
+ record.Set("to", []string{to})
+ record.Set("cc", recipients)
+ record.Set("type", string(typ))
+ record.Set("object", commentObject)
+ record.Set("actor", author)
+ record.Set("published", time.Now())
+
+ err = app.Save(record)
+ if err != nil {
+ return err
+ }
+
+ return PostActivity(app, commentAuthor, activity, recipients)
+
+}
+
+func CreateSummitLogActivity(app core.App, summitLog *core.Record, typ pub.ActivityVocabularyType) error {
+
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ summitLogAuthor, err := app.FindRecordById("activitypub_actors", summitLog.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ var summitLogAuthorId string
+ // first check if we find the trail locally
+ summitLogTrail, err := app.FindRecordById("trails", summitLog.GetString("trail"))
+ if err != nil {
+ return err
+ }
+ if !summitLogTrail.GetBool("public") {
+ // only broadcast the log if the trail it belongs to is public
+ return nil
+ }
+ summitLogAuthorId = summitLogTrail.GetString("author")
+
+ summitLogTrailAuthor, err := app.FindRecordById("activitypub_actors", summitLogAuthorId)
+ if err != nil {
+ return err
+ }
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ var trailIRI pub.IRI
+ if summitLogTrailAuthor.GetBool("isLocal") {
+ trailId := summitLog.GetString("trail")
+ trailIRI = pub.IRI(fmt.Sprintf("%s/api/v1/trail/%s", origin, trailId))
+ } else {
+ trailIRI = pub.IRI(summitLogTrail.GetString("iri"))
+ }
+
+ recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
+ to := pub.ItemCollection{pub.IRI("https://www.w3.org/ns/activitystreams#Public")}
+
+ // someone else created the summit log on the trail -> inform the trail's author
+ if summitLogAuthor.Id != summitLogTrailAuthor.Id {
+ to.Append(pub.IRI(summitLogTrailAuthor.GetString("iri")))
+ }
+
+ mentionedActors, handles, err := ActorsFromMentions(app, summitLog.GetString("text"))
+ if err != nil {
+ return err
+ }
+
+ mentions := []string{}
+ cc := pub.ItemCollection{pub.IRI(summitLogAuthor.GetString("followers"))}
+ mentionTags := pub.ItemCollection{}
+ for i, m := range mentionedActors {
+ inbox := m.GetString("inbox")
+ mention := pub.MentionNew(pub.IRI(m.GetString("iri")))
+ mention.Href = pub.IRI(m.GetString("iri"))
+ mention.Name = pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, handles[i]))
+ mentionTags.Append(mention)
+
+ mentions = append(mentions, inbox)
+ cc.Append(pub.IRI(inbox))
+ }
+
+ photos := summitLog.GetStringSlice("photos")
+
+ gpx := ""
+ if summitLog.GetString("gpx") != "" {
+ gpx = fmt.Sprintf("%s/api/v1/files/summit_logs/%s/%s", origin, summitLog.Id, summitLog.GetString("gpx"))
+ }
+
+ attachments := make(pub.ItemCollection, max(len(photos), 2))
+ for i := range len(photos) {
+ iri := fmt.Sprintf("%s/api/v1/files/summit_logs/%s/%s", origin, summitLog.Id, photos[i])
+
+ attachments[i] = pub.Document{
+ Type: pub.ImageType,
+ MediaType: "image/jpeg",
+ URL: pub.IRI(iri),
+ }
+ }
+ if gpx != "" {
+ attachments.Append(pub.Document{
+ Type: pub.DocumentType,
+ MediaType: "application/xml+gpx",
+ URL: pub.IRI(gpx),
+ })
+ }
+
+ tags := pub.ItemCollection{
+ pub.Object{
+ Type: pub.NoteType,
+ Name: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, "elevation_gain")),
+ Content: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, fmt.Sprintf("%fm", summitLog.GetFloat("elevation_gain")))),
+ },
+ pub.Object{
+ Type: pub.NoteType,
+ Name: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, "elevation_loss")),
+ Content: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, fmt.Sprintf("%fm", summitLog.GetFloat("elevation_loss")))),
+ },
+ pub.Object{
+ Type: pub.NoteType,
+ Name: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, "distance")),
+ Content: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, fmt.Sprintf("%fm", summitLog.GetFloat("distance")))),
+ },
+ pub.Object{
+ Type: pub.NoteType,
+ Name: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, "duration")),
+ Content: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, fmt.Sprintf("%fm", summitLog.GetFloat("duration")))),
+ },
+ }
+
+ for _, m := range mentionTags {
+ tags.Append(m)
+ }
+
+ logObject := pub.ObjectNew(pub.NoteType)
+
+ logObject.Content = pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, summitLog.GetString("text")))
+ logObject.AttributedTo = pub.IRI(summitLogAuthor.GetString("iri"))
+ logObject.Published = summitLog.GetDateTime("created").Time()
+ logObject.ID = pub.IRI(fmt.Sprintf("%s/api/v1/summit-log/%s", origin, summitLog.Id))
+ logObject.URL = pub.IRI(fmt.Sprintf("%s/trail/view/@%s/%s", origin, summitLogTrailAuthor.GetString("username"), summitLog.GetString("trail")))
+ logObject.InReplyTo = trailIRI
+ logObject.Tag = tags
+
+ logObject.StartTime = summitLog.GetDateTime("date").Time()
+ logObject.Attachment = attachments
+
+ activity := pub.ActivityNew(pub.IRI(id), typ, logObject)
+ activity.Actor = pub.IRI(summitLogAuthor.GetString("iri"))
+ activity.To = to
+ activity.CC = cc
+ activity.Published = time.Now()
+
+ follows, err := app.FindRecordsByFilter("follows", "followee={:followee}&&status='accepted'", "", -1, 0, dbx.Params{"followee": summitLogAuthor.Id})
+ if err != nil {
+ return err
+ }
+
+ recipients := mentions
+
+ for _, f := range follows {
+ follower, err := app.FindRecordById("activitypub_actors", f.GetString("follower"))
+ if err != nil {
+ return err
+ }
+ recipients = append(recipients, follower.GetString("inbox"))
+ }
+
+ if summitLogAuthor.Id != summitLogTrailAuthor.Id {
+ recipients = append(recipients, summitLogTrailAuthor.GetString("inbox"))
+ }
+
+ err = PostActivity(app, summitLogAuthor, activity, recipients)
+ if err != nil {
+ return err
+ }
+
+ record := core.NewRecord(collection)
+ record.Set("id", recordId)
+ record.Set("iri", id)
+ record.Set("to", to)
+ record.Set("cc", cc)
+ record.Set("type", string(typ))
+ record.Set("object", logObject)
+ record.Set("actor", summitLogAuthor.GetString("iri"))
+ record.Set("published", time.Now())
+
+ return app.Save(record)
+}
+
+func CreateListActivity(app core.App, list *core.Record, typ pub.ActivityVocabularyType) error {
+ if !list.GetBool("public") {
+ // only broadcast the list if it is public
+ return nil
+ }
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ // author of the list
+ listAuthor, err := app.FindRecordById("activitypub_actors", list.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ activityRecordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, activityRecordId)
+ to := "https://www.w3.org/ns/activitystreams#Public"
+ cc := listAuthor.GetString("followers")
+ author := listAuthor.GetString("iri")
+
+ listObject, err := util.ObjectFromList(app, list)
+ if err != nil {
+ return err
+ }
+
+ activity := pub.ActivityNew(pub.IRI(id), typ, listObject)
+ activity.Actor = pub.IRI(author)
+ activity.To = pub.ItemCollection{pub.IRI(to)}
+ activity.CC = pub.ItemCollection{pub.IRI(cc)}
+ activity.Published = time.Now()
+ activity.Object = listObject
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ follows, err := app.FindRecordsByFilter("follows", "followee={:followee}&&status='accepted'", "", -1, 0, dbx.Params{"followee": listAuthor.Id})
+ if err != nil {
+ return err
+ }
+
+ recipients := []string{}
+ for _, f := range follows {
+ follower, err := app.FindRecordById("activitypub_actors", f.GetString("follower"))
+ if err != nil {
+ return err
+ }
+ recipients = append(recipients, follower.GetString("inbox"))
+ }
+
+ err = PostActivity(app, listAuthor, activity, recipients)
+ if err != nil {
+ return err
+ }
+
+ record := core.NewRecord(collection)
+ record.Set("id", activityRecordId)
+ record.Set("iri", id)
+ record.Set("to", []string{to})
+ record.Set("cc", []string{cc})
+ record.Set("type", string(typ))
+ record.Set("object", listObject)
+ record.Set("actor", author)
+ record.Set("published", time.Now())
+
+ return app.Save(record)
+}
+
+func ProcessCreateOrUpdateActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+
+ var err error
+ if strings.Contains(activity.Object.GetID().String(), "/api/v1/trail") {
+ err = processCreateOrUpdateTrailActivity(activity, app, actor)
+ } else if strings.Contains(activity.Object.GetID().String(), "/api/v1/summit-log") {
+ err = processCreateOrUpdateSummitLogActivity(activity, app, actor)
+ } else if strings.Contains(activity.Object.GetID().String(), "/api/v1/list") {
+ err = processCreateOrUpdateListActivity(activity, app, actor)
+ } else {
+ err = processCreateOrUpdateCommentActivity(activity, app, actor)
+ }
+
+ if err != nil {
+ return err
+ }
+
+ return nil
+
+}
+
+func processCreateOrUpdateTrailActivity(activity pub.Activity, app core.App, actor *core.Record) error {
+
+ // no need to do anything if the actor is local
+ if actor.GetBool("isLocal") {
+ return nil
+ }
+
+ trail, err := util.TrailFromActivity(activity, app, actor)
+
+ trailObject, _ := pub.ToObject(activity.Object)
+
+ for _, t := range trailObject.Tag {
+ if t.GetType() == pub.MentionType {
+ mention := t.(*pub.Mention)
+ mentionedActor, err := app.FindFirstRecordByData("activitypub_actors", "iri", mention.Href.GetID().String())
+ if err != nil {
+ continue
+ }
+ notification := util.Notification{
+ Type: util.TrailMention,
+ Metadata: map[string]string{
+ "id": trail.Id,
+ "author": fmt.Sprintf("@%s@%s", actor.GetString("username"), actor.GetString("domain")),
+ },
+ Seen: false,
+ Author: actor.Id,
+ }
+ return util.SendNotification(app, notification, mentionedActor)
+ }
+ }
+
+ return err
+}
+
+func processCreateOrUpdateCommentActivity(activity pub.Activity, app core.App, actor *core.Record) error {
+
+ commentObject, err := pub.ToObject(activity.Object)
+ if err != nil {
+ return err
+ }
+
+ if commentObject.InReplyTo == nil {
+ return fmt.Errorf("error processing comment: InReplyTo empty")
+ }
+
+ trailUrl, err := url.Parse(commentObject.InReplyTo.GetLink().String())
+ if err != nil {
+ return err
+ }
+ trailId := path.Base(trailUrl.Path)
+
+ var trail *core.Record
+ trail, err = app.FindFirstRecordByFilter("trails", "iri={:iri} || id={:id}", dbx.Params{"id": trailId, "iri": commentObject.InReplyTo.GetID().String()})
+
+ // if the trail is not present on this instance fetch it
+ if err != nil {
+ if err == sql.ErrNoRows {
+ trailObject, err := util.TrailObjectFromIRI(commentObject.InReplyTo.GetLink().String())
+ if err != nil {
+ return err
+ }
+ activity := pub.ActivityNew(pub.IRI("new"), pub.CreateType, trailObject)
+ trail, err = util.TrailFromActivity(*activity, app, actor)
+ if err != nil {
+ return err
+ }
+ } else {
+ return err
+ }
+ }
+
+ trailAuthor, err := app.FindRecordById("activitypub_actors", trail.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ // no need to do anything else if the actor is local
+ if actor.GetBool("isLocal") {
+ return nil
+ }
+
+ record, err := app.FindFirstRecordByData("comments", "iri", commentObject.ID.String())
+ if err != nil {
+ if err == sql.ErrNoRows {
+ collection, err := app.FindCollectionByNameOrId("comments")
+ if err != nil {
+ return err
+ }
+
+ record = core.NewRecord(collection)
+ } else {
+ return err
+ }
+ }
+
+ record.Set("iri", commentObject.ID.String())
+ record.Set("text", commentObject.Content.First().Value)
+ record.Set("author", actor.Id)
+ record.Set("trail", trail.Id)
+
+ err = app.Save(record)
+ if err != nil {
+ return err
+ }
+
+ // send notifications to all mentioned actors
+ for _, t := range commentObject.Tag {
+ if t.GetType() == pub.MentionType {
+ mention := t.(*pub.Mention)
+ mentionedActor, err := app.FindFirstRecordByData("activitypub_actors", "iri", mention.Href.GetID().String())
+ if err != nil {
+ continue
+ }
+ notification := util.Notification{
+ Type: util.CommentMention,
+ Metadata: map[string]string{
+ "comment": commentObject.Content.First().Value.String(),
+ "trail_id": trail.Id,
+ "trail_name": trail.GetString("name"),
+ "trail_author": fmt.Sprintf("@%s@%s", trailAuthor.GetString("username"), trailAuthor.GetString("domain")),
+ },
+ Seen: false,
+ Author: actor.Id,
+ }
+ return util.SendNotification(app, notification, mentionedActor)
+ }
+ }
+ if activity.Type == pub.CreateType {
+ // send a notification to the trail author
+ notification := util.Notification{
+ Type: util.TrailComment,
+ Metadata: map[string]string{
+ "comment": commentObject.Content.First().Value.String(),
+ "trail_id": trail.Id,
+ "trail_name": trail.GetString("name"),
+ "trail_author": fmt.Sprintf("@%s@%s", trailAuthor.GetString("username"), trailAuthor.GetString("domain")),
+ },
+ Seen: false,
+ Author: actor.Id,
+ }
+ return util.SendNotification(app, notification, trailAuthor)
+ }
+
+ return nil
+}
+
+func processCreateOrUpdateSummitLogActivity(activity pub.Activity, app core.App, actor *core.Record) error {
+ logObject, err := pub.ToObject(activity.Object)
+ if err != nil {
+ return err
+ }
+
+ trailIRI, err := url.Parse(logObject.InReplyTo.GetID().String())
+ if err != nil {
+ return err
+ }
+ trailId := path.Base(trailIRI.Path)
+
+ trail, err := app.FindFirstRecordByFilter("trails", "iri={:iri} || id={:id}", dbx.Params{"id": trailId, "iri": logObject.InReplyTo.GetID().String()})
+ // if the trail is not present on this instance fetch it
+ if err != nil {
+ if err == sql.ErrNoRows {
+ trailObject, err := util.TrailObjectFromIRI(logObject.InReplyTo.GetLink().String())
+ if err != nil {
+ return err
+ }
+ activity := pub.ActivityNew(pub.IRI("new"), pub.CreateType, trailObject)
+ trail, err = util.TrailFromActivity(*activity, app, actor)
+ if err != nil {
+ return err
+ }
+ } else {
+ return err
+ }
+ }
+
+ trailAuthor, err := app.FindRecordById("activitypub_actors", trail.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ newSummitLog := false
+ record, err := app.FindFirstRecordByData("summit_logs", "iri", logObject.ID.String())
+ if err != nil {
+ if err == sql.ErrNoRows {
+ collection, err := app.FindCollectionByNameOrId("summit_logs")
+ if err != nil {
+ return err
+ }
+
+ record = core.NewRecord(collection)
+ newSummitLog = true
+ } else {
+ return err
+ }
+ }
+ // no need to do anything else if the actor is local
+ if actor.GetBool("isLocal") {
+ return nil
+ }
+
+ var distance, duration, elevation_gain, elevation_loss float64
+ tags, err := pub.ToItemCollection(logObject.Tag)
+ if err != nil {
+ return err
+ }
+
+ for _, tag := range tags.Collection() {
+ tagObj, err := pub.ToObject(tag)
+ if err != nil {
+ continue
+ }
+ content := tagObj.Content.First().Value.String()
+ switch tagObj.Name.First().Value.String() {
+ case "elevation_gain":
+ elevation_gain, err = strconv.ParseFloat(content[:len(content)-1], 64)
+ case "elevation_loss":
+ elevation_loss, err = strconv.ParseFloat(content[:len(content)-1], 64)
+ case "duration":
+ duration, err = strconv.ParseFloat(content[:len(content)-1], 64)
+ case "distance":
+ distance, err = strconv.ParseFloat(content[:len(content)-1], 64)
+ }
+ if err != nil {
+ continue
+ }
+ }
+
+ record.Set("date", logObject.StartTime)
+ record.Set("text", logObject.Content.First().Value)
+ record.Set("distance", distance)
+ record.Set("duration", duration)
+ record.Set("elevation_gain", elevation_gain)
+ record.Set("elevation_loss", elevation_loss)
+ record.Set("author", actor.Id)
+ record.Set("trail", trail.Id)
+ record.Set("iri", logObject.ID.String())
+
+ if logObject.Attachment != nil {
+ attachments, err := pub.ToItemCollection(logObject.Attachment)
+ if err != nil {
+ return err
+ }
+
+ photoURLs := []string{}
+ gpxURL := ""
+ for _, a := range attachments.Collection() {
+ attachment, err := pub.ToObject(a)
+ if err != nil {
+ continue
+ }
+ if attachment.Type == pub.DocumentType && attachment.MediaType == "application/xml+gpx" {
+ gpxURL = attachment.URL.GetLink().String()
+ } else if attachment.Type == pub.ImageType {
+ photoURLs = append(photoURLs, attachment.URL.GetLink().String())
+ }
+ }
+
+ if len(photoURLs) > 0 {
+ photos := make([]*filesystem.File, len(photoURLs))
+ for i, purl := range photoURLs {
+ photo, err := filesystem.NewFileFromURL(context.Background(), purl)
+ if err != nil {
+ continue
+ }
+ photos[i] = photo
+ }
+
+ record.Set("photos", photos)
+ }
+
+ if gpxURL != "" {
+ gpx, err := filesystem.NewFileFromURL(context.Background(), gpxURL)
+ if err != nil {
+ return err
+ }
+
+ record.Set("gpx", gpx)
+ }
+ }
+
+ err = app.Save(record)
+ if err != nil {
+ return err
+ }
+
+ // send notifications to all mentioned actors
+ for _, t := range logObject.Tag {
+ if t.GetType() == pub.MentionType {
+ mention := t.(*pub.Mention)
+ mentionedActor, err := app.FindFirstRecordByData("activitypub_actors", "iri", mention.Href.GetID().String())
+ if err != nil {
+ continue
+ }
+ notification := util.Notification{
+ Type: util.SummitLogMention,
+ Metadata: map[string]string{
+ "trail_id": trail.Id,
+ "trail_name": trail.GetString("name"),
+ "trail_author": fmt.Sprintf("@%s@%s", trailAuthor.GetString("username"), trailAuthor.GetString("domain")),
+ },
+ Seen: false,
+ Author: actor.Id,
+ }
+ return util.SendNotification(app, notification, mentionedActor)
+ }
+ }
+
+ if newSummitLog {
+ // send a notification to the trail author
+ notification := util.Notification{
+ Type: util.SummitLogCreate,
+ Metadata: map[string]string{
+ "trail_id": trail.Id,
+ "trail_name": trail.GetString("name"),
+ "trail_author": fmt.Sprintf("@%s@%s", trailAuthor.GetString("username"), trailAuthor.GetString("domain")),
+ },
+ Seen: false,
+ Author: actor.Id,
+ }
+ return util.SendNotification(app, notification, trailAuthor)
+ }
+
+ return nil
+}
+
+func processCreateOrUpdateListActivity(activity pub.Activity, app core.App, actor *core.Record) error {
+
+ // no need to do anything if the actor is local
+ if actor.GetBool("isLocal") {
+ return nil
+ }
+
+ _, err := util.ListFromActivity(activity, app, actor)
+
+ return err
+}
+
+func ActorsFromMentions(app core.App, htmlStr string) ([]*core.Record, []string, error) {
+ doc, err := html.Parse(strings.NewReader(htmlStr))
+ if err != nil {
+ return nil, nil, err
+ }
+
+ var handles []string
+ var actors []*core.Record
+
+ var f func(*html.Node)
+ f = func(n *html.Node) {
+ if n.Type == html.ElementNode && n.Data == "a" {
+ var isMention bool
+ for _, attr := range n.Attr {
+ if attr.Key == "class" && strings.Contains(attr.Val, "mention") {
+ isMention = true
+ break
+ }
+ }
+ if isMention && n.FirstChild != nil && n.FirstChild.Type == html.TextNode {
+ handle := strings.TrimSpace(n.FirstChild.Data)
+ if strings.HasPrefix(handle, "@") {
+ handles = append(handles, handle)
+ }
+ }
+ }
+
+ for c := n.FirstChild; c != nil; c = c.NextSibling {
+ f(c)
+ }
+ }
+
+ f(doc)
+
+ for _, h := range handles {
+ actor, err := GetActorByHandle(app, h, false)
+ if err != nil {
+ continue
+ }
+ actors = append(actors, actor)
+ }
+
+ return actors, handles, nil
+}
diff --git a/db/federation/delete.go b/db/federation/delete.go
new file mode 100644
index 00000000..57c3211e
--- /dev/null
+++ b/db/federation/delete.go
@@ -0,0 +1,377 @@
+package federation
+
+import (
+ "fmt"
+ "net/url"
+ "os"
+ "path"
+ "strings"
+ "time"
+
+ pub "github.com/go-ap/activitypub"
+ "github.com/meilisearch/meilisearch-go"
+ "github.com/pocketbase/dbx"
+ "github.com/pocketbase/pocketbase/core"
+ "github.com/pocketbase/pocketbase/tools/security"
+)
+
+func CreateTrailDeleteActivity(app core.App, r *core.Record) error {
+
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ author, err := app.FindRecordById("activitypub_actors", r.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
+ to := "https://www.w3.org/ns/activitystreams#Public"
+ cc := author.GetString("iri") + "/followers"
+ object := fmt.Sprintf("%s/api/v1/trail/%s", origin, r.Id)
+
+ record := core.NewRecord(collection)
+ record.Set("id", recordId)
+ record.Set("iri", id)
+ record.Set("type", string(pub.DeleteType))
+ record.Set("to", to)
+ record.Set("cc", cc)
+ record.Set("object", object)
+ record.Set("actor", author.GetString("iri"))
+ record.Set("published", time.Now())
+
+ err = app.Save(record)
+ if err != nil {
+ return err
+ }
+
+ activity := pub.DeleteNew(pub.IRI(id), pub.IRI(object))
+ activity.Actor = pub.IRI(author.GetString("iri"))
+ activity.To = pub.ItemCollection{pub.IRI(to)}
+ activity.CC = pub.ItemCollection{pub.IRI(cc)}
+ activity.Published = time.Now()
+
+ follows, err := app.FindRecordsByFilter("follows", "followee={:followee}&&status='accepted'", "", -1, 0, dbx.Params{"followee": author.Id})
+ if err != nil {
+ return err
+ }
+
+ recipients := []string{}
+ for _, f := range follows {
+ follower, err := app.FindRecordById("activitypub_actors", f.GetString("follower"))
+ if err != nil {
+ return err
+ }
+ recipients = append(recipients, follower.GetString("inbox"))
+ }
+
+ return PostActivity(app, author, activity, recipients)
+}
+
+func CreateCommentDeleteActivity(app core.App, client meilisearch.ServiceManager, r *core.Record) error {
+
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ author, err := app.FindRecordById("activitypub_actors", r.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ if !author.GetBool("isLocal") {
+ return nil
+ }
+
+ commentTrail, err := app.FindRecordById("trails", r.GetString("trail"))
+ if err != nil {
+ return err
+ }
+
+ commentTrailAuthor, err := app.FindRecordById("activitypub_actors", commentTrail.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ if commentTrailAuthor.GetBool("isLocal") {
+ return nil
+ }
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
+ to := commentTrailAuthor.GetString("iri")
+ object := fmt.Sprintf("%s/api/v1/comment/%s", origin, r.Id)
+
+ activity := pub.DeleteNew(pub.IRI(id), pub.IRI(object))
+ activity.Actor = pub.IRI(author.GetString("iri"))
+ activity.To = pub.ItemCollection{pub.IRI(to)}
+ activity.Published = time.Now()
+
+ err = PostActivity(app, author, activity, []string{to + "/inbox"})
+ if err != nil {
+ return err
+ }
+ record := core.NewRecord(collection)
+ record.Set("id", recordId)
+ record.Set("iri", id)
+ record.Set("type", string(pub.DeleteType))
+ record.Set("to", to)
+ record.Set("object", object)
+ record.Set("actor", author.GetString("iri"))
+ record.Set("published", time.Now())
+
+ return app.Save(record)
+}
+
+func CreateSummitLogDeleteActivity(app core.App, r *core.Record) error {
+
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ author, err := app.FindRecordById("activitypub_actors", r.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ if !author.GetBool("isLocal") {
+ return nil
+ }
+
+ summitLogTrail, err := app.FindRecordById("trails", r.GetString("trail"))
+ if err != nil {
+ return err
+ }
+
+ summitLogTrailAuthor, err := app.FindRecordById("activitypub_actors", summitLogTrail.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
+ to := summitLogTrailAuthor.GetString("iri")
+ object := fmt.Sprintf("%s/api/v1/summit-log/%s", origin, r.Id)
+ cc := pub.ItemCollection{pub.IRI(author.GetString("iri") + "/followers")}
+
+ activity := pub.DeleteNew(pub.IRI(id), pub.IRI(object))
+ activity.Actor = pub.IRI(author.GetString("iri"))
+ activity.To = pub.ItemCollection{pub.IRI(to)}
+ activity.CC = cc
+ activity.Published = time.Now()
+
+ follows, err := app.FindRecordsByFilter("follows", "followee={:followee}&&status='accepted'", "", -1, 0, dbx.Params{"followee": author.Id})
+ if err != nil {
+ return err
+ }
+
+ recipients := []string{}
+
+ for _, f := range follows {
+ follower, err := app.FindRecordById("activitypub_actors", f.GetString("follower"))
+ if err != nil {
+ return err
+ }
+ recipients = append(recipients, follower.GetString("inbox"))
+ }
+
+ if author.Id != summitLogTrailAuthor.Id {
+ recipients = append(recipients, summitLogTrailAuthor.GetString("inbox"))
+ }
+
+ err = PostActivity(app, author, activity, recipients)
+ if err != nil {
+ return err
+ }
+
+ record := core.NewRecord(collection)
+ record.Set("id", recordId)
+ record.Set("iri", id)
+ record.Set("type", string(pub.DeleteType))
+ record.Set("to", to)
+ record.Set("cc", cc)
+ record.Set("object", object)
+ record.Set("actor", author.GetString("iri"))
+ record.Set("published", time.Now())
+
+ return app.Save(record)
+}
+
+func CreateListDeleteActivity(app core.App, r *core.Record) error {
+
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ author, err := app.FindRecordById("activitypub_actors", r.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ if !author.GetBool("isLocal") {
+ return nil
+ }
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
+ to := "https://www.w3.org/ns/activitystreams#Public"
+ cc := author.GetString("iri") + "/followers"
+ object := fmt.Sprintf("%s/api/v1/list/%s", origin, r.Id)
+
+ activity := pub.DeleteNew(pub.IRI(id), pub.IRI(object))
+ activity.Actor = pub.IRI(author.GetString("iri"))
+ activity.To = pub.ItemCollection{pub.IRI(to)}
+ activity.CC = pub.ItemCollection{pub.IRI(cc)}
+ activity.Published = time.Now()
+
+ follows, err := app.FindRecordsByFilter("follows", "followee={:followee}&&status='accepted'", "", -1, 0, dbx.Params{"followee": author.Id})
+ if err != nil {
+ return err
+ }
+
+ recipients := []string{}
+ for _, f := range follows {
+ follower, err := app.FindRecordById("activitypub_actors", f.GetString("follower"))
+ if err != nil {
+ return err
+ }
+ recipients = append(recipients, follower.GetString("inbox"))
+ }
+
+ err = PostActivity(app, author, activity, recipients)
+ if err != nil {
+ return err
+ }
+
+ record := core.NewRecord(collection)
+ record.Set("id", recordId)
+ record.Set("iri", id)
+ record.Set("type", string(pub.DeleteType))
+ record.Set("to", to)
+ record.Set("cc", cc)
+ record.Set("object", object)
+ record.Set("actor", author.GetString("iri"))
+ record.Set("published", time.Now())
+
+ return app.Save(record)
+}
+
+func ProcessDeleteActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+ // no need to do anything if the actor is local
+ if actor.GetBool("isLocal") {
+ return nil
+ }
+
+ object := activity.Object.GetID().String()
+
+ var err error
+ switch {
+ case strings.Contains(object, "trail"):
+ err = processDeleteTrailActivity(app, activity)
+ case strings.Contains(object, "comment"):
+ err = processDeleteCommentActivity(app, actor, activity)
+ case strings.Contains(object, "summit-log"):
+ err = processDeleteSummitLogActivity(app, actor, activity)
+ case strings.Contains(object, "list"):
+ err = processDeleteListActivity(app, actor, activity)
+ }
+
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func processDeleteTrailActivity(app core.App, activity pub.Activity) error {
+
+ trailUrl, err := url.Parse(activity.Object.GetID().String())
+ if err != nil {
+ return err
+ }
+ recordId := path.Base(trailUrl.Path)
+
+ trail, err := app.FindRecordById("trails", recordId)
+ if err != nil {
+ return err
+ }
+ return app.Delete(trail)
+}
+
+func processDeleteCommentActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+ object := activity.Object.GetID().String()
+
+ comment, err := app.FindFirstRecordByData("comments", "iri", object)
+ if err != nil {
+ return err
+ }
+
+ if comment.GetString("author") != actor.Id {
+ return fmt.Errorf("actor is not comment author")
+ }
+
+ err = app.Delete(comment)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func processDeleteSummitLogActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+ object := activity.Object.GetID().String()
+
+ summitLog, err := app.FindFirstRecordByData("summit_logs", "iri", object)
+ if err != nil {
+ return err
+ }
+
+ if summitLog.GetString("author") != actor.Id {
+ return fmt.Errorf("actor is not summit log author")
+ }
+
+ return app.Delete(summitLog)
+}
+
+func processDeleteListActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+
+ object := activity.Object.GetID().String()
+ list, err := app.FindFirstRecordByData("lists", "iri", object)
+ if err != nil {
+ return err
+ }
+
+ if list.GetString("author") != actor.Id {
+ return fmt.Errorf("actor is not summit log author")
+ }
+ return app.Delete(list)
+}
diff --git a/db/federation/follow.go b/db/federation/follow.go
new file mode 100644
index 00000000..33b4c6c6
--- /dev/null
+++ b/db/federation/follow.go
@@ -0,0 +1,160 @@
+package federation
+
+import (
+ "fmt"
+ "os"
+ "pocketbase/util"
+ "time"
+
+ pub "github.com/go-ap/activitypub"
+ "github.com/pocketbase/dbx"
+ "github.com/pocketbase/pocketbase/core"
+ "github.com/pocketbase/pocketbase/tools/security"
+)
+
+// create outgoing follow activity
+func CreateFollowActivity(app core.App, follow *core.Record) error {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ follower := follow.GetString("follower")
+ followee := follow.GetString("followee")
+
+ followerActor, err := app.FindRecordById("activitypub_actors", follower)
+ if err != nil {
+ return err
+ }
+
+ followeeActor, err := app.FindRecordById("activitypub_actors", followee)
+ if err != nil {
+ return err
+ }
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
+
+ activity := pub.FollowNew(pub.IRI(id), pub.IRI(followeeActor.GetString("iri")))
+ activity.Actor = pub.IRI(followerActor.GetString("iri"))
+
+ err = PostActivity(app, followerActor, activity, []string{followeeActor.GetString("inbox")})
+ if err != nil {
+ return err
+ }
+
+ record := core.NewRecord(collection)
+ record.Set("id", recordId)
+ record.Set("iri", id)
+ record.Set("type", string(pub.FollowType))
+ record.Set("object", followeeActor.GetString("iri"))
+ record.Set("actor", followerActor.GetString("iri"))
+ record.Set("published", time.Now())
+
+ return app.Save(record)
+}
+
+// process incoming follow activity
+func ProcessFollowActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ // find the followee in our db
+ object, err := app.FindFirstRecordByData("activitypub_actors", "iri", activity.Object)
+ if err != nil {
+ return err
+ }
+
+ // a remote actor has requested the follow
+ // this means we have not yet created a follow entry in our db
+ // we accept it immediately
+ if !actor.GetBool("isLocal") {
+ followCollection, err := app.FindCollectionByNameOrId("follows")
+ if err != nil {
+ return err
+ }
+ followRecord := core.NewRecord(followCollection)
+ followRecord.Set("follower", actor.Id)
+ followRecord.Set("followee", object.Id)
+ followRecord.Set("status", "accepted")
+ err = app.Save(followRecord)
+ if err != nil {
+ return err
+ }
+ }
+
+ recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
+
+ // send the accept activity back to the actor's inbox
+ acceptActivity := pub.AcceptNew(pub.IRI(id), activity)
+ acceptActivity.Actor = activity.Object
+ err = PostActivity(app, object, acceptActivity, []string{actor.GetString("inbox")})
+ if err != nil {
+ return err
+ }
+
+ // create record of the accept activity in our db
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ record := core.NewRecord(collection)
+ record.Set("id", recordId)
+ record.Set("iri", id)
+ record.Set("type", string(pub.AcceptType))
+ record.Set("object", activity)
+ record.Set("actor", object.GetString("iri"))
+ record.Set("published", time.Now())
+
+ err = app.Save(record)
+ if err != nil {
+ return err
+ }
+ // send a notification to the followee
+ notification := util.Notification{
+ Type: util.NewFollower,
+ Metadata: map[string]string{
+ "follower": fmt.Sprintf("@%s@%s", actor.GetString("username"), actor.GetString("domain")),
+ },
+ Seen: false,
+ Author: actor.Id,
+ }
+ return util.SendNotification(app, notification, object)
+
+}
+
+func ProcessAcceptActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+
+ followActivity := activity.Object.(*pub.Activity)
+
+ follower, err := app.FindFirstRecordByData("activitypub_actors", "iri", followActivity.Actor)
+ if err != nil {
+ return err
+ }
+
+ follow, err := app.FindFirstRecordByFilter("follows", "follower={:follower} && followee={:followee}", dbx.Params{"follower": follower.Id, "followee": actor.Id})
+ if err != nil {
+ return err
+ }
+ follow.Set("status", "accepted")
+ err = app.Save(follow)
+ if err != nil {
+ return err
+ }
+
+ // err = util.SyncOutbox(app, actor)
+ // if err != nil {
+ // return err
+ // }
+ return nil
+}
diff --git a/db/federation/like.go b/db/federation/like.go
new file mode 100644
index 00000000..107e940d
--- /dev/null
+++ b/db/federation/like.go
@@ -0,0 +1,118 @@
+package federation
+
+import (
+ "fmt"
+ "os"
+ "path"
+ "pocketbase/util"
+ "time"
+
+ pub "github.com/go-ap/activitypub"
+ "github.com/pocketbase/pocketbase/core"
+ "github.com/pocketbase/pocketbase/tools/security"
+)
+
+// create outgoing follow activity
+func CreateLikeActivity(app core.App, like *core.Record) error {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ actor, err := app.FindRecordById("activitypub_actors", like.GetString("actor"))
+ if err != nil {
+ return err
+ }
+
+ trail, err := app.FindRecordById("trails", like.GetString("trail"))
+ if err != nil {
+ return err
+ }
+
+ trailAuthor, err := app.FindRecordById("activitypub_actors", trail.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ object := trail.GetString("iri")
+
+ if object == "" {
+ // trail is local
+ object = fmt.Sprintf("%s/api/v1/trail/%s", origin, trail.Id)
+ }
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
+
+ activity := pub.LikeNew(pub.IRI(id), pub.IRI(object))
+ activity.Actor = pub.IRI(actor.GetString("iri"))
+
+ err = PostActivity(app, actor, activity, []string{trailAuthor.GetString("inbox")})
+ if err != nil {
+ return err
+ }
+
+ record := core.NewRecord(collection)
+ record.Set("id", recordId)
+ record.Set("iri", id)
+ record.Set("type", string(pub.LikeType))
+ record.Set("object", object)
+ record.Set("actor", actor.GetString("iri"))
+ record.Set("published", time.Now())
+
+ return app.Save(record)
+}
+
+// process incoming like activity
+func ProcessLikeActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ trailId := path.Base(activity.Object.GetID().String())
+ trail, err := app.FindRecordById("trails", trailId)
+ if err != nil {
+ return err
+ }
+
+ trailAuthor, err := app.FindRecordById("activitypub_actors", trail.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ if !actor.GetBool("isLocal") {
+ trailLikeCollection, err := app.FindCollectionByNameOrId("trail_like")
+ if err != nil {
+ return err
+ }
+ likeRecord := core.NewRecord(trailLikeCollection)
+ likeRecord.Set("trail", trail.Id)
+ likeRecord.Set("actor", actor.Id)
+ err = app.Save(likeRecord)
+ if err != nil {
+ return err
+ }
+ }
+
+ // send a notification to the trail author
+ notification := util.Notification{
+ Type: util.TrailLike,
+ Metadata: map[string]string{
+ "trail_id": trail.Id,
+ "trail_name": trail.GetString("name"),
+ "trail_author": fmt.Sprintf("@%s", trailAuthor.GetString("username")),
+ "liker": fmt.Sprintf("@%s@%s", actor.GetString("username"), actor.GetString("domain")),
+ },
+ Seen: false,
+ Author: actor.Id,
+ }
+ return util.SendNotification(app, notification, trailAuthor)
+
+}
diff --git a/db/federation/undo.go b/db/federation/undo.go
new file mode 100644
index 00000000..d9d6f386
--- /dev/null
+++ b/db/federation/undo.go
@@ -0,0 +1,194 @@
+package federation
+
+import (
+ "fmt"
+ "os"
+ "path"
+ "time"
+
+ pub "github.com/go-ap/activitypub"
+ "github.com/pocketbase/dbx"
+ "github.com/pocketbase/pocketbase/core"
+ "github.com/pocketbase/pocketbase/tools/security"
+)
+
+// create outgoing follow activity
+func CreateUnfollowActivity(app core.App, follow *core.Record) error {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ follower := follow.GetString("follower")
+ followee := follow.GetString("followee")
+
+ followerActor, err := app.FindRecordById("activitypub_actors", follower)
+ if err != nil {
+ return err
+ }
+
+ followeeActor, err := app.FindRecordById("activitypub_actors", followee)
+ if err != nil {
+ return err
+ }
+
+ // find the original follow activity
+ followActivityRecord, err := app.FindFirstRecordByFilter("activitypub_activities", "actor={:actor}&&object={:object}&&type={:type}", dbx.Params{"actor": followerActor.GetString("iri"), "object": followeeActor.GetString("iri"), "type": string(pub.FollowType)})
+ if err != nil {
+ return err
+ }
+ followActivity := pub.FollowNew(pub.IRI(followActivityRecord.GetString("iri")), pub.IRI(followeeActor.GetString("iri")))
+ followActivity.Actor = pub.IRI(followActivityRecord.GetString("actor"))
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
+
+ record := core.NewRecord(collection)
+ record.Set("id", recordId)
+ record.Set("iri", id)
+ record.Set("type", string(pub.UndoType))
+ record.Set("object", followActivity)
+ record.Set("actor", followerActor.GetString("iri"))
+ record.Set("published", time.Now())
+
+ err = app.Save(record)
+ if err != nil {
+ return err
+ }
+
+ activity := pub.UndoNew(pub.IRI(id), followActivity)
+ activity.Actor = pub.IRI(followerActor.GetString("iri"))
+
+ return PostActivity(app, followerActor, activity, []string{followeeActor.GetString("inbox")})
+}
+
+// create outgoing unlike activity
+func CreateUnlikeActivity(app core.App, like *core.Record) error {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return fmt.Errorf("ORIGIN not set")
+ }
+
+ actor, err := app.FindRecordById("activitypub_actors", like.GetString("actor"))
+ if err != nil {
+ return err
+ }
+
+ trail, err := app.FindRecordById("trails", like.GetString("trail"))
+ if err != nil {
+ return err
+ }
+
+ trailAuthor, err := app.FindRecordById("activitypub_actors", trail.GetString("author"))
+ if err != nil {
+ return err
+ }
+
+ object := trail.GetString("iri")
+ if object == "" {
+ // trail is local
+ object = fmt.Sprintf("%s/api/v1/trail/%s", origin, trail.Id)
+ }
+
+ // find the original follow activity
+ likeActivityRecord, err := app.FindFirstRecordByFilter("activitypub_activities", "actor={:actor}&&object={:object}&&type={:type}", dbx.Params{"actor": actor.GetString("iri"), "object": object, "type": string(pub.LikeType)})
+ if err != nil {
+ return err
+ }
+ likeActivity := pub.LikeNew(pub.IRI(likeActivityRecord.GetString("iri")), pub.IRI(object))
+ likeActivity.Actor = pub.IRI(likeActivityRecord.GetString("actor"))
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_activities")
+ if err != nil {
+ return err
+ }
+
+ recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
+
+ id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
+
+ record := core.NewRecord(collection)
+ record.Set("id", recordId)
+ record.Set("iri", id)
+ record.Set("type", string(pub.UndoType))
+ record.Set("object", likeActivity)
+ record.Set("actor", actor.GetString("iri"))
+ record.Set("published", time.Now())
+
+ err = app.Save(record)
+ if err != nil {
+ return err
+ }
+
+ activity := pub.UndoNew(pub.IRI(id), likeActivity)
+ activity.Actor = pub.IRI(actor.GetString("iri"))
+
+ return PostActivity(app, actor, activity, []string{trailAuthor.GetString("inbox")})
+}
+
+func ProcessUndoActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+
+ if activity.Object.GetType() == pub.FollowType {
+ return processUnfollowActivity(app, actor, activity)
+ } else if activity.Object.GetType() == pub.LikeType {
+ return processUnlikeActivity(app, actor, activity)
+ } else {
+ return fmt.Errorf("unknown undo activity object type")
+ }
+}
+
+func processUnfollowActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+ // this was a local follow
+ if actor.GetBool("isLocal") {
+ return nil
+ }
+
+ followActivity := activity.Object.(*pub.Activity)
+
+ followee, err := app.FindFirstRecordByData("activitypub_actors", "iri", followActivity.Object)
+ if err != nil {
+ return err
+ }
+
+ follow, err := app.FindFirstRecordByFilter("follows", "follower={:follower} && followee={:followee}", dbx.Params{"follower": actor.Id, "followee": followee.Id})
+ if err != nil {
+ return err
+ }
+
+ err = app.Delete(follow)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func processUnlikeActivity(app core.App, actor *core.Record, activity pub.Activity) error {
+ if actor.GetBool("isLocal") {
+ return nil
+ }
+
+ likeActivity := activity.Object.(*pub.Activity)
+
+ trailId := path.Base(likeActivity.Object.GetID().String())
+ trail, err := app.FindRecordById("trails", trailId)
+ if err != nil {
+ return err
+ }
+
+ like, err := app.FindFirstRecordByFilter("trail_like", "actor={:actor} && trail={:trail}", dbx.Params{"actor": actor.Id, "trail": trail.Id})
+ if err != nil {
+ return err
+ }
+
+ err = app.Delete(like)
+ if err != nil {
+ return err
+ }
+ return nil
+}
diff --git a/db/go.mod b/db/go.mod
index 576da58b..23aff2eb 100644
--- a/db/go.mod
+++ b/db/go.mod
@@ -11,9 +11,15 @@ require (
)
require (
+ git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078 // indirect
+ github.com/aymerick/douceur v0.2.0 // indirect
+ github.com/go-ap/errors v0.0.0-20250409143711-5686c11ae650 // indirect
+ github.com/go-ap/jsonld v0.0.0-20221030091449-f2a191312c73 // indirect
github.com/go-sql-driver/mysql v1.8.1 // indirect
github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
+ github.com/gorilla/css v1.0.1 // indirect
github.com/twpayne/go-geom v1.6.1 // indirect
+ github.com/valyala/fastjson v1.6.4 // indirect
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect
)
@@ -26,6 +32,8 @@ require (
github.com/fatih/color v1.18.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.8 // indirect
github.com/ganigeorgiev/fexpr v0.4.1 // indirect
+ github.com/go-ap/activitypub v0.0.0-20250409143848-7113328b1f3d
+ github.com/go-fed/httpsig v1.1.0
github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect
github.com/golang-jwt/jwt/v4 v4.5.1 // indirect
github.com/google/uuid v1.6.0 // indirect
@@ -34,6 +42,7 @@ require (
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
+ github.com/microcosm-cc/bluemonday v1.0.27
github.com/ncruces/go-strftime v0.1.9 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/spf13/cast v1.7.1
diff --git a/db/go.sum b/db/go.sum
index 2a7a40f3..af134c56 100644
--- a/db/go.sum
+++ b/db/go.sum
@@ -1,5 +1,7 @@
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
+git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078 h1:cliQ4HHsCo6xi2oWZYKWW4bly/Ory9FuTpFPRxj/mAg=
+git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078/go.mod h1:g/V2Hjas6Z1UHUp4yIx6bATpNzJ7DYtD0FG3+xARWxs=
github.com/alecthomas/assert/v2 v2.10.0 h1:jjRCHsj6hBJhkmhznrCzoNpbA3zqy0fYiUcYZP/GkPY=
github.com/alecthomas/assert/v2 v2.10.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=
@@ -9,6 +11,8 @@ github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer5
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
+github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
+github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -28,6 +32,14 @@ github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3G
github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
github.com/ganigeorgiev/fexpr v0.4.1 h1:hpUgbUEEWIZhSDBtf4M9aUNfQQ0BZkGRaMePy7Gcx5k=
github.com/ganigeorgiev/fexpr v0.4.1/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE=
+github.com/go-ap/activitypub v0.0.0-20250409143848-7113328b1f3d h1:IWrWGnmKzpHqginJ18ljKkty/X8glxM8Mg3pk6bkb8g=
+github.com/go-ap/activitypub v0.0.0-20250409143848-7113328b1f3d/go.mod h1:EUtZuXtHo4yKkTJmcbAZYW+X1G2poeT8icmBh24eq7o=
+github.com/go-ap/errors v0.0.0-20250409143711-5686c11ae650 h1:tlwla5IQUea0CuktkBd2FLDwVzts4OeTWPPkhQPSK5Q=
+github.com/go-ap/errors v0.0.0-20250409143711-5686c11ae650/go.mod h1:Vkh+Z3f24K8nMsJKXo1FHn5ebPsXvB/WDH5JRtYqdNo=
+github.com/go-ap/jsonld v0.0.0-20221030091449-f2a191312c73 h1:GMKIYXyXPGIp+hYiWOhfqK4A023HdgisDT4YGgf99mw=
+github.com/go-ap/jsonld v0.0.0-20221030091449-f2a191312c73/go.mod h1:jyveZeGw5LaADntW+UEsMjl3IlIwk+DxlYNsbofQkGA=
+github.com/go-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI=
+github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM=
github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es=
github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew=
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
@@ -45,6 +57,8 @@ github.com/google/pprof v0.0.0-20250315033105-103756e64e1d h1:tx51Lf+wdE+aavqH8T
github.com/google/pprof v0.0.0-20250315033105-103756e64e1d/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
+github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
@@ -63,6 +77,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/meilisearch/meilisearch-go v0.29.0 h1:HZ9NEKN59USINQ/DXJge/aaXq8IrsKbXGTdAoBaaDz4=
github.com/meilisearch/meilisearch-go v0.29.0/go.mod h1:2cRCAn4ddySUsFfNDLVPod/plRibQsJkXF/4gLhxbOk=
+github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk=
+github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA=
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -99,7 +115,10 @@ github.com/twpayne/go-gpx v1.5.0 h1:HvFSJ+0r0sbhOQ8mTvd0/n0FhcgjTFsKQGG6o7PV6G4=
github.com/twpayne/go-gpx v1.5.0/go.mod h1:vjvu/125399qj6k+px2v2v8dm08DM4I4dFBJmHHt2TE=
github.com/twpayne/go-polyline v1.1.1 h1:/tSF1BR7rN4HWj4XKqvRUNrCiYVMCvywxTFVofvDV0w=
github.com/twpayne/go-polyline v1.1.1/go.mod h1:ybd9IWWivW/rlXPXuuckeKUyF3yrIim+iqA7kSl4NFY=
+github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ=
+github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw=
@@ -109,6 +128,7 @@ golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ=
golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs=
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
@@ -117,6 +137,7 @@ golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
diff --git a/db/integrations/komoot/komoot.go b/db/integrations/komoot/komoot.go
index d65a7fc4..f9d6d376 100644
--- a/db/integrations/komoot/komoot.go
+++ b/db/integrations/komoot/komoot.go
@@ -33,6 +33,15 @@ func SyncKomoot(app core.App) error {
}
userId := i.GetString("user")
+ actor, err := app.FindFirstRecordByData("activitypub_actors", "user", userId)
+ if err != nil {
+ warning := fmt.Sprintf("no actor found for user: %s\n", userId)
+ fmt.Print(warning)
+ app.Logger().Warn(warning)
+ continue
+ }
+ actorId := actor.Id
+
komootString := i.GetString("komoot")
komootIntegration := KomootIntegration{
Planned: true,
@@ -71,7 +80,7 @@ func SyncKomoot(app core.App) error {
continue
}
- hasNewTours, err = syncTrailWithTours(app, k, komootIntegration, userId, tours)
+ hasNewTours, err = syncTrailWithTours(app, k, komootIntegration, userId, actorId, tours)
if err != nil {
warning := fmt.Sprintf("error syncing komoot tours with trails: %v\n", err)
fmt.Print(warning)
@@ -165,7 +174,7 @@ func (k *KomootApi) fetchTours(page int) ([]KomootTour, error) {
}
func (k *KomootApi) fetchDetailedTour(tour KomootTour) (*DetailedKomootTour, error) {
- url := fmt.Sprintf("https://api.komoot.de/v007/tours/%d?_embedded=coordinates,way_types,surfaces,directions,participants,timeline,cover_images&directions=v2&fields=timeline&format=coordinate_array&timeline_highlights_fields=tips,recommenders", tour.ID)
+ url := fmt.Sprintf("https://api.komoot.de/v007/tours/%d?_embedded=coordinates,way_types,surfaces,directions,participants,timeline,cover_images&directions=v2&fields=timeline&format=coordinate_array&timeline_highlights_fields=tips,recommenders&page=2", tour.ID)
body, err := sendRequest(url, k.buildHeader())
if err != nil {
return nil, err
@@ -176,7 +185,7 @@ func (k *KomootApi) fetchDetailedTour(tour KomootTour) (*DetailedKomootTour, err
return data, nil
}
-func syncTrailWithTours(app core.App, k *KomootApi, i KomootIntegration, user string, tours []KomootTour) (bool, error) {
+func syncTrailWithTours(app core.App, k *KomootApi, i KomootIntegration, user string, actor string, tours []KomootTour) (bool, error) {
hasNewTours := false
for _, tour := range tours {
trails, err := app.FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": strconv.Itoa(int(tour.ID))})
@@ -202,7 +211,7 @@ func syncTrailWithTours(app core.App, k *KomootApi, i KomootIntegration, user st
app.Logger().Warn(fmt.Sprintf("Unable to create waypoints for tour '%s': %v", tour.Name, err))
continue
}
- err = createTrailFromTour(app, detailedTour, gpx, user, wpIds)
+ err = createTrailFromTour(app, k, detailedTour, gpx, actor, wpIds)
if err != nil {
app.Logger().Warn(fmt.Sprintf("Unable to create trail for tour '%s': %v", tour.Name, err))
continue
@@ -212,27 +221,9 @@ func syncTrailWithTours(app core.App, k *KomootApi, i KomootIntegration, user st
return hasNewTours, nil
}
-func createTrailFromTour(app core.App, detailedTour *DetailedKomootTour, gpx *filesystem.File, user string, wpIds []string) error {
- var summitLogRecord *core.Record
- if detailedTour.Type == "tour_recorded" {
- collection, err := app.FindCollectionByNameOrId("summit_logs")
- if err != nil {
- return err
- }
+func createTrailFromTour(app core.App, k *KomootApi, detailedTour *DetailedKomootTour, gpx *filesystem.File, actor string, wpIds []string) error {
+ trailid := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
- summitLogRecord = core.NewRecord(collection)
- summitLogRecord.Load(map[string]any{
- "distance": detailedTour.Distance,
- "elevation_gain": detailedTour.ElevationUp,
- "elevation_loss": detailedTour.ElevationDown,
- "duration": detailedTour.Duration,
- "date": detailedTour.Date,
- "author": user,
- })
- if err := app.Save(summitLogRecord); err != nil {
- return err
- }
- }
collection, err := app.FindCollectionByNameOrId("trails")
if err != nil {
return err
@@ -259,7 +250,7 @@ func createTrailFromTour(app core.App, detailedTour *DetailedKomootTour, gpx *fi
var photos []*filesystem.File
if len(detailedTour.Embedded.CoverImages.Embedded.Items) > 0 {
- photos, err = fetchRoutePhotos(detailedTour)
+ photos, err = fetchRoutePhotos(k, detailedTour)
if err != nil {
return err
}
@@ -277,6 +268,7 @@ func createTrailFromTour(app core.App, detailedTour *DetailedKomootTour, gpx *fi
}
record.Load(map[string]any{
+ "id": trailid,
"name": detailedTour.Name,
"public": detailedTour.Status == "public",
"distance": detailedTour.Distance,
@@ -291,12 +283,9 @@ func createTrailFromTour(app core.App, detailedTour *DetailedKomootTour, gpx *fi
"difficulty": diffculty,
"category": categoryId,
"waypoints": wpIds,
- "author": user,
+ "author": actor,
})
- if summitLogRecord != nil {
- record.Set("summit_logs", summitLogRecord.Id)
- }
if photos != nil {
record.Set("photos", photos)
}
@@ -308,6 +297,27 @@ func createTrailFromTour(app core.App, detailedTour *DetailedKomootTour, gpx *fi
return err
}
+ if detailedTour.Type == "tour_recorded" {
+ collection, err := app.FindCollectionByNameOrId("summit_logs")
+ if err != nil {
+ return err
+ }
+
+ summitLogRecord := core.NewRecord(collection)
+ summitLogRecord.Load(map[string]any{
+ "distance": detailedTour.Distance,
+ "elevation_gain": detailedTour.ElevationUp,
+ "elevation_loss": detailedTour.ElevationDown,
+ "duration": detailedTour.Duration,
+ "date": detailedTour.Date,
+ "author": actor,
+ "trail": trailid,
+ })
+ if err := app.Save(summitLogRecord); err != nil {
+ return err
+ }
+ }
+
return nil
}
@@ -365,11 +375,22 @@ func createWaypointsFromTour(app core.App, tour *DetailedKomootTour, user string
return wpIds, nil
}
-func fetchRoutePhotos(tour *DetailedKomootTour) ([]*filesystem.File, error) {
+func fetchRoutePhotos(k *KomootApi, tour *DetailedKomootTour) ([]*filesystem.File, error) {
+ url := fmt.Sprintf("https://api.komoot.de/v007/tours/%d/cover_images/", tour.ID)
+ body, err := sendRequest(url, k.buildHeader())
+ if err != nil {
+ return nil, err
+ }
- photos := make([]*filesystem.File, len(tour.Embedded.CoverImages.Embedded.Items))
+ var data *CoverImages
+ err = json.Unmarshal(body, &data)
+ if err != nil {
+ return nil, err
+ }
- for i, img := range tour.Embedded.CoverImages.Embedded.Items {
+ photos := make([]*filesystem.File, data.Page.TotalElements)
+
+ for i, img := range data.Embedded.Items {
photo, err := fetchPhoto(img.Src, "", "")
if err != nil {
return nil, err
diff --git a/db/integrations/strava/strava.go b/db/integrations/strava/strava.go
index 1e7ffd7d..8c4545ca 100644
--- a/db/integrations/strava/strava.go
+++ b/db/integrations/strava/strava.go
@@ -36,9 +36,18 @@ func SyncStrava(app core.App) error {
}
userId := i.GetString("user")
+ actor, err := app.FindFirstRecordByData("activitypub_actors", "user", userId)
+ if err != nil {
+ warning := fmt.Sprintf("no actor found for user: %s\n", userId)
+ fmt.Print(warning)
+ app.Logger().Warn(warning)
+ continue
+ }
+ actorId := actor.Id
+
stravaString := i.GetString("strava")
var stravaIntegration StravaIntegration
- err := json.Unmarshal([]byte(stravaString), &stravaIntegration)
+ err = json.Unmarshal([]byte(stravaString), &stravaIntegration)
if err != nil {
return err
}
@@ -103,7 +112,7 @@ func SyncStrava(app core.App) error {
app.Logger().Warn(warning)
break
}
- hasNewRoutes, err = syncTrailsWithRoutes(app, r.AccessToken, userId, routes)
+ hasNewRoutes, err = syncTrailsWithRoutes(app, r.AccessToken, userId, actorId, routes)
if err != nil {
warning := fmt.Sprintf("error syncing strava routes with trails: %v\n", err)
fmt.Print(warning)
@@ -124,7 +133,7 @@ func SyncStrava(app core.App) error {
app.Logger().Warn(warning)
break
}
- hasNewActivities, err = syncTrailsWithActivities(app, r.AccessToken, userId, activities)
+ hasNewActivities, err = syncTrailsWithActivities(app, r.AccessToken, userId, actorId, activities)
if err != nil {
warning := fmt.Sprintf("error syncing strava activities with trails: %v", err)
fmt.Print(warning)
@@ -226,7 +235,7 @@ func fetchStravaActivities(accessToken string, page int) ([]StravaActivity, erro
return activities, nil
}
-func syncTrailsWithRoutes(app core.App, accessToken string, user string, routes []StravaRoute) (bool, error) {
+func syncTrailsWithRoutes(app core.App, accessToken string, user string, actor string, routes []StravaRoute) (bool, error) {
hasNewRoutes := false
for _, route := range routes {
trails, err := app.FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": route.IDStr})
@@ -247,7 +256,7 @@ func syncTrailsWithRoutes(app core.App, accessToken string, user string, routes
app.Logger().Warn(fmt.Sprintf("Unable to create waypoints for route '%s': %v", route.Name, err))
continue
}
- err = createTrailFromRoute(app, route, gpx, user, wpIds)
+ err = createTrailFromRoute(app, route, gpx, actor, wpIds)
if err != nil {
app.Logger().Warn(fmt.Sprintf("Unable to create trail for route '%s': %v", route.Name, err))
continue
@@ -296,7 +305,7 @@ func fetchRouteGPX(route StravaRoute, accessToken string) (*filesystem.File, err
return gpxFile, nil
}
-func createTrailFromRoute(app core.App, route StravaRoute, gpx *filesystem.File, user string, wpIds []string) error {
+func createTrailFromRoute(app core.App, route StravaRoute, gpx *filesystem.File, actor string, wpIds []string) error {
collection, err := app.FindCollectionByNameOrId("trails")
if err != nil {
return err
@@ -342,7 +351,7 @@ func createTrailFromRoute(app core.App, route StravaRoute, gpx *filesystem.File,
"waypoints": wpIds,
"difficulty": "easy",
"category": category,
- "author": user,
+ "author": actor,
})
if gpx != nil {
@@ -383,7 +392,7 @@ func createWaypointsFromRoute(app core.App, route StravaRoute, user string) ([]s
return wpIds, nil
}
-func syncTrailsWithActivities(app core.App, accessToken string, user string, activities []StravaActivity) (bool, error) {
+func syncTrailsWithActivities(app core.App, accessToken string, user string, actor string, activities []StravaActivity) (bool, error) {
hasNewActivites := false
for _, activity := range activities {
trails, err := app.FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": strconv.Itoa(int(activity.ID))})
@@ -404,7 +413,7 @@ func syncTrailsWithActivities(app core.App, accessToken string, user string, act
app.Logger().Warn(fmt.Sprintf("Unable to fetch GPX for activity '%s': %v", activity.Name, err))
continue
}
- err = createTrailFromActivity(app, detailedActivity, gpx, user)
+ err = createTrailFromActivity(app, detailedActivity, gpx, actor)
if err != nil {
app.Logger().Warn(fmt.Sprintf("Unable to create trail from activity '%s': %v", activity.Name, err))
continue
diff --git a/db/main.go b/db/main.go
index 7bdfe27e..09e59e19 100644
--- a/db/main.go
+++ b/db/main.go
@@ -1,13 +1,12 @@
package main
import (
+ "database/sql"
"encoding/json"
"fmt"
"log"
- "math/rand/v2"
"net/http"
"os"
- "strconv"
"strings"
"time"
@@ -21,11 +20,15 @@ import (
"github.com/pocketbase/pocketbase/tools/security"
"github.com/spf13/cast"
+ "pocketbase/federation"
"pocketbase/integrations/komoot"
"pocketbase/integrations/strava"
_ "pocketbase/migrations"
"pocketbase/util"
+
+ pub "github.com/go-ap/activitypub"
+ "github.com/microcosm-cc/bluemonday"
)
const defaultMeiliMasterKey = "vODkljPcfFANYNepCHyDyGjzAMPcdHnrb6X5KyXQPWo"
@@ -86,18 +89,29 @@ func setupEventHandlers(app *pocketbase.PocketBase, client meilisearch.ServiceMa
app.OnRecordAfterUpdateSuccess("trails").BindFunc(updateTrailHandler(client))
app.OnRecordAfterDeleteSuccess("trails").BindFunc(deleteTrailHandler(client))
- app.OnRecordAfterCreateSuccess("trail_share").BindFunc(createTrailShareHandler(client))
- app.OnRecordAfterDeleteSuccess("trail_share").BindFunc(deleteTrailShareHandler(client))
+ app.OnRecordCreateRequest("summit_logs").BindFunc(createSummitLogHandler())
+ app.OnRecordUpdateRequest("summit_logs").BindFunc(updateSummitLogHandler())
+ app.OnRecordDeleteRequest("summit_logs").BindFunc(deleteSummitLogHandler())
+
+ app.OnRecordCreateRequest("comments").BindFunc(createCommentHandler())
+ app.OnRecordUpdateRequest("comments").BindFunc(updateCommentHandler())
+ app.OnRecordDeleteRequest("comments").BindFunc(deleteCommentHandler(client))
+
+ app.OnRecordCreateRequest("trail_share").BindFunc(createTrailShareHandler(client))
+ app.OnRecordDeleteRequest("trail_share").BindFunc(deleteTrailShareHandler(client))
+
+ app.OnRecordAfterCreateSuccess("trail_like").BindFunc(createTrailLikeHandler(client))
+ app.OnRecordAfterDeleteSuccess("trail_like").BindFunc(deleteTrailLikeHandler(client))
app.OnRecordAfterCreateSuccess("lists").BindFunc(createListHandler(client))
app.OnRecordAfterUpdateSuccess("lists").BindFunc(updateListHandler(client))
app.OnRecordAfterDeleteSuccess("lists").BindFunc(deleteListHandler(client))
- app.OnRecordAfterCreateSuccess("list_share").BindFunc(createListShareHandler(client))
- app.OnRecordAfterDeleteSuccess("list_share").BindFunc(deleteListShareHandler(client))
+ app.OnRecordCreateRequest("list_share").BindFunc(createListShareHandler(client))
+ app.OnRecordDeleteRequest("list_share").BindFunc(deleteListShareHandler(client))
- app.OnRecordAfterCreateSuccess("follows").BindFunc(createFollowHandler())
- app.OnRecordAfterCreateSuccess("comments").BindFunc(createCommentHandler())
+ app.OnRecordCreateRequest("follows").BindFunc(createFollowHandler())
+ app.OnRecordDeleteRequest("follows").BindFunc(deleteFollowHandler())
app.OnRecordsListRequest("integrations").BindFunc(listIntegrationHandler())
app.OnRecordCreate("integrations").BindFunc(createIntegrationHandler())
@@ -105,22 +119,72 @@ func setupEventHandlers(app *pocketbase.PocketBase, client meilisearch.ServiceMa
app.OnRecordUpdate("integrations").BindFunc(updateIntegrationHandler())
app.OnRecordAfterUpdateSuccess("integrations").BindFunc(createUpdateIntegrationSuccessHandler())
+ app.OnRecordCreateRequest().BindFunc(sanitizeHTML())
+ app.OnRecordUpdateRequest().BindFunc(sanitizeHTML())
+
app.OnRecordRequestEmailChangeRequest("users").BindFunc(changeUserEmailHandler())
app.OnServe().BindFunc(onBeforeServeHandler(client))
app.OnBootstrap().BindFunc(onBootstrapHandler())
}
+func sanitizeHTML() func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
+ fieldsToSanitize := map[string][]string{
+ "lists": {"description"},
+ "settings": {"bio"},
+ "summit_logs": {"text"},
+ "trails": {"description"},
+ "comments": {"text"},
+ "waypoints": {"description"},
+ }
+ collection := e.Collection.Name
+ fields, ok := fieldsToSanitize[collection]
+ if !ok {
+ return e.Next()
+ }
+
+ p := bluemonday.NewPolicy()
+ p.AllowStandardAttributes()
+ p.AllowStandardURLs()
+ p.AllowLists()
+ p.AllowElements("br", "div", "hr", "p", "span", "wbr")
+ p.AllowElements("b", "strong", "em", "u", "blockquote", "a")
+ p.AllowAttrs("href").OnElements("a")
+ p.AllowAttrs("target").OnElements("a")
+ p.AllowAttrs("class").OnElements("a")
+
+ for _, field := range fields {
+ if val, ok := e.Record.Get(field).(string); ok {
+ sanitizedValue := p.Sanitize(val)
+ e.Record.Set(field, sanitizedValue)
+ }
+ }
+
+ return e.Next()
+ }
+}
+
func createUserHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
return func(e *core.RecordEvent) error {
userId := e.Record.Id
+ err := createDefaultUserSettings(e.App, e.Record.Id)
+ if err != nil {
+ return err
+ }
+
+ actor, err := util.ActorFromUser(e.App, e.Record)
+ if err != nil {
+ return err
+ }
+
searchRules := map[string]interface{}{
"lists": map[string]string{
- "filter": "public = true OR author = " + userId + " OR shares = " + userId,
+ "filter": "public = true OR author = " + actor.Id + " OR shares = " + userId,
},
"trails": map[string]string{
- "filter": "public = true OR author = " + userId + " OR shares = " + userId,
+ "filter": "public = true OR author = " + actor.Id + " OR shares = " + userId,
},
}
@@ -133,10 +197,6 @@ func createUserHandler(client meilisearch.ServiceManager) func(e *core.RecordEve
return err
}
- err = createDefaultUserSettings(e.App, e.Record.Id)
- if err != nil {
- return err
- }
return e.Next()
}
}
@@ -157,37 +217,38 @@ func createDefaultUserSettings(app core.App, userId string) error {
func createTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
return func(e *core.RecordEvent) error {
record := e.Record
- author, err := e.App.FindRecordById("users", record.GetString(("author")))
+ author, err := e.App.FindRecordById("activitypub_actors", record.GetString(("author")))
if err != nil {
return err
}
if err := util.IndexTrail(e.App, record, author, client); err != nil {
return err
}
-
- if record.GetBool("public") {
- notification := util.Notification{
- Type: util.TrailCreate,
- Metadata: map[string]string{
- "id": record.Id,
- "trail": record.GetString("name"),
- },
- Seen: false,
- Author: record.GetString("author"),
- }
- err = util.SendNotificationToFollowers(e.App, notification)
- if err != nil {
- return err
- }
+ if !author.GetBool("isLocal") {
+ // this happens if someone fetches a remote trail
+ // we create a stub trail record for later reference
+ // no need to create an activity for that
+ return e.Next()
}
- return e.Next()
+
+ err = e.Next()
+ if err != nil {
+ return err
+ }
+
+ err = federation.CreateTrailActivity(e.App, e.Record, pub.CreateType)
+ if err != nil {
+ return err
+ }
+
+ return nil
}
}
func updateTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
return func(e *core.RecordEvent) error {
record := e.Record
- author, err := e.App.FindRecordById("users", record.GetString(("author")))
+ author, err := e.App.FindRecordById("activitypub_actors", record.GetString(("author")))
if err != nil {
return err
}
@@ -195,7 +256,24 @@ func updateTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEv
if err != nil {
return err
}
- return e.Next()
+ if !author.GetBool("isLocal") {
+ // this happens if someone fetches a remote trail
+ // we create a stub trail record for later reference
+ // no need to create an activity for that
+ return e.Next()
+ }
+
+ err = e.Next()
+ if err != nil {
+ return err
+ }
+
+ err = federation.CreateTrailActivity(e.App, e.Record, pub.UpdateType)
+ if err != nil {
+ return err
+ }
+
+ return nil
}
}
@@ -213,12 +291,100 @@ func deleteTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEv
log.Fatalf("Error waiting for task completion: %v", err)
}
+ err = federation.CreateTrailDeleteActivity(e.App, e.Record)
+ if err != nil {
+ return err
+ }
+
return e.Next()
}
}
-func createTrailShareHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
- return func(e *core.RecordEvent) error {
+func createSummitLogHandler() func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
+
+ err := e.Next()
+ if err != nil {
+ return err
+ }
+
+ err = federation.CreateSummitLogActivity(e.App, e.Record, pub.CreateType)
+ if err != nil {
+ return err
+ }
+
+ return nil
+ }
+}
+
+func updateSummitLogHandler() func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
+
+ err := e.Next()
+ if err != nil {
+ return err
+ }
+
+ err = federation.CreateSummitLogActivity(e.App, e.Record, pub.UpdateType)
+ if err != nil {
+ return err
+ }
+ return nil
+ }
+}
+
+func deleteSummitLogHandler() func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
+ err := federation.CreateSummitLogDeleteActivity(e.App, e.Record)
+ if err != nil {
+ return err
+ }
+ return e.Next()
+ }
+}
+
+func createCommentHandler() func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
+
+ e.Next()
+
+ err := federation.CreateCommentActivity(e.App, e.Record, pub.CreateType)
+ if err != nil {
+ return err
+ }
+ return nil
+ }
+}
+
+func updateCommentHandler() func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
+ err := federation.CreateCommentActivity(e.App, e.Record, pub.UpdateType)
+ if err != nil {
+ return err
+ }
+ return e.Next()
+
+ }
+}
+
+func deleteCommentHandler(client meilisearch.ServiceManager) func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
+
+ err := federation.CreateCommentDeleteActivity(e.App, client, e.Record)
+ if err != nil {
+ return err
+ }
+ return e.Next()
+ }
+}
+
+func createTrailShareHandler(client meilisearch.ServiceManager) func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
+ err := e.Next()
+ if err != nil {
+ return err
+ }
+
record := e.Record
trailId := record.GetString("trail")
@@ -228,42 +394,26 @@ func createTrailShareHandler(client meilisearch.ServiceManager) func(e *core.Rec
if err != nil {
return err
}
- userIds := make([]string, len(shares))
+ actorIds := make([]string, len(shares))
for i, r := range shares {
- userIds[i] = r.GetString("user")
+ actorIds[i] = r.GetString("actor")
}
- err = util.UpdateTrailShares(trailId, userIds, client)
-
+ err = util.UpdateTrailShares(trailId, actorIds, client)
if err != nil {
return err
}
- if errs := e.App.ExpandRecord(record, []string{"trail", "trail.author"}, nil); len(errs) > 0 {
- return fmt.Errorf("failed to expand: %v", errs)
- }
- shareTrail := record.ExpandedOne("trail")
- shareTrailAuthor := shareTrail.ExpandedOne("author")
-
- notification := util.Notification{
- Type: util.TrailShare,
- Metadata: map[string]string{
- "id": shareTrail.Id,
- "trail": shareTrail.GetString("name"),
- "author": shareTrailAuthor.GetString("username"),
- },
- Seen: false,
- Author: shareTrailAuthor.Id,
- }
- err = util.SendNotification(e.App, notification, record.GetString("user"))
+ err = federation.CreateAnnounceActivity(e.App, record, federation.TrailAnnounceType)
if err != nil {
return err
}
- return e.Next()
+
+ return nil
}
}
-func deleteTrailShareHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
- return func(e *core.RecordEvent) error {
+func deleteTrailShareHandler(client meilisearch.ServiceManager) func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
record := e.Record
trailId := record.GetString("trail")
@@ -275,42 +425,178 @@ func deleteTrailShareHandler(client meilisearch.ServiceManager) func(e *core.Rec
}
}
+func createTrailLikeHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
+ return func(e *core.RecordEvent) error {
+ err := e.Next()
+ if err != nil {
+ return err
+ }
+
+ record := e.Record
+
+ trailId := record.GetString("trail")
+ actorId := record.GetString("actor")
+ actor, err := e.App.FindRecordById("activitypub_actors", actorId)
+ if err != nil {
+ return err
+ }
+ trail, err := e.App.FindRecordById("trails", trailId)
+ if err != nil {
+ return err
+ }
+ likes, err := e.App.FindAllRecords("trail_like",
+ dbx.NewExp("trail = {:trailId}", dbx.Params{"trailId": trailId}),
+ )
+ if err != nil {
+ return err
+ }
+
+ trail.Set("like_count", len(likes))
+ err = e.App.UnsafeWithoutHooks().Save(trail)
+ if err != nil {
+ return err
+ }
+
+ actorIds := make([]string, len(likes))
+ for i, r := range likes {
+ actorIds[i] = r.GetString("actor")
+ }
+ err = util.UpdateTrailLikes(trailId, actorIds, client)
+ if err != nil {
+ return err
+ }
+
+ if !actor.GetBool("isLocal") {
+ // this happens if someone likes a remote trail
+ // we create a local copy
+ // no need to create an activity for that
+ return nil
+ }
+
+ err = federation.CreateLikeActivity(e.App, record)
+ if err != nil {
+ return err
+ }
+
+ return nil
+ }
+}
+
+func deleteTrailLikeHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
+ return func(e *core.RecordEvent) error {
+
+ record := e.Record
+
+ trailId := record.GetString("trail")
+ actorId := record.GetString("actor")
+ actor, err := e.App.FindRecordById("activitypub_actors", actorId)
+ if err != nil {
+ return err
+ }
+ // trail might deleted be already if this is called as part of a cascade
+ trail, err := e.App.FindRecordById("trails", trailId)
+ if err != nil && err == sql.ErrNoRows {
+ return nil
+ } else if err != nil {
+ return err
+ }
+ likes, err := e.App.CountRecords("trail_like", dbx.NewExp("trail={:trail}", dbx.Params{"trail": trailId}))
+ if err != nil {
+ return err
+ }
+
+ trail.Set("like_count", likes)
+ err = e.App.UnsafeWithoutHooks().Save(trail)
+ if err != nil {
+ return err
+ }
+
+ err = util.UpdateTrailLikes(trailId, []string{}, client)
+ if err != nil {
+ return err
+ }
+
+ if !actor.GetBool("isLocal") {
+ // this happens if someone likes a remote trail
+ // we create a local copy
+ // no need to create an activity for that
+ return nil
+ }
+
+ err = federation.CreateUnlikeActivity(e.App, record)
+ if err != nil {
+ return err
+ }
+
+ return e.Next()
+ }
+}
+
func createListHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
return func(e *core.RecordEvent) error {
record := e.Record
- if err := util.IndexList(record, client); err != nil {
- return err
- }
- if !record.GetBool("public") {
- return e.Next()
- }
- notification := util.Notification{
- Type: util.ListCreate,
- Metadata: map[string]string{
- "id": record.Id,
- "list": record.GetString("name"),
- },
- Seen: false,
- Author: record.GetString("author"),
- }
- err := util.SendNotificationToFollowers(e.App, notification)
+ author, err := e.App.FindRecordById("activitypub_actors", record.GetString(("author")))
if err != nil {
return err
}
- return e.Next()
+
+ if err := util.IndexList(e.App, record, author, client); err != nil {
+ return err
+ }
+
+ if !author.GetBool("isLocal") {
+ // this happens if someone fetches a remote list
+ // we create a stub list record for later reference
+ // no need to create an activity for that
+ return e.Next()
+ }
+
+ err = e.Next()
+ if err != nil {
+ return err
+ }
+
+ err = federation.CreateListActivity(e.App, e.Record, pub.CreateType)
+ if err != nil {
+ return err
+ }
+
+ return nil
}
}
func updateListHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
return func(e *core.RecordEvent) error {
record := e.Record
- err := util.UpdateList(record, client)
+ author, err := e.App.FindRecordById("activitypub_actors", record.GetString(("author")))
if err != nil {
return err
}
- return e.Next()
+ err = util.UpdateList(e.App, record, author, client)
+ if err != nil {
+ return err
+ }
+
+ if !author.GetBool("isLocal") {
+ // this happens if someone fetches a remote list
+ // we create a stub list record for later reference
+ // no need to create an activity for that
+ return e.Next()
+ }
+
+ err = e.Next()
+ if err != nil {
+ return err
+ }
+
+ err = federation.CreateListActivity(e.App, e.Record, pub.CreateType)
+ if err != nil {
+ return err
+ }
+
+ return nil
}
}
@@ -322,12 +608,22 @@ func deleteListHandler(client meilisearch.ServiceManager) func(e *core.RecordEve
return err
}
+ err = federation.CreateListDeleteActivity(e.App, record)
+ if err != nil {
+ return err
+ }
+
return e.Next()
}
}
-func createListShareHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
- return func(e *core.RecordEvent) error {
+func createListShareHandler(client meilisearch.ServiceManager) func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
+ err := e.Next()
+ if err != nil {
+ return err
+ }
+
record := e.Record
listId := record.GetString("list")
shares, err := e.App.FindAllRecords("list_share",
@@ -336,42 +632,27 @@ func createListShareHandler(client meilisearch.ServiceManager) func(e *core.Reco
if err != nil {
return err
}
- userIds := make([]string, len(shares))
+ actorIds := make([]string, len(shares))
for i, r := range shares {
- userIds[i] = r.GetString("user")
+ actorIds[i] = r.GetString("actor")
}
- err = util.UpdateListShares(listId, userIds, client)
+ err = util.UpdateListShares(listId, actorIds, client)
if err != nil {
return err
}
- if errs := e.App.ExpandRecord(record, []string{"list", "list.author"}, nil); len(errs) > 0 {
- return fmt.Errorf("failed to expand: %v", errs)
- }
- shareList := record.ExpandedOne("list")
- shareListAuthor := shareList.ExpandedOne("author")
-
- notification := util.Notification{
- Type: util.ListShare,
- Metadata: map[string]string{
- "id": shareList.Id,
- "list": shareList.GetString("name"),
- "author": shareListAuthor.GetString("username"),
- },
- Seen: false,
- Author: shareListAuthor.Id,
- }
- err = util.SendNotification(e.App, notification, record.GetString("user"))
+ err = federation.CreateAnnounceActivity(e.App, record, federation.ListAnnounceType)
if err != nil {
return err
}
- return e.Next()
+
+ return nil
}
}
-func deleteListShareHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
- return func(e *core.RecordEvent) error {
+func deleteListShareHandler(client meilisearch.ServiceManager) func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
record := e.Record
listId := record.GetString("list")
err := util.UpdateListShares(listId, []string{}, client)
@@ -382,55 +663,56 @@ func deleteListShareHandler(client meilisearch.ServiceManager) func(e *core.Reco
}
}
-func createFollowHandler() func(e *core.RecordEvent) error {
- return func(e *core.RecordEvent) error {
- record := e.Record
- if errs := e.App.ExpandRecord(record, []string{"follower"}, nil); len(errs) > 0 {
- return fmt.Errorf("failed to expand: %v", errs)
- }
- follower := record.ExpandedOne("follower")
+func createFollowHandler() func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
+ // record := e.Record
+ // if errs := e.App.ExpandRecord(record, []string{"follower"}, nil); len(errs) > 0 {
+ // return fmt.Errorf("failed to expand: %v", errs)
+ // }
+ // follower := record.ExpandedOne("follower")
- notification := util.Notification{
- Type: util.NewFollower,
- Metadata: map[string]string{
- "follower": follower.GetString("username"),
- },
- Seen: false,
- Author: record.GetString("follower"),
- }
- err := util.SendNotification(e.App, notification, record.GetString("followee"))
- if err != nil {
- return err
- }
- return e.Next()
+ // notification := util.Notification{
+ // Type: util.NewFollower,
+ // Metadata: map[string]string{
+ // "follower": follower.GetString("username"),
+ // },
+ // Seen: false,
+ // Author: record.GetString("follower"),
+ // }
+ // err := util.SendNotification(e.App, notification, record.GetString("followee"))
+ // if err != nil {
+ // return err
+ // }
+ e.Next()
+ federation.CreateFollowActivity(e.App, e.Record)
+
+ return nil
}
}
-func createCommentHandler() func(e *core.RecordEvent) error {
- return func(e *core.RecordEvent) error {
- record := e.Record
+func deleteFollowHandler() func(e *core.RecordRequestEvent) error {
+ return func(e *core.RecordRequestEvent) error {
+ // record := e.Record
+ // if errs := e.App.ExpandRecord(record, []string{"follower"}, nil); len(errs) > 0 {
+ // return fmt.Errorf("failed to expand: %v", errs)
+ // }
+ // follower := record.ExpandedOne("follower")
- if errs := e.App.ExpandRecord(record, []string{"trail", "author"}, nil); len(errs) > 0 {
- return fmt.Errorf("failed to expand: %v", errs)
- }
- commentAuthor := record.ExpandedOne("author")
- commentTrail := record.ExpandedOne("trail")
+ // notification := util.Notification{
+ // Type: util.NewFollower,
+ // Metadata: map[string]string{
+ // "follower": follower.GetString("username"),
+ // },
+ // Seen: false,
+ // Author: record.GetString("follower"),
+ // }
+ // err := util.SendNotification(e.App, notification, record.GetString("followee"))
+ // if err != nil {
+ // return err
+ // }
+
+ federation.CreateUnfollowActivity(e.App, e.Record)
- notification := util.Notification{
- Type: util.TrailComment,
- Metadata: map[string]string{
- "id": commentTrail.Id,
- "author": commentAuthor.GetString("username"),
- "trail": commentTrail.GetString("name"),
- "comment": record.GetString("text"),
- },
- Seen: false,
- Author: record.GetString("author"),
- }
- err := util.SendNotification(e.App, notification, commentTrail.GetString("author"))
- if err != nil {
- return err
- }
return e.Next()
}
}
@@ -637,46 +919,6 @@ func registerRoutes(se *core.ServeEvent, client meilisearch.ServiceManager) {
}
return e.JSON(http.StatusOK, map[string]string{"token": token})
})
- se.Router.GET("/trail/recommend", func(e *core.RequestEvent) error {
- qSize := e.Request.URL.Query().Get("size")
- size, err := strconv.Atoi(qSize)
- if err != nil {
- size = 4
- }
-
- userId := ""
- if e.Auth != nil {
- userId = e.Auth.Id
- }
-
- trails, err := e.App.FindRecordsByFilter(
- "trails",
- "author = {:userId} || public = true || ({:userId} != '' && trail_share_via_trail.user ?= {:userId})",
- "",
- -1,
- 0,
- dbx.Params{"userId": userId},
- )
- if err != nil {
- return err
- }
- for _, t := range trails {
- errs := e.App.ExpandRecord(t, []string{"tags"}, nil)
- if len(errs) > 0 {
- return err
- }
- }
-
- if len(trails) < size {
- size = len(trails)
- }
- rand.Shuffle(len(trails), func(i, j int) {
- trails[i], trails[j] = trails[j], trails[i]
- })
- randomTrails := trails[:size]
- return e.JSON(http.StatusOK, randomTrails)
-
- })
se.Router.POST("/integration/strava/token", func(e *core.RequestEvent) error {
encryptionKey := os.Getenv("POCKETBASE_ENCRYPTION_KEY")
@@ -792,6 +1034,61 @@ func registerRoutes(se *core.ServeEvent, client meilisearch.ServiceManager) {
return e.JSON(http.StatusOK, nil)
})
+ se.Router.POST("/activitypub/activity/process", federation.ProcessActivity)
+ se.Router.GET("/activitypub/actor", func(e *core.RequestEvent) error {
+ resource := e.Request.URL.Query().Get("resource")
+ resource = strings.TrimPrefix(resource, "acct:")
+
+ iri := e.Request.URL.Query().Get("iri")
+ follows := e.Request.URL.Query().Get("follows") == "true"
+
+ var actor *core.Record
+ var err error
+ if resource != "" {
+ actor, err = federation.GetActorByHandle(e.App, resource, follows)
+ } else {
+ actor, err = federation.GetActorByIRI(e.App, iri, follows)
+ }
+ if err != nil && actor == nil {
+ if strings.HasPrefix(err.Error(), "webfinger") || err.Error() == "profile is private" {
+ return e.NotFoundError("Not found", err)
+ }
+ return err
+ } else if err != nil && actor != nil {
+ // we could not fetch the remote actor so we return our local cached copy
+ return e.JSON(http.StatusOK, map[string]any{"actor": actor, "error": err.Error()})
+ }
+
+ return e.JSON(http.StatusOK, map[string]any{"actor": actor, "error": nil})
+ })
+ se.Router.GET("/activitypub/trail/{id}", func(e *core.RequestEvent) error {
+ id := e.Request.PathValue("id")
+
+ trail, err := e.App.FindRecordById("trails", id)
+ if err != nil {
+ return err
+ }
+
+ trailObject, err := util.ObjectFromTrail(e.App, trail, nil)
+ if err != nil {
+ return err
+ }
+ return e.JSON(http.StatusOK, trailObject)
+ })
+ se.Router.GET("/activitypub/comment/{id}", func(e *core.RequestEvent) error {
+ id := e.Request.PathValue("id")
+
+ comment, err := e.App.FindRecordById("comments", id)
+ if err != nil {
+ return err
+ }
+
+ commentObject, err := util.ObjectFromComment(e.App, comment, nil)
+ if err != nil {
+ return err
+ }
+ return e.JSON(http.StatusOK, commentObject)
+ })
}
func registerCronJobs(app core.App) {
@@ -818,7 +1115,7 @@ func registerCronJobs(app core.App) {
func bootstrapData(app core.App, client meilisearch.ServiceManager) error {
bootstrapCategories(app)
- bootstrapMeilisearchTrails(app, client)
+ go bootstrapMeilisearchDocuments(app, client)
return nil
}
@@ -847,7 +1144,7 @@ func bootstrapCategories(app core.App) error {
return nil
}
-func bootstrapMeilisearchTrails(app core.App, client meilisearch.ServiceManager) error {
+func bootstrapMeilisearchDocuments(app core.App, client meilisearch.ServiceManager) error {
query := app.RecordQuery("trails")
trails := []*core.Record{}
@@ -860,7 +1157,7 @@ func bootstrapMeilisearchTrails(app core.App, client meilisearch.ServiceManager)
return err
}
for _, trail := range trails {
- author, err := app.FindRecordById("users", trail.GetString(("author")))
+ author, err := app.FindRecordById("activitypub_actors", trail.GetString(("author")))
if err != nil {
return err
}
@@ -875,16 +1172,67 @@ func bootstrapMeilisearchTrails(app core.App, client meilisearch.ServiceManager)
if err != nil {
return err
}
- userIds := make([]string, len(shares))
+ actorIds := make([]string, len(shares))
for i, r := range shares {
- userIds[i] = r.GetString("user")
+ actorIds[i] = r.GetString("actor")
}
- err = util.UpdateTrailShares(trail.Id, userIds, client)
-
+ err = util.UpdateTrailShares(trail.Id, actorIds, client)
if err != nil {
app.Logger().Warn(fmt.Sprintf("Unable to update trail shares '%s': %v", trail.GetString("name"), err))
continue
}
+ likes, err := app.FindAllRecords("trail_like",
+ dbx.NewExp("trail = {:trailId}", dbx.Params{"trailId": trail.Id}),
+ )
+ if err != nil {
+ return err
+ }
+ actorIds = make([]string, len(likes))
+ for i, r := range likes {
+ actorIds[i] = r.GetString("actor")
+ }
+ err = util.UpdateTrailLikes(trail.Id, actorIds, client)
+ if err != nil {
+ app.Logger().Warn(fmt.Sprintf("Unable to update trail likes '%s': %v", trail.GetString("name"), err))
+ continue
+ }
+ }
+
+ lists, err := app.FindAllRecords("lists")
+ if err != nil {
+ return err
+ }
+ _, err = client.Index("lists").DeleteAllDocuments()
+ if err != nil {
+ return err
+ }
+
+ for _, list := range lists {
+ author, err := app.FindRecordById("activitypub_actors", list.GetString(("author")))
+ if err != nil {
+ return err
+ }
+ if err := util.IndexList(app, list, author, client); err != nil {
+ app.Logger().Warn(fmt.Sprintf("Unable to index list '%s': %v", list.GetString("name"), err))
+ continue
+ }
+
+ shares, err := app.FindAllRecords("list_share",
+ dbx.NewExp("list = {:listId}", dbx.Params{"listId": list.Id}),
+ )
+ if err != nil {
+ return err
+ }
+ actorIds := make([]string, len(shares))
+ for i, r := range shares {
+ actorIds[i] = r.GetString("actor")
+ }
+ err = util.UpdateListShares(list.Id, actorIds, client)
+
+ if err != nil {
+ app.Logger().Warn(fmt.Sprintf("Unable to update list shares '%s': %v", list.GetString("name"), err))
+ continue
+ }
}
return nil
}
diff --git a/db/migrations/1747061255_deleted_follow_counts.go b/db/migrations/1747061255_deleted_follow_counts.go
new file mode 100644
index 00000000..0438cb54
--- /dev/null
+++ b/db/migrations/1747061255_deleted_follow_counts.go
@@ -0,0 +1,102 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("j6w72f0kb5ivd7x")
+ if err != nil {
+ return nil
+ }
+
+ return app.Delete(collection)
+ }, func(app core.App) error {
+ jsonData := `{
+ "createRule": null,
+ "deleteRule": null,
+ "fields": [
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 0,
+ "min": 0,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "cascadeDelete": false,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation1148540665",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "actor",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "_clone_kce8",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "json2215181735",
+ "maxSize": 1,
+ "name": "followers",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json1908379107",
+ "maxSize": 1,
+ "name": "following",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ }
+ ],
+ "id": "j6w72f0kb5ivd7x",
+ "indexes": [],
+ "listRule": "@request.auth.id = user || (@collection.users_anonymous.id ?= user && @collection.users_anonymous.private ?= false)",
+ "name": "follow_counts",
+ "system": false,
+ "type": "view",
+ "updateRule": null,
+ "viewQuery": "SELECT \n (ROW_NUMBER() OVER()) as id,\n activitypub_actors.id as actor,\n activitypub_actors.user as user,\n COALESCE(followers.count, 0) AS followers,\n COALESCE(following.count, 0) AS following\nFROM activitypub_actors\nLEFT JOIN (\n SELECT followee AS actor_id, COUNT(*) AS count\n FROM follows\n GROUP BY followee\n) AS followers ON activitypub_actors.id = followers.actor_id\nLEFT JOIN (\n SELECT follower AS actor_id, COUNT(*) AS count\n FROM follows\n GROUP BY follower\n) AS following ON activitypub_actors.id = following.actor_id",
+ "viewRule": "@request.auth.id = user || (@collection.users_anonymous.id ?= user && @collection.users_anonymous.private ?= false)"
+ }`
+
+ collection := &core.Collection{}
+ if err := json.Unmarshal([]byte(jsonData), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747061256_deleted_activities.go b/db/migrations/1747061256_deleted_activities.go
new file mode 100644
index 00000000..1400dc62
--- /dev/null
+++ b/db/migrations/1747061256_deleted_activities.go
@@ -0,0 +1,186 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("t9lphichi5xwyeu")
+ if err != nil {
+ return nil
+ }
+
+ return app.Delete(collection)
+ }, func(app core.App) error {
+ jsonData := `{
+ "createRule": null,
+ "deleteRule": null,
+ "fields": [
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 0,
+ "min": 0,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "json2310347867",
+ "maxSize": 1,
+ "name": "trail_id",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json2862495610",
+ "maxSize": 1,
+ "name": "date",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json1579384326",
+ "maxSize": 1,
+ "name": "name",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json1843675174",
+ "maxSize": 1,
+ "name": "description",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3275261007",
+ "maxSize": 1,
+ "name": "gpx",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3182418120",
+ "maxSize": 1,
+ "name": "author",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json142008537",
+ "maxSize": 1,
+ "name": "photos",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json479369857",
+ "maxSize": 1,
+ "name": "distance",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json2254405824",
+ "maxSize": 1,
+ "name": "duration",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3015100073",
+ "maxSize": 1,
+ "name": "elevation_gain",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3171089056",
+ "maxSize": 1,
+ "name": "elevation_loss",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json2990389176",
+ "maxSize": 1,
+ "name": "created",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json2363381545",
+ "maxSize": 1,
+ "name": "type",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ }
+ ],
+ "id": "t9lphichi5xwyeu",
+ "indexes": [],
+ "listRule": "(@collection.users_anonymous.id ?= author && @collection.users_anonymous.private ?= false\n&&\n@collection.trails.id ?= trail_id && \n (\n @collection.trails.author ?= @request.auth.id ||\n @collection.trails.public ?= true || \n (@request.auth.id != \"\" && @collection.trails.trail_share_via_trail.user ?= @request.auth.id)\n )) && @request.auth.id = author",
+ "name": "activities",
+ "system": false,
+ "type": "view",
+ "updateRule": null,
+ "viewQuery": "SELECT id,trail_id,date,name,description,gpx,author,photos,distance,duration,elevation_gain,elevation_loss,created,type \nFROM (\n SELECT summit_logs.id,trails.id as trail_id,summit_logs.date,trails.name,text as description,summit_logs.gpx,summit_logs.author,summit_logs.photos,summit_logs.distance,summit_logs.duration,summit_logs.elevation_gain,summit_logs.elevation_loss,summit_logs.created,\"summit_log\" as type \n FROM summit_logs\n JOIN trails ON summit_logs.id IN (\n SELECT value\n FROM json_each(trails.summit_logs)\n )\n UNION\n SELECT id,id as trail_id,date,name,description,gpx,author,photos,distance,duration,elevation_gain,elevation_loss,created,\"trail\" as type \n FROM trails\n)\nORDER BY created DESC",
+ "viewRule": "(@collection.users_anonymous.id ?= author && @collection.users_anonymous.private ?= false\n&&\n@collection.trails.id ?= trail_id && \n (\n @collection.trails.author ?= @request.auth.id ||\n @collection.trails.public ?= true || \n (@request.auth.id != \"\" && @collection.trails.trail_share_via_trail.user ?= @request.auth.id)\n )) && @request.auth.id = author"
+ }`
+
+ collection := &core.Collection{}
+ if err := json.Unmarshal([]byte(jsonData), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747061257_created_activitypub_actors.go b/db/migrations/1747061257_created_activitypub_actors.go
new file mode 100644
index 00000000..ac60a949
--- /dev/null
+++ b/db/migrations/1747061257_created_activitypub_actors.go
@@ -0,0 +1,285 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ jsonData := `[
+ {
+ "id": "pbc_1295301207",
+ "listRule": "",
+ "viewRule": "",
+ "createRule": null,
+ "updateRule": null,
+ "deleteRule": null,
+ "name": "activitypub_actors",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text4166911607",
+ "max": 0,
+ "min": 0,
+ "name": "username",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text4002953752",
+ "max": 0,
+ "min": 0,
+ "name": "preferred_username",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text2812878347",
+ "max": 0,
+ "min": 0,
+ "name": "domain",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text3458754147",
+ "max": 0,
+ "min": 0,
+ "name": "summary",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "number1386272118",
+ "max": null,
+ "min": null,
+ "name": "followerCount",
+ "onlyInt": true,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "number3430500629",
+ "max": null,
+ "min": null,
+ "name": "followingCount",
+ "onlyInt": true,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "date1748787223",
+ "max": "",
+ "min": "",
+ "name": "published",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "date"
+ },
+ {
+ "exceptDomains": null,
+ "hidden": false,
+ "id": "url126331327",
+ "name": "iri",
+ "onlyDomains": null,
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "url"
+ },
+ {
+ "exceptDomains": null,
+ "hidden": false,
+ "id": "url2115105593",
+ "name": "inbox",
+ "onlyDomains": null,
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "url"
+ },
+ {
+ "exceptDomains": null,
+ "hidden": false,
+ "id": "url1793578352",
+ "name": "outbox",
+ "onlyDomains": null,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "url"
+ },
+ {
+ "exceptDomains": null,
+ "hidden": false,
+ "id": "url1704208859",
+ "name": "icon",
+ "onlyDomains": null,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "url"
+ },
+ {
+ "exceptDomains": null,
+ "hidden": false,
+ "id": "url2215181735",
+ "name": "followers",
+ "onlyDomains": null,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "url"
+ },
+ {
+ "exceptDomains": null,
+ "hidden": false,
+ "id": "url1908379107",
+ "name": "following",
+ "onlyDomains": null,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "url"
+ },
+ {
+ "hidden": false,
+ "id": "bool2193750486",
+ "name": "isLocal",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "bool"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text1727648867",
+ "max": 0,
+ "min": 0,
+ "name": "public_key",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": true,
+ "id": "text4160324774",
+ "max": 0,
+ "min": 0,
+ "name": "private_key",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "relation2375276105",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "date2062531289",
+ "max": "",
+ "min": "",
+ "name": "last_fetched",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "date"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [
+ "CREATE UNIQUE INDEX ` + "`idx_rpT7QJwWTm` ON `activitypub_actors` (`iri`)" + `"
+ ],
+ "system": false
+ }
+]`
+
+ return app.ImportCollectionsByMarshaledJSON([]byte(jsonData), false)
+ }, func(app core.App) error {
+ return nil
+ })
+}
diff --git a/db/migrations/1747061258_created_activitypub_activities.go b/db/migrations/1747061258_created_activitypub_activities.go
new file mode 100644
index 00000000..ff2e4638
--- /dev/null
+++ b/db/migrations/1747061258_created_activitypub_activities.go
@@ -0,0 +1,156 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ jsonData := `[
+ {
+ "id": "pbc_3752774184",
+ "listRule": "",
+ "viewRule": "",
+ "createRule": null,
+ "updateRule": null,
+ "deleteRule": null,
+ "name": "activitypub_activities",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "exceptDomains": [],
+ "hidden": false,
+ "id": "url2434853685",
+ "name": "iri",
+ "onlyDomains": [],
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "url"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text2363381545",
+ "max": 0,
+ "min": 0,
+ "name": "type",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "json3616002756",
+ "maxSize": 0,
+ "name": "to",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3685882489",
+ "maxSize": 0,
+ "name": "cc",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json2893285722",
+ "maxSize": 0,
+ "name": "object",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "exceptDomains": [],
+ "hidden": false,
+ "id": "url1148540665",
+ "name": "actor",
+ "onlyDomains": [],
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "url"
+ },
+ {
+ "hidden": false,
+ "id": "date1748787223",
+ "max": "",
+ "min": "",
+ "name": "published",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "date"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text1653163849",
+ "max": 15,
+ "min": 15,
+ "name": "relation",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [],
+ "system": false
+ }
+]`
+
+ return app.ImportCollectionsByMarshaledJSON([]byte(jsonData), false)
+ }, func(app core.App) error {
+ return nil
+ })
+}
diff --git a/db/migrations/1747061259_seed_actors.go b/db/migrations/1747061259_seed_actors.go
new file mode 100644
index 00000000..f343535c
--- /dev/null
+++ b/db/migrations/1747061259_seed_actors.go
@@ -0,0 +1,30 @@
+package migrations
+
+import (
+ "pocketbase/util"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ users, err := app.FindAllRecords("users")
+ if err != nil {
+ return err
+ }
+
+ for _, u := range users {
+ _, err = util.ActorFromUser(app, u)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+ }, func(app core.App) error {
+ // add down queries...
+
+ return nil
+ })
+}
diff --git a/db/migrations/1747061260_trails_add_new_author.go b/db/migrations/1747061260_trails_add_new_author.go
new file mode 100644
index 00000000..e401981e
--- /dev/null
+++ b/db/migrations/1747061260_trails_add_new_author.go
@@ -0,0 +1,78 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(15, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation3182418120",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(16, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "1utgul91",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("relation3182418120")
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(15, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "1utgul91",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747061261_set_trail_authors.go b/db/migrations/1747061261_set_trail_authors.go
new file mode 100644
index 00000000..04ee0681
--- /dev/null
+++ b/db/migrations/1747061261_set_trail_authors.go
@@ -0,0 +1,33 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ trails, err := app.FindAllRecords("trails")
+ if err != nil {
+ return err
+ }
+
+ for _, t := range trails {
+ actor, err := app.FindFirstRecordByData("activitypub_actors", "user", t.GetString("user"))
+ if err != nil {
+ return err
+ }
+ t.Set("author", actor.Id)
+ err = app.UnsafeWithoutHooks().Save(t)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+ }, func(app core.App) error {
+ // add down queries...
+
+ return nil
+ })
+}
diff --git a/db/migrations/1747061262_comments_add_new_author.go b/db/migrations/1747061262_comments_add_new_author.go
new file mode 100644
index 00000000..5a3d309e
--- /dev/null
+++ b/db/migrations/1747061262_comments_add_new_author.go
@@ -0,0 +1,78 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("comments")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(3, []byte(`{
+ "cascadeDelete": false,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation3182418120",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(16, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "7lwo1mxx",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("comments")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("relation3182418120")
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(15, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "7lwo1mxx",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747061263_set_comment_authors.go b/db/migrations/1747061263_set_comment_authors.go
new file mode 100644
index 00000000..a61e7922
--- /dev/null
+++ b/db/migrations/1747061263_set_comment_authors.go
@@ -0,0 +1,33 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ comments, err := app.FindAllRecords("comments")
+ if err != nil {
+ return err
+ }
+
+ for _, c := range comments {
+ actor, err := app.FindFirstRecordByData("activitypub_actors", "user", c.GetString("user"))
+ if err != nil {
+ continue
+ }
+ c.Set("author", actor.Id)
+ err = app.UnsafeWithoutHooks().Save(c)
+ if err != nil {
+ continue
+ }
+ }
+
+ return nil
+ }, func(app core.App) error {
+ // add down queries...
+
+ return nil
+ })
+}
diff --git a/db/migrations/1747061264_summit_logs_add_new_author.go b/db/migrations/1747061264_summit_logs_add_new_author.go
new file mode 100644
index 00000000..3348138a
--- /dev/null
+++ b/db/migrations/1747061264_summit_logs_add_new_author.go
@@ -0,0 +1,78 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("summit_logs")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(9, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation3182418120",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(16, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "r0mj3tkr",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("summit_logs")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("relation3182418120")
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(15, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "r0mj3tkr",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747061265_set_summit_log_authors.go b/db/migrations/1747061265_set_summit_log_authors.go
new file mode 100644
index 00000000..976350e3
--- /dev/null
+++ b/db/migrations/1747061265_set_summit_log_authors.go
@@ -0,0 +1,46 @@
+package migrations
+
+import (
+ "github.com/pocketbase/dbx"
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ logs, err := app.FindAllRecords("summit_logs")
+ if err != nil {
+ return err
+ }
+
+ for _, l := range logs {
+ if l.GetString("user") == "" {
+ trail, err := app.FindFirstRecordByFilter("trails", "summit_logs ?~ {:id}", dbx.Params{"id": l.Id})
+ if err != nil {
+ // orphaned
+ err = app.UnsafeWithoutHooks().Delete(l)
+ if err != nil {
+ return err
+ }
+ continue
+ }
+ l.Set("user", trail.GetString("user"))
+ }
+ actor, err := app.FindFirstRecordByData("activitypub_actors", "user", l.GetString("user"))
+ if err != nil {
+ return err
+ }
+ l.Set("author", actor.Id)
+ err = app.UnsafeWithoutHooks().Save(l)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+ }, func(app core.App) error {
+ // add down queries...
+
+ return nil
+ })
+}
diff --git a/db/migrations/1747061266_migrate_ms_token.go b/db/migrations/1747061266_migrate_ms_token.go
new file mode 100644
index 00000000..d661e543
--- /dev/null
+++ b/db/migrations/1747061266_migrate_ms_token.go
@@ -0,0 +1,55 @@
+package migrations
+
+import (
+ "os"
+ "pocketbase/util"
+
+ "github.com/meilisearch/meilisearch-go"
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ client := meilisearch.New(os.Getenv("MEILI_URL"), meilisearch.WithAPIKey(os.Getenv("MEILI_MASTER_KEY")))
+
+ m.Register(func(app core.App) error {
+
+ users, err := app.FindAllRecords("users")
+ if err != nil {
+ return err
+ }
+ for _, u := range users {
+ userId := u.Id
+
+ actor, err := app.FindFirstRecordByData("activitypub_actors", "user", userId)
+ if err != nil {
+ return err
+ }
+
+ searchRules := map[string]interface{}{
+ "lists": map[string]string{
+ "filter": "public = true OR author = " + actor.Id + " OR shares = " + userId,
+ },
+ "trails": map[string]string{
+ "filter": "public = true OR author = " + actor.Id + " OR shares = " + userId,
+ },
+ }
+
+ token, err := util.GenerateMeilisearchToken(searchRules, client)
+ if err != nil {
+ return err
+ }
+ u.Set("token", token)
+ if err := app.Save(u); err != nil {
+ return err
+ }
+
+ }
+
+ return nil
+ }, func(app core.App) error {
+ // add down queries...
+
+ return nil
+ })
+}
diff --git a/db/migrations/1747061267_summit_logs_add_trail_field.go b/db/migrations/1747061267_summit_logs_add_trail_field.go
new file mode 100644
index 00000000..e9c9759b
--- /dev/null
+++ b/db/migrations/1747061267_summit_logs_add_trail_field.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(10, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "e864strfxo14pm4",
+ "hidden": false,
+ "id": "relation2993194383",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "trail",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("relation2993194383")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747061268_migrate_summit_log_trails.go b/db/migrations/1747061268_migrate_summit_log_trails.go
new file mode 100644
index 00000000..7ccae9f1
--- /dev/null
+++ b/db/migrations/1747061268_migrate_summit_log_trails.go
@@ -0,0 +1,34 @@
+package migrations
+
+import (
+ "github.com/pocketbase/dbx"
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ logs, err := app.FindAllRecords("summit_logs")
+ if err != nil {
+ return err
+ }
+
+ for _, l := range logs {
+ trail, err := app.FindFirstRecordByFilter("trails", "summit_logs ?~ {:id}", dbx.Params{"id": l.Id})
+ if err != nil {
+ continue
+ }
+ l.Set("trail", trail.Id)
+ err = app.UnsafeWithoutHooks().Save(l)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+ }, func(app core.App) error {
+ // add down queries...
+
+ return nil
+ })
+}
diff --git a/db/migrations/1747061269_trails_remove_summit_log_field.go b/db/migrations/1747061269_trails_remove_summit_log_field.go
new file mode 100644
index 00000000..fbcbc4ca
--- /dev/null
+++ b/db/migrations/1747061269_trails_remove_summit_log_field.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("e1lwowvd")
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(17, []byte(`{
+ "cascadeDelete": false,
+ "collectionId": "dd2l9a4vxpy2ni8",
+ "hidden": false,
+ "id": "e1lwowvd",
+ "maxSelect": 2147483647,
+ "minSelect": 0,
+ "name": "summit_logs",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747061270_follows_add_new_f_f.go b/db/migrations/1747061270_follows_add_new_f_f.go
new file mode 100644
index 00000000..81efb797
--- /dev/null
+++ b/db/migrations/1747061270_follows_add_new_f_f.go
@@ -0,0 +1,150 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("8obn1ukumze565i")
+ if err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "in1traur",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "old_follower",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(2, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "wxwomfd5",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "old_followee",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(3, []byte(`{
+ "hidden": false,
+ "id": "select2063623452",
+ "maxSelect": 1,
+ "name": "status",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "select",
+ "values": [
+ "pending",
+ "accepted"
+ ]
+ }`)); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation3117812038",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "follower",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(2, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation973442177",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "followee",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("8obn1ukumze565i")
+ if err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "in1traur",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "follower",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(2, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "wxwomfd5",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "followee",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("relation3117812038")
+
+ // remove field
+ collection.Fields.RemoveById("relation973442177")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747061271_migrate_follows.go b/db/migrations/1747061271_migrate_follows.go
new file mode 100644
index 00000000..f5d79c7f
--- /dev/null
+++ b/db/migrations/1747061271_migrate_follows.go
@@ -0,0 +1,60 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ follows, err := app.FindAllRecords("follows")
+ if err != nil {
+ return err
+ }
+
+ seen := map[string]string{}
+ for _, f := range follows {
+ oldFollower := f.GetString("old_follower")
+ oldFollowee := f.GetString("old_followee")
+
+ if oldFollowee == "" || oldFollower == "" {
+ continue
+ }
+
+ seenFollowee, ok := seen[oldFollower]
+ if ok && seenFollowee == oldFollowee {
+ err = app.Delete(f)
+ if err != nil {
+ return err
+ }
+ continue
+ }
+ seen[oldFollower] = oldFollowee
+
+ followerActor, err := app.FindFirstRecordByData("activitypub_actors", "user", oldFollower)
+ if err != nil {
+ return err
+ }
+
+ followeeActor, err := app.FindFirstRecordByData("activitypub_actors", "user", oldFollowee)
+ if err != nil {
+ return err
+ }
+
+ f.Set("follower", followerActor.Id)
+ f.Set("followee", followeeActor.Id)
+ f.Set("status", "accepted")
+
+ err = app.UnsafeWithoutHooks().Save(f)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+ }, func(app core.App) error {
+ // add down queries...
+
+ return nil
+ })
+}
diff --git a/db/migrations/1747064968_collections_snapshot.go b/db/migrations/1747064968_collections_snapshot.go
new file mode 100644
index 00000000..364ed13f
--- /dev/null
+++ b/db/migrations/1747064968_collections_snapshot.go
@@ -0,0 +1,1159 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ jsonData := `[
+ {
+ "id": "lf06qip3f4d11yk",
+ "listRule": "((@request.auth.id != \"\" && trail.author.user = @request.auth.id) || trail.public = true) || author = @request.auth.id || trail.trail_share_via_trail.user ?= @request.auth.id",
+ "viewRule": "((@request.auth.id != \"\" && trail.author.user = @request.auth.id) || trail.public = true) || author = @request.auth.id || trail.trail_share_via_trail.user ?= @request.auth.id",
+ "createRule": "@request.auth.id != \"\" && (trail.author.user = @request.auth.id || trail.public = true || trail.trail_share_via_trail.user ?= @request.auth.id)",
+ "updateRule": "@request.auth.id = author.user",
+ "deleteRule": "@request.auth.id = author.user",
+ "name": "comments",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "0udwb0kl",
+ "max": 0,
+ "min": 0,
+ "name": "text",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "e864strfxo14pm4",
+ "hidden": false,
+ "id": "snrlpxar",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "trail",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "cascadeDelete": false,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation3182418120",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [],
+ "system": false
+ },
+ {
+ "id": "8obn1ukumze565i",
+ "listRule": "@request.auth.id = follower.user.id || @request.auth.id = followee.user.id",
+ "viewRule": "@request.auth.id = follower.user.id || @request.auth.id = followee.user.id",
+ "createRule": "@request.auth.id = follower.user.id",
+ "updateRule": "@request.auth.id = follower.user.id",
+ "deleteRule": "@request.auth.id = follower.user.id",
+ "name": "follows",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation3117812038",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "follower",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation973442177",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "followee",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "select2063623452",
+ "maxSelect": 1,
+ "name": "status",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "select",
+ "values": [
+ "pending",
+ "accepted"
+ ]
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [],
+ "system": false
+ },
+ {
+ "id": "dd2l9a4vxpy2ni8",
+ "listRule": "author.user = @request.auth.id || trail.author.user ?= @request.auth.id || trail.public ?= true || \ntrail.trail_share_via_trail.user ?= @request.auth.id",
+ "viewRule": "author.user = @request.auth.id || trail.author.user ?= @request.auth.id || trail.public ?= true || \ntrail.trail_share_via_trail.user ?= @request.auth.id",
+ "createRule": "@request.auth.id != \"\"",
+ "updateRule": "@request.auth.id != \"\" && (trail.author.user = @request.auth.id || author.user = @request.auth.id)",
+ "deleteRule": "@request.auth.id != \"\" && (trail.author.user = @request.auth.id || author.user = @request.auth.id)",
+ "name": "summit_logs",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "gxq1yeld",
+ "max": "",
+ "min": "",
+ "name": "date",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "date"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "0ykzwuia",
+ "max": 0,
+ "min": 0,
+ "name": "text",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "rfwmdcpt",
+ "maxSelect": 1,
+ "maxSize": 5242880,
+ "mimeTypes": null,
+ "name": "gpx",
+ "presentable": false,
+ "protected": false,
+ "required": false,
+ "system": false,
+ "thumbs": null,
+ "type": "file"
+ },
+ {
+ "hidden": false,
+ "id": "ixnksbkt",
+ "maxSelect": 99,
+ "maxSize": 20971520,
+ "mimeTypes": [
+ "image/jpeg",
+ "image/png",
+ "image/vnd.mozilla.apng",
+ "image/webp",
+ "image/svg+xml",
+ "image/heic",
+ "video/ogg",
+ "video/mp4",
+ "video/webm"
+ ],
+ "name": "photos",
+ "presentable": false,
+ "protected": false,
+ "required": false,
+ "system": false,
+ "thumbs": null,
+ "type": "file"
+ },
+ {
+ "hidden": false,
+ "id": "jovws28m",
+ "max": null,
+ "min": 0,
+ "name": "distance",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "m2kndtwn",
+ "max": null,
+ "min": 0,
+ "name": "elevation_gain",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "uqqo9cws",
+ "max": null,
+ "min": 0,
+ "name": "elevation_loss",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "vwxjsrae",
+ "max": null,
+ "min": 0,
+ "name": "duration",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation3182418120",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "e864strfxo14pm4",
+ "hidden": false,
+ "id": "relation2993194383",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "trail",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [],
+ "system": false
+ },
+ {
+ "id": "1mns8mlal6uf9ku",
+ "listRule": "trail.author.user = @request.auth.id || user = @request.auth.id",
+ "viewRule": "trail.author.user = @request.auth.id || user = @request.auth.id",
+ "createRule": "trail.author.user = @request.auth.id",
+ "updateRule": "trail.author.user = @request.auth.id",
+ "deleteRule": "trail.author.user = @request.auth.id",
+ "name": "trail_share",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "e864strfxo14pm4",
+ "hidden": false,
+ "id": "eskurfx6",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "trail",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "yyzimwee",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "zr7aaqxl",
+ "maxSelect": 1,
+ "name": "permission",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "select",
+ "values": [
+ "view",
+ "edit"
+ ]
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [],
+ "system": false
+ },
+ {
+ "id": "e864strfxo14pm4",
+ "listRule": "author.user = @request.auth.id || public = true || (@request.auth.id != \"\" && trail_share_via_trail.user ?= @request.auth.id)",
+ "viewRule": "author.user = @request.auth.id || public = true || (@request.auth.id != \"\" && trail_share_via_trail.user ?= @request.auth.id)",
+ "createRule": "@request.auth.id != \"\" && (@request.body.author.user = @request.auth.id)",
+ "updateRule": "author.user = @request.auth.id || (@request.auth.id != \"\" && trail_share_via_trail.trail = id && trail_share_via_trail.user ?= @request.auth.id && trail_share_via_trail.permission = \"edit\")",
+ "deleteRule": "author.user = @request.auth.id ",
+ "name": "trails",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "wquvuytd",
+ "max": 0,
+ "min": 0,
+ "name": "name",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "6kkucam1",
+ "max": 10000,
+ "min": 0,
+ "name": "description",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "8x74ba26",
+ "max": 0,
+ "min": 0,
+ "name": "location",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "ehrmydva",
+ "name": "public",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "bool"
+ },
+ {
+ "hidden": false,
+ "id": "epgmtyxy",
+ "max": null,
+ "min": 0,
+ "name": "distance",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "5wxdt3aj",
+ "max": null,
+ "min": null,
+ "name": "elevation_gain",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "xutbwpq4",
+ "max": null,
+ "min": null,
+ "name": "elevation_loss",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "ukr9rqz4",
+ "max": null,
+ "min": 0,
+ "name": "duration",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "eqeqja1s",
+ "max": null,
+ "min": null,
+ "name": "lat",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "y6dbfyw6",
+ "max": null,
+ "min": null,
+ "name": "lon",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "aqbpyawe",
+ "maxSelect": 99,
+ "maxSize": 20971520,
+ "mimeTypes": [
+ "image/jpeg",
+ "image/vnd.mozilla.apng",
+ "image/png",
+ "image/webp",
+ "image/svg+xml",
+ "image/heic",
+ "video/mp4",
+ "video/webm",
+ "video/ogg"
+ ],
+ "name": "photos",
+ "presentable": false,
+ "protected": false,
+ "required": false,
+ "system": false,
+ "thumbs": null,
+ "type": "file"
+ },
+ {
+ "hidden": false,
+ "id": "k8xdrsyv",
+ "maxSelect": 1,
+ "maxSize": 5242880,
+ "mimeTypes": null,
+ "name": "gpx",
+ "presentable": false,
+ "protected": false,
+ "required": false,
+ "system": false,
+ "thumbs": null,
+ "type": "file"
+ },
+ {
+ "cascadeDelete": false,
+ "collectionId": "kjxvi8asj2igqwf",
+ "hidden": false,
+ "id": "b49obm5u",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "category",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "cascadeDelete": false,
+ "collectionId": "pbc_1219621782",
+ "hidden": false,
+ "id": "relation1874629670",
+ "maxSelect": 999,
+ "minSelect": 0,
+ "name": "tags",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation3182418120",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "cascadeDelete": false,
+ "collectionId": "goeo2ubp103rzp9",
+ "hidden": false,
+ "id": "ppq2sist",
+ "maxSelect": 2147483647,
+ "minSelect": 0,
+ "name": "waypoints",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "k2giqyjq",
+ "max": null,
+ "min": null,
+ "name": "thumbnail",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "dywtnynw",
+ "maxSelect": 1,
+ "name": "difficulty",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "select",
+ "values": [
+ "easy",
+ "moderate",
+ "difficult"
+ ]
+ },
+ {
+ "hidden": false,
+ "id": "hovyvbtt",
+ "max": "",
+ "min": "",
+ "name": "date",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "date"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "sajmiuau",
+ "max": 0,
+ "min": 0,
+ "name": "external_id",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "htr35nha",
+ "maxSelect": 1,
+ "name": "external_provider",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "select",
+ "values": [
+ "strava",
+ "komoot"
+ ]
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [],
+ "system": false
+ },
+ {
+ "id": "goeo2ubp103rzp9",
+ "listRule": "author = @request.auth.id || trails_via_waypoints.author.user ?= @request.auth.id || trails_via_waypoints.public ?= true || \n(@collection.trail_share.trail.id ?= trails_via_waypoints.id && @collection.trail_share.user ?= @request.auth.id)",
+ "viewRule": "author = @request.auth.id || trails_via_waypoints.author.user ?= @request.auth.id || trails_via_waypoints.public ?= true || \n(@collection.trail_share.trail.id ?= trails_via_waypoints.id && @collection.trail_share.user ?= @request.auth.id)",
+ "createRule": "@request.auth.id != \"\"",
+ "updateRule": "@request.auth.id != \"\" && ((@collection.trails.waypoints.id ?= id && @collection.trails.author.user = @request.auth.id) || author = @request.auth.id)",
+ "deleteRule": "@request.auth.id != \"\" && ((@collection.trails.waypoints.id ?= id && @collection.trails.author.user = @request.auth.id) || author = @request.auth.id)",
+ "name": "waypoints",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "2yegzjtk",
+ "max": 0,
+ "min": 0,
+ "name": "name",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "3xtcjtxv",
+ "max": 0,
+ "min": 0,
+ "name": "description",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "ygotgxzy",
+ "max": null,
+ "min": null,
+ "name": "lat",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "q0ygnxd2",
+ "max": null,
+ "min": null,
+ "name": "lon",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "hidden": false,
+ "id": "s1prb3fx",
+ "max": null,
+ "min": 0,
+ "name": "distance_from_start",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "rnjgm2tk",
+ "max": 0,
+ "min": 0,
+ "name": "icon",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "tfhs3juh",
+ "maxSelect": 99,
+ "maxSize": 20971520,
+ "mimeTypes": [
+ "image/jpeg",
+ "image/png",
+ "image/vnd.mozilla.apng",
+ "image/webp",
+ "image/svg+xml",
+ "video/ogg",
+ "video/mp4",
+ "video/webm"
+ ],
+ "name": "photos",
+ "presentable": false,
+ "protected": false,
+ "required": false,
+ "system": false,
+ "thumbs": null,
+ "type": "file"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "8qbxrsd8",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [],
+ "system": false
+ },
+ {
+ "id": "urytyc428mwlbqq",
+ "listRule": null,
+ "viewRule": "@request.auth.id = user",
+ "createRule": null,
+ "updateRule": null,
+ "deleteRule": null,
+ "name": "trails_bounding_box",
+ "type": "view",
+ "fields": [
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 0,
+ "min": 0,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "_clone_7E6L",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "json2217363417",
+ "maxSize": 1,
+ "name": "max_lat",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3888878381",
+ "maxSize": 1,
+ "name": "max_lon",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json2279188374",
+ "maxSize": 1,
+ "name": "min_lat",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3828904802",
+ "maxSize": 1,
+ "name": "min_lon",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ }
+ ],
+ "indexes": [],
+ "system": false,
+ "viewQuery": "SELECT \n activitypub_actors.id, activitypub_actors.user, \n COALESCE(MAX(trails.lat), 0) AS max_lat, \n COALESCE(MAX(trails.lon), 0) AS max_lon, \n COALESCE(MIN(trails.lat), 0) AS min_lat, \n COALESCE(MIN(trails.lon), 0) AS min_lon \nFROM activitypub_actors \nLEFT JOIN trails \n ON activitypub_actors.id = trails.author \n OR trails.public = TRUE \n OR EXISTS (\n SELECT 1 \n FROM trail_share \n WHERE trail_share.trail = trails.id \n AND trail_share.user = activitypub_actors.id\n ) \nGROUP BY activitypub_actors.id;"
+ },
+ {
+ "id": "4wbv9tz5zjdrjh1",
+ "listRule": null,
+ "viewRule": "@request.auth.id = user",
+ "createRule": null,
+ "updateRule": null,
+ "deleteRule": null,
+ "name": "trails_filter",
+ "type": "view",
+ "fields": [
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 0,
+ "min": 0,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "_clone_FrMO",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "json1840770130",
+ "maxSize": 1,
+ "name": "max_distance",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json2471616556",
+ "maxSize": 1,
+ "name": "max_elevation_gain",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json2649087013",
+ "maxSize": 1,
+ "name": "max_elevation_loss",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json4152030739",
+ "maxSize": 1,
+ "name": "max_duration",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json4257545400",
+ "maxSize": 1,
+ "name": "min_distance",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3237476552",
+ "maxSize": 1,
+ "name": "min_elevation_gain",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3460547777",
+ "maxSize": 1,
+ "name": "min_elevation_loss",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json1728702201",
+ "maxSize": 1,
+ "name": "min_duration",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ }
+ ],
+ "indexes": [],
+ "system": false,
+ "viewQuery": "SELECT activitypub_actors.id, activitypub_actors.user, COALESCE(printf(\"%.2f\", MAX(trails.distance)), 0) AS max_distance,\n COALESCE(printf(\"%.2f\", MAX(trails.elevation_gain)), 0) AS max_elevation_gain, \n COALESCE(printf(\"%.2f\", MAX(trails.elevation_loss)), 0) AS max_elevation_loss, \n COALESCE(printf(\"%.2f\", MAX(trails.duration)), 0) AS max_duration, \n COALESCE(printf(\"%.2f\", MIN(trails.distance)), 0) AS min_distance, \n COALESCE(printf(\"%.2f\", MIN(trails.elevation_gain)), 0) AS min_elevation_gain, \n COALESCE(printf(\"%.2f\", MIN(trails.elevation_loss)), 0) AS min_elevation_loss, \n COALESCE(printf(\"%.2f\", MIN(trails.duration)), 0) AS min_duration \nFROM activitypub_actors \n LEFT JOIN trails ON \n activitypub_actors.id = trails.author OR \n trails.public = 1 OR \n EXISTS (\n SELECT 1 \n FROM trail_share \n WHERE trail_share.trail = trails.id \n AND trail_share.user = activitypub_actors.user\n ) GROUP BY activitypub_actors.id;"
+ }
+]`
+
+ return app.ImportCollectionsByMarshaledJSON([]byte(jsonData), false)
+ }, func(app core.App) error {
+ return nil
+ })
+}
diff --git a/db/migrations/1747066702_updated_comments.go b/db/migrations/1747066702_updated_comments.go
new file mode 100644
index 00000000..f698383b
--- /dev/null
+++ b/db/migrations/1747066702_updated_comments.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("lf06qip3f4d11yk")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("7lwo1mxx")
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("lf06qip3f4d11yk")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(6, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "7lwo1mxx",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747066720_updated_summit_logs.go b/db/migrations/1747066720_updated_summit_logs.go
new file mode 100644
index 00000000..317ac99c
--- /dev/null
+++ b/db/migrations/1747066720_updated_summit_logs.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("r0mj3tkr")
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(13, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "r0mj3tkr",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747066741_updated_trails.go b/db/migrations/1747066741_updated_trails.go
new file mode 100644
index 00000000..4d631191
--- /dev/null
+++ b/db/migrations/1747066741_updated_trails.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("1utgul91")
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(24, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "1utgul91",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747066742_updated_follows.go b/db/migrations/1747066742_updated_follows.go
new file mode 100644
index 00000000..99a36be7
--- /dev/null
+++ b/db/migrations/1747066742_updated_follows.go
@@ -0,0 +1,26 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("8obn1ukumze565i")
+ if err != nil {
+ return err
+ }
+
+ // // remove field
+ collection.Fields.RemoveById("in1traur")
+
+ // // remove field
+ collection.Fields.RemoveById("wxwomfd5")
+
+ return app.Save(collection)
+
+ }, func(app core.App) error {
+ return nil
+ })
+}
diff --git a/db/migrations/1747236775_created_timeline.go b/db/migrations/1747236775_created_timeline.go
new file mode 100644
index 00000000..f9c66e90
--- /dev/null
+++ b/db/migrations/1747236775_created_timeline.go
@@ -0,0 +1,186 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ jsonData := `{
+ "createRule": null,
+ "deleteRule": null,
+ "fields": [
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 0,
+ "min": 0,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "json2310347867",
+ "maxSize": 1,
+ "name": "trail_id",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json2862495610",
+ "maxSize": 1,
+ "name": "date",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json1579384326",
+ "maxSize": 1,
+ "name": "name",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json1843675174",
+ "maxSize": 1,
+ "name": "description",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3275261007",
+ "maxSize": 1,
+ "name": "gpx",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3182418120",
+ "maxSize": 1,
+ "name": "author",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json142008537",
+ "maxSize": 1,
+ "name": "photos",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json479369857",
+ "maxSize": 1,
+ "name": "distance",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json2254405824",
+ "maxSize": 1,
+ "name": "duration",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3015100073",
+ "maxSize": 1,
+ "name": "elevation_gain",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json3171089056",
+ "maxSize": 1,
+ "name": "elevation_loss",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json2990389176",
+ "maxSize": 1,
+ "name": "created",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "json2363381545",
+ "maxSize": 1,
+ "name": "type",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ }
+ ],
+ "id": "pbc_468398817",
+ "indexes": [],
+ "listRule": "@collection.trails.id ?= trail_id && @collection.trails.public ?= true",
+ "name": "timeline",
+ "system": false,
+ "type": "view",
+ "updateRule": null,
+ "viewQuery": "-- database: /Users/christianbeutel/Documents/svelte/wanderer/db/pb_data/data.db\nSELECT\n (ROW_NUMBER() OVER ()) as id,\n trail_id,\n date,\n name,\n description,\n gpx,\n author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n created,\n type\nFROM\n (\n SELECT\n summit_logs.trail as trail_id,\n summit_logs.date,\n trails.name,\n text as description,\n summit_logs.gpx,\n activitypub_actors.iri as author,\n summit_logs.photos,\n summit_logs.distance,\n summit_logs.duration,\n summit_logs.elevation_gain,\n summit_logs.elevation_loss,\n summit_logs.created,\n \"summit_log\" as type\n FROM\n summit_logs\n JOIN trails ON summit_logs.trail = trails.id\n JOIN activitypub_actors ON activitypub_actors.id = summit_logs.author\n UNION\n SELECT\n trails.id as trail_id,\n date,\n trails.name,\n description,\n gpx,\n activitypub_actors.iri as author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n trails.created,\n \"trail\" as type\n FROM\n trails\n JOIN activitypub_actors ON activitypub_actors.id = trails.author\n )\nORDER BY\n created DESC;\n",
+ "viewRule": "@collection.trails.id ?= trail_id && @collection.trails.public ?= true"
+ }`
+
+ collection := &core.Collection{}
+ if err := json.Unmarshal([]byte(jsonData), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_468398817")
+ if err != nil {
+ return err
+ }
+
+ return app.Delete(collection)
+ })
+}
diff --git a/db/migrations/1747242599_updated_timeline.go b/db/migrations/1747242599_updated_timeline.go
new file mode 100644
index 00000000..72aef03b
--- /dev/null
+++ b/db/migrations/1747242599_updated_timeline.go
@@ -0,0 +1,40 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_468398817")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewQuery": "SELECT\n (ROW_NUMBER() OVER ()) as id,\n trail_id,\n date,\n name,\n description,\n gpx,\n author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n created,\n type\nFROM\n (\n SELECT\n summit_logs.trail as trail_id,\n summit_logs.date,\n trails.name,\n text as description,\n summit_logs.gpx,\n activitypub_actors.iri as author,\n summit_logs.photos,\n summit_logs.distance,\n summit_logs.duration,\n summit_logs.elevation_gain,\n summit_logs.elevation_loss,\n summit_logs.created,\n \"summit_log\" as type\n FROM\n summit_logs\n JOIN trails ON summit_logs.trail = trails.id\n JOIN activitypub_actors ON activitypub_actors.id = summit_logs.author\n UNION\n SELECT\n trails.id as trail_id,\n date,\n trails.name,\n description,\n gpx,\n activitypub_actors.iri as author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n trails.created,\n \"trail\" as type\n FROM\n trails\n JOIN activitypub_actors ON activitypub_actors.id = trails.author\n )\nORDER BY\n created DESC;\n"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_468398817")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewQuery": "-- database: /Users/christianbeutel/Documents/svelte/wanderer/db/pb_data/data.db\nSELECT\n (ROW_NUMBER() OVER ()) as id,\n trail_id,\n date,\n name,\n description,\n gpx,\n author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n created,\n type\nFROM\n (\n SELECT\n summit_logs.trail as trail_id,\n summit_logs.date,\n trails.name,\n text as description,\n summit_logs.gpx,\n activitypub_actors.iri as author,\n summit_logs.photos,\n summit_logs.distance,\n summit_logs.duration,\n summit_logs.elevation_gain,\n summit_logs.elevation_loss,\n summit_logs.created,\n \"summit_log\" as type\n FROM\n summit_logs\n JOIN trails ON summit_logs.trail = trails.id\n JOIN activitypub_actors ON activitypub_actors.id = summit_logs.author\n UNION\n SELECT\n trails.id as trail_id,\n date,\n trails.name,\n description,\n gpx,\n activitypub_actors.iri as author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n trails.created,\n \"trail\" as type\n FROM\n trails\n JOIN activitypub_actors ON activitypub_actors.id = trails.author\n )\nORDER BY\n created DESC;\n"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747300536_updated_timeline.go b/db/migrations/1747300536_updated_timeline.go
new file mode 100644
index 00000000..e2981b79
--- /dev/null
+++ b/db/migrations/1747300536_updated_timeline.go
@@ -0,0 +1,40 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_468398817")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewQuery": "SELECT\n id,\n trail_id,\n date,\n name,\n description,\n gpx,\n author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n created,\n type\nFROM\n (\n SELECT\n summit_logs.id,\n summit_logs.trail as trail_id,\n summit_logs.date,\n trails.name,\n text as description,\n summit_logs.gpx,\n activitypub_actors.iri as author,\n summit_logs.photos,\n summit_logs.distance,\n summit_logs.duration,\n summit_logs.elevation_gain,\n summit_logs.elevation_loss,\n summit_logs.created,\n \"summit_log\" as type\n FROM\n summit_logs\n JOIN trails ON summit_logs.trail = trails.id\n JOIN activitypub_actors ON activitypub_actors.id = summit_logs.author\n UNION\n SELECT\n trails.id,\n trails.id as trail_id,\n date,\n trails.name,\n description,\n gpx,\n activitypub_actors.iri as author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n trails.created,\n \"trail\" as type\n FROM\n trails\n JOIN activitypub_actors ON activitypub_actors.id = trails.author\n )\nORDER BY\n created DESC;\n"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_468398817")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewQuery": "SELECT\n (ROW_NUMBER() OVER ()) as id,\n trail_id,\n date,\n name,\n description,\n gpx,\n author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n created,\n type\nFROM\n (\n SELECT\n summit_logs.trail as trail_id,\n summit_logs.date,\n trails.name,\n text as description,\n summit_logs.gpx,\n activitypub_actors.iri as author,\n summit_logs.photos,\n summit_logs.distance,\n summit_logs.duration,\n summit_logs.elevation_gain,\n summit_logs.elevation_loss,\n summit_logs.created,\n \"summit_log\" as type\n FROM\n summit_logs\n JOIN trails ON summit_logs.trail = trails.id\n JOIN activitypub_actors ON activitypub_actors.id = summit_logs.author\n UNION\n SELECT\n trails.id as trail_id,\n date,\n trails.name,\n description,\n gpx,\n activitypub_actors.iri as author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n trails.created,\n \"trail\" as type\n FROM\n trails\n JOIN activitypub_actors ON activitypub_actors.id = trails.author\n )\nORDER BY\n created DESC;\n"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747312289_updated_comments.go b/db/migrations/1747312289_updated_comments.go
new file mode 100644
index 00000000..4d8e2aae
--- /dev/null
+++ b/db/migrations/1747312289_updated_comments.go
@@ -0,0 +1,43 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("lf06qip3f4d11yk")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("fhgxdiam")
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("lf06qip3f4d11yk")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(6, []byte(`{
+ "hidden": false,
+ "id": "fhgxdiam",
+ "max": null,
+ "min": null,
+ "name": "rating",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747381400_updated_trails.go b/db/migrations/1747381400_updated_trails.go
new file mode 100644
index 00000000..06a4fb76
--- /dev/null
+++ b/db/migrations/1747381400_updated_trails.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(22, []byte(`{
+ "exceptDomains": [],
+ "hidden": false,
+ "id": "url1760183548",
+ "name": "iri",
+ "onlyDomains": [],
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "url"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("url1760183548")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747382660_updated_trails.go b/db/migrations/1747382660_updated_trails.go
new file mode 100644
index 00000000..78c14bd9
--- /dev/null
+++ b/db/migrations/1747382660_updated_trails.go
@@ -0,0 +1,40 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "@request.auth.id != \"\" && (@request.body.author.user = @request.auth.id || author.isLocal = false)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "@request.auth.id != \"\" && (@request.body.author.user = @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747383776_updated_trails.go b/db/migrations/1747383776_updated_trails.go
new file mode 100644
index 00000000..d9ad60a7
--- /dev/null
+++ b/db/migrations/1747383776_updated_trails.go
@@ -0,0 +1,40 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "updateRule": "author.user = @request.auth.id || (@request.auth.id != \"\" && trail_share_via_trail.trail = id && trail_share_via_trail.user ?= @request.auth.id && trail_share_via_trail.permission = \"edit\") || (@request.auth.id != \"\" && author.isLocal = false)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "updateRule": "author.user = @request.auth.id || (@request.auth.id != \"\" && trail_share_via_trail.trail = id && trail_share_via_trail.user ?= @request.auth.id && trail_share_via_trail.permission = \"edit\")"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747499980_updated_comments.go b/db/migrations/1747499980_updated_comments.go
new file mode 100644
index 00000000..37bf7e9a
--- /dev/null
+++ b/db/migrations/1747499980_updated_comments.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("lf06qip3f4d11yk")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(4, []byte(`{
+ "exceptDomains": null,
+ "hidden": false,
+ "id": "url2434853685",
+ "name": "iri",
+ "onlyDomains": null,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "url"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("lf06qip3f4d11yk")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("url2434853685")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747554117_updated_summit_logs.go b/db/migrations/1747554117_updated_summit_logs.go
new file mode 100644
index 00000000..e9ffb881
--- /dev/null
+++ b/db/migrations/1747554117_updated_summit_logs.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(11, []byte(`{
+ "exceptDomains": null,
+ "hidden": false,
+ "id": "url2434853685",
+ "name": "iri",
+ "onlyDomains": null,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "url"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("url2434853685")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747554570_updated_summit_logs.go b/db/migrations/1747554570_updated_summit_logs.go
new file mode 100644
index 00000000..38dcb652
--- /dev/null
+++ b/db/migrations/1747554570_updated_summit_logs.go
@@ -0,0 +1,40 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "@request.auth.id != \"\" && (trail.author.user = @request.auth.id || trail.public = true)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "@request.auth.id != \"\""
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747674856_updated_lists.go b/db/migrations/1747674856_updated_lists.go
new file mode 100644
index 00000000..6d8fa1b6
--- /dev/null
+++ b/db/migrations/1747674856_updated_lists.go
@@ -0,0 +1,78 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(5, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation3182418120",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(6, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "kwm6zdet",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("relation3182418120")
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(5, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "kwm6zdet",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747674913_set_list_authors.go b/db/migrations/1747674913_set_list_authors.go
new file mode 100644
index 00000000..85a71f7c
--- /dev/null
+++ b/db/migrations/1747674913_set_list_authors.go
@@ -0,0 +1,33 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ lists, err := app.FindAllRecords("lists")
+ if err != nil {
+ return err
+ }
+
+ for _, l := range lists {
+ actor, err := app.FindFirstRecordByData("activitypub_actors", "user", l.GetString("user"))
+ if err != nil {
+ continue
+ }
+ l.Set("author", actor.Id)
+ err = app.UnsafeWithoutHooks().Save(l)
+ if err != nil {
+ continue
+ }
+ }
+
+ return nil
+ }, func(app core.App) error {
+ // add down queries...
+
+ return nil
+ })
+}
diff --git a/db/migrations/1747675001_updated_lists.go b/db/migrations/1747675001_updated_lists.go
new file mode 100644
index 00000000..2c2dbb48
--- /dev/null
+++ b/db/migrations/1747675001_updated_lists.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("kwm6zdet")
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(6, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "kwm6zdet",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747676287_updated_lists.go b/db/migrations/1747676287_updated_lists.go
new file mode 100644
index 00000000..5889882f
--- /dev/null
+++ b/db/migrations/1747676287_updated_lists.go
@@ -0,0 +1,48 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "@request.auth.id != \"\" && (@request.body.author.user = @request.auth.id)",
+ "deleteRule": "author.user = @request.auth.id ",
+ "listRule": "author.user = @request.auth.id || public = true || (@request.auth.id != \"\" && list_share_via_list.user ?= @request.auth.id)",
+ "updateRule": "author.user = @request.auth.id || (@request.auth.id != \"\" && list_share_via_list.list = id && list_share_via_list.user ?= @request.auth.id && list_share_via_list.permission = \"edit\")",
+ "viewRule": "author.user = @request.auth.id || public = true || (@request.auth.id != \"\" && list_share_via_list.user ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "@request.auth.id != \"\" && (@request.body.author = @request.auth.id)",
+ "deleteRule": "author = @request.auth.id ",
+ "listRule": "author = @request.auth.id || public = true || (@request.auth.id != \"\" && list_share_via_list.user ?= @request.auth.id)",
+ "updateRule": "author = @request.auth.id || (@request.auth.id != \"\" && list_share_via_list.list = id && list_share_via_list.user ?= @request.auth.id && list_share_via_list.permission = \"edit\")",
+ "viewRule": "author = @request.auth.id || public = true || (@request.auth.id != \"\" && list_share_via_list.user ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747683009_updated_lists.go b/db/migrations/1747683009_updated_lists.go
new file mode 100644
index 00000000..a345350a
--- /dev/null
+++ b/db/migrations/1747683009_updated_lists.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(7, []byte(`{
+ "exceptDomains": null,
+ "hidden": false,
+ "id": "url2434853685",
+ "name": "iri",
+ "onlyDomains": null,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "url"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("url2434853685")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747683368_updated_lists.go b/db/migrations/1747683368_updated_lists.go
new file mode 100644
index 00000000..6719fdf1
--- /dev/null
+++ b/db/migrations/1747683368_updated_lists.go
@@ -0,0 +1,40 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "@request.auth.id != \"\" && (@request.body.author.user = @request.auth.id || author.isLocal = false)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "@request.auth.id != \"\" && (@request.body.author.user = @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747683707_updated_lists.go b/db/migrations/1747683707_updated_lists.go
new file mode 100644
index 00000000..8204debf
--- /dev/null
+++ b/db/migrations/1747683707_updated_lists.go
@@ -0,0 +1,40 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "updateRule": "author.user = @request.auth.id || (@request.auth.id != \"\" && list_share_via_list.list = id && list_share_via_list.user ?= @request.auth.id && list_share_via_list.permission = \"edit\") || (@request.auth.id != \"\" && author.isLocal = false)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "updateRule": "author.user = @request.auth.id || (@request.auth.id != \"\" && list_share_via_list.list = id && list_share_via_list.user ?= @request.auth.id && list_share_via_list.permission = \"edit\")"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747945195_updated_timeline.go b/db/migrations/1747945195_updated_timeline.go
new file mode 100644
index 00000000..a2b5e100
--- /dev/null
+++ b/db/migrations/1747945195_updated_timeline.go
@@ -0,0 +1,57 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_468398817")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewQuery": "SELECT\n id,\n trail_id,\n iri,\n date,\n name,\n description,\n gpx,\n author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n created,\n type\nFROM\n (\n SELECT\n summit_logs.id,\n summit_logs.trail as trail_id,\n trails.iri,\n summit_logs.date,\n trails.name,\n text as description,\n summit_logs.gpx,\n activitypub_actors.iri as author,\n summit_logs.photos,\n summit_logs.distance,\n summit_logs.duration,\n summit_logs.elevation_gain,\n summit_logs.elevation_loss,\n summit_logs.created,\n \"summit_log\" as type\n FROM\n summit_logs\n JOIN trails ON summit_logs.trail = trails.id\n JOIN activitypub_actors ON activitypub_actors.id = summit_logs.author\n UNION\n SELECT\n trails.id,\n trails.id as trail_id,\n trails.iri,\n date,\n trails.name,\n description,\n gpx,\n activitypub_actors.iri as author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n trails.created,\n \"trail\" as type\n FROM\n trails\n JOIN activitypub_actors ON activitypub_actors.id = trails.author\n )\nORDER BY\n created DESC;\n"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(2, []byte(`{
+ "hidden": false,
+ "id": "json2434853685",
+ "maxSize": 1,
+ "name": "iri",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_468398817")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewQuery": "SELECT\n id,\n trail_id,\n date,\n name,\n description,\n gpx,\n author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n created,\n type\nFROM\n (\n SELECT\n summit_logs.id,\n summit_logs.trail as trail_id,\n summit_logs.date,\n trails.name,\n text as description,\n summit_logs.gpx,\n activitypub_actors.iri as author,\n summit_logs.photos,\n summit_logs.distance,\n summit_logs.duration,\n summit_logs.elevation_gain,\n summit_logs.elevation_loss,\n summit_logs.created,\n \"summit_log\" as type\n FROM\n summit_logs\n JOIN trails ON summit_logs.trail = trails.id\n JOIN activitypub_actors ON activitypub_actors.id = summit_logs.author\n UNION\n SELECT\n trails.id,\n trails.id as trail_id,\n date,\n trails.name,\n description,\n gpx,\n activitypub_actors.iri as author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n trails.created,\n \"trail\" as type\n FROM\n trails\n JOIN activitypub_actors ON activitypub_actors.id = trails.author\n )\nORDER BY\n created DESC;\n"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("json2434853685")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747946749_updated_trails.go b/db/migrations/1747946749_updated_trails.go
new file mode 100644
index 00000000..b8a68d29
--- /dev/null
+++ b/db/migrations/1747946749_updated_trails.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": [
+ "CREATE INDEX ` + "`" + `idx_6tD5RqfVk2` + "`" + ` ON ` + "`" + `trails` + "`" + ` (` + "`" + `iri` + "`" + `)"
+ ]
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": []
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747946778_updated_lists.go b/db/migrations/1747946778_updated_lists.go
new file mode 100644
index 00000000..a7ccae66
--- /dev/null
+++ b/db/migrations/1747946778_updated_lists.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": [
+ "CREATE INDEX ` + "`" + `idx_hLtEU5XGWL` + "`" + ` ON ` + "`" + `lists` + "`" + ` (` + "`" + `iri` + "`" + `)"
+ ]
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": []
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747952550_updated_timeline.go b/db/migrations/1747952550_updated_timeline.go
new file mode 100644
index 00000000..531f6ebd
--- /dev/null
+++ b/db/migrations/1747952550_updated_timeline.go
@@ -0,0 +1,108 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_468398817")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewQuery": "SELECT\n id,\n trail_id,\n trail_author_username,\n trail_author_domain,\n trail_iri,\n date,\n name,\n description,\n gpx,\n author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n created,\n type\nFROM\n (\n SELECT\n summit_logs.id,\n summit_logs.trail as trail_id,\n tapa.username as trail_author_username,\n tapa.domain as trail_author_domain,\n trails.iri as trail_iri,\n summit_logs.date,\n trails.name,\n text as description,\n summit_logs.gpx,\n sapa.iri as author,\n summit_logs.photos,\n summit_logs.distance,\n summit_logs.duration,\n summit_logs.elevation_gain,\n summit_logs.elevation_loss,\n summit_logs.created,\n \"summit_log\" as type\n FROM\n summit_logs\n JOIN trails ON summit_logs.trail = trails.id\n JOIN activitypub_actors sapa ON sapa.id = summit_logs.author\n JOIN activitypub_actors tapa ON tapa.id = trails.author\n UNION\n SELECT\n trails.id,\n trails.id as trail_id,\n activitypub_actors.username as trail_author_username,\n activitypub_actors.domain as trail_author_domain,\n trails.iri as trail_iri,\n date,\n trails.name,\n description,\n gpx,\n activitypub_actors.iri as author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n trails.created,\n \"trail\" as type\n FROM\n trails\n JOIN activitypub_actors ON activitypub_actors.id = trails.author\n )\nORDER BY\n created DESC;\n"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("json2434853685")
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(2, []byte(`{
+ "hidden": false,
+ "id": "json3184124860",
+ "maxSize": 1,
+ "name": "trail_author_username",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ }`)); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(3, []byte(`{
+ "hidden": false,
+ "id": "json2887874732",
+ "maxSize": 1,
+ "name": "trail_author_domain",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ }`)); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(4, []byte(`{
+ "hidden": false,
+ "id": "json113557190",
+ "maxSize": 1,
+ "name": "trail_iri",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_468398817")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewQuery": "SELECT\n id,\n trail_id,\n iri,\n date,\n name,\n description,\n gpx,\n author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n created,\n type\nFROM\n (\n SELECT\n summit_logs.id,\n summit_logs.trail as trail_id,\n trails.iri,\n summit_logs.date,\n trails.name,\n text as description,\n summit_logs.gpx,\n activitypub_actors.iri as author,\n summit_logs.photos,\n summit_logs.distance,\n summit_logs.duration,\n summit_logs.elevation_gain,\n summit_logs.elevation_loss,\n summit_logs.created,\n \"summit_log\" as type\n FROM\n summit_logs\n JOIN trails ON summit_logs.trail = trails.id\n JOIN activitypub_actors ON activitypub_actors.id = summit_logs.author\n UNION\n SELECT\n trails.id,\n trails.id as trail_id,\n trails.iri,\n date,\n trails.name,\n description,\n gpx,\n activitypub_actors.iri as author,\n photos,\n distance,\n duration,\n elevation_gain,\n elevation_loss,\n trails.created,\n \"trail\" as type\n FROM\n trails\n JOIN activitypub_actors ON activitypub_actors.id = trails.author\n )\nORDER BY\n created DESC;\n"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(2, []byte(`{
+ "hidden": false,
+ "id": "json2434853685",
+ "maxSize": 1,
+ "name": "iri",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "json"
+ }`)); err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("json3184124860")
+
+ // remove field
+ collection.Fields.RemoveById("json2887874732")
+
+ // remove field
+ collection.Fields.RemoveById("json113557190")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747995473_updated_notifications.go b/db/migrations/1747995473_updated_notifications.go
new file mode 100644
index 00000000..853fa347
--- /dev/null
+++ b/db/migrations/1747995473_updated_notifications.go
@@ -0,0 +1,104 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("tmghd4vo")
+
+ // remove field
+ collection.Fields.RemoveById("exqo1whj")
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(4, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation1745156937",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "recipient",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(5, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation3182418120",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(4, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "tmghd4vo",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "recipient",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(5, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "exqo1whj",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "author",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("relation1745156937")
+
+ // remove field
+ collection.Fields.RemoveById("relation3182418120")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747996502_updated_notifications.go b/db/migrations/1747996502_updated_notifications.go
new file mode 100644
index 00000000..75ae4bdf
--- /dev/null
+++ b/db/migrations/1747996502_updated_notifications.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "@request.auth.id = recipient.user",
+ "updateRule": "@request.auth.id = recipient.user && (@request.body.type = null||@request.body.type = type) && (@request.body.metadata = null||@request.body.metadata = metadata) && (@request.body.recipient = null||@request.body.recipient = recipient) && (@request.body.author = null||@request.body.author = author) && @request.body.seen = true",
+ "viewRule": "@request.auth.id = recipient.user"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "@request.auth.id = recipient",
+ "updateRule": "@request.auth.id = recipient && (@request.body.type = null||@request.body.type = type) && (@request.body.metadata = null||@request.body.metadata = metadata) && (@request.body.recipient = null||@request.body.recipient = recipient) && (@request.body.author = null||@request.body.author = author) && @request.body.seen = true",
+ "viewRule": "@request.auth.id = recipient"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1747999298_updated_notifications.go b/db/migrations/1747999298_updated_notifications.go
new file mode 100644
index 00000000..24d6860e
--- /dev/null
+++ b/db/migrations/1747999298_updated_notifications.go
@@ -0,0 +1,67 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "hidden": false,
+ "id": "b57prsbu",
+ "maxSelect": 1,
+ "name": "type",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "select",
+ "values": [
+ "new_follower",
+ "trail_comment",
+ "trail_share",
+ "list_share",
+ "summit_log_create"
+ ]
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "hidden": false,
+ "id": "b57prsbu",
+ "maxSelect": 1,
+ "name": "type",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "select",
+ "values": [
+ "trail_create",
+ "list_create",
+ "new_follower",
+ "trail_comment",
+ "trail_share",
+ "list_share"
+ ]
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1748002661_updated_follows.go b/db/migrations/1748002661_updated_follows.go
new file mode 100644
index 00000000..e3501b71
--- /dev/null
+++ b/db/migrations/1748002661_updated_follows.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("8obn1ukumze565i")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": [
+ "CREATE UNIQUE INDEX `+"`"+`idx_oM5KTHL3Lf`+"`"+` ON `+"`"+`follows`+"`"+` (\n `+"`"+`follower`+"`"+`,\n `+"`"+`followee`+"`"+`\n)"
+ ]
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("8obn1ukumze565i")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": []
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1748003743_updated_summit_logs.go b/db/migrations/1748003743_updated_summit_logs.go
new file mode 100644
index 00000000..f4bfa6c6
--- /dev/null
+++ b/db/migrations/1748003743_updated_summit_logs.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "(@request.auth.id != \"\" && (author.user = @request.auth.id || trail.author.user = @request.auth.id)) || trail.public = true || (@collection.trail_share.trail ?= trail && @collection.trail_share.trail ?= @request.auth.id)",
+ "viewRule": "(@request.auth.id != \"\" && (author.user = @request.auth.id || trail.author.user = @request.auth.id)) || trail.public = true || (@collection.trail_share.trail ?= trail && @collection.trail_share.trail ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "(@request.auth.id != \"\" && (author.user = @request.auth.id || trail.author.user = @request.auth.id)) || trail.public = true || \ntrail.trail_share_via_trail.user = @request.auth.id",
+ "viewRule": "(@request.auth.id != \"\" && (author.user = @request.auth.id || trail.author.user = @request.auth.id)) || trail.public = true || \ntrail.trail_share_via_trail.user = @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1748084027_updated_follows.go b/db/migrations/1748084027_updated_follows.go
new file mode 100644
index 00000000..39130439
--- /dev/null
+++ b/db/migrations/1748084027_updated_follows.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("8obn1ukumze565i")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "",
+ "viewRule": ""
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("8obn1ukumze565i")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "@request.auth.id = follower.user.id || @request.auth.id = followee.user.id",
+ "viewRule": "@request.auth.id = follower.user.id || @request.auth.id = followee.user.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749553104_updated_trail_share.go b/db/migrations/1749553104_updated_trail_share.go
new file mode 100644
index 00000000..c039a6a4
--- /dev/null
+++ b/db/migrations/1749553104_updated_trail_share.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("1mns8mlal6uf9ku")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(2, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation2375276105",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "actor",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("1mns8mlal6uf9ku")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("relation2375276105")
+
+ return app.UnsafeWithoutHooks().Save(collection)
+ })
+}
diff --git a/db/migrations/1749553105_migrate_trail_share.go b/db/migrations/1749553105_migrate_trail_share.go
new file mode 100644
index 00000000..ab92ce8c
--- /dev/null
+++ b/db/migrations/1749553105_migrate_trail_share.go
@@ -0,0 +1,31 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ shares, err := app.FindAllRecords("trail_share")
+ if err != nil {
+ return err
+ }
+
+ for _, s := range shares {
+ actor, err := app.FindFirstRecordByData("activitypub_actors", "user", s.GetString("user"))
+ if err != nil {
+ continue
+ }
+ s.Set("actor", actor.Id)
+ err = app.Save(s)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+ }, func(app core.App) error {
+ return nil
+ })
+}
diff --git a/db/migrations/1749554811_updated_trails_filter.go b/db/migrations/1749554811_updated_trails_filter.go
new file mode 100644
index 00000000..750b2fba
--- /dev/null
+++ b/db/migrations/1749554811_updated_trails_filter.go
@@ -0,0 +1,80 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("4wbv9tz5zjdrjh1")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewQuery": "SELECT activitypub_actors.id, activitypub_actors.user, COALESCE(printf(\"%.2f\", MAX(trails.distance)), 0) AS max_distance,\n COALESCE(printf(\"%.2f\", MAX(trails.elevation_gain)), 0) AS max_elevation_gain, \n COALESCE(printf(\"%.2f\", MAX(trails.elevation_loss)), 0) AS max_elevation_loss, \n COALESCE(printf(\"%.2f\", MAX(trails.duration)), 0) AS max_duration, \n COALESCE(printf(\"%.2f\", MIN(trails.distance)), 0) AS min_distance, \n COALESCE(printf(\"%.2f\", MIN(trails.elevation_gain)), 0) AS min_elevation_gain, \n COALESCE(printf(\"%.2f\", MIN(trails.elevation_loss)), 0) AS min_elevation_loss, \n COALESCE(printf(\"%.2f\", MIN(trails.duration)), 0) AS min_duration \nFROM activitypub_actors \n LEFT JOIN trails ON \n activitypub_actors.id = trails.author OR \n trails.public = 1 OR \n EXISTS (\n SELECT 1 \n FROM trail_share \n WHERE trail_share.trail = trails.id \n AND trail_share.actor = activitypub_actors.id\n ) GROUP BY activitypub_actors.id;"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("_clone_U0cX")
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "_clone_rnMQ",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("4wbv9tz5zjdrjh1")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewQuery": "SELECT activitypub_actors.id, activitypub_actors.user, COALESCE(printf(\"%.2f\", MAX(trails.distance)), 0) AS max_distance,\n COALESCE(printf(\"%.2f\", MAX(trails.elevation_gain)), 0) AS max_elevation_gain, \n COALESCE(printf(\"%.2f\", MAX(trails.elevation_loss)), 0) AS max_elevation_loss, \n COALESCE(printf(\"%.2f\", MAX(trails.duration)), 0) AS max_duration, \n COALESCE(printf(\"%.2f\", MIN(trails.distance)), 0) AS min_distance, \n COALESCE(printf(\"%.2f\", MIN(trails.elevation_gain)), 0) AS min_elevation_gain, \n COALESCE(printf(\"%.2f\", MIN(trails.elevation_loss)), 0) AS min_elevation_loss, \n COALESCE(printf(\"%.2f\", MIN(trails.duration)), 0) AS min_duration \nFROM activitypub_actors \n LEFT JOIN trails ON \n activitypub_actors.id = trails.author OR \n trails.public = 1 OR \n EXISTS (\n SELECT 1 \n FROM trail_share \n WHERE trail_share.trail = trails.id \n AND trail_share.user = activitypub_actors.user\n ) GROUP BY activitypub_actors.id;"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "_clone_U0cX",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("_clone_rnMQ")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749554826_updated_trails_bounding_box.go b/db/migrations/1749554826_updated_trails_bounding_box.go
new file mode 100644
index 00000000..896282b6
--- /dev/null
+++ b/db/migrations/1749554826_updated_trails_bounding_box.go
@@ -0,0 +1,80 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("urytyc428mwlbqq")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewQuery": "SELECT \n activitypub_actors.id, activitypub_actors.user, \n COALESCE(MAX(trails.lat), 0) AS max_lat, \n COALESCE(MAX(trails.lon), 0) AS max_lon, \n COALESCE(MIN(trails.lat), 0) AS min_lat, \n COALESCE(MIN(trails.lon), 0) AS min_lon \nFROM activitypub_actors \nLEFT JOIN trails \n ON activitypub_actors.id = trails.author \n OR trails.public = TRUE \n OR EXISTS (\n SELECT 1 \n FROM trail_share \n WHERE trail_share.trail = trails.id \n AND trail_share.actor = activitypub_actors.id\n ) \nGROUP BY activitypub_actors.id;"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("_clone_2GUq")
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "_clone_4wMO",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("urytyc428mwlbqq")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewQuery": "SELECT \n activitypub_actors.id, activitypub_actors.user, \n COALESCE(MAX(trails.lat), 0) AS max_lat, \n COALESCE(MAX(trails.lon), 0) AS max_lon, \n COALESCE(MIN(trails.lat), 0) AS min_lat, \n COALESCE(MIN(trails.lon), 0) AS min_lon \nFROM activitypub_actors \nLEFT JOIN trails \n ON activitypub_actors.id = trails.author \n OR trails.public = TRUE \n OR EXISTS (\n SELECT 1 \n FROM trail_share \n WHERE trail_share.trail = trails.id \n AND trail_share.user = activitypub_actors.id\n ) \nGROUP BY activitypub_actors.id;"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "_clone_2GUq",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("_clone_4wMO")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749554910_updated_waypoints.go b/db/migrations/1749554910_updated_waypoints.go
new file mode 100644
index 00000000..e95b42c0
--- /dev/null
+++ b/db/migrations/1749554910_updated_waypoints.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("goeo2ubp103rzp9")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "author = @request.auth.id || trails_via_waypoints.author.user ?= @request.auth.id || trails_via_waypoints.public ?= true || \n(@collection.trail_share.trail.id ?= trails_via_waypoints.id && @collection.trail_share.actor.user ?= @request.auth.id)",
+ "viewRule": "author = @request.auth.id || trails_via_waypoints.author.user ?= @request.auth.id || trails_via_waypoints.public ?= true || \n(@collection.trail_share.trail.id ?= trails_via_waypoints.id && @collection.trail_share.actor.user ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("goeo2ubp103rzp9")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "author = @request.auth.id || trails_via_waypoints.author.user ?= @request.auth.id || trails_via_waypoints.public ?= true || \n(@collection.trail_share.trail.id ?= trails_via_waypoints.id && @collection.trail_share.user ?= @request.auth.id)",
+ "viewRule": "author = @request.auth.id || trails_via_waypoints.author.user ?= @request.auth.id || trails_via_waypoints.public ?= true || \n(@collection.trail_share.trail.id ?= trails_via_waypoints.id && @collection.trail_share.user ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749554952_updated_trails.go b/db/migrations/1749554952_updated_trails.go
new file mode 100644
index 00000000..3277328c
--- /dev/null
+++ b/db/migrations/1749554952_updated_trails.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "author.user = @request.auth.id || public = true || (@request.auth.id != \"\" && trail_share_via_trail.actor.user ?= @request.auth.id)",
+ "updateRule": "author.user = @request.auth.id || (@request.auth.id != \"\" && trail_share_via_trail.trail = id && trail_share_via_trail.actor.user ?= @request.auth.id && trail_share_via_trail.permission = \"edit\") || (@request.auth.id != \"\" && author.isLocal = false)",
+ "viewRule": "author.user = @request.auth.id || public = true || (@request.auth.id != \"\" && trail_share_via_trail.actor.user ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "author.user = @request.auth.id || public = true || (@request.auth.id != \"\" && trail_share_via_trail.user ?= @request.auth.id)",
+ "updateRule": "author.user = @request.auth.id || (@request.auth.id != \"\" && trail_share_via_trail.trail = id && trail_share_via_trail.user ?= @request.auth.id && trail_share_via_trail.permission = \"edit\") || (@request.auth.id != \"\" && author.isLocal = false)",
+ "viewRule": "author.user = @request.auth.id || public = true || (@request.auth.id != \"\" && trail_share_via_trail.user ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749555128_updated_summit_logs.go b/db/migrations/1749555128_updated_summit_logs.go
new file mode 100644
index 00000000..524d7b91
--- /dev/null
+++ b/db/migrations/1749555128_updated_summit_logs.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "(@request.auth.id != \"\" && (author.user = @request.auth.id || trail.author.user = @request.auth.id)) || trail.public = true || (@collection.trail_share.trail ?= trail && @collection.trail_share.actor.user ?= @request.auth.id)",
+ "viewRule": "(@request.auth.id != \"\" && (author.user = @request.auth.id || trail.author.user = @request.auth.id)) || trail.public = true || (@collection.trail_share.trail ?= trail && @collection.trail_share.actor.user ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "(@request.auth.id != \"\" && (author.user = @request.auth.id || trail.author.user = @request.auth.id)) || trail.public = true || (@collection.trail_share.trail ?= trail && @collection.trail_share.trail ?= @request.auth.id)",
+ "viewRule": "(@request.auth.id != \"\" && (author.user = @request.auth.id || trail.author.user = @request.auth.id)) || trail.public = true || (@collection.trail_share.trail ?= trail && @collection.trail_share.trail ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749555173_updated_comments.go b/db/migrations/1749555173_updated_comments.go
new file mode 100644
index 00000000..4fef929e
--- /dev/null
+++ b/db/migrations/1749555173_updated_comments.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("lf06qip3f4d11yk")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "@request.auth.id != \"\" && (trail.author.user = @request.auth.id || trail.public = true || trail.trail_share_via_trail.actor.user ?= @request.auth.id)",
+ "listRule": "((@request.auth.id != \"\" && trail.author.user = @request.auth.id) || trail.public = true) || author = @request.auth.id || trail.trail_share_via_trail.actor.user ?= @request.auth.id",
+ "viewRule": "((@request.auth.id != \"\" && trail.author.user = @request.auth.id) || trail.public = true) || author = @request.auth.id || trail.trail_share_via_trail.actor.user ?= @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("lf06qip3f4d11yk")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "@request.auth.id != \"\" && (trail.author.user = @request.auth.id || trail.public = true || trail.trail_share_via_trail.user ?= @request.auth.id)",
+ "listRule": "((@request.auth.id != \"\" && trail.author.user = @request.auth.id) || trail.public = true) || author = @request.auth.id || trail.trail_share_via_trail.user ?= @request.auth.id",
+ "viewRule": "((@request.auth.id != \"\" && trail.author.user = @request.auth.id) || trail.public = true) || author = @request.auth.id || trail.trail_share_via_trail.user ?= @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749555613_updated_trail_share.go b/db/migrations/1749555613_updated_trail_share.go
new file mode 100644
index 00000000..c018895c
--- /dev/null
+++ b/db/migrations/1749555613_updated_trail_share.go
@@ -0,0 +1,62 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("1mns8mlal6uf9ku")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "trail.author.user = @request.auth.id || actor.user = @request.auth.id",
+ "viewRule": "trail.author.user = @request.auth.id || actor.user = @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("yyzimwee")
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("1mns8mlal6uf9ku")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "trail.author.user = @request.auth.id || user = @request.auth.id",
+ "viewRule": "trail.author.user = @request.auth.id || user = @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(3, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "yyzimwee",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749555614_migrate_ms_token.go b/db/migrations/1749555614_migrate_ms_token.go
new file mode 100644
index 00000000..c1302804
--- /dev/null
+++ b/db/migrations/1749555614_migrate_ms_token.go
@@ -0,0 +1,55 @@
+package migrations
+
+import (
+ "os"
+ "pocketbase/util"
+
+ "github.com/meilisearch/meilisearch-go"
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ client := meilisearch.New(os.Getenv("MEILI_URL"), meilisearch.WithAPIKey(os.Getenv("MEILI_MASTER_KEY")))
+
+ m.Register(func(app core.App) error {
+
+ users, err := app.FindAllRecords("users")
+ if err != nil {
+ return err
+ }
+ for _, u := range users {
+ userId := u.Id
+
+ actor, err := app.FindFirstRecordByData("activitypub_actors", "user", userId)
+ if err != nil {
+ return err
+ }
+
+ searchRules := map[string]interface{}{
+ "lists": map[string]string{
+ "filter": "public = true OR author = " + actor.Id + " OR shares = " + actor.Id,
+ },
+ "trails": map[string]string{
+ "filter": "public = true OR author = " + actor.Id + " OR shares = " + actor.Id,
+ },
+ }
+
+ token, err := util.GenerateMeilisearchToken(searchRules, client)
+ if err != nil {
+ return err
+ }
+ u.Set("token", token)
+ if err := app.Save(u); err != nil {
+ return err
+ }
+
+ }
+
+ return nil
+ }, func(app core.App) error {
+ // add down queries...
+
+ return nil
+ })
+}
diff --git a/db/migrations/1749566277_updated_list_share.go b/db/migrations/1749566277_updated_list_share.go
new file mode 100644
index 00000000..cd8eda29
--- /dev/null
+++ b/db/migrations/1749566277_updated_list_share.go
@@ -0,0 +1,62 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("1kot7t9na3hi0gl")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "list.author = @request.auth.id || actor.user = @request.auth.id",
+ "viewRule": "list.author = @request.auth.id || actor.user = @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(3, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation1148540665",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "actor",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("1kot7t9na3hi0gl")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "list.author = @request.auth.id || user = @request.auth.id",
+ "viewRule": "list.author = @request.auth.id || user = @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("relation1148540665")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749566278_migrate_list_share.go b/db/migrations/1749566278_migrate_list_share.go
new file mode 100644
index 00000000..bebf0a55
--- /dev/null
+++ b/db/migrations/1749566278_migrate_list_share.go
@@ -0,0 +1,31 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ shares, err := app.FindAllRecords("list_share")
+ if err != nil {
+ return err
+ }
+
+ for _, s := range shares {
+ actor, err := app.FindFirstRecordByData("activitypub_actors", "user", s.GetString("user"))
+ if err != nil {
+ continue
+ }
+ s.Set("actor", actor.Id)
+ err = app.Save(s)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+ }, func(app core.App) error {
+ return nil
+ })
+}
diff --git a/db/migrations/1749566445_updated_lists.go b/db/migrations/1749566445_updated_lists.go
new file mode 100644
index 00000000..40240335
--- /dev/null
+++ b/db/migrations/1749566445_updated_lists.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "author.user = @request.auth.id || public = true || (@request.auth.id != \"\" && list_share_via_list.actor.user ?= @request.auth.id)",
+ "updateRule": "author.user = @request.auth.id || (@request.auth.id != \"\" && list_share_via_list.list = id && list_share_via_list.actor.user ?= @request.auth.id && list_share_via_list.permission = \"edit\") || (@request.auth.id != \"\" && author.isLocal = false)",
+ "viewRule": "author.user = @request.auth.id || public = true || (@request.auth.id != \"\" && list_share_via_list.actor.user ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "author.user = @request.auth.id || public = true || (@request.auth.id != \"\" && list_share_via_list.user ?= @request.auth.id)",
+ "updateRule": "author.user = @request.auth.id || (@request.auth.id != \"\" && list_share_via_list.list = id && list_share_via_list.user ?= @request.auth.id && list_share_via_list.permission = \"edit\") || (@request.auth.id != \"\" && author.isLocal = false)",
+ "viewRule": "author.user = @request.auth.id || public = true || (@request.auth.id != \"\" && list_share_via_list.user ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749566456_updated_list_share.go b/db/migrations/1749566456_updated_list_share.go
new file mode 100644
index 00000000..78054c9f
--- /dev/null
+++ b/db/migrations/1749566456_updated_list_share.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("1kot7t9na3hi0gl")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("mix12kkh")
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("1kot7t9na3hi0gl")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(2, []byte(`{
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "mix12kkh",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "user",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749566852_updated_list_share.go b/db/migrations/1749566852_updated_list_share.go
new file mode 100644
index 00000000..4b68a093
--- /dev/null
+++ b/db/migrations/1749566852_updated_list_share.go
@@ -0,0 +1,48 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("1kot7t9na3hi0gl")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "list.author.user = @request.auth.id",
+ "deleteRule": "list.author.user = @request.auth.id",
+ "listRule": "list.author.user = @request.auth.id || actor.user = @request.auth.id",
+ "updateRule": "list.author.user = @request.auth.id",
+ "viewRule": "list.author.user = @request.auth.id || actor.user = @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("1kot7t9na3hi0gl")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "list.author = @request.auth.id",
+ "deleteRule": "list.author = @request.auth.id",
+ "listRule": "list.author = @request.auth.id || actor.user = @request.auth.id",
+ "updateRule": "list.author = @request.auth.id",
+ "viewRule": "list.author = @request.auth.id || actor.user = @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749650389_updated_summit_logs.go b/db/migrations/1749650389_updated_summit_logs.go
new file mode 100644
index 00000000..eea37016
--- /dev/null
+++ b/db/migrations/1749650389_updated_summit_logs.go
@@ -0,0 +1,40 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "@request.auth.id != \"\" && (trail.author.user = @request.auth.id || trail.public = true || trail.trail_share_via_trail.actor.user ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "@request.auth.id != \"\" && (trail.author.user = @request.auth.id || trail.public = true)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749650422_updated_summit_logs.go b/db/migrations/1749650422_updated_summit_logs.go
new file mode 100644
index 00000000..5f0b3176
--- /dev/null
+++ b/db/migrations/1749650422_updated_summit_logs.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "(@request.auth.id != \"\" && (author.user = @request.auth.id || trail.author.user = @request.auth.id)) || trail.public = true || trail.trail_share_via_trail.actor.user ?= @request.auth.id",
+ "viewRule": "(@request.auth.id != \"\" && (author.user = @request.auth.id || trail.author.user = @request.auth.id)) || trail.public = true || trail.trail_share_via_trail.actor.user ?= @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "(@request.auth.id != \"\" && (author.user = @request.auth.id || trail.author.user = @request.auth.id)) || trail.public = true || (@collection.trail_share.trail ?= trail && @collection.trail_share.actor.user ?= @request.auth.id)",
+ "viewRule": "(@request.auth.id != \"\" && (author.user = @request.auth.id || trail.author.user = @request.auth.id)) || trail.public = true || (@collection.trail_share.trail ?= trail && @collection.trail_share.actor.user ?= @request.auth.id)"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749717023_created_trail_like.go b/db/migrations/1749717023_created_trail_like.go
new file mode 100644
index 00000000..5570a60a
--- /dev/null
+++ b/db/migrations/1749717023_created_trail_like.go
@@ -0,0 +1,103 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ jsonData := `{
+ "createRule": null,
+ "deleteRule": null,
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "e864strfxo14pm4",
+ "hidden": false,
+ "id": "relation2993194383",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "trail",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "pbc_1295301207",
+ "hidden": false,
+ "id": "relation1148540665",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "actor",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "id": "pbc_1995454416",
+ "indexes": [
+ "CREATE UNIQUE INDEX ` + "`" + `idx_ywIkmeaSFo` + "`" + ` ON ` + "`" + `trail_like` + "`" + ` (\n ` + "`" + `trail` + "`" + `,\n ` + "`" + `actor` + "`" + `\n)"
+ ],
+ "listRule": null,
+ "name": "trail_like",
+ "system": false,
+ "type": "base",
+ "updateRule": null,
+ "viewRule": null
+ }`
+
+ collection := &core.Collection{}
+ if err := json.Unmarshal([]byte(jsonData), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_1995454416")
+ if err != nil {
+ return err
+ }
+
+ return app.Delete(collection)
+ })
+}
diff --git a/db/migrations/1749717428_updated_trail_like.go b/db/migrations/1749717428_updated_trail_like.go
new file mode 100644
index 00000000..3bcc1445
--- /dev/null
+++ b/db/migrations/1749717428_updated_trail_like.go
@@ -0,0 +1,46 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_1995454416")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": "trail.author.user = @request.auth.id || trail.public = true || trail.trail_share_via_trail.actor.user ?= @request.auth.id || actor.user = @request.auth.id",
+ "deleteRule": "actor.user = @request.auth.id",
+ "listRule": "trail.author.user = @request.auth.id || trail.public = true || trail.trail_share_via_trail.actor.user ?= @request.auth.id || actor.user = @request.auth.id",
+ "viewRule": "trail.author.user = @request.auth.id || trail.public = true || trail.trail_share_via_trail.actor.user ?= @request.auth.id || actor.user = @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_1995454416")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "createRule": null,
+ "deleteRule": null,
+ "listRule": null,
+ "viewRule": null
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749831369_update_sortable_attributes.go b/db/migrations/1749831369_update_sortable_attributes.go
new file mode 100644
index 00000000..5c058496
--- /dev/null
+++ b/db/migrations/1749831369_update_sortable_attributes.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "os"
+
+ "github.com/meilisearch/meilisearch-go"
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ client := meilisearch.New(os.Getenv("MEILI_URL"), meilisearch.WithAPIKey(os.Getenv("MEILI_MASTER_KEY")))
+
+ m.Register(func(app core.App) error {
+
+ _, err := client.Index("trails").UpdateSortableAttributes(&[]string{
+ "created", "date", "difficulty", "distance", "elevation_gain", "elevation_loss", "name", "duration", "author", "like_count",
+ })
+ if err != nil {
+ return err
+ }
+
+ _, err = client.Index("trails").UpdateFilterableAttributes(&[]string{
+ "_geo", "author", "category", "completed", "date", "difficulty", "distance", "elevation_gain", "elevation_loss", "public", "shares", "tags", "likes",
+ })
+
+ return err
+ }, func(app core.App) error {
+ _, err := client.Index("trails").UpdateSortableAttributes(&[]string{
+ "created", "date", "difficulty", "distance", "elevation_gain", "elevation_loss", "name", "duration", "author",
+ })
+ if err != nil {
+ return err
+ }
+
+ _, err = client.Index("trails").UpdateFilterableAttributes(&[]string{
+ "_geo", "author", "category", "completed", "date", "difficulty", "distance", "elevation_gain", "elevation_loss", "public", "shares", "tags",
+ })
+
+ return err
+ })
+}
diff --git a/db/migrations/1749836174_updated_notifications.go b/db/migrations/1749836174_updated_notifications.go
new file mode 100644
index 00000000..cafee94c
--- /dev/null
+++ b/db/migrations/1749836174_updated_notifications.go
@@ -0,0 +1,67 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "hidden": false,
+ "id": "b57prsbu",
+ "maxSelect": 1,
+ "name": "type",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "select",
+ "values": [
+ "new_follower",
+ "trail_comment",
+ "trail_share",
+ "list_share",
+ "summit_log_create",
+ "trail_like"
+ ]
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "hidden": false,
+ "id": "b57prsbu",
+ "maxSelect": 1,
+ "name": "type",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "select",
+ "values": [
+ "new_follower",
+ "trail_comment",
+ "trail_share",
+ "list_share",
+ "summit_log_create"
+ ]
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749837201_updated_trails.go b/db/migrations/1749837201_updated_trails.go
new file mode 100644
index 00000000..c5ae163b
--- /dev/null
+++ b/db/migrations/1749837201_updated_trails.go
@@ -0,0 +1,43 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // add field
+ if err := collection.Fields.AddMarshaledJSONAt(23, []byte(`{
+ "hidden": false,
+ "id": "number851275141",
+ "max": null,
+ "min": 0,
+ "name": "like_count",
+ "onlyInt": true,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // remove field
+ collection.Fields.RemoveById("number851275141")
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749837751_updated_trail_like.go b/db/migrations/1749837751_updated_trail_like.go
new file mode 100644
index 00000000..48c9cf30
--- /dev/null
+++ b/db/migrations/1749837751_updated_trail_like.go
@@ -0,0 +1,40 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_1995454416")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewRule": "actor.user = @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_1995454416")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "viewRule": "trail.author.user = @request.auth.id || trail.public = true || trail.trail_share_via_trail.actor.user ?= @request.auth.id || actor.user = @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749894936_updated_trails.go b/db/migrations/1749894936_updated_trails.go
new file mode 100644
index 00000000..e722a12d
--- /dev/null
+++ b/db/migrations/1749894936_updated_trails.go
@@ -0,0 +1,82 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(11, []byte(`{
+ "hidden": false,
+ "id": "aqbpyawe",
+ "maxSelect": 99,
+ "maxSize": 20971520,
+ "mimeTypes": [
+ "image/jpeg",
+ "image/vnd.mozilla.apng",
+ "image/png",
+ "image/webp",
+ "image/svg+xml",
+ "image/heic",
+ "video/mp4",
+ "video/webm",
+ "video/ogg"
+ ],
+ "name": "photos",
+ "presentable": false,
+ "protected": false,
+ "required": false,
+ "system": false,
+ "thumbs": [
+ "600x0"
+ ],
+ "type": "file"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(11, []byte(`{
+ "hidden": false,
+ "id": "aqbpyawe",
+ "maxSelect": 99,
+ "maxSize": 20971520,
+ "mimeTypes": [
+ "image/jpeg",
+ "image/vnd.mozilla.apng",
+ "image/png",
+ "image/webp",
+ "image/svg+xml",
+ "image/heic",
+ "video/mp4",
+ "video/webm",
+ "video/ogg"
+ ],
+ "name": "photos",
+ "presentable": false,
+ "protected": false,
+ "required": false,
+ "system": false,
+ "thumbs": [],
+ "type": "file"
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1749902683_updated_activitypub_actors.go b/db/migrations/1749902683_updated_activitypub_actors.go
new file mode 100644
index 00000000..45d30584
--- /dev/null
+++ b/db/migrations/1749902683_updated_activitypub_actors.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_1295301207")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "user.settings_via_user.privacy.account != 'private' || user = @request.auth.id",
+ "viewRule": "user.settings_via_user.privacy.account != 'private' || user = @request.auth.id"
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("pbc_1295301207")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "listRule": "",
+ "viewRule": ""
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1750259236_updated_comments.go b/db/migrations/1750259236_updated_comments.go
new file mode 100644
index 00000000..3ee9344d
--- /dev/null
+++ b/db/migrations/1750259236_updated_comments.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("lf06qip3f4d11yk")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": [
+ "CREATE UNIQUE INDEX ` + "`" + `idx_4T3m08OsP1` + "`" + ` ON ` + "`" + `comments` + "`" + ` (` + "`" + `iri` + "`" + `) WHERE iri IS NOT NULL AND iri != \"\";"
+ ]
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("lf06qip3f4d11yk")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": []
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1750259275_updated_lists.go b/db/migrations/1750259275_updated_lists.go
new file mode 100644
index 00000000..fc8c91e7
--- /dev/null
+++ b/db/migrations/1750259275_updated_lists.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": [
+ "CREATE UNIQUE INDEX ` + "`" + `idx_hLtEU5XGWL` + "`" + ` ON ` + "`" + `lists` + "`" + ` (` + "`" + `iri` + "`" + `) WHERE iri IS NOT NULL AND iri != \"\";"
+ ]
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("r6gu2ajyidy1x69")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": [
+ "CREATE INDEX ` + "`" + `idx_hLtEU5XGWL` + "`" + ` ON ` + "`" + `lists` + "`" + ` (` + "`" + `iri` + "`" + `)"
+ ]
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1750259298_updated_summit_logs.go b/db/migrations/1750259298_updated_summit_logs.go
new file mode 100644
index 00000000..fad24c45
--- /dev/null
+++ b/db/migrations/1750259298_updated_summit_logs.go
@@ -0,0 +1,42 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": [
+ "CREATE UNIQUE INDEX ` + "`" + `idx_iSbmEqYXbV` + "`" + ` ON ` + "`" + `summit_logs` + "`" + ` (` + "`" + `iri` + "`" + `) WHERE iri IS NOT NULL AND iri != \"\";"
+ ]
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("dd2l9a4vxpy2ni8")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": []
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1750259324_updated_trails.go b/db/migrations/1750259324_updated_trails.go
new file mode 100644
index 00000000..82d59695
--- /dev/null
+++ b/db/migrations/1750259324_updated_trails.go
@@ -0,0 +1,44 @@
+package migrations
+
+import (
+ "encoding/json"
+
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": [
+ "CREATE UNIQUE INDEX ` + "`" + `idx_6tD5RqfVk2` + "`" + ` ON ` + "`" + `trails` + "`" + ` (` + "`" + `iri` + "`" + `) WHERE iri IS NOT NULL AND iri != \"\";"
+ ]
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4")
+ if err != nil {
+ return err
+ }
+
+ // update collection data
+ if err := json.Unmarshal([]byte(`{
+ "indexes": [
+ "CREATE INDEX ` + "`" + `idx_6tD5RqfVk2` + "`" + ` ON ` + "`" + `trails` + "`" + ` (` + "`" + `iri` + "`" + `)"
+ ]
+ }`), &collection); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1750264310_updated_notifications.go b/db/migrations/1750264310_updated_notifications.go
new file mode 100644
index 00000000..247c5389
--- /dev/null
+++ b/db/migrations/1750264310_updated_notifications.go
@@ -0,0 +1,70 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "hidden": false,
+ "id": "b57prsbu",
+ "maxSelect": 1,
+ "name": "type",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "select",
+ "values": [
+ "new_follower",
+ "trail_comment",
+ "trail_share",
+ "list_share",
+ "summit_log_create",
+ "trail_like",
+ "comment_mention",
+ "trail_mention"
+ ]
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "hidden": false,
+ "id": "b57prsbu",
+ "maxSelect": 1,
+ "name": "type",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "select",
+ "values": [
+ "new_follower",
+ "trail_comment",
+ "trail_share",
+ "list_share",
+ "summit_log_create",
+ "trail_like"
+ ]
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/migrations/1750267445_updated_notifications.go b/db/migrations/1750267445_updated_notifications.go
new file mode 100644
index 00000000..ea2d6f74
--- /dev/null
+++ b/db/migrations/1750267445_updated_notifications.go
@@ -0,0 +1,73 @@
+package migrations
+
+import (
+ "github.com/pocketbase/pocketbase/core"
+ m "github.com/pocketbase/pocketbase/migrations"
+)
+
+func init() {
+ m.Register(func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "hidden": false,
+ "id": "b57prsbu",
+ "maxSelect": 1,
+ "name": "type",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "select",
+ "values": [
+ "new_follower",
+ "trail_comment",
+ "trail_share",
+ "list_share",
+ "summit_log_create",
+ "trail_like",
+ "comment_mention",
+ "trail_mention",
+ "summit_log_mention"
+ ]
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ }, func(app core.App) error {
+ collection, err := app.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ // update field
+ if err := collection.Fields.AddMarshaledJSONAt(1, []byte(`{
+ "hidden": false,
+ "id": "b57prsbu",
+ "maxSelect": 1,
+ "name": "type",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "select",
+ "values": [
+ "new_follower",
+ "trail_comment",
+ "trail_share",
+ "list_share",
+ "summit_log_create",
+ "trail_like",
+ "comment_mention",
+ "trail_mention"
+ ]
+ }`)); err != nil {
+ return err
+ }
+
+ return app.Save(collection)
+ })
+}
diff --git a/db/util/activitypub.go b/db/util/activitypub.go
new file mode 100644
index 00000000..ba424e2a
--- /dev/null
+++ b/db/util/activitypub.go
@@ -0,0 +1,595 @@
+package util
+
+import (
+ "context"
+ "crypto/rand"
+ "crypto/rsa"
+ "crypto/x509"
+ "database/sql"
+ "encoding/json"
+ "encoding/pem"
+ "fmt"
+ "io"
+ "net/http"
+ "net/url"
+ "os"
+ "strconv"
+ "strings"
+ "time"
+
+ pub "github.com/go-ap/activitypub"
+ "github.com/pocketbase/pocketbase/core"
+ "github.com/pocketbase/pocketbase/tools/filesystem"
+ "github.com/pocketbase/pocketbase/tools/security"
+)
+
+func ActorFromUser(app core.App, u *core.Record) (*core.Record, error) {
+ encryptionKey := os.Getenv("POCKETBASE_ENCRYPTION_KEY")
+ if len(encryptionKey) == 0 {
+ return nil, fmt.Errorf("POCKETBASE_ENCRYPTION_KEY not set")
+ }
+
+ collection, err := app.FindCollectionByNameOrId("activitypub_actors")
+ if err != nil {
+ return nil, err
+ }
+ priv, pub, err := generateKeyPair()
+ if err != nil {
+ return nil, err
+ }
+ privBytes := x509.MarshalPKCS1PrivateKey(priv)
+
+ privEncrypted, err := security.Encrypt(privBytes, encryptionKey)
+ if err != nil {
+ return nil, err
+ }
+
+ pubBytes, err := x509.MarshalPKIXPublicKey(pub)
+ if err != nil {
+ return nil, err
+ }
+ pubPem := pem.EncodeToMemory(&pem.Block{
+ Type: "PUBLIC KEY",
+ Bytes: pubBytes,
+ })
+
+ settings, err := app.FindFirstRecordByData("settings", "user", u.Id)
+ if err != nil {
+ return nil, err
+ }
+
+ record := core.NewRecord(collection)
+
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return nil, fmt.Errorf("ORIGIN environment variable not set")
+ }
+ id := fmt.Sprintf("%s/api/v1/activitypub/user/%s", origin, strings.ToLower(u.GetString("username")))
+
+ url, err := url.Parse(origin)
+ if err != nil {
+ return nil, err
+ }
+ domain := strings.TrimPrefix(url.Hostname(), "www.")
+
+ record.Set("username", strings.ToLower(u.GetString("username")))
+ record.Set("preferred_username", u.GetString("username"))
+ record.Set("domain", domain)
+ record.Set("summary", settings.GetString("bio"))
+ record.Set("published", u.GetDateTime("created"))
+ record.Set("iri", id)
+ if u.GetString("avatar") != "" {
+ record.Set("icon", fmt.Sprintf("%s/api/v1/files/users/%s/%s", origin, u.Id, u.GetString("avatar")))
+ }
+ record.Set("inbox", id+"/inbox")
+ record.Set("outbox", id+"/outbox")
+ record.Set("followers", id+"/followers")
+ record.Set("following", id+"/following")
+ record.Set("isLocal", true)
+ record.Set("public_key", string(pubPem))
+ record.Set("private_key", privEncrypted)
+ record.Set("user", u.Id)
+ record.Set("last_fetched", time.Now())
+
+ err = app.Save(record)
+ if err != nil {
+ return nil, err
+ }
+
+ return record, nil
+}
+
+func generateKeyPair() (*rsa.PrivateKey, *rsa.PublicKey, error) {
+ priv, err := rsa.GenerateKey(rand.Reader, 2048)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ pub := &priv.PublicKey
+ return priv, pub, nil
+}
+
+func SyncOutbox(app core.App, actor *core.Record) error {
+ return fetchOutboxPage(app, actor, actor.GetString("outbox")+"?page=1")
+}
+
+func fetchOutboxPage(app core.App, actor *core.Record, pageURL string) error {
+ client := &http.Client{}
+
+ req, err := http.NewRequest(http.MethodGet, pageURL, nil)
+ if err != nil {
+ return err
+ }
+ req.Header.Add("Accept", `application/ld+json; profile="https://www.w3.org/ns/activitystreams"`)
+
+ resp, err := client.Do(req)
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close()
+
+ body, err := io.ReadAll(resp.Body)
+ if err != nil {
+ return err
+ }
+
+ var page pub.OrderedCollectionPage
+ err = json.Unmarshal(body, &page)
+ if err != nil {
+ return err
+ }
+
+ for _, item := range page.OrderedItems {
+ activity, err := pub.ToActivity(item)
+ if err != nil {
+ return err
+ }
+ if activity.Type != pub.CreateType {
+ continue
+ }
+ }
+
+ if page.Next != nil {
+ return fetchOutboxPage(app, actor, page.Next.GetID().String())
+ }
+
+ return nil
+}
+
+func TrailFromActivity(activity pub.Activity, app core.App, actor *core.Record) (*core.Record, error) {
+ t, err := pub.ToObject(activity.Object)
+ if err != nil {
+ return nil, err
+ }
+
+ record, err := app.FindFirstRecordByData("trails", "iri", t.ID.String())
+ if err != nil {
+ if err == sql.ErrNoRows {
+ collection, err := app.FindCollectionByNameOrId("trails")
+ if err != nil {
+ return nil, err
+ }
+
+ record = core.NewRecord(collection)
+ record.Set("id", security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet))
+
+ } else {
+ return nil, err
+ }
+ }
+
+ var distance, duration, elevation_gain, elevation_loss float64
+ var diffculty, category string
+ trailTags := []string{}
+ tags, err := pub.ToItemCollection(t.Tag)
+ if err != nil {
+ return nil, err
+ }
+
+ for _, tag := range tags.Collection() {
+ tagObj, err := pub.ToObject(tag)
+ if err != nil {
+ continue
+ }
+ content := tagObj.Content.First().Value.String()
+ switch tagObj.Name.First().Value.String() {
+ case "category":
+ category = content
+ case "difficulty":
+ diffculty = content
+ case "elevation_gain":
+ elevation_gain, err = strconv.ParseFloat(content[:len(content)-1], 64)
+ case "elevation_loss":
+ elevation_loss, err = strconv.ParseFloat(content[:len(content)-1], 64)
+ case "duration":
+ duration, err = strconv.ParseFloat(content[:len(content)-1], 64)
+ case "distance":
+ distance, err = strconv.ParseFloat(content[:len(content)-1], 64)
+ case "tag":
+ existingTag, err := app.FindFirstRecordByData("tags", "name", content)
+ if err != nil {
+ if err == sql.ErrNoRows {
+ collection, err := app.FindCollectionByNameOrId("tags")
+ if err != nil {
+ continue
+ }
+ existingTag = core.NewRecord(collection)
+ existingTag.Set("name", content)
+ err = app.Save(existingTag)
+ if err != nil {
+ continue
+ }
+ } else {
+ continue
+ }
+ }
+
+ trailTags = append(trailTags, existingTag.Id)
+ }
+ if err != nil {
+ continue
+ }
+ }
+
+ record.Set("name", t.Name.First().Value)
+ record.Set("description", t.Content.First().Value)
+ record.Set("location", t.Location.(*pub.Place).Name.First().Value)
+ record.Set("lat", t.Location.(*pub.Place).Latitude)
+ record.Set("lon", t.Location.(*pub.Place).Longitude)
+ record.Set("distance", distance)
+ record.Set("elevation_gain", elevation_gain)
+ record.Set("elevation_loss", elevation_loss)
+ record.Set("duration", duration)
+ record.Set("difficulty", diffculty)
+ record.Set("date", t.StartTime.Unix())
+ record.Set("tags", trailTags)
+ record.Set("public", true)
+ record.Set("iri", t.ID.String())
+ record.Set("author", actor.Id)
+
+ categoryRecord, err := app.FindFirstRecordByData("categories", "name", category)
+ if err == nil {
+ record.Set("category", categoryRecord.Id)
+ }
+
+ if t.Attachment != nil {
+
+ attachments, err := pub.ToItemCollection(t.Attachment)
+ if err != nil {
+ return nil, err
+ }
+
+ photoURLs := []string{}
+ gpxURL := ""
+ for _, a := range attachments.Collection() {
+ attachment, err := pub.ToObject(a)
+ if err != nil {
+ continue
+ }
+ if attachment.Type == pub.DocumentType && attachment.MediaType == "application/xml+gpx" {
+ gpxURL = attachment.URL.GetLink().String()
+ } else if attachment.Type == pub.ImageType {
+ photoURLs = append(photoURLs, attachment.URL.GetLink().String())
+ }
+ }
+
+ if len(photoURLs) > 0 {
+ photos := make([]*filesystem.File, len(photoURLs))
+ for i, purl := range photoURLs {
+ photo, err := filesystem.NewFileFromURL(context.Background(), purl)
+ if err != nil {
+ continue
+ }
+ photos[i] = photo
+ }
+
+ record.Set("photos", photos)
+ }
+
+ if gpxURL != "" {
+ gpx, err := filesystem.NewFileFromURL(context.Background(), gpxURL)
+ if err != nil {
+ return nil, err
+ }
+
+ record.Set("gpx", gpx)
+ }
+ }
+
+ return record, app.Save(record)
+}
+
+func ObjectFromTrail(app core.App, trail *core.Record, mentions *pub.ItemCollection) (*pub.Object, error) {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return nil, fmt.Errorf("ORIGIN not set")
+ }
+
+ trailAuthor, err := app.FindRecordById("activitypub_actors", trail.GetString("author"))
+ if err != nil {
+ return nil, err
+ }
+ errs := app.ExpandRecord(trail, []string{"tags"}, nil)
+ if len(errs) > 0 {
+ return nil, fmt.Errorf("failed to expand tags: %v", errs)
+ }
+ errs = app.ExpandRecord(trail, []string{"category"}, nil)
+ if len(errs) > 0 {
+ return nil, fmt.Errorf("failed to expand category: %v", errs)
+ }
+
+ category := ""
+ categoryRecord := trail.ExpandedOne("category")
+ if categoryRecord != nil {
+ category = categoryRecord.GetString("name")
+ }
+
+ tagRecords := trail.ExpandedAll("tags")
+
+ tags := pub.ItemCollection{
+ pub.Object{
+ Type: pub.NoteType,
+ Name: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, "category")),
+ Content: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, category)),
+ },
+ pub.Object{
+ Type: pub.NoteType,
+ Name: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, "difficulty")),
+ Content: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, trail.GetString("difficulty"))),
+ },
+ pub.Object{
+ Type: pub.NoteType,
+ Name: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, "elevation_gain")),
+ Content: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, fmt.Sprintf("%fm", trail.GetFloat("elevation_gain")))),
+ },
+ pub.Object{
+ Type: pub.NoteType,
+ Name: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, "elevation_loss")),
+ Content: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, fmt.Sprintf("%fm", trail.GetFloat("elevation_loss")))),
+ },
+ pub.Object{
+ Type: pub.NoteType,
+ Name: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, "distance")),
+ Content: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, fmt.Sprintf("%fm", trail.GetFloat("distance")))),
+ },
+ pub.Object{
+ Type: pub.NoteType,
+ Name: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, "duration")),
+ Content: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, fmt.Sprintf("%fm", trail.GetFloat("duration")))),
+ },
+ }
+
+ if mentions != nil {
+ for _, m := range *mentions {
+ tags.Append(m)
+ }
+ }
+
+ for _, v := range tagRecords {
+ hashtag := pub.ObjectNew(pub.NoteType)
+ hashtag.Name = pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, "tag"))
+ hashtag.Content = pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, v.GetString("name")))
+
+ tags.Append(hashtag)
+ }
+
+ photos := trail.GetStringSlice("photos")
+
+ gpx := ""
+ if trail.GetString("gpx") != "" {
+ gpx = fmt.Sprintf("%s/api/v1/files/trails/%s/%s", origin, trail.Id, trail.GetString("gpx"))
+ }
+
+ attachments := make(pub.ItemCollection, max(len(photos), 2))
+ for i := range min(len(photos), 3) {
+ iri := fmt.Sprintf("%s/api/v1/files/trails/%s/%s", origin, trail.Id, photos[i])
+
+ attachments[i] = pub.Image{
+ Type: pub.ImageType,
+ MediaType: "image/jpeg",
+ URL: pub.IRI(iri),
+ }
+ }
+ if gpx != "" {
+ attachments.Append(pub.Document{
+ Type: pub.DocumentType,
+ MediaType: "application/xml+gpx",
+ URL: pub.IRI(gpx),
+ })
+ }
+
+ activityURL := fmt.Sprintf("%s/trail/view/@%s/%s", origin, trailAuthor.GetString("username"), trail.Id)
+ activityContent := fmt.Sprintf("
%s %s%s
", trail.GetString("name"), trail.GetString("description"), activityURL, activityURL)
+
+ trailObject := pub.ObjectNew(pub.NoteType)
+
+ trailObject.Name = pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, trail.GetString("name")))
+ trailObject.Content = pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, activityContent))
+ trailObject.Location = pub.Place{
+ Type: pub.PlaceType,
+ Name: pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, trail.GetString("location"))),
+ Latitude: trail.GetFloat("lat"),
+ Longitude: trail.GetFloat("lon"),
+ }
+ trailObject.AttributedTo = pub.IRI(trailAuthor.GetString("iri"))
+ trailObject.Published = trail.GetDateTime("created").Time()
+ trailObject.ID = pub.IRI(fmt.Sprintf("%s/api/v1/trail/%s", origin, trail.Id))
+ trailObject.URL = pub.IRI(activityURL)
+
+ trailObject.StartTime = trail.GetDateTime("date").Time()
+ trailObject.Attachment = attachments
+
+ trailObject.Tag = tags
+ return trailObject, nil
+}
+
+func ListFromActivity(activity pub.Activity, app core.App, actor *core.Record) (*core.Record, error) {
+ l, err := pub.ToObject(activity.Object)
+ if err != nil {
+ return nil, err
+ }
+
+ record, err := app.FindFirstRecordByData("lists", "iri", l.ID.String())
+ if err != nil {
+ if err == sql.ErrNoRows {
+ collection, err := app.FindCollectionByNameOrId("lists")
+ if err != nil {
+ return nil, err
+ }
+
+ record = core.NewRecord(collection)
+ record.Set("id", security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet))
+ } else {
+ return nil, err
+ }
+ }
+
+ record.Set("name", l.Name.First().Value)
+ record.Set("description", l.Content.First().Value)
+ record.Set("public", true)
+ record.Set("iri", l.ID.String())
+ record.Set("author", actor.Id)
+
+ if l.Attachment != nil {
+
+ avatarURL := ""
+ attachments, err := pub.ToItemCollection(l.Attachment)
+ if err != nil {
+ return nil, err
+ }
+
+ for _, a := range attachments.Collection() {
+ attachment, err := pub.ToObject(a)
+ if err != nil {
+ continue
+ }
+ if attachment.Type == pub.ImageType {
+ avatarURL = attachment.URL.GetLink().String()
+ }
+ }
+
+ if avatarURL != "" {
+ avatar, err := filesystem.NewFileFromURL(context.Background(), avatarURL)
+
+ if err != nil {
+ return nil, err
+ }
+
+ record.Set("avatar", avatar)
+ }
+ }
+
+ err = app.Save(record)
+
+ return record, err
+}
+
+func ObjectFromList(app core.App, list *core.Record) (*pub.Object, error) {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return nil, fmt.Errorf("ORIGIN not set")
+ }
+
+ listAuthor, err := app.FindRecordById("activitypub_actors", list.GetString("author"))
+ if err != nil {
+ return nil, err
+ }
+ avatar := ""
+ if list.GetString("avatar") != "" {
+ avatar = fmt.Sprintf("%s/api/v1/files/lists/%s/%s", origin, list.Id, list.GetString("avatar"))
+ }
+
+ attachments := make(pub.ItemCollection, 2)
+ if avatar != "" {
+ attachments[0] = pub.Image{
+ Type: pub.ImageType,
+ MediaType: "image/jpeg",
+ URL: pub.IRI(avatar),
+ }
+ }
+
+ activityURL := fmt.Sprintf("%s/lists/@%s/%s", origin, listAuthor.GetString("username"), list.Id)
+ activityContent := fmt.Sprintf("%s%s
", list.GetString("description"), activityURL, activityURL)
+
+ listObject := pub.ObjectNew(pub.NoteType)
+ listObject.Name = pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, list.GetString("name")))
+ listObject.Content = pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, activityContent))
+
+ listObject.AttributedTo = pub.IRI(listAuthor.GetString("iri"))
+ listObject.Published = list.GetDateTime("created").Time()
+ listObject.ID = pub.IRI(fmt.Sprintf("%s/api/v1/list/%s", origin, list.Id))
+ listObject.URL = pub.IRI(activityURL)
+ listObject.Attachment = attachments
+ return listObject, nil
+}
+
+func ObjectFromComment(app core.App, comment *core.Record, mentions *pub.ItemCollection) (*pub.Object, error) {
+ origin := os.Getenv("ORIGIN")
+ if origin == "" {
+ return nil, fmt.Errorf("ORIGIN not set")
+ }
+
+ commentAuthor, err := app.FindRecordById("activitypub_actors", comment.GetString("author"))
+ if err != nil {
+ return nil, err
+ }
+
+ commentTrail, err := app.FindRecordById("trails", comment.GetString("trail"))
+ if err != nil {
+ return nil, err
+ }
+ commentTrailAuthor, err := app.FindRecordById("activitypub_actors", commentTrail.GetString("author"))
+ if err != nil {
+ return nil, err
+ }
+
+ trailURL := ""
+ if commentTrailAuthor.GetBool("isLocal") {
+ trailURL = fmt.Sprintf("https://%s/api/v1/trail/%s", commentTrailAuthor.GetString("domain"), comment.GetString("trail"))
+ } else {
+ trailURL = commentTrail.GetString("iri")
+ }
+
+ commentObject := pub.ObjectNew(pub.NoteType)
+ commentObject.ID = pub.IRI(fmt.Sprintf("%s/api/v1/comment/%s", origin, comment.Id))
+ commentObject.Content = pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, comment.GetString("text")))
+ commentObject.Published = comment.GetDateTime("created").Time()
+ commentObject.AttributedTo = pub.IRI(commentAuthor.GetString("iri"))
+ commentObject.InReplyTo = pub.IRI(trailURL)
+
+ if mentions != nil {
+ commentObject.Tag = *mentions
+ }
+
+ return commentObject, nil
+}
+
+func TrailObjectFromIRI(iri string) (*pub.Object, error) {
+ fetchURL := strings.Replace(iri, "api/v1/trail", "api/v1/activitypub/trail", 1)
+
+ client := &http.Client{}
+
+ req, err := http.NewRequest(http.MethodGet, fetchURL, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ resp, err := client.Do(req)
+ if err != nil {
+ return nil, err
+ }
+ defer resp.Body.Close()
+
+ body, err := io.ReadAll(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+
+ var object pub.Object
+ err = json.Unmarshal(body, &object)
+ if err != nil {
+ return nil, err
+ }
+
+ return &object, nil
+}
diff --git a/db/util/email_templates.go b/db/util/email_templates.go
index 817340cd..01edf2a6 100644
--- a/db/util/email_templates.go
+++ b/db/util/email_templates.go
@@ -17,12 +17,15 @@ type EmailData struct {
}
var notificationTemplates = map[NotificationType]string{
- TrailCreate: "{{.Author}} has created a new trail: {{.trail}}.",
- TrailShare: "{{.Author}} has shared a trail with you: {{.trail}}.",
- ListCreate: "{{.Author}} has created a new list: {{.list}}.",
- ListShare: "{{.Author}} has shared a list with you: {{.list}}.",
- NewFollower: "Good news! You have a new follower: {{.Author}}.",
- TrailComment: "{{.Author}} commented on your trail '{{.trail}}': '{{.comment}}'.",
+ TrailShare: "{{.Author}} has shared a trail with you: {{.trail}}.",
+ ListShare: "{{.Author}} has shared a list with you: {{.list}}.",
+ NewFollower: "Good news! You have a new follower: {{.Author}}.",
+ TrailComment: "{{.Author}} commented on your trail '{{.trail_name}}': '{{.comment}}'.",
+ SummitLogCreate: "{{.Author}} created a summit log on your trail '{{.trail_name}}'.",
+ TrailLike: "{{.Author}} liked your trail '{{.trail_name}}'.",
+ CommentMention: "{{.Author}} mentioned you in a comment.",
+ TrailMention: "{{.Author}} mentioned you in a trail.",
+ SummitLogMention: "{{.Author}} mentioned you in a summit log.",
}
func GenerateHTML(appUrl string, recipientName string, authorName string, notificationType NotificationType, metadata map[string]string) (string, error) {
diff --git a/db/util/meilisearch.go b/db/util/meilisearch.go
index 122b3125..dd85487e 100644
--- a/db/util/meilisearch.go
+++ b/db/util/meilisearch.go
@@ -2,12 +2,17 @@ package util
import (
"bytes"
+ "encoding/json"
"errors"
"fmt"
"io"
"log"
+ "net/http"
+ "net/url"
+ "path"
"github.com/meilisearch/meilisearch-go"
+ "github.com/pocketbase/dbx"
"github.com/pocketbase/pocketbase/core"
"github.com/twpayne/go-gpx"
"github.com/twpayne/go-polyline"
@@ -31,16 +36,32 @@ func documentFromTrailRecord(app core.App, r *core.Record, author *core.Record,
tags[i] = v.GetString("name")
}
- polyline, err := getPolyline(app, r)
+ category := ""
+ trailCategory := r.ExpandedOne("category")
+ if trailCategory != nil {
+ category = trailCategory.GetString("name")
+ }
+
+ // polyline, err := getPolyline(app, r)
+ // if err != nil {
+ // polyline = ""
+ // }
+
+ domain := ""
+ if !author.GetBool("isLocal") {
+ domain = author.GetString("domain")
+ }
+
+ logCount, err := app.CountRecords("summit_logs", dbx.NewExp("trail={:id}", dbx.Params{"id": r.Id}))
if err != nil {
return nil, err
}
- document := map[string]interface{}{
+ document := map[string]any{
"id": r.Id,
- "author": r.GetString("author"),
+ "author": author.Id,
"author_name": author.GetString("username"),
- "author_avatar": author.GetString("avatar"),
+ "author_avatar": author.GetString("icon"),
"name": r.GetString("name"),
"description": r.GetString("description"),
"location": r.GetString("location"),
@@ -49,15 +70,17 @@ func documentFromTrailRecord(app core.App, r *core.Record, author *core.Record,
"elevation_loss": r.GetFloat("elevation_loss"),
"duration": r.GetFloat("duration"),
"difficulty": r.Get("difficulty"),
- "category": r.Get("category"),
- "completed": len(r.GetStringSlice("summit_logs")) > 0,
+ "category": category,
+ "completed": logCount > 0,
"date": r.GetDateTime("date").Time().Unix(),
"created": r.GetDateTime("created").Time().Unix(),
"public": r.GetBool("public"),
"thumbnail": thumbnail,
"gpx": r.GetString("gpx"),
"tags": tags,
- "polyline": polyline,
+ // "polyline": polyline,
+ "domain": domain,
+ "iri": r.GetString("iri"),
"_geo": map[string]float64{
"lat": r.GetFloat("lat"),
"lng": r.GetFloat("lon"),
@@ -66,6 +89,9 @@ func documentFromTrailRecord(app core.App, r *core.Record, author *core.Record,
if includeShares {
document["shares"] = []string{}
+ document["likes"] = []string{}
+ document["like_count"] = 0
+
}
return document, nil
@@ -109,28 +135,124 @@ func getPolyline(app core.App, r *core.Record) (string, error) {
return string(polyline.EncodeCoords(coordinates)), nil
}
-func documentFromListRecord(r *core.Record, includeShares bool) map[string]interface{} {
+func documentFromListRecord(r *core.Record, author *core.Record, includeShares bool) (map[string]interface{}, error) {
+
+ totalElevationGain := 0.0
+ totalElevationLoss := 0.0
+ totalDistance := 0.0
+ totalDuration := 0.0
+ trails := len(r.GetStringSlice("trails"))
+
+ if r.GetString("iri") != "" {
+ doc, err := documentFromRemoteRecord(r, "lists")
+ if err == nil {
+ totalElevationGain = doc["elevation_gain"].(float64)
+ totalElevationLoss = doc["elevation_loss"].(float64)
+ totalDistance = doc["distance"].(float64)
+ totalDuration = doc["duration"].(float64)
+
+ trails = int(doc["trails"].(float64))
+ }
+
+ } else {
+ allTrails := r.ExpandedAll("trails")
+
+ for _, t := range allTrails {
+ totalElevationGain += t.GetFloat("elevation_gain")
+ totalElevationLoss += t.GetFloat("elevation_loss")
+ totalDistance += t.GetFloat("distance")
+ totalDuration += t.GetFloat("duration")
+
+ }
+ }
+
document := map[string]interface{}{
- "id": r.Id,
- "author": r.GetString("author"),
- "name": r.GetString("name"),
- "description": r.GetString("description"),
- "public": r.GetBool("public"),
- "created": r.GetDateTime("created").Time().Unix(),
- "trails": r.GetStringSlice("trails"),
+ "id": r.Id,
+ "author": author.Id,
+ "author_name": author.GetString("username"),
+ "author_avatar": author.GetString("icon"),
+ "avatar": r.GetString("avatar"),
+ "name": r.GetString("name"),
+ "description": r.GetString("description"),
+ "elevation_gain": totalElevationGain,
+ "elevation_loss": totalElevationLoss,
+ "distance": totalDistance,
+ "duration": totalDuration,
+ "public": r.GetBool("public"),
+ "created": r.GetDateTime("created").Time().Unix(),
+ "trails": trails,
+ "iri": r.GetString("iri"),
}
if includeShares {
document["shares"] = []string{}
}
- return document
+ return document, nil
+}
+
+func documentFromRemoteRecord(r *core.Record, index string) (map[string]interface{}, error) {
+ client := &http.Client{}
+
+ if r.GetString("iri") == "" {
+ return nil, fmt.Errorf("record has no iri")
+ }
+
+ iri := r.GetString("iri")
+
+ url, err := url.Parse(iri)
+ if err != nil {
+ return nil, err
+ }
+
+ remoteRecordId := path.Base(url.Path)
+
+ searchURL := fmt.Sprintf("%s://%s/api/v1/search/%s", url.Scheme, url.Host, index)
+ body := []byte(fmt.Sprintf(`{"q": "%s"}`, remoteRecordId))
+
+ req, err := http.NewRequest("POST", searchURL, bytes.NewBuffer(body))
+ if err != nil {
+ return nil, err
+ }
+
+ req.Header.Add("Content-Type", "application/json")
+
+ resp, err := client.Do(req)
+ if err != nil {
+ return nil, err
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode != http.StatusOK {
+ return nil, fmt.Errorf("failed to fetch remote record: received status %d", resp.StatusCode)
+ }
+
+ respBytes, err := io.ReadAll(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+ var searchResponse meilisearch.SearchResponse
+ json.Unmarshal(respBytes, &searchResponse)
+
+ if len(searchResponse.Hits) == 0 {
+ return nil, fmt.Errorf("no documents in result set")
+ }
+
+ document, ok := searchResponse.Hits[0].(map[string]interface{})
+ if !ok {
+ return nil, fmt.Errorf("unexpected document format")
+ }
+ return document, nil
}
func IndexTrail(app core.App, r *core.Record, author *core.Record, client meilisearch.ServiceManager) error {
errs := app.ExpandRecord(r, []string{"tags"}, nil)
if len(errs) > 0 {
- return fmt.Errorf("failed to expand: %v", errs)
+ return fmt.Errorf("failed to expand tags: %v", errs)
+ }
+ errs = app.ExpandRecord(r, []string{"category"}, nil)
+ if len(errs) > 0 {
+ return fmt.Errorf("failed to expand category: %v", errs)
}
doc, err := documentFromTrailRecord(app, r, author, true)
if err != nil {
@@ -148,10 +270,14 @@ func IndexTrail(app core.App, r *core.Record, author *core.Record, client meilis
func UpdateTrail(app core.App, r *core.Record, author *core.Record, client meilisearch.ServiceManager) error {
errs := app.ExpandRecord(r, []string{"tags"}, nil)
if len(errs) > 0 {
- return fmt.Errorf("failed to expand: %v", errs)
+ return fmt.Errorf("failed to expand tags: %v", errs)
+ }
+ errs = app.ExpandRecord(r, []string{"category"}, nil)
+ if len(errs) > 0 {
+ return fmt.Errorf("failed to expand category: %v", errs)
}
- doc, err := documentFromTrailRecord(app, r, author, true)
+ doc, err := documentFromTrailRecord(app, r, author, false)
if err != nil {
return err
}
@@ -177,20 +303,49 @@ func UpdateTrailShares(trailId string, shares []string, client meilisearch.Servi
return nil
}
-func IndexList(r *core.Record, client meilisearch.ServiceManager) error {
- documents := []map[string]interface{}{documentFromListRecord(r, true)}
+func UpdateTrailLikes(trailId string, likes []string, client meilisearch.ServiceManager) error {
+ documents := []map[string]interface{}{
+ {
+ "id": trailId,
+ "like_count": len(likes),
+ "likes": likes,
+ },
+ }
+ if _, err := client.Index("trails").UpdateDocuments(documents); err != nil {
+ return err
+ }
+ return nil
+}
- if _, err := client.Index("lists").AddDocuments(documents); err != nil {
+func IndexList(app core.App, r *core.Record, author *core.Record, client meilisearch.ServiceManager) error {
+ errs := app.ExpandRecord(r, []string{"trails"}, nil)
+ if len(errs) > 0 {
+ return fmt.Errorf("failed to expand trails: %v", errs)
+ }
+
+ documents, err := documentFromListRecord(r, author, true)
+ if err != nil {
+ return err
+ }
+ if _, err = client.Index("lists").AddDocuments(documents); err != nil {
return err
}
return nil
}
-func UpdateList(r *core.Record, client meilisearch.ServiceManager) error {
- documents := documentFromListRecord(r, false)
+func UpdateList(app core.App, r *core.Record, author *core.Record, client meilisearch.ServiceManager) error {
+ errs := app.ExpandRecord(r, []string{"trails"}, nil)
+ if len(errs) > 0 {
+ return fmt.Errorf("failed to expand trails: %v", errs)
+ }
- if _, err := client.Index("lists").UpdateDocuments(documents); err != nil {
+ documents, err := documentFromListRecord(r, author, false)
+ if err != nil {
+ return err
+ }
+
+ if _, err = client.Index("lists").UpdateDocuments(documents); err != nil {
return err
}
diff --git a/db/util/notification.go b/db/util/notification.go
index 596cb920..a339fccb 100644
--- a/db/util/notification.go
+++ b/db/util/notification.go
@@ -11,12 +11,15 @@ import (
type NotificationType string
const (
- TrailCreate NotificationType = "trail_create"
- TrailShare NotificationType = "trail_share"
- ListCreate NotificationType = "list_create"
- ListShare NotificationType = "list_share"
- NewFollower NotificationType = "new_follower"
- TrailComment NotificationType = "trail_comment"
+ TrailShare NotificationType = "trail_share"
+ ListShare NotificationType = "list_share"
+ NewFollower NotificationType = "new_follower"
+ TrailComment NotificationType = "trail_comment"
+ TrailLike NotificationType = "trail_like"
+ SummitLogCreate NotificationType = "summit_log_create"
+ CommentMention NotificationType = "comment_mention"
+ TrailMention NotificationType = "trail_mention"
+ SummitLogMention NotificationType = "summit_log_mention"
)
type Notification struct {
@@ -54,11 +57,14 @@ func getNotificationPermissions(app core.App, user string, notificationType Noti
return &settingsForType, nil
}
-func SendNotification(app core.App, notification Notification, recipient string) error {
- if notification.Author == recipient {
+func SendNotification(app core.App, notification Notification, recipient *core.Record) error {
+ if notification.Author == recipient.Id {
return nil
}
- permissions, err := getNotificationPermissions(app, recipient, notification.Type)
+ if !recipient.GetBool("isLocal") {
+ return nil
+ }
+ permissions, err := getNotificationPermissions(app, recipient.GetString("user"), notification.Type)
if err != nil {
return err
}
@@ -73,7 +79,7 @@ func SendNotification(app core.App, notification Notification, recipient string)
n.Set("type", string(notification.Type))
n.Set("metadata", notification.Metadata)
n.Set("seen", notification.Seen)
- n.Set("recipient", recipient)
+ n.Set("recipient", recipient.Id)
n.Set("author", notification.Author)
if err := app.Save(n); err != nil {
@@ -82,15 +88,15 @@ func SendNotification(app core.App, notification Notification, recipient string)
}
if permissions.Email {
- recipientUser, err := app.FindRecordById("users", recipient)
+ recipientActor, err := app.FindRecordById("activitypub_actors", recipient.Id)
if err != nil {
return err
}
- authorUser, err := app.FindRecordById("users", notification.Author)
+ authorActor, err := app.FindRecordById("activitypub_actors", notification.Author)
if err != nil {
return err
}
- html, err := GenerateHTML(app.Settings().Meta.AppURL, recipientUser.GetString("username"), authorUser.GetString("username"), notification.Type, notification.Metadata)
+ html, err := GenerateHTML(app.Settings().Meta.AppURL, recipientActor.GetString("username"), authorActor.GetString("username"), notification.Type, notification.Metadata)
if err != nil {
return err
}
@@ -100,27 +106,12 @@ func SendNotification(app core.App, notification Notification, recipient string)
Address: app.Settings().Meta.SenderAddress,
Name: app.Settings().Meta.SenderName,
},
- To: []mail.Address{{Address: recipientUser.Email()}},
+ To: []mail.Address{{Address: recipientActor.Email()}},
Subject: "wanderer - New Notification",
HTML: html,
}
- app.NewMailClient().Send(message)
- }
- return nil
-}
-
-func SendNotificationToFollowers(app core.App, notification Notification) error {
- followers, err := app.FindRecordsByFilter("follows", "followee={:user}", "", -1, 0, dbx.Params{"user": notification.Author})
-
- if err != nil {
- return err
- }
-
- for _, f := range followers {
- recipient := f.GetString("follower")
- SendNotification(app, notification, recipient)
-
+ return app.NewMailClient().Send(message)
}
return nil
}
diff --git a/docker-compose.yml b/docker-compose.yml
index 949a9a8f..de799873 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -32,7 +32,8 @@ services:
condition: service_healthy
environment:
<<: *cenv
- POCKETBASE_ENCRYPTION_KEY:
+ POCKETBASE_ENCRYPTION_KEY: fde406459dc1f6ca6f348e1f44a9a2af
+ ORIGIN: http://localhost:3000
ports:
- "8090:8090"
networks:
diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
index 8a512184..ce18060e 100644
--- a/docs/astro.config.mjs
+++ b/docs/astro.config.mjs
@@ -1,95 +1,132 @@
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
-import tailwind from '@astrojs/tailwind';
import node from "@astrojs/node";
import starlightOpenAPI, { openAPISidebarGroups } from 'starlight-openapi'
+import tailwindcss from "@tailwindcss/vite";
+
// https://astro.build/config
export default defineConfig({
- integrations: [starlight({
- title: 'wanderer Documentation',
- logo: {
- light: '/src/assets/logo_text_dark.svg',
- dark: '/src/assets/logo_text_light.svg',
- replacesTitle: true
- },
- social: {
- github: 'https://github.com/flomp/wanderer'
- },
- components: {
- Footer: './src/components/footer.astro'
- },
- plugins: [
- starlightOpenAPI([
+ integrations: [
+ starlight({
+ title: 'wanderer Documentation',
+ logo: {
+ light: '/src/assets/logo_text_dark.svg',
+ dark: '/src/assets/logo_text_light.svg',
+ replacesTitle: true
+ },
+ social: [
+ { icon: 'github', label: 'GitHub', href: 'https://github.com/flomp/wanderer' },
+ ],
+ components: {
+ Footer: './src/components/footer.astro'
+ },
+ plugins: [
+ starlightOpenAPI([
+ {
+ base: 'api-reference',
+ label: 'API Reference',
+ schema: 'wanderer.openapi.yaml',
+ },
+ ]),
+ ],
+ sidebar: [
{
- base: 'api-reference',
- label: 'API Reference',
- schema: 'wanderer.openapi.yaml',
+ label: 'Welcome to wanderer',
+ link: '/welcome'
},
- ]),
- ],
- sidebar: [{
- label: 'Getting Started',
- items: [{
- label: 'Installation',
- link: '/getting-started/installation/'
- }, {
- label: 'Configuration',
- link: '/getting-started/configuration/'
- }, {
- label: 'Local development',
- link: '/getting-started/local-development/'
- }, {
- label: 'Changelog',
- link: '/getting-started/changelog/'
- }]
- }, {
- label: 'Guides',
- items: [{
- label: 'Authentication',
- link: '/guides/authentication/'
- }, {
- label: 'Create a trail',
- link: '/guides/create-a-trail/'
- }, {
- label: 'Share trails',
- link: '/guides/share-trails/'
- }, {
- label: 'Lists',
- link: '/guides/lists/'
- },
- {
- label: 'Statistics',
- link: '/guides/statistics/'
- },
- {
- label: 'Custom categories',
- link: '/guides/custom-categories/'
- },
- {
- label: 'Customize the map',
- link: '/guides/customize-map/'
- },
- {
- label: 'Import/Export',
- link: '/guides/import-export/'
- },
- {
- label: 'Integrations',
- link: '/guides/integrations/'
- },
- {
- label: 'API',
- link: '/guides/api/'
- }]
- },
- ...openAPISidebarGroups,],
- customCss: ['./src/custom.css', './src/tailwind.css', '@fontsource/ibm-plex-sans/400.css', '@fontsource/ibm-plex-sans/600.css', '@fontsource/ibm-plex-mono/400.css', '@fontsource/ibm-plex-mono/600.css']
- }), tailwind({
- applyBaseStyles: false
- })],
+ {
+ label: 'Using wanderer',
+ items: [{
+ label: 'Authentication',
+ link: '/use/authentication/'
+ }, {
+ label: 'Create a trail',
+ link: '/use/create-a-trail/'
+ },
+ {
+ label: 'Summit logs',
+ link: '/use/summit-logs/'
+ },
+ {
+ label: 'Interact with the community',
+ link: '/use/community-interaction/'
+ },
+ {
+ label: 'Share trails',
+ link: '/use/share-trails/'
+ }, {
+ label: 'Lists',
+ link: '/use/lists/'
+ },
+ {
+ label: 'Statistics',
+ link: '/use/statistics/'
+ },
+ {
+ label: 'Customize the map',
+ link: '/use/customize-map/'
+ },
+ {
+ label: 'Import/Export',
+ link: '/use/import-export/'
+ },
+ {
+ label: 'Integrations',
+ link: '/use/integrations/'
+ },
+ ]
+ },
+ {
+ label: 'Running wanderer',
+ items: [
+ {
+ label: 'Installation',
+ link: '/run/installation/'
+ },
+ {
+ label: 'Environment configuration',
+ link: '/run/environment-configuration/'
+ },
+ {
+ label: 'Backend configuration',
+ link: '/run/backend-configuration/'
+ },
+ {
+ label: 'Custom categories',
+ link: '/run/custom-categories/'
+ },
+ {
+ label: 'Backing up your server',
+ link: '/run/backup-server/'
+ },
+ {
+ label: 'Changelog',
+ link: '/run/changelog/'
+ }]
+ }, {
+ label: 'Develop wanderer',
+ items: [
+ {
+ label: 'Local development',
+ link: '/develop/local-development/'
+ },
+ {
+ label: 'API',
+ link: '/develop/api/'
+ },
+ {
+ label: 'Federation',
+ link: '/develop/federation/'
+ },
+ ]
+ },
+ ...openAPISidebarGroups,],
+ customCss: ['./src/custom.css', './src/tailwind.css', '@fontsource/ibm-plex-sans/400.css', '@fontsource/ibm-plex-sans/600.css', '@fontsource/ibm-plex-mono/400.css', '@fontsource/ibm-plex-mono/600.css']
+ })],
output: "server",
+ vite: { plugins: [tailwindcss()] },
adapter: node({
mode: "standalone"
})
diff --git a/docs/package-lock.json b/docs/package-lock.json
index 48de2a8a..13e49541 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -1,47 +1,51 @@
{
"name": "docs",
- "version": "0.12.0",
+ "version": "0.17.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "docs",
- "version": "0.12.0",
+ "version": "0.16.4",
"dependencies": {
"@astrojs/check": "^0.9.4",
- "@astrojs/node": "^9.0.0",
- "@astrojs/starlight": "^0.30.3",
- "@astrojs/starlight-tailwind": "^3.0.0",
- "@astrojs/tailwind": "^5.1.3",
+ "@astrojs/node": "^9.2.2",
+ "@astrojs/starlight": "^0.34.4",
+ "@astrojs/starlight-tailwind": "^4.0.1",
"@fontsource/ibm-plex-mono": "^5.0.13",
"@fontsource/ibm-plex-sans": "^5.0.20",
- "astro": "^5.0.2",
+ "@tailwindcss/vite": "^4.1.10",
+ "astro": "^5.9.3",
"sharp": "^0.32.5",
"starlight-openapi": "^0.9.0",
- "tailwindcss": "^3.4.4",
+ "tailwindcss": "^4.1.10",
"typescript": "^5.4.5"
}
},
- "node_modules/@alloc/quick-lru": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
- "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
- "engines": {
- "node": ">=10"
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "engines": {
+ "node": ">=6.0.0"
}
},
"node_modules/@apidevtools/swagger-methods": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz",
- "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg=="
+ "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==",
+ "license": "MIT"
},
"node_modules/@astrojs/check": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.4.tgz",
"integrity": "sha512-IOheHwCtpUfvogHHsvu0AbeRZEnjJg3MopdLddkJE70mULItS/Vh37BHcI00mcOJcH1vhD3odbpvWokpxam7xA==",
+ "license": "MIT",
"dependencies": {
"@astrojs/language-server": "^2.15.0",
"chokidar": "^4.0.1",
@@ -56,19 +60,22 @@
}
},
"node_modules/@astrojs/compiler": {
- "version": "2.10.3",
- "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.10.3.tgz",
- "integrity": "sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw=="
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.12.2.tgz",
+ "integrity": "sha512-w2zfvhjNCkNMmMMOn5b0J8+OmUaBL1o40ipMvqcG6NRpdC+lKxmTi48DT8Xw0SzJ3AfmeFLB45zXZXtmbsjcgw==",
+ "license": "MIT"
},
"node_modules/@astrojs/internal-helpers": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.4.2.tgz",
- "integrity": "sha512-EdDWkC3JJVcpGpqJAU/5hSk2LKXyG3mNGkzGoAuyK+xoPHbaVdSuIWoN1QTnmK3N/gGfaaAfM8gO2KDCAW7S3w=="
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.6.1.tgz",
+ "integrity": "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==",
+ "license": "MIT"
},
"node_modules/@astrojs/language-server": {
"version": "2.15.4",
"resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.15.4.tgz",
"integrity": "sha512-JivzASqTPR2bao9BWsSc/woPHH7OGSGc9aMxXL4U6egVTqBycB3ZHdBJPuOCVtcGLrzdWTosAqVPz1BVoxE0+A==",
+ "license": "MIT",
"dependencies": {
"@astrojs/compiler": "^2.10.3",
"@astrojs/yaml2ts": "^0.2.2",
@@ -106,11 +113,13 @@
}
},
"node_modules/@astrojs/markdown-remark": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.0.1.tgz",
- "integrity": "sha512-CTSYijj25NfxgZi15TU3CwPwgyD1/7yA3FcdcNmB9p94nydupiUbrIiq3IqeTp2m5kCVzxbPZeC7fTwEOaNyGw==",
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.2.tgz",
+ "integrity": "sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q==",
+ "license": "MIT",
"dependencies": {
- "@astrojs/prism": "3.2.0",
+ "@astrojs/internal-helpers": "0.6.1",
+ "@astrojs/prism": "3.3.0",
"github-slugger": "^2.0.0",
"hast-util-from-html": "^2.0.3",
"hast-util-to-text": "^4.0.2",
@@ -119,11 +128,12 @@
"mdast-util-definitions": "^6.0.0",
"rehype-raw": "^7.0.0",
"rehype-stringify": "^10.0.1",
- "remark-gfm": "^4.0.0",
+ "remark-gfm": "^4.0.1",
"remark-parse": "^11.0.0",
- "remark-rehype": "^11.1.1",
+ "remark-rehype": "^11.1.2",
"remark-smartypants": "^3.0.2",
- "shiki": "^1.23.1",
+ "shiki": "^3.2.1",
+ "smol-toml": "^1.3.1",
"unified": "^11.0.5",
"unist-util-remove-position": "^5.0.0",
"unist-util-visit": "^5.0.0",
@@ -132,76 +142,83 @@
}
},
"node_modules/@astrojs/mdx": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.0.3.tgz",
- "integrity": "sha512-8HcuyNG/KgYUAQWVzKFkboXcTOBCW6aQ0WK0Er/iSmVSF0y3yimg4/3QSt+Twv9dogpwIHL+E8iBJKqieFv4+g==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.3.0.tgz",
+ "integrity": "sha512-OGX2KvPeBzjSSKhkCqrUoDMyzFcjKt5nTE5SFw3RdoLf0nrhyCXBQcCyclzWy1+P+XpOamn+p+hm1EhpCRyPxw==",
+ "license": "MIT",
"dependencies": {
- "@astrojs/markdown-remark": "6.0.1",
+ "@astrojs/markdown-remark": "6.3.2",
"@mdx-js/mdx": "^3.1.0",
- "acorn": "^8.14.0",
- "es-module-lexer": "^1.5.4",
+ "acorn": "^8.14.1",
+ "es-module-lexer": "^1.6.0",
"estree-util-visit": "^2.0.0",
- "hast-util-to-html": "^9.0.3",
+ "hast-util-to-html": "^9.0.5",
"kleur": "^4.1.5",
"rehype-raw": "^7.0.0",
- "remark-gfm": "^4.0.0",
+ "remark-gfm": "^4.0.1",
"remark-smartypants": "^3.0.2",
"source-map": "^0.7.4",
"unist-util-visit": "^5.0.0",
"vfile": "^6.0.3"
},
"engines": {
- "node": "^18.17.1 || ^20.3.0 || >=22.0.0"
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0"
},
"peerDependencies": {
"astro": "^5.0.0"
}
},
"node_modules/@astrojs/node": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/@astrojs/node/-/node-9.0.0.tgz",
- "integrity": "sha512-3h/5kFZvpuo+chYAjj75YhtRUxfquxEJrpZRRC7TdiMGp2WhLp2us4VXm2mjezJp/zHKotW2L3qgp0P2ujQ0xw==",
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/node/-/node-9.2.2.tgz",
+ "integrity": "sha512-PtLPuuojmcl9O3CEvXqL/D+wB4x5DlbrGOvP0MeTAh/VfKFprYAzgw1+45xsnTO+QvPWb26l1cT+ZQvvohmvMw==",
+ "license": "MIT",
"dependencies": {
- "send": "^1.1.0",
+ "@astrojs/internal-helpers": "0.6.1",
+ "send": "^1.2.0",
"server-destroy": "^1.0.1"
},
"peerDependencies": {
- "astro": "^5.0.0"
+ "astro": "^5.3.0"
}
},
"node_modules/@astrojs/prism": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.2.0.tgz",
- "integrity": "sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz",
+ "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==",
+ "license": "MIT",
"dependencies": {
- "prismjs": "^1.29.0"
+ "prismjs": "^1.30.0"
},
"engines": {
- "node": "^18.17.1 || ^20.3.0 || >=22.0.0"
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0"
}
},
"node_modules/@astrojs/sitemap": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.2.1.tgz",
- "integrity": "sha512-uxMfO8f7pALq0ADL6Lk68UV6dNYjJ2xGUzyjjVj60JLBs5a6smtlkBYv3tQ0DzoqwS7c9n4FUx5lgv0yPo/fgA==",
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.4.1.tgz",
+ "integrity": "sha512-VjZvr1e4FH6NHyyHXOiQgLiw94LnCVY4v06wN/D0gZKchTMkg71GrAHJz81/huafcmavtLkIv26HnpfDq6/h/Q==",
+ "license": "MIT",
"dependencies": {
"sitemap": "^8.0.0",
"stream-replace-string": "^2.0.0",
- "zod": "^3.23.8"
+ "zod": "^3.24.2"
}
},
"node_modules/@astrojs/starlight": {
- "version": "0.30.3",
- "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.30.3.tgz",
- "integrity": "sha512-HbGYYIR2Rnrvvc2jD0dUpp8zUzv3jQYtG5im3aulDgE4Jo21Ahw0yXlb/Y134G3LALLbqhImmlbt/h/nDV3yMA==",
+ "version": "0.34.4",
+ "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.34.4.tgz",
+ "integrity": "sha512-NfQ6S2OaDG8aaiE+evVxSMpgqMkXPLa/yCpzG340EX2pRzFxPeTSvpei3Uz9KouevXRCctjHSItKjuZP+2syrQ==",
+ "license": "MIT",
"dependencies": {
- "@astrojs/mdx": "^4.0.1",
- "@astrojs/sitemap": "^3.1.6",
- "@pagefind/default-ui": "^1.0.3",
+ "@astrojs/markdown-remark": "^6.3.1",
+ "@astrojs/mdx": "^4.2.3",
+ "@astrojs/sitemap": "^3.3.0",
+ "@pagefind/default-ui": "^1.3.0",
"@types/hast": "^3.0.4",
"@types/js-yaml": "^4.0.9",
"@types/mdast": "^4.0.4",
- "astro-expressive-code": "^0.38.3",
+ "astro-expressive-code": "^0.41.1",
"bcp-47": "^2.1.0",
"hast-util-from-html": "^2.0.1",
"hast-util-select": "^6.0.2",
@@ -209,52 +226,41 @@
"hastscript": "^9.0.0",
"i18next": "^23.11.5",
"js-yaml": "^4.1.0",
+ "klona": "^2.0.6",
"mdast-util-directive": "^3.0.0",
"mdast-util-to-markdown": "^2.1.0",
"mdast-util-to-string": "^4.0.0",
- "pagefind": "^1.0.3",
+ "pagefind": "^1.3.0",
"rehype": "^13.0.1",
"rehype-format": "^5.0.0",
"remark-directive": "^3.0.0",
+ "ultrahtml": "^1.6.0",
"unified": "^11.0.5",
"unist-util-visit": "^5.0.0",
"vfile": "^6.0.2"
},
"peerDependencies": {
- "astro": "^5.0.0"
+ "astro": "^5.5.0"
}
},
"node_modules/@astrojs/starlight-tailwind": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@astrojs/starlight-tailwind/-/starlight-tailwind-3.0.0.tgz",
- "integrity": "sha512-oYHG9RY+VaOSeAhheVZfm9HDA892qvcQA82VT86POYmg1OsgBuWwdf1ZbofV8iq/z5kO06ajcSdzhPE8lhEx8g==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/starlight-tailwind/-/starlight-tailwind-4.0.1.tgz",
+ "integrity": "sha512-AOOEWTGqJ7fG66U04xTmZQZ40oZnUYe4Qljpr+No88ozKywtsD1DiXOrGTeHCnZu0hRtMbRtBGB1fZsf0L62iw==",
+ "license": "MIT",
"peerDependencies": {
- "@astrojs/starlight": ">=0.30.0",
- "@astrojs/tailwind": "^5.1.3",
- "tailwindcss": "^3.3.3"
- }
- },
- "node_modules/@astrojs/tailwind": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-5.1.4.tgz",
- "integrity": "sha512-EJ3uoTZZr0RYwTrVS2HgYN0+VbXvg7h87AtwpD5OzqS3GyMwRmzfOwHfORTxoWGQRrY9k/Fi+Awk60kwpvRL5Q==",
- "dependencies": {
- "autoprefixer": "^10.4.20",
- "postcss": "^8.4.49",
- "postcss-load-config": "^4.0.2"
- },
- "peerDependencies": {
- "astro": "^3.0.0 || ^4.0.0 || ^5.0.0",
- "tailwindcss": "^3.0.24"
+ "@astrojs/starlight": ">=0.34.0",
+ "tailwindcss": "^4.0.0"
}
},
"node_modules/@astrojs/telemetry": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.2.0.tgz",
- "integrity": "sha512-wxhSKRfKugLwLlr4OFfcqovk+LIFtKwLyGPqMsv+9/ibqqnW3Gv7tBhtKEb0gAyUAC4G9BTVQeQahqnQAhd6IQ==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz",
+ "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==",
+ "license": "MIT",
"dependencies": {
- "ci-info": "^4.1.0",
- "debug": "^4.3.7",
+ "ci-info": "^4.2.0",
+ "debug": "^4.4.0",
"dlv": "^1.1.3",
"dset": "^3.1.4",
"is-docker": "^3.0.0",
@@ -262,52 +268,57 @@
"which-pm-runs": "^1.1.0"
},
"engines": {
- "node": "^18.17.1 || ^20.3.0 || >=22.0.0"
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0"
}
},
"node_modules/@astrojs/yaml2ts": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.2.tgz",
"integrity": "sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==",
+ "license": "MIT",
"dependencies": {
"yaml": "^2.5.0"
}
},
"node_modules/@babel/code-frame": {
- "version": "7.26.2",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
- "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.27.1",
"js-tokens": "^4.0.0",
- "picocolors": "^1.0.0"
+ "picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
- "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
- "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz",
- "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==",
+ "version": "7.27.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz",
+ "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==",
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.26.3"
+ "@babel/types": "^7.27.3"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -317,32 +328,43 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
- "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
- "dependencies": {
- "regenerator-runtime": "^0.14.0"
- },
+ "version": "7.27.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
+ "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/types": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
- "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
+ "version": "7.27.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz",
+ "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==",
+ "license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
+ "node_modules/@capsizecss/unpack": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-2.4.0.tgz",
+ "integrity": "sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==",
+ "license": "MIT",
+ "dependencies": {
+ "blob-to-buffer": "^1.2.8",
+ "cross-fetch": "^3.0.4",
+ "fontkit": "^2.0.2"
+ }
+ },
"node_modules/@ctrl/tinycolor": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.1.0.tgz",
"integrity": "sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ==",
+ "license": "MIT",
"engines": {
"node": ">=14"
}
@@ -351,6 +373,7 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz",
"integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==",
+ "license": "MIT",
"dependencies": {
"@emmetio/scanner": "^1.0.4"
}
@@ -359,6 +382,7 @@
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz",
"integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==",
+ "license": "MIT",
"dependencies": {
"@emmetio/scanner": "^1.0.4"
}
@@ -367,6 +391,7 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.0.tgz",
"integrity": "sha512-z7wkxRSZgrQHXVzObGkXG+Vmj3uRlpM11oCZ9pbaz0nFejvCDmAiNDpY75+wgXOcffKpj4rzGtwGaZxfJKsJxw==",
+ "license": "MIT",
"dependencies": {
"@emmetio/stream-reader": "^2.2.0",
"@emmetio/stream-reader-utils": "^0.1.0"
@@ -376,6 +401,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz",
"integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==",
+ "license": "ISC",
"dependencies": {
"@emmetio/scanner": "^1.0.0"
}
@@ -383,289 +409,311 @@
"node_modules/@emmetio/scanner": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz",
- "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA=="
+ "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==",
+ "license": "MIT"
},
"node_modules/@emmetio/stream-reader": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz",
- "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw=="
+ "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==",
+ "license": "MIT"
},
"node_modules/@emmetio/stream-reader-utils": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz",
- "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A=="
+ "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==",
+ "license": "MIT"
},
"node_modules/@emnapi/runtime": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz",
- "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz",
+ "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==",
+ "license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
- "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
+ "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
"cpu": [
"ppc64"
],
+ "license": "MIT",
"optional": true,
"os": [
"aix"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
- "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
+ "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
"cpu": [
"arm"
],
+ "license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
- "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
+ "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
- "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz",
+ "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
- "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",
+ "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
- "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",
+ "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
- "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
- "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
+ "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
- "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
+ "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
"cpu": [
"arm"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
- "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
+ "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
- "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
+ "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
"cpu": [
"ia32"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
- "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
+ "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
"cpu": [
"loong64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
- "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
+ "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
"cpu": [
"mips64el"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
- "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
+ "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
"cpu": [
"ppc64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
- "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",
+ "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",
"cpu": [
"riscv64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
- "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
+ "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
"cpu": [
"s390x"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
- "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
+ "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/netbsd-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz",
- "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"netbsd"
@@ -675,27 +723,29 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
- "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
+ "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"netbsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/openbsd-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz",
- "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"openbsd"
@@ -705,84 +755,90 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
- "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",
+ "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"openbsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
- "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",
+ "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"sunos"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
- "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
+ "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
- "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
+ "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
"cpu": [
"ia32"
],
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
- "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
+ "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@expressive-code/core": {
- "version": "0.38.3",
- "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.38.3.tgz",
- "integrity": "sha512-s0/OtdRpBONwcn23O8nVwDNQqpBGKscysejkeBkwlIeHRLZWgiTVrusT5Idrdz1d8cW5wRk9iGsAIQmwDPXgJg==",
+ "version": "0.41.2",
+ "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.41.2.tgz",
+ "integrity": "sha512-AJW5Tp9czbLqKMzwudL9Rv4js9afXBxkSGLmCNPq1iRgAYcx9NkTPJiSNCesjKRWoVC328AdSu6fqrD22zDgDg==",
+ "license": "MIT",
"dependencies": {
"@ctrl/tinycolor": "^4.0.4",
"hast-util-select": "^6.0.2",
@@ -796,44 +852,56 @@
}
},
"node_modules/@expressive-code/plugin-frames": {
- "version": "0.38.3",
- "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.38.3.tgz",
- "integrity": "sha512-qL2oC6FplmHNQfZ8ZkTR64/wKo9x0c8uP2WDftR/ydwN/yhe1ed7ZWYb8r3dezxsls+tDokCnN4zYR594jbpvg==",
+ "version": "0.41.2",
+ "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.41.2.tgz",
+ "integrity": "sha512-pfy0hkJI4nbaONjmksFDcuHmIuyPTFmi1JpABe4q2ajskiJtfBf+WDAL2pg595R9JNoPrrH5+aT9lbkx2noicw==",
+ "license": "MIT",
"dependencies": {
- "@expressive-code/core": "^0.38.3"
+ "@expressive-code/core": "^0.41.2"
}
},
"node_modules/@expressive-code/plugin-shiki": {
- "version": "0.38.3",
- "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.38.3.tgz",
- "integrity": "sha512-kqHnglZeesqG3UKrb6e9Fq5W36AZ05Y9tCREmSN2lw8LVTqENIeCIkLDdWtQ5VoHlKqwUEQFTVlRehdwoY7Gmw==",
+ "version": "0.41.2",
+ "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.41.2.tgz",
+ "integrity": "sha512-xD4zwqAkDccXqye+235BH5bN038jYiSMLfUrCOmMlzxPDGWdxJDk5z4uUB/aLfivEF2tXyO2zyaarL3Oqht0fQ==",
+ "license": "MIT",
"dependencies": {
- "@expressive-code/core": "^0.38.3",
- "shiki": "^1.22.2"
+ "@expressive-code/core": "^0.41.2",
+ "shiki": "^3.2.2"
}
},
"node_modules/@expressive-code/plugin-text-markers": {
- "version": "0.38.3",
- "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.38.3.tgz",
- "integrity": "sha512-dPK3+BVGTbTmGQGU3Fkj3jZ3OltWUAlxetMHI6limUGCWBCucZiwoZeFM/WmqQa71GyKRzhBT+iEov6kkz2xVA==",
+ "version": "0.41.2",
+ "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.41.2.tgz",
+ "integrity": "sha512-JFWBz2qYxxJOJkkWf96LpeolbnOqJY95TvwYc0hXIHf9oSWV0h0SY268w/5N3EtQaD9KktzDE+VIVwb9jdb3nw==",
+ "license": "MIT",
"dependencies": {
- "@expressive-code/core": "^0.38.3"
+ "@expressive-code/core": "^0.41.2"
}
},
"node_modules/@fontsource/ibm-plex-mono": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@fontsource/ibm-plex-mono/-/ibm-plex-mono-5.1.1.tgz",
- "integrity": "sha512-1aayqPe/ZkD3MlvqpmOHecfA3f2B8g+fAEkgvcCd3lkPP0pS1T0xG5Zmn2EsJQqr1JURtugPUH+5NqvKyfFZMQ=="
+ "version": "5.2.6",
+ "resolved": "https://registry.npmjs.org/@fontsource/ibm-plex-mono/-/ibm-plex-mono-5.2.6.tgz",
+ "integrity": "sha512-LTZJNTcpoT19fmwERZNMDI+ljHueuyhF2Qn+bICJ4Y4hxBLAAoJ2MRsGnyp0QNutW6t/25eyZpvaUK1LDrCo7Q==",
+ "license": "OFL-1.1",
+ "funding": {
+ "url": "https://github.com/sponsors/ayuhito"
+ }
},
"node_modules/@fontsource/ibm-plex-sans": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@fontsource/ibm-plex-sans/-/ibm-plex-sans-5.1.1.tgz",
- "integrity": "sha512-s6xHuHCYxZbIZV0Qchw+EoucPYWCP3PgLs9+oF3u1kLQKwabWaUC3Fm30y6n3VIMCqR89dpkcS8LTqH/IGTDDQ=="
+ "version": "5.2.6",
+ "resolved": "https://registry.npmjs.org/@fontsource/ibm-plex-sans/-/ibm-plex-sans-5.2.6.tgz",
+ "integrity": "sha512-yclktpagJncROwdWHHEfPsrIfoo3uiIeDFchvmjNmTW/YMBfLYWJnUv19EAqPNhGizdtmcH9FjzOR2094Z2uPg==",
+ "license": "OFL-1.1",
+ "funding": {
+ "url": "https://github.com/sponsors/ayuhito"
+ }
},
"node_modules/@humanwhocodes/momoa": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-2.0.4.tgz",
"integrity": "sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==",
+ "license": "Apache-2.0",
"engines": {
"node": ">=10.10.0"
}
@@ -845,6 +913,7 @@
"cpu": [
"arm64"
],
+ "license": "Apache-2.0",
"optional": true,
"os": [
"darwin"
@@ -866,6 +935,7 @@
"cpu": [
"x64"
],
+ "license": "Apache-2.0",
"optional": true,
"os": [
"darwin"
@@ -887,6 +957,7 @@
"cpu": [
"arm64"
],
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"darwin"
@@ -902,6 +973,7 @@
"cpu": [
"x64"
],
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"darwin"
@@ -917,6 +989,7 @@
"cpu": [
"arm"
],
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
@@ -932,6 +1005,7 @@
"cpu": [
"arm64"
],
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
@@ -947,6 +1021,7 @@
"cpu": [
"s390x"
],
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
@@ -962,6 +1037,7 @@
"cpu": [
"x64"
],
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
@@ -977,6 +1053,7 @@
"cpu": [
"arm64"
],
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
@@ -992,6 +1069,7 @@
"cpu": [
"x64"
],
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
@@ -1007,6 +1085,7 @@
"cpu": [
"arm"
],
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1028,6 +1107,7 @@
"cpu": [
"arm64"
],
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1049,6 +1129,7 @@
"cpu": [
"s390x"
],
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1070,6 +1151,7 @@
"cpu": [
"x64"
],
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1091,6 +1173,7 @@
"cpu": [
"arm64"
],
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1112,6 +1195,7 @@
"cpu": [
"x64"
],
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1133,6 +1217,7 @@
"cpu": [
"wasm32"
],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
"optional": true,
"dependencies": {
"@emnapi/runtime": "^1.2.0"
@@ -1151,6 +1236,7 @@
"cpu": [
"ia32"
],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
"optional": true,
"os": [
"win32"
@@ -1169,6 +1255,7 @@
"cpu": [
"x64"
],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
"optional": true,
"os": [
"win32"
@@ -1180,63 +1267,23 @@
"url": "https://opencollective.com/libvips"
}
},
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "node_modules/@isaacs/fs-minipass": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
+ "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
+ "license": "ISC",
"dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ "minipass": "^7.0.4"
},
"engines": {
- "node": ">=12"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
- },
- "node_modules/@isaacs/cliui/node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "node": ">=18.0.0"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
"integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -1250,6 +1297,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
@@ -1258,6 +1306,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
@@ -1265,12 +1314,14 @@
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
@@ -1279,12 +1330,14 @@
"node_modules/@jsdevtools/ono": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
- "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg=="
+ "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
+ "license": "MIT"
},
"node_modules/@mdx-js/mdx": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz",
"integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"@types/estree-jsx": "^1.0.0",
@@ -1320,6 +1373,7 @@
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -1332,6 +1386,7 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
@@ -1340,6 +1395,7 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -1351,7 +1407,8 @@
"node_modules/@oslojs/encoding": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz",
- "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="
+ "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==",
+ "license": "MIT"
},
"node_modules/@pagefind/darwin-arm64": {
"version": "1.3.0",
@@ -1360,6 +1417,7 @@
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -1372,6 +1430,7 @@
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -1380,7 +1439,8 @@
"node_modules/@pagefind/default-ui": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.3.0.tgz",
- "integrity": "sha512-CGKT9ccd3+oRK6STXGgfH+m0DbOKayX6QGlq38TfE1ZfUcPc5+ulTuzDbZUnMo+bubsEOIypm4Pl2iEyzZ1cNg=="
+ "integrity": "sha512-CGKT9ccd3+oRK6STXGgfH+m0DbOKayX6QGlq38TfE1ZfUcPc5+ulTuzDbZUnMo+bubsEOIypm4Pl2iEyzZ1cNg==",
+ "license": "MIT"
},
"node_modules/@pagefind/linux-arm64": {
"version": "1.3.0",
@@ -1389,6 +1449,7 @@
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -1401,6 +1462,7 @@
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -1413,88 +1475,57 @@
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
"node_modules/@readme/better-ajv-errors": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@readme/better-ajv-errors/-/better-ajv-errors-1.6.0.tgz",
- "integrity": "sha512-9gO9rld84Jgu13kcbKRU+WHseNhaVt76wYMeRDGsUGYxwJtI3RmEJ9LY9dZCYQGI8eUZLuxb5qDja0nqklpFjQ==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@readme/better-ajv-errors/-/better-ajv-errors-2.3.2.tgz",
+ "integrity": "sha512-T4GGnRAlY3C339NhoUpgJJFsMYko9vIgFAlhgV+/vEGFw66qEY4a4TRJIAZBcX/qT1pq5DvXSme+SQODHOoBrw==",
+ "license": "Apache-2.0",
"dependencies": {
- "@babel/code-frame": "^7.16.0",
- "@babel/runtime": "^7.21.0",
+ "@babel/code-frame": "^7.22.5",
+ "@babel/runtime": "^7.22.5",
"@humanwhocodes/momoa": "^2.0.3",
- "chalk": "^4.1.2",
- "json-to-ast": "^2.0.3",
"jsonpointer": "^5.0.0",
- "leven": "^3.1.0"
+ "leven": "^3.1.0",
+ "picocolors": "^1.1.1"
},
"engines": {
- "node": ">=14"
+ "node": ">=18"
},
"peerDependencies": {
"ajv": "4.11.8 - 8"
}
},
- "node_modules/@readme/better-ajv-errors/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@readme/better-ajv-errors/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
"node_modules/@readme/json-schema-ref-parser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@readme/json-schema-ref-parser/-/json-schema-ref-parser-1.2.0.tgz",
- "integrity": "sha512-Bt3QVovFSua4QmHa65EHUmh2xS0XJ3rgTEUPH998f4OW4VVJke3BuS16f+kM0ZLOGdvIrzrPRqwihuv5BAjtrA==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@readme/json-schema-ref-parser/-/json-schema-ref-parser-1.2.1.tgz",
+ "integrity": "sha512-FKCnFnpKklBPu8atyXqmSRBPSYlZLdcdbIilX19y0vVFiVthqKV9SQp4GZ8L4rOqSVmjn14uZ4Ono5tZKMr1SQ==",
+ "deprecated": "This package is no longer maintained. Please use `@apidevtools/json-schema-ref-parser` instead.",
+ "license": "MIT",
"dependencies": {
"@jsdevtools/ono": "^7.1.3",
- "@types/json-schema": "^7.0.6",
+ "@types/json-schema": "^7.0.12",
"call-me-maybe": "^1.0.1",
"js-yaml": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@readme/openapi-parser": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@readme/openapi-parser/-/openapi-parser-2.6.0.tgz",
- "integrity": "sha512-pyFJXezWj9WI1O+gdp95CoxfY+i+Uq3kKk4zXIFuRAZi9YnHpHOpjumWWr67wkmRTw19Hskh9spyY0Iyikf3fA==",
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/@readme/openapi-parser/-/openapi-parser-2.7.0.tgz",
+ "integrity": "sha512-P8WSr8WTOxilnT89tcCRKWYsG/II4sAwt1a/DIWub8xTtkrG9cCBBy/IUcvc5X8oGWN82MwcTA3uEkDrXZd/7A==",
+ "license": "MIT",
"dependencies": {
"@apidevtools/swagger-methods": "^3.0.2",
"@jsdevtools/ono": "^7.1.3",
- "@readme/better-ajv-errors": "^1.6.0",
+ "@readme/better-ajv-errors": "^2.0.0",
"@readme/json-schema-ref-parser": "^1.2.0",
"@readme/openapi-schemas": "^3.1.0",
"ajv": "^8.12.0",
@@ -1512,6 +1543,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@readme/openapi-schemas/-/openapi-schemas-3.1.0.tgz",
"integrity": "sha512-9FC/6ho8uFa8fV50+FPy/ngWN53jaUu4GRXlAjcxIRrzhltJnpKkBG2Tp0IDraFJeWrOpk84RJ9EMEEYzaI1Bw==",
+ "license": "MIT",
"engines": {
"node": ">=18"
}
@@ -1520,6 +1552,7 @@
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz",
"integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"estree-walker": "^2.0.2",
@@ -1540,336 +1573,645 @@
"node_modules/@rollup/pluginutils/node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT"
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.29.1.tgz",
- "integrity": "sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.43.0.tgz",
+ "integrity": "sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw==",
"cpu": [
"arm"
],
+ "license": "MIT",
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.29.1.tgz",
- "integrity": "sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.43.0.tgz",
+ "integrity": "sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.29.1.tgz",
- "integrity": "sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.43.0.tgz",
+ "integrity": "sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.29.1.tgz",
- "integrity": "sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.43.0.tgz",
+ "integrity": "sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.29.1.tgz",
- "integrity": "sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.43.0.tgz",
+ "integrity": "sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"freebsd"
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.29.1.tgz",
- "integrity": "sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.43.0.tgz",
+ "integrity": "sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"freebsd"
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.29.1.tgz",
- "integrity": "sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.43.0.tgz",
+ "integrity": "sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw==",
"cpu": [
"arm"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.29.1.tgz",
- "integrity": "sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.43.0.tgz",
+ "integrity": "sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw==",
"cpu": [
"arm"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.29.1.tgz",
- "integrity": "sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.43.0.tgz",
+ "integrity": "sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.29.1.tgz",
- "integrity": "sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.43.0.tgz",
+ "integrity": "sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.29.1.tgz",
- "integrity": "sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.43.0.tgz",
+ "integrity": "sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg==",
"cpu": [
"loong64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.29.1.tgz",
- "integrity": "sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.43.0.tgz",
+ "integrity": "sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw==",
"cpu": [
"ppc64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.29.1.tgz",
- "integrity": "sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.43.0.tgz",
+ "integrity": "sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g==",
"cpu": [
"riscv64"
],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.43.0.tgz",
+ "integrity": "sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.29.1.tgz",
- "integrity": "sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.43.0.tgz",
+ "integrity": "sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw==",
"cpu": [
"s390x"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.29.1.tgz",
- "integrity": "sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.43.0.tgz",
+ "integrity": "sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.29.1.tgz",
- "integrity": "sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.43.0.tgz",
+ "integrity": "sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.29.1.tgz",
- "integrity": "sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.43.0.tgz",
+ "integrity": "sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.29.1.tgz",
- "integrity": "sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.43.0.tgz",
+ "integrity": "sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw==",
"cpu": [
"ia32"
],
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.1.tgz",
- "integrity": "sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.43.0.tgz",
+ "integrity": "sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw==",
"cpu": [
"x64"
],
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@shikijs/core": {
- "version": "1.26.1",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.26.1.tgz",
- "integrity": "sha512-yeo7sG+WZQblKPclUOKRPwkv1PyoHYkJ4gP9DzhFJbTdueKR7wYTI1vfF/bFi1NTgc545yG/DzvVhZgueVOXMA==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.6.0.tgz",
+ "integrity": "sha512-9By7Xb3olEX0o6UeJyPLI1PE1scC4d3wcVepvtv2xbuN9/IThYN4Wcwh24rcFeASzPam11MCq8yQpwwzCgSBRw==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/engine-javascript": "1.26.1",
- "@shikijs/engine-oniguruma": "1.26.1",
- "@shikijs/types": "1.26.1",
- "@shikijs/vscode-textmate": "^10.0.1",
+ "@shikijs/types": "3.6.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4",
- "hast-util-to-html": "^9.0.4"
+ "hast-util-to-html": "^9.0.5"
}
},
"node_modules/@shikijs/engine-javascript": {
- "version": "1.26.1",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.26.1.tgz",
- "integrity": "sha512-CRhA0b8CaSLxS0E9A4Bzcb3LKBNpykfo9F85ozlNyArxjo2NkijtiwrJZ6eHa+NT5I9Kox2IXVdjUsP4dilsmw==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.6.0.tgz",
+ "integrity": "sha512-7YnLhZG/TU05IHMG14QaLvTW/9WiK8SEYafceccHUSXs2Qr5vJibUwsDfXDLmRi0zHdzsxrGKpSX6hnqe0k8nA==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/types": "1.26.1",
- "@shikijs/vscode-textmate": "^10.0.1",
- "oniguruma-to-es": "0.10.0"
+ "@shikijs/types": "3.6.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "oniguruma-to-es": "^4.3.3"
}
},
"node_modules/@shikijs/engine-oniguruma": {
- "version": "1.26.1",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.26.1.tgz",
- "integrity": "sha512-F5XuxN1HljLuvfXv7d+mlTkV7XukC1cawdtOo+7pKgPD83CAB1Sf8uHqP3PK0u7njFH0ZhoXE1r+0JzEgAQ+kg==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.6.0.tgz",
+ "integrity": "sha512-nmOhIZ9yT3Grd+2plmW/d8+vZ2pcQmo/UnVwXMUXAKTXdi+LK0S08Ancrz5tQQPkxvjBalpMW2aKvwXfelauvA==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/types": "1.26.1",
- "@shikijs/vscode-textmate": "^10.0.1"
+ "@shikijs/types": "3.6.0",
+ "@shikijs/vscode-textmate": "^10.0.2"
}
},
"node_modules/@shikijs/langs": {
- "version": "1.26.1",
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-1.26.1.tgz",
- "integrity": "sha512-oz/TQiIqZejEIZbGtn68hbJijAOTtYH4TMMSWkWYozwqdpKR3EXgILneQy26WItmJjp3xVspHdiUxUCws4gtuw==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.6.0.tgz",
+ "integrity": "sha512-IdZkQJaLBu1LCYCwkr30hNuSDfllOT8RWYVZK1tD2J03DkiagYKRxj/pDSl8Didml3xxuyzUjgtioInwEQM/TA==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/types": "1.26.1"
+ "@shikijs/types": "3.6.0"
}
},
"node_modules/@shikijs/themes": {
- "version": "1.26.1",
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-1.26.1.tgz",
- "integrity": "sha512-JDxVn+z+wgLCiUhBGx2OQrLCkKZQGzNH3nAxFir4PjUcYiyD8Jdms9izyxIogYmSwmoPTatFTdzyrRKbKlSfPA==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.6.0.tgz",
+ "integrity": "sha512-Fq2j4nWr1DF4drvmhqKq8x5vVQ27VncF8XZMBuHuQMZvUSS3NBgpqfwz/FoGe36+W6PvniZ1yDlg2d4kmYDU6w==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/types": "1.26.1"
+ "@shikijs/types": "3.6.0"
}
},
"node_modules/@shikijs/types": {
- "version": "1.26.1",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.26.1.tgz",
- "integrity": "sha512-d4B00TKKAMaHuFYgRf3L0gwtvqpW4hVdVwKcZYbBfAAQXspgkbWqnFfuFl3MDH6gLbsubOcr+prcnsqah3ny7Q==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.6.0.tgz",
+ "integrity": "sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/vscode-textmate": "^10.0.1",
+ "@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4"
}
},
"node_modules/@shikijs/vscode-textmate": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.1.tgz",
- "integrity": "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg=="
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+ "license": "MIT"
},
- "node_modules/@types/acorn": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz",
- "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==",
+ "node_modules/@swc/helpers": {
+ "version": "0.5.17",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz",
+ "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
+ "license": "Apache-2.0",
"dependencies": {
- "@types/estree": "*"
+ "tslib": "^2.8.0"
}
},
- "node_modules/@types/cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="
+ "node_modules/@tailwindcss/node": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.10.tgz",
+ "integrity": "sha512-2ACf1znY5fpRBwRhMgj9ZXvb2XZW8qs+oTfotJ2C5xR0/WNL7UHZ7zXl6s+rUqedL1mNi+0O+WQr5awGowS3PQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.3.0",
+ "enhanced-resolve": "^5.18.1",
+ "jiti": "^2.4.2",
+ "lightningcss": "1.30.1",
+ "magic-string": "^0.30.17",
+ "source-map-js": "^1.2.1",
+ "tailwindcss": "4.1.10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.10.tgz",
+ "integrity": "sha512-v0C43s7Pjw+B9w21htrQwuFObSkio2aV/qPx/mhrRldbqxbWJK6KizM+q7BF1/1CmuLqZqX3CeYF7s7P9fbA8Q==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "detect-libc": "^2.0.4",
+ "tar": "^7.4.3"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "optionalDependencies": {
+ "@tailwindcss/oxide-android-arm64": "4.1.10",
+ "@tailwindcss/oxide-darwin-arm64": "4.1.10",
+ "@tailwindcss/oxide-darwin-x64": "4.1.10",
+ "@tailwindcss/oxide-freebsd-x64": "4.1.10",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.10",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.1.10",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.1.10",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.1.10",
+ "@tailwindcss/oxide-linux-x64-musl": "4.1.10",
+ "@tailwindcss/oxide-wasm32-wasi": "4.1.10",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.1.10",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.1.10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-android-arm64": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.10.tgz",
+ "integrity": "sha512-VGLazCoRQ7rtsCzThaI1UyDu/XRYVyH4/EWiaSX6tFglE+xZB5cvtC5Omt0OQ+FfiIVP98su16jDVHDEIuH4iQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.10.tgz",
+ "integrity": "sha512-ZIFqvR1irX2yNjWJzKCqTCcHZbgkSkSkZKbRM3BPzhDL/18idA8uWCoopYA2CSDdSGFlDAxYdU2yBHwAwx8euQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-x64": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.10.tgz",
+ "integrity": "sha512-eCA4zbIhWUFDXoamNztmS0MjXHSEJYlvATzWnRiTqJkcUteSjO94PoRHJy1Xbwp9bptjeIxxBHh+zBWFhttbrQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.10.tgz",
+ "integrity": "sha512-8/392Xu12R0cc93DpiJvNpJ4wYVSiciUlkiOHOSOQNH3adq9Gi/dtySK7dVQjXIOzlpSHjeCL89RUUI8/GTI6g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.10.tgz",
+ "integrity": "sha512-t9rhmLT6EqeuPT+MXhWhlRYIMSfh5LZ6kBrC4FS6/+M1yXwfCtp24UumgCWOAJVyjQwG+lYva6wWZxrfvB+NhQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.10.tgz",
+ "integrity": "sha512-3oWrlNlxLRxXejQ8zImzrVLuZ/9Z2SeKoLhtCu0hpo38hTO2iL86eFOu4sVR8cZc6n3z7eRXXqtHJECa6mFOvA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.10.tgz",
+ "integrity": "sha512-saScU0cmWvg/Ez4gUmQWr9pvY9Kssxt+Xenfx1LG7LmqjcrvBnw4r9VjkFcqmbBb7GCBwYNcZi9X3/oMda9sqQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.10.tgz",
+ "integrity": "sha512-/G3ao/ybV9YEEgAXeEg28dyH6gs1QG8tvdN9c2MNZdUXYBaIY/Gx0N6RlJzfLy/7Nkdok4kaxKPHKJUlAaoTdA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.10.tgz",
+ "integrity": "sha512-LNr7X8fTiKGRtQGOerSayc2pWJp/9ptRYAa4G+U+cjw9kJZvkopav1AQc5HHD+U364f71tZv6XamaHKgrIoVzA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-wasm32-wasi": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.10.tgz",
+ "integrity": "sha512-d6ekQpopFQJAcIK2i7ZzWOYGZ+A6NzzvQ3ozBvWFdeyqfOZdYHU66g5yr+/HC4ipP1ZgWsqa80+ISNILk+ae/Q==",
+ "bundleDependencies": [
+ "@napi-rs/wasm-runtime",
+ "@emnapi/core",
+ "@emnapi/runtime",
+ "@tybys/wasm-util",
+ "@emnapi/wasi-threads",
+ "tslib"
+ ],
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.4.3",
+ "@emnapi/runtime": "^1.4.3",
+ "@emnapi/wasi-threads": "^1.0.2",
+ "@napi-rs/wasm-runtime": "^0.2.10",
+ "@tybys/wasm-util": "^0.9.0",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.10.tgz",
+ "integrity": "sha512-i1Iwg9gRbwNVOCYmnigWCCgow8nDWSFmeTUU5nbNx3rqbe4p0kRbEqLwLJbYZKmSSp23g4N6rCDmm7OuPBXhDA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.10.tgz",
+ "integrity": "sha512-sGiJTjcBSfGq2DVRtaSljq5ZgZS2SDHSIfhOylkBvHVjwOsodBhnb3HdmiKkVuUGKD0I7G63abMOVaskj1KpOA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/vite": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.10.tgz",
+ "integrity": "sha512-QWnD5HDY2IADv+vYR82lOhqOlS1jSCUUAmfem52cXAhRTKxpDh3ARX8TTXJTCCO7Rv7cD2Nlekabv02bwP3a2A==",
+ "license": "MIT",
+ "dependencies": {
+ "@tailwindcss/node": "4.1.10",
+ "@tailwindcss/oxide": "4.1.10",
+ "tailwindcss": "4.1.10"
+ },
+ "peerDependencies": {
+ "vite": "^5.2.0 || ^6"
+ }
},
"node_modules/@types/debug": {
"version": "4.1.12",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
"integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
+ "license": "MIT",
"dependencies": {
"@types/ms": "*"
}
},
"node_modules/@types/estree": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
- "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "license": "MIT"
},
"node_modules/@types/estree-jsx": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
"integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "*"
}
},
+ "node_modules/@types/fontkit": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/@types/fontkit/-/fontkit-2.0.8.tgz",
+ "integrity": "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/hast": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
"integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "*"
}
@@ -1877,17 +2219,20 @@
"node_modules/@types/js-yaml": {
"version": "4.0.9",
"resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz",
- "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg=="
+ "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==",
+ "license": "MIT"
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "license": "MIT"
},
"node_modules/@types/mdast": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
"integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "*"
}
@@ -1895,33 +2240,38 @@
"node_modules/@types/mdx": {
"version": "2.0.13",
"resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz",
- "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="
+ "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==",
+ "license": "MIT"
},
"node_modules/@types/ms": {
- "version": "0.7.34",
- "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
- "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+ "license": "MIT"
},
"node_modules/@types/nlcst": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
"integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "*"
}
},
"node_modules/@types/node": {
- "version": "22.10.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz",
- "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==",
+ "version": "24.0.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.1.tgz",
+ "integrity": "sha512-MX4Zioh39chHlDJbKmEgydJDS3tspMP/lnQC67G3SWsTnb9NeYVWOjkxpOSy4oMfPs4StcWHwBrvUb4ybfnuaw==",
+ "license": "MIT",
"dependencies": {
- "undici-types": "~6.20.0"
+ "undici-types": "~7.8.0"
}
},
"node_modules/@types/sax": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
"integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==",
+ "license": "MIT",
"dependencies": {
"@types/node": "*"
}
@@ -1929,20 +2279,23 @@
"node_modules/@types/unist": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
- "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
},
"node_modules/@ungap/structured-clone": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz",
- "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA=="
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "license": "ISC"
},
"node_modules/@volar/kit": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.4.11.tgz",
- "integrity": "sha512-ups5RKbMzMCr6RKafcCqDRnJhJDNWqo2vfekwOAj6psZ15v5TlcQFQAyokQJ3wZxVkzxrQM+TqTRDENfQEXpmA==",
+ "version": "2.4.14",
+ "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.4.14.tgz",
+ "integrity": "sha512-kBcmHjEodtmYGJELHePZd2JdeYm4ZGOd9F/pQ1YETYIzAwy4Z491EkJ1nRSo/GTxwKt0XYwYA/dHSEgXecVHRA==",
+ "license": "MIT",
"dependencies": {
- "@volar/language-service": "2.4.11",
- "@volar/typescript": "2.4.11",
+ "@volar/language-service": "2.4.14",
+ "@volar/typescript": "2.4.14",
"typesafe-path": "^0.2.2",
"vscode-languageserver-textdocument": "^1.0.11",
"vscode-uri": "^3.0.8"
@@ -1952,21 +2305,23 @@
}
},
"node_modules/@volar/language-core": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz",
- "integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==",
+ "version": "2.4.14",
+ "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.14.tgz",
+ "integrity": "sha512-X6beusV0DvuVseaOEy7GoagS4rYHgDHnTrdOj5jeUb49fW5ceQyP9Ej5rBhqgz2wJggl+2fDbbojq1XKaxDi6w==",
+ "license": "MIT",
"dependencies": {
- "@volar/source-map": "2.4.11"
+ "@volar/source-map": "2.4.14"
}
},
"node_modules/@volar/language-server": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.11.tgz",
- "integrity": "sha512-W9P8glH1M8LGREJ7yHRCANI5vOvTrRO15EMLdmh5WNF9sZYSEbQxiHKckZhvGIkbeR1WAlTl3ORTrJXUghjk7g==",
+ "version": "2.4.14",
+ "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.14.tgz",
+ "integrity": "sha512-P3mGbQbW0v40UYBnb3DAaNtRYx6/MGOVKzdOWmBCGwjUkCR2xBkGrCFt05XnPDwFS/cTWDh2U6Mc9lpZ8Aecfw==",
+ "license": "MIT",
"dependencies": {
- "@volar/language-core": "2.4.11",
- "@volar/language-service": "2.4.11",
- "@volar/typescript": "2.4.11",
+ "@volar/language-core": "2.4.14",
+ "@volar/language-service": "2.4.14",
+ "@volar/typescript": "2.4.14",
"path-browserify": "^1.0.1",
"request-light": "^0.7.0",
"vscode-languageserver": "^9.0.1",
@@ -1976,27 +2331,30 @@
}
},
"node_modules/@volar/language-service": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.11.tgz",
- "integrity": "sha512-KIb6g8gjUkS2LzAJ9bJCLIjfsJjeRtmXlu7b2pDFGD3fNqdbC53cCAKzgWDs64xtQVKYBU13DLWbtSNFtGuMLQ==",
+ "version": "2.4.14",
+ "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.14.tgz",
+ "integrity": "sha512-vNC3823EJohdzLTyjZoCMPwoWCfINB5emusniCkW5CGoGHQov4VVmT6yI5ncgP/NpgAIUv2NEkJooXvLHA4VeQ==",
+ "license": "MIT",
"dependencies": {
- "@volar/language-core": "2.4.11",
+ "@volar/language-core": "2.4.14",
"vscode-languageserver-protocol": "^3.17.5",
"vscode-languageserver-textdocument": "^1.0.11",
"vscode-uri": "^3.0.8"
}
},
"node_modules/@volar/source-map": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.11.tgz",
- "integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ=="
+ "version": "2.4.14",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.14.tgz",
+ "integrity": "sha512-5TeKKMh7Sfxo8021cJfmBzcjfY1SsXsPMMjMvjY7ivesdnybqqS+GxGAoXHAOUawQTwtdUxgP65Im+dEmvWtYQ==",
+ "license": "MIT"
},
"node_modules/@volar/typescript": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.11.tgz",
- "integrity": "sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==",
+ "version": "2.4.14",
+ "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.14.tgz",
+ "integrity": "sha512-p8Z6f/bZM3/HyCdRNFZOEEzts51uV8WHeN8Tnfnm2EBv6FDB2TQLzfVx7aJvnl8ofKAOnS64B2O8bImBFaauRw==",
+ "license": "MIT",
"dependencies": {
- "@volar/language-core": "2.4.11",
+ "@volar/language-core": "2.4.14",
"path-browserify": "^1.0.1",
"vscode-uri": "^3.0.8"
}
@@ -2005,6 +2363,7 @@
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.11.0.tgz",
"integrity": "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==",
+ "license": "MIT",
"dependencies": {
"emmet": "^2.4.3",
"jsonc-parser": "^2.3.0",
@@ -2016,12 +2375,14 @@
"node_modules/@vscode/l10n": {
"version": "0.0.18",
"resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
- "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="
+ "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==",
+ "license": "MIT"
},
"node_modules/acorn": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
- "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -2033,6 +2394,7 @@
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "license": "MIT",
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
@@ -2041,6 +2403,7 @@
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -2056,6 +2419,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz",
"integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==",
+ "license": "MIT",
"peerDependencies": {
"ajv": "^8.5.0"
},
@@ -2069,6 +2433,7 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
"integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
+ "license": "ISC",
"dependencies": {
"string-width": "^4.1.0"
}
@@ -2077,6 +2442,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2084,12 +2450,14 @@
"node_modules/ansi-align/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
},
"node_modules/ansi-align/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -2103,6 +2471,7 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -2114,6 +2483,7 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -2125,6 +2495,7 @@
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -2132,15 +2503,11 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
- },
"node_modules/anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -2153,6 +2520,7 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
"engines": {
"node": ">=8.6"
},
@@ -2163,17 +2531,20 @@
"node_modules/arg": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "license": "MIT"
},
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "license": "Python-2.0"
},
"node_modules/aria-query": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
"integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "license": "Apache-2.0",
"engines": {
"node": ">= 0.4"
}
@@ -2182,6 +2553,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz",
"integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2191,93 +2563,102 @@
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz",
"integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==",
+ "license": "MIT",
"bin": {
"astring": "bin/astring"
}
},
"node_modules/astro": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/astro/-/astro-5.1.2.tgz",
- "integrity": "sha512-+U5lXPEJZ6cQx0botGbPhzN6XGWRgDtXgy/RUkpTmUj18LW6pbzYo0O0k3hFWOazlI039bZ+4P2e/oSNlKzm0Q==",
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/astro/-/astro-5.9.3.tgz",
+ "integrity": "sha512-VReZrpUa/3rfeiVvsQ1A2M3ujDPI+pDGIYOMtXPEZwut8tZoEyealXXLjitgCsJ+3dunKGZbg4Eak6i+r0vniw==",
+ "license": "MIT",
"dependencies": {
- "@astrojs/compiler": "^2.10.3",
- "@astrojs/internal-helpers": "0.4.2",
- "@astrojs/markdown-remark": "6.0.1",
- "@astrojs/telemetry": "3.2.0",
+ "@astrojs/compiler": "^2.12.2",
+ "@astrojs/internal-helpers": "0.6.1",
+ "@astrojs/markdown-remark": "6.3.2",
+ "@astrojs/telemetry": "3.3.0",
+ "@capsizecss/unpack": "^2.4.0",
"@oslojs/encoding": "^1.1.0",
- "@rollup/pluginutils": "^5.1.3",
- "@types/cookie": "^0.6.0",
- "acorn": "^8.14.0",
+ "@rollup/pluginutils": "^5.1.4",
+ "acorn": "^8.14.1",
"aria-query": "^5.3.2",
"axobject-query": "^4.1.0",
"boxen": "8.0.1",
- "ci-info": "^4.1.0",
+ "ci-info": "^4.2.0",
"clsx": "^2.1.1",
"common-ancestor-path": "^1.0.1",
- "cookie": "^0.7.2",
+ "cookie": "^1.0.2",
"cssesc": "^3.0.0",
- "debug": "^4.3.7",
+ "debug": "^4.4.0",
"deterministic-object-hash": "^2.0.2",
"devalue": "^5.1.1",
"diff": "^5.2.0",
"dlv": "^1.1.3",
"dset": "^3.1.4",
- "es-module-lexer": "^1.5.4",
- "esbuild": "^0.21.5",
+ "es-module-lexer": "^1.6.0",
+ "esbuild": "^0.25.0",
"estree-walker": "^3.0.3",
- "fast-glob": "^3.3.2",
"flattie": "^1.1.1",
+ "fontace": "~0.3.0",
"github-slugger": "^2.0.0",
- "html-escaper": "^3.0.3",
+ "html-escaper": "3.0.3",
"http-cache-semantics": "^4.1.1",
+ "import-meta-resolve": "^4.1.0",
"js-yaml": "^4.1.0",
"kleur": "^4.1.5",
- "magic-string": "^0.30.14",
+ "magic-string": "^0.30.17",
"magicast": "^0.3.5",
- "micromatch": "^4.0.8",
- "mrmime": "^2.0.0",
+ "mrmime": "^2.0.1",
"neotraverse": "^0.6.18",
- "p-limit": "^6.1.0",
- "p-queue": "^8.0.1",
- "preferred-pm": "^4.0.0",
+ "p-limit": "^6.2.0",
+ "p-queue": "^8.1.0",
+ "package-manager-detector": "^1.1.0",
+ "picomatch": "^4.0.2",
"prompts": "^2.4.2",
"rehype": "^13.0.2",
- "semver": "^7.6.3",
- "shiki": "^1.23.1",
- "tinyexec": "^0.3.1",
- "tsconfck": "^3.1.4",
- "ultrahtml": "^1.5.3",
+ "semver": "^7.7.1",
+ "shiki": "^3.2.1",
+ "tinyexec": "^0.3.2",
+ "tinyglobby": "^0.2.12",
+ "tsconfck": "^3.1.5",
+ "ultrahtml": "^1.6.0",
+ "unifont": "~0.5.0",
"unist-util-visit": "^5.0.0",
- "unstorage": "^1.14.0",
+ "unstorage": "^1.15.0",
"vfile": "^6.0.3",
- "vite": "^6.0.5",
- "vitefu": "^1.0.4",
- "which-pm": "^3.0.0",
+ "vite": "^6.3.4",
+ "vitefu": "^1.0.6",
"xxhash-wasm": "^1.1.0",
"yargs-parser": "^21.1.1",
- "yocto-spinner": "^0.1.0",
- "zod": "^3.23.8",
- "zod-to-json-schema": "^3.23.5",
+ "yocto-spinner": "^0.2.1",
+ "zod": "^3.24.2",
+ "zod-to-json-schema": "^3.24.5",
"zod-to-ts": "^1.2.0"
},
"bin": {
"astro": "astro.js"
},
"engines": {
- "node": "^18.17.1 || ^20.3.0 || >=22.0.0",
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/astrodotbuild"
+ },
"optionalDependencies": {
"sharp": "^0.33.3"
}
},
"node_modules/astro-expressive-code": {
- "version": "0.38.3",
- "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.38.3.tgz",
- "integrity": "sha512-Tvdc7RV0G92BbtyEOsfJtXU35w41CkM94fOAzxbQP67Wj5jArfserJ321FO4XA7WG9QMV0GIBmQq77NBIRDzpQ==",
+ "version": "0.41.2",
+ "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.41.2.tgz",
+ "integrity": "sha512-HN0jWTnhr7mIV/2e6uu4PPRNNo/k4UEgTLZqbp3MrHU+caCARveG2yZxaZVBmxyiVdYqW5Pd3u3n2zjnshixbw==",
+ "license": "MIT",
"dependencies": {
- "rehype-expressive-code": "^0.38.3"
+ "rehype-expressive-code": "^0.41.2"
},
"peerDependencies": {
"astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0"
@@ -2288,6 +2669,7 @@
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
"integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
"hasInstallScript": true,
+ "license": "Apache-2.0",
"optional": true,
"dependencies": {
"color": "^4.2.3",
@@ -2322,46 +2704,11 @@
"@img/sharp-win32-x64": "0.33.5"
}
},
- "node_modules/autoprefixer": {
- "version": "10.4.20",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
- "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "browserslist": "^4.23.3",
- "caniuse-lite": "^1.0.30001646",
- "fraction.js": "^4.3.7",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.0.1",
- "postcss-value-parser": "^4.2.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
"node_modules/axobject-query": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
"integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "license": "Apache-2.0",
"engines": {
"node": ">= 0.4"
}
@@ -2369,67 +2716,96 @@
"node_modules/b4a": {
"version": "1.6.7",
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz",
- "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg=="
+ "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==",
+ "license": "Apache-2.0"
},
"node_modules/bail": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
"integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
"node_modules/bare-events": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz",
- "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==",
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz",
+ "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==",
+ "license": "Apache-2.0",
"optional": true
},
"node_modules/bare-fs": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz",
- "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz",
+ "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==",
+ "license": "Apache-2.0",
"optional": true,
"dependencies": {
- "bare-events": "^2.0.0",
- "bare-path": "^2.0.0",
- "bare-stream": "^2.0.0"
+ "bare-events": "^2.5.4",
+ "bare-path": "^3.0.0",
+ "bare-stream": "^2.6.4"
+ },
+ "engines": {
+ "bare": ">=1.16.0"
+ },
+ "peerDependencies": {
+ "bare-buffer": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-buffer": {
+ "optional": true
+ }
}
},
"node_modules/bare-os": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz",
- "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==",
- "optional": true
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz",
+ "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "engines": {
+ "bare": ">=1.14.0"
+ }
},
"node_modules/bare-path": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz",
- "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz",
+ "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==",
+ "license": "Apache-2.0",
"optional": true,
"dependencies": {
- "bare-os": "^2.1.0"
+ "bare-os": "^3.0.1"
}
},
"node_modules/bare-stream": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.1.tgz",
- "integrity": "sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==",
+ "version": "2.6.5",
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz",
+ "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==",
+ "license": "Apache-2.0",
"optional": true,
"dependencies": {
"streamx": "^2.21.0"
+ },
+ "peerDependencies": {
+ "bare-buffer": "*",
+ "bare-events": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-buffer": {
+ "optional": true
+ },
+ "bare-events": {
+ "optional": true
+ }
}
},
"node_modules/base-64": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
- "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
+ "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==",
+ "license": "MIT"
},
"node_modules/base64-js": {
"version": "1.5.1",
@@ -2448,12 +2824,14 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/bcp-47": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz",
"integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==",
+ "license": "MIT",
"dependencies": {
"is-alphabetical": "^2.0.0",
"is-alphanumerical": "^2.0.0",
@@ -2468,41 +2846,54 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz",
"integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "license": "MIT",
"dependencies": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
}
},
+ "node_modules/blob-to-buffer": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz",
+ "integrity": "sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "license": "ISC"
},
"node_modules/boxen": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz",
"integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==",
+ "license": "MIT",
"dependencies": {
"ansi-align": "^3.0.1",
"camelcase": "^8.0.0",
@@ -2520,18 +2911,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
"node_modules/braces": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
"dependencies": {
"fill-range": "^7.1.1"
},
@@ -2539,35 +2923,13 @@
"node": ">=8"
}
},
- "node_modules/browserslist": {
- "version": "4.24.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz",
- "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
+ "node_modules/brotli": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
+ "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==",
+ "license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001688",
- "electron-to-chromium": "^1.5.73",
- "node-releases": "^2.0.19",
- "update-browserslist-db": "^1.1.1"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ "base64-js": "^1.1.2"
}
},
"node_modules/buffer": {
@@ -2588,6 +2950,7 @@
"url": "https://feross.org/support"
}
],
+ "license": "MIT",
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
@@ -2596,12 +2959,14 @@
"node_modules/call-me-maybe": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
- "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ=="
+ "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==",
+ "license": "MIT"
},
"node_modules/camelcase": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz",
"integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==",
+ "license": "MIT",
"engines": {
"node": ">=16"
},
@@ -2609,37 +2974,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/camelcase-css": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001690",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz",
- "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ]
- },
"node_modules/ccount": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
"integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2649,6 +2988,7 @@
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz",
"integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
+ "license": "MIT",
"engines": {
"node": "^12.17.0 || ^14.13 || >=16.0.0"
},
@@ -2660,6 +3000,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
"integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2669,6 +3010,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
"integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2678,6 +3020,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
"integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2687,6 +3030,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
"integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2696,6 +3040,7 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "license": "MIT",
"dependencies": {
"readdirp": "^4.0.1"
},
@@ -2709,18 +3054,20 @@
"node_modules/chownr": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "license": "ISC"
},
"node_modules/ci-info": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz",
- "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz",
+ "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/sibiraj-s"
}
],
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2729,6 +3076,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz",
"integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -2740,6 +3088,7 @@
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.1",
@@ -2753,6 +3102,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2761,6 +3111,7 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -2774,12 +3125,14 @@
"node_modules/cliui/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
},
"node_modules/cliui/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -2793,6 +3146,7 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -2804,6 +3158,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -2816,26 +3171,29 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/clsx": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
- "node_modules/code-error-fragment": {
- "version": "0.0.230",
- "resolved": "https://registry.npmjs.org/code-error-fragment/-/code-error-fragment-0.0.230.tgz",
- "integrity": "sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==",
- "engines": {
- "node": ">= 4"
- }
- },
"node_modules/collapse-white-space": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
"integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -2845,6 +3203,7 @@
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1",
"color-string": "^1.9.0"
@@ -2857,6 +3216,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -2867,12 +3227,14 @@
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
},
"node_modules/color-string": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "license": "MIT",
"dependencies": {
"color-name": "^1.0.0",
"simple-swizzle": "^0.2.2"
@@ -2882,70 +3244,55 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
"integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/common-ancestor-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz",
- "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="
- },
- "node_modules/consola": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/consola/-/consola-3.3.3.tgz",
- "integrity": "sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==",
- "engines": {
- "node": "^14.18.0 || >=16.10.0"
- }
+ "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==",
+ "license": "ISC"
},
"node_modules/cookie": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
- "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
+ "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
+ "license": "MIT",
"engines": {
- "node": ">= 0.6"
+ "node": ">=18"
}
},
"node_modules/cookie-es": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz",
- "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="
+ "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==",
+ "license": "MIT"
},
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "node_modules/cross-fetch": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz",
+ "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==",
+ "license": "MIT",
"dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
+ "node-fetch": "^2.7.0"
}
},
"node_modules/crossws": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.1.tgz",
- "integrity": "sha512-HsZgeVYaG+b5zA+9PbIPGq4+J/CJynJuearykPsXx4V/eMhyQ5EDVg3Ak2FBZtVXCiOLu/U7IiwDHTr9MA+IKw==",
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz",
+ "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==",
+ "license": "MIT",
"dependencies": {
"uncrypto": "^0.1.3"
}
},
"node_modules/css-selector-parser": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.0.5.tgz",
- "integrity": "sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-WfUcL99xWDs7b3eZPoRszWVfbNo8ErCF15PTvVROjkShGlAfjIkG6hlfj/sl6/rfo5Q9x9ryJ3VqVnAZDA+gcw==",
"funding": [
{
"type": "github",
@@ -2955,12 +3302,27 @@
"type": "patreon",
"url": "https://patreon.com/mdevils"
}
- ]
+ ],
+ "license": "MIT"
+ },
+ "node_modules/css-tree": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
+ "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.12.2",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
},
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "license": "MIT",
"bin": {
"cssesc": "bin/cssesc"
},
@@ -2969,9 +3331,10 @@
}
},
"node_modules/debug": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
- "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
@@ -2985,9 +3348,10 @@
}
},
"node_modules/decode-named-character-reference": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
- "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz",
+ "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==",
+ "license": "MIT",
"dependencies": {
"character-entities": "^2.0.0"
},
@@ -3000,6 +3364,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "license": "MIT",
"dependencies": {
"mimic-response": "^3.1.0"
},
@@ -3014,6 +3379,7 @@
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "license": "MIT",
"engines": {
"node": ">=4.0.0"
}
@@ -3021,12 +3387,14 @@
"node_modules/defu": {
"version": "6.1.4",
"resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
- "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="
+ "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==",
+ "license": "MIT"
},
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -3035,28 +3403,22 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
"integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/destr": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz",
- "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ=="
- },
- "node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz",
+ "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==",
+ "license": "MIT"
},
"node_modules/detect-libc": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
- "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
+ "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
+ "license": "Apache-2.0",
"engines": {
"node": ">=8"
}
@@ -3065,6 +3427,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz",
"integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==",
+ "license": "MIT",
"dependencies": {
"base-64": "^1.0.0"
},
@@ -3075,12 +3438,14 @@
"node_modules/devalue": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz",
- "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw=="
+ "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==",
+ "license": "MIT"
},
"node_modules/devlop": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
"integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "license": "MIT",
"dependencies": {
"dequal": "^2.0.0"
},
@@ -3089,15 +3454,17 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/didyoumean": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
- "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ "node_modules/dfa": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz",
+ "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==",
+ "license": "MIT"
},
"node_modules/diff": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
"integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
@@ -3106,6 +3473,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz",
"integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==",
+ "license": "MIT",
"bin": {
"direction": "cli.js"
},
@@ -3117,35 +3485,35 @@
"node_modules/dlv": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "license": "MIT"
},
"node_modules/dset": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz",
"integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
- },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.76",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz",
- "integrity": "sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ=="
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "license": "MIT"
},
"node_modules/emmet": {
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.11.tgz",
"integrity": "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==",
+ "license": "MIT",
+ "workspaces": [
+ "./packages/scanner",
+ "./packages/abbreviation",
+ "./packages/css-abbreviation",
+ "./"
+ ],
"dependencies": {
"@emmetio/abbreviation": "^2.3.3",
"@emmetio/css-abbreviation": "^2.1.8"
@@ -3154,17 +3522,14 @@
"node_modules/emoji-regex": {
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
- "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="
- },
- "node_modules/emoji-regex-xs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz",
- "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg=="
+ "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
+ "license": "MIT"
},
"node_modules/encodeurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
"integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -3173,14 +3538,29 @@
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "license": "MIT",
"dependencies": {
"once": "^1.4.0"
}
},
+ "node_modules/enhanced-resolve": {
+ "version": "5.18.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
+ "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
"node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
@@ -3189,14 +3569,16 @@
}
},
"node_modules/es-module-lexer": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz",
- "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ=="
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+ "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "license": "MIT"
},
"node_modules/esast-util-from-estree": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz",
"integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==",
+ "license": "MIT",
"dependencies": {
"@types/estree-jsx": "^1.0.0",
"devlop": "^1.0.0",
@@ -3212,6 +3594,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz",
"integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==",
+ "license": "MIT",
"dependencies": {
"@types/estree-jsx": "^1.0.0",
"acorn": "^8.0.0",
@@ -3224,46 +3607,50 @@
}
},
"node_modules/esbuild": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
- "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz",
+ "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
"hasInstallScript": true,
+ "license": "MIT",
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.21.5",
- "@esbuild/android-arm": "0.21.5",
- "@esbuild/android-arm64": "0.21.5",
- "@esbuild/android-x64": "0.21.5",
- "@esbuild/darwin-arm64": "0.21.5",
- "@esbuild/darwin-x64": "0.21.5",
- "@esbuild/freebsd-arm64": "0.21.5",
- "@esbuild/freebsd-x64": "0.21.5",
- "@esbuild/linux-arm": "0.21.5",
- "@esbuild/linux-arm64": "0.21.5",
- "@esbuild/linux-ia32": "0.21.5",
- "@esbuild/linux-loong64": "0.21.5",
- "@esbuild/linux-mips64el": "0.21.5",
- "@esbuild/linux-ppc64": "0.21.5",
- "@esbuild/linux-riscv64": "0.21.5",
- "@esbuild/linux-s390x": "0.21.5",
- "@esbuild/linux-x64": "0.21.5",
- "@esbuild/netbsd-x64": "0.21.5",
- "@esbuild/openbsd-x64": "0.21.5",
- "@esbuild/sunos-x64": "0.21.5",
- "@esbuild/win32-arm64": "0.21.5",
- "@esbuild/win32-ia32": "0.21.5",
- "@esbuild/win32-x64": "0.21.5"
+ "@esbuild/aix-ppc64": "0.25.5",
+ "@esbuild/android-arm": "0.25.5",
+ "@esbuild/android-arm64": "0.25.5",
+ "@esbuild/android-x64": "0.25.5",
+ "@esbuild/darwin-arm64": "0.25.5",
+ "@esbuild/darwin-x64": "0.25.5",
+ "@esbuild/freebsd-arm64": "0.25.5",
+ "@esbuild/freebsd-x64": "0.25.5",
+ "@esbuild/linux-arm": "0.25.5",
+ "@esbuild/linux-arm64": "0.25.5",
+ "@esbuild/linux-ia32": "0.25.5",
+ "@esbuild/linux-loong64": "0.25.5",
+ "@esbuild/linux-mips64el": "0.25.5",
+ "@esbuild/linux-ppc64": "0.25.5",
+ "@esbuild/linux-riscv64": "0.25.5",
+ "@esbuild/linux-s390x": "0.25.5",
+ "@esbuild/linux-x64": "0.25.5",
+ "@esbuild/netbsd-arm64": "0.25.5",
+ "@esbuild/netbsd-x64": "0.25.5",
+ "@esbuild/openbsd-arm64": "0.25.5",
+ "@esbuild/openbsd-x64": "0.25.5",
+ "@esbuild/sunos-x64": "0.25.5",
+ "@esbuild/win32-arm64": "0.25.5",
+ "@esbuild/win32-ia32": "0.25.5",
+ "@esbuild/win32-x64": "0.25.5"
}
},
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -3271,12 +3658,14 @@
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "license": "MIT"
},
"node_modules/escape-string-regexp": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
"integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -3284,22 +3673,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/estree-util-attach-comments": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
"integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0"
},
@@ -3312,6 +3690,7 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz",
"integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==",
+ "license": "MIT",
"dependencies": {
"@types/estree-jsx": "^1.0.0",
"devlop": "^1.0.0",
@@ -3327,6 +3706,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
"integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
+ "license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
@@ -3336,6 +3716,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz",
"integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"devlop": "^1.0.0"
@@ -3349,6 +3730,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz",
"integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==",
+ "license": "MIT",
"dependencies": {
"@types/estree-jsx": "^1.0.0",
"astring": "^1.8.0",
@@ -3363,6 +3745,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
"integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==",
+ "license": "MIT",
"dependencies": {
"@types/estree-jsx": "^1.0.0",
"@types/unist": "^3.0.0"
@@ -3376,6 +3759,7 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
"integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0"
}
@@ -3384,6 +3768,7 @@
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -3391,74 +3776,108 @@
"node_modules/eventemitter3": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
- "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+ "license": "MIT"
},
"node_modules/expand-template": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+ "license": "(MIT OR WTFPL)",
"engines": {
"node": ">=6"
}
},
"node_modules/expressive-code": {
- "version": "0.38.3",
- "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.38.3.tgz",
- "integrity": "sha512-COM04AiUotHCKJgWdn7NtW2lqu8OW8owAidMpkXt1qxrZ9Q2iC7+tok/1qIn2ocGnczvr9paIySgGnEwFeEQ8Q==",
+ "version": "0.41.2",
+ "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.41.2.tgz",
+ "integrity": "sha512-aLZiZaqorRtNExtGpUjK9zFH9aTpWeoTXMyLo4b4IcuXfPqtLPPxhRm/QlPb8QqIcMMXnSiGRHSFpQfX0m7HJw==",
+ "license": "MIT",
"dependencies": {
- "@expressive-code/core": "^0.38.3",
- "@expressive-code/plugin-frames": "^0.38.3",
- "@expressive-code/plugin-shiki": "^0.38.3",
- "@expressive-code/plugin-text-markers": "^0.38.3"
+ "@expressive-code/core": "^0.41.2",
+ "@expressive-code/plugin-frames": "^0.41.2",
+ "@expressive-code/plugin-shiki": "^0.41.2",
+ "@expressive-code/plugin-text-markers": "^0.41.2"
}
},
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "license": "MIT"
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "license": "MIT"
},
"node_modules/fast-fifo": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
- "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+ "license": "MIT"
},
"node_modules/fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
- "micromatch": "^4.0.4"
+ "micromatch": "^4.0.8"
},
"engines": {
"node": ">=8.6.0"
}
},
"node_modules/fast-uri": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz",
- "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw=="
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
+ "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
},
"node_modules/fastq": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz",
- "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==",
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
}
},
+ "node_modules/fdir": {
+ "version": "6.4.6",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
+ "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -3466,91 +3885,63 @@
"node": ">=8"
}
},
- "node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up-simple": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz",
- "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/find-yarn-workspace-root2": {
- "version": "1.2.16",
- "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz",
- "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==",
- "dependencies": {
- "micromatch": "^4.0.2",
- "pkg-dir": "^4.2.0"
- }
- },
"node_modules/flattie": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz",
"integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/foreground-child": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
- "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+ "node_modules/fontace": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.3.0.tgz",
+ "integrity": "sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg==",
+ "license": "MIT",
"dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "@types/fontkit": "^2.0.8",
+ "fontkit": "^2.0.4"
}
},
- "node_modules/fraction.js": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
- "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
- "engines": {
- "node": "*"
- },
- "funding": {
- "type": "patreon",
- "url": "https://github.com/sponsors/rawify"
+ "node_modules/fontkit": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz",
+ "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==",
+ "license": "MIT",
+ "dependencies": {
+ "@swc/helpers": "^0.5.12",
+ "brotli": "^1.3.2",
+ "clone": "^2.1.2",
+ "dfa": "^1.2.0",
+ "fast-deep-equal": "^3.1.3",
+ "restructure": "^3.0.0",
+ "tiny-inflate": "^1.0.3",
+ "unicode-properties": "^1.4.0",
+ "unicode-trie": "^2.0.0"
}
},
"node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
+ "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
+ "license": "MIT",
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.8"
}
},
"node_modules/fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "license": "MIT"
},
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"hasInstallScript": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -3559,18 +3950,11 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
@@ -3579,6 +3963,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
"integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==",
+ "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -3589,36 +3974,20 @@
"node_modules/github-from-package": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
- "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="
+ "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
+ "license": "MIT"
},
"node_modules/github-slugger": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
- "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="
- },
- "node_modules/glob": {
- "version": "10.4.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
+ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
+ "license": "ISC"
},
"node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -3629,53 +3998,31 @@
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
- },
- "node_modules/grapheme-splitter": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
- "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ=="
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "license": "ISC"
},
"node_modules/h3": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/h3/-/h3-1.13.0.tgz",
- "integrity": "sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg==",
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.3.tgz",
+ "integrity": "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==",
+ "license": "MIT",
"dependencies": {
"cookie-es": "^1.2.2",
- "crossws": ">=0.2.0 <0.4.0",
+ "crossws": "^0.3.4",
"defu": "^6.1.4",
- "destr": "^2.0.3",
+ "destr": "^2.0.5",
"iron-webcrypto": "^1.2.1",
- "ohash": "^1.1.4",
+ "node-mock-http": "^1.0.0",
"radix3": "^1.1.2",
- "ufo": "^1.5.4",
- "uncrypto": "^0.1.3",
- "unenv": "^1.10.0"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
+ "ufo": "^1.6.1",
+ "uncrypto": "^0.1.3"
}
},
"node_modules/hast-util-embedded": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz",
"integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"hast-util-is-element": "^3.0.0"
@@ -3689,6 +4036,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/hast-util-format/-/hast-util-format-1.1.0.tgz",
"integrity": "sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"hast-util-embedded": "^3.0.0",
@@ -3707,6 +4055,7 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz",
"integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"devlop": "^1.1.0",
@@ -3721,15 +4070,16 @@
}
},
"node_modules/hast-util-from-parse5": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.2.tgz",
- "integrity": "sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A==",
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
+ "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
"devlop": "^1.0.0",
"hastscript": "^9.0.0",
- "property-information": "^6.0.0",
+ "property-information": "^7.0.0",
"vfile": "^6.0.0",
"vfile-location": "^5.0.0",
"web-namespaces": "^2.0.0"
@@ -3743,6 +4093,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz",
"integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -3755,6 +4106,7 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.1.tgz",
"integrity": "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -3767,6 +4119,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
"integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -3779,6 +4132,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hast-util-minify-whitespace/-/hast-util-minify-whitespace-1.0.1.tgz",
"integrity": "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"hast-util-embedded": "^3.0.0",
@@ -3795,6 +4149,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
"integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -3807,6 +4162,7 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz",
"integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"hast-util-embedded": "^3.0.0",
@@ -3823,6 +4179,7 @@
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
"integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
@@ -3844,9 +4201,10 @@
}
},
"node_modules/hast-util-select": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.3.tgz",
- "integrity": "sha512-OVRQlQ1XuuLP8aFVLYmC2atrfWHS5UD3shonxpnyrjcCkwtvmt/+N6kYJdcY4mkMJhxp4kj2EFIxQ9kvkkt/eQ==",
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.4.tgz",
+ "integrity": "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
@@ -3859,7 +4217,7 @@
"hast-util-to-string": "^3.0.0",
"hast-util-whitespace": "^3.0.0",
"nth-check": "^2.0.0",
- "property-information": "^6.0.0",
+ "property-information": "^7.0.0",
"space-separated-tokens": "^2.0.0",
"unist-util-visit": "^5.0.0",
"zwitch": "^2.0.0"
@@ -3870,9 +4228,10 @@
}
},
"node_modules/hast-util-to-estree": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.1.tgz",
- "integrity": "sha512-IWtwwmPskfSmma9RpzCappDUitC8t5jhAynHhc1m2+5trOgsrp7txscUSavc5Ic8PATyAjfrCK1wgtxh2cICVQ==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz",
+ "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"@types/estree-jsx": "^1.0.0",
@@ -3885,9 +4244,9 @@
"mdast-util-mdx-expression": "^2.0.0",
"mdast-util-mdx-jsx": "^3.0.0",
"mdast-util-mdxjs-esm": "^2.0.0",
- "property-information": "^6.0.0",
+ "property-information": "^7.0.0",
"space-separated-tokens": "^2.0.0",
- "style-to-object": "^1.0.0",
+ "style-to-js": "^1.0.0",
"unist-util-position": "^5.0.0",
"zwitch": "^2.0.0"
},
@@ -3897,9 +4256,10 @@
}
},
"node_modules/hast-util-to-html": {
- "version": "9.0.4",
- "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.4.tgz",
- "integrity": "sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
@@ -3908,7 +4268,7 @@
"hast-util-whitespace": "^3.0.0",
"html-void-elements": "^3.0.0",
"mdast-util-to-hast": "^13.0.0",
- "property-information": "^6.0.0",
+ "property-information": "^7.0.0",
"space-separated-tokens": "^2.0.0",
"stringify-entities": "^4.0.0",
"zwitch": "^2.0.4"
@@ -3919,9 +4279,10 @@
}
},
"node_modules/hast-util-to-jsx-runtime": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz",
- "integrity": "sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==",
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz",
+ "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"@types/hast": "^3.0.0",
@@ -3933,9 +4294,9 @@
"mdast-util-mdx-expression": "^2.0.0",
"mdast-util-mdx-jsx": "^3.0.0",
"mdast-util-mdxjs-esm": "^2.0.0",
- "property-information": "^6.0.0",
+ "property-information": "^7.0.0",
"space-separated-tokens": "^2.0.0",
- "style-to-object": "^1.0.0",
+ "style-to-js": "^1.0.0",
"unist-util-position": "^5.0.0",
"vfile-message": "^4.0.0"
},
@@ -3948,6 +4309,7 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz",
"integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"comma-separated-tokens": "^2.0.0",
@@ -3962,10 +4324,21 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-to-parse5/node_modules/property-information": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
+ "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/hast-util-to-string": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz",
"integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -3978,6 +4351,7 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
"integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
@@ -3993,6 +4367,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
"integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -4002,14 +4377,15 @@
}
},
"node_modules/hastscript": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.0.tgz",
- "integrity": "sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
+ "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"comma-separated-tokens": "^2.0.0",
"hast-util-parse-selector": "^4.0.0",
- "property-information": "^6.0.0",
+ "property-information": "^7.0.0",
"space-separated-tokens": "^2.0.0"
},
"funding": {
@@ -4020,12 +4396,14 @@
"node_modules/html-escaper": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
- "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="
+ "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==",
+ "license": "MIT"
},
"node_modules/html-void-elements": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
"integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4035,20 +4413,23 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.1.tgz",
"integrity": "sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==",
+ "license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/http-cache-semantics": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
+ "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
+ "license": "BSD-2-Clause"
},
"node_modules/http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "license": "MIT",
"dependencies": {
"depd": "2.0.0",
"inherits": "2.0.4",
@@ -4060,6 +4441,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/http-errors/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/i18next": {
"version": "23.16.8",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz",
@@ -4078,6 +4468,7 @@
"url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
}
],
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.23.2"
}
@@ -4099,12 +4490,14 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "BSD-3-Clause"
},
"node_modules/import-meta-resolve": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
"integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4113,22 +4506,26 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
},
"node_modules/ini": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "license": "ISC"
},
"node_modules/inline-style-parser": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz",
- "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q=="
+ "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==",
+ "license": "MIT"
},
"node_modules/iron-webcrypto": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz",
"integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==",
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/brc-dd"
}
@@ -4137,6 +4534,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
"integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4146,6 +4544,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
"integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+ "license": "MIT",
"dependencies": {
"is-alphabetical": "^2.0.0",
"is-decimal": "^2.0.0"
@@ -4158,37 +4557,14 @@
"node_modules/is-arrayish": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "license": "MIT"
},
"node_modules/is-decimal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
"integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4198,6 +4574,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
"integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "license": "MIT",
"bin": {
"is-docker": "cli.js"
},
@@ -4212,6 +4589,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -4220,6 +4598,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -4228,6 +4607,7 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -4239,6 +4619,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
"integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4248,6 +4629,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
"integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "license": "MIT",
"dependencies": {
"is-docker": "^3.0.0"
},
@@ -4265,6 +4647,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
@@ -4273,6 +4656,7 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
"integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -4284,6 +4668,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
"integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+ "license": "MIT",
"dependencies": {
"is-inside-container": "^1.0.0"
},
@@ -4294,42 +4679,26 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
- },
- "node_modules/jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
"node_modules/jiti": {
- "version": "1.21.7",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
- "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
+ "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
+ "license": "MIT",
"bin": {
- "jiti": "bin/jiti.js"
+ "jiti": "lib/jiti-cli.mjs"
}
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
},
"node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
@@ -4340,29 +4709,20 @@
"node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
- },
- "node_modules/json-to-ast": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/json-to-ast/-/json-to-ast-2.1.0.tgz",
- "integrity": "sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==",
- "dependencies": {
- "code-error-fragment": "0.0.230",
- "grapheme-splitter": "^1.0.4"
- },
- "engines": {
- "node": ">= 4"
- }
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "license": "MIT"
},
"node_modules/jsonc-parser": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
- "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="
+ "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==",
+ "license": "MIT"
},
"node_modules/jsonpointer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
"integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -4371,96 +4731,268 @@
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
"integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
+ "node_modules/klona": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz",
+ "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
- "node_modules/lilconfig": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
- "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "node_modules/lightningcss": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz",
+ "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==",
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
"engines": {
- "node": ">=14"
+ "node": ">= 12.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/antonk52"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
- },
- "node_modules/load-yaml-file": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz",
- "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==",
- "dependencies": {
- "graceful-fs": "^4.1.5",
- "js-yaml": "^3.13.0",
- "pify": "^4.0.1",
- "strip-bom": "^3.0.0"
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
},
+ "optionalDependencies": {
+ "lightningcss-darwin-arm64": "1.30.1",
+ "lightningcss-darwin-x64": "1.30.1",
+ "lightningcss-freebsd-x64": "1.30.1",
+ "lightningcss-linux-arm-gnueabihf": "1.30.1",
+ "lightningcss-linux-arm64-gnu": "1.30.1",
+ "lightningcss-linux-arm64-musl": "1.30.1",
+ "lightningcss-linux-x64-gnu": "1.30.1",
+ "lightningcss-linux-x64-musl": "1.30.1",
+ "lightningcss-win32-arm64-msvc": "1.30.1",
+ "lightningcss-win32-x64-msvc": "1.30.1"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz",
+ "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/load-yaml-file/node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/load-yaml-file/node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "node": ">= 12.0.0"
},
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/load-yaml-file/node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz",
+ "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dependencies": {
- "p-locate": "^4.1.0"
+ "node": ">= 12.0.0"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz",
+ "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
"engines": {
- "node": ">=8"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz",
+ "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz",
+ "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz",
+ "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz",
+ "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz",
+ "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz",
+ "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz",
+ "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "license": "MIT"
},
"node_modules/longest-streak": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
"integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4469,12 +5001,14 @@
"node_modules/lru-cache": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
},
"node_modules/magic-string": {
"version": "0.30.17",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
"integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+ "license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0"
}
@@ -4483,6 +5017,7 @@
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz",
"integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==",
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.25.4",
"@babel/types": "^7.25.4",
@@ -4493,6 +5028,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
"integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==",
+ "license": "MIT",
"engines": {
"node": ">=16"
},
@@ -4504,6 +5040,7 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
"integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4513,6 +5050,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz",
"integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"@types/unist": "^3.0.0",
@@ -4524,12 +5062,14 @@
}
},
"node_modules/mdast-util-directive": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz",
- "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz",
+ "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
"devlop": "^1.0.0",
"mdast-util-from-markdown": "^2.0.0",
"mdast-util-to-markdown": "^2.0.0",
@@ -4546,6 +5086,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
"integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"escape-string-regexp": "^5.0.0",
@@ -4561,6 +5102,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
"integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"@types/unist": "^3.0.0",
@@ -4581,9 +5123,10 @@
}
},
"node_modules/mdast-util-gfm": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz",
- "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz",
+ "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==",
+ "license": "MIT",
"dependencies": {
"mdast-util-from-markdown": "^2.0.0",
"mdast-util-gfm-autolink-literal": "^2.0.0",
@@ -4602,6 +5145,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
"integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"ccount": "^2.0.0",
@@ -4615,9 +5159,10 @@
}
},
"node_modules/mdast-util-gfm-footnote": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz",
- "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz",
+ "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"devlop": "^1.1.0",
@@ -4634,6 +5179,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
"integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-from-markdown": "^2.0.0",
@@ -4648,6 +5194,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
"integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"devlop": "^1.0.0",
@@ -4664,6 +5211,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
"integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"devlop": "^1.0.0",
@@ -4679,6 +5227,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz",
"integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==",
+ "license": "MIT",
"dependencies": {
"mdast-util-from-markdown": "^2.0.0",
"mdast-util-mdx-expression": "^2.0.0",
@@ -4695,6 +5244,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz",
"integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==",
+ "license": "MIT",
"dependencies": {
"@types/estree-jsx": "^1.0.0",
"@types/hast": "^3.0.0",
@@ -4709,9 +5259,10 @@
}
},
"node_modules/mdast-util-mdx-jsx": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz",
- "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz",
+ "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==",
+ "license": "MIT",
"dependencies": {
"@types/estree-jsx": "^1.0.0",
"@types/hast": "^3.0.0",
@@ -4735,6 +5286,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
"integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
+ "license": "MIT",
"dependencies": {
"@types/estree-jsx": "^1.0.0",
"@types/hast": "^3.0.0",
@@ -4752,6 +5304,7 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
"integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"unist-util-is": "^6.0.0"
@@ -4765,6 +5318,7 @@
"version": "13.2.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz",
"integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/mdast": "^4.0.0",
@@ -4785,6 +5339,7 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
"integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"@types/unist": "^3.0.0",
@@ -4805,6 +5360,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
"integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0"
},
@@ -4813,18 +5369,25 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/mdn-data": {
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
+ "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
+ "license": "CC0-1.0"
+ },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/micromark": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz",
- "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
+ "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -4835,6 +5398,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"@types/debug": "^4.0.0",
"debug": "^4.0.0",
@@ -4856,9 +5420,9 @@
}
},
"node_modules/micromark-core-commonmark": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz",
- "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
+ "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -4869,6 +5433,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"devlop": "^1.0.0",
@@ -4892,6 +5457,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz",
"integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==",
+ "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-factory-space": "^2.0.0",
@@ -4910,6 +5476,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
"integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
+ "license": "MIT",
"dependencies": {
"micromark-extension-gfm-autolink-literal": "^2.0.0",
"micromark-extension-gfm-footnote": "^2.0.0",
@@ -4929,6 +5496,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
"integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
+ "license": "MIT",
"dependencies": {
"micromark-util-character": "^2.0.0",
"micromark-util-sanitize-uri": "^2.0.0",
@@ -4944,6 +5512,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
"integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
+ "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-core-commonmark": "^2.0.0",
@@ -4963,6 +5532,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
"integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
+ "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-util-chunked": "^2.0.0",
@@ -4977,9 +5547,10 @@
}
},
"node_modules/micromark-extension-gfm-table": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz",
- "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz",
+ "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==",
+ "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-factory-space": "^2.0.0",
@@ -4996,6 +5567,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
"integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
+ "license": "MIT",
"dependencies": {
"micromark-util-types": "^2.0.0"
},
@@ -5008,6 +5580,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
"integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
+ "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-factory-space": "^2.0.0",
@@ -5021,9 +5594,9 @@
}
},
"node_modules/micromark-extension-mdx-expression": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz",
- "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz",
+ "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -5034,6 +5607,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"devlop": "^1.0.0",
@@ -5046,11 +5620,11 @@
}
},
"node_modules/micromark-extension-mdx-jsx": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz",
- "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz",
+ "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==",
+ "license": "MIT",
"dependencies": {
- "@types/acorn": "^4.0.0",
"@types/estree": "^1.0.0",
"devlop": "^1.0.0",
"estree-util-is-identifier-name": "^3.0.0",
@@ -5071,6 +5645,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz",
"integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==",
+ "license": "MIT",
"dependencies": {
"micromark-util-types": "^2.0.0"
},
@@ -5083,6 +5658,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz",
"integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==",
+ "license": "MIT",
"dependencies": {
"acorn": "^8.0.0",
"acorn-jsx": "^5.0.0",
@@ -5102,6 +5678,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz",
"integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"devlop": "^1.0.0",
@@ -5132,6 +5709,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-character": "^2.0.0",
"micromark-util-symbol": "^2.0.0",
@@ -5152,6 +5730,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-util-character": "^2.0.0",
@@ -5160,9 +5739,9 @@
}
},
"node_modules/micromark-factory-mdx-expression": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz",
- "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz",
+ "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -5173,6 +5752,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"devlop": "^1.0.0",
@@ -5199,6 +5779,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-character": "^2.0.0",
"micromark-util-types": "^2.0.0"
@@ -5218,6 +5799,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-factory-space": "^2.0.0",
"micromark-util-character": "^2.0.0",
@@ -5239,6 +5821,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-factory-space": "^2.0.0",
"micromark-util-character": "^2.0.0",
@@ -5260,6 +5843,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-symbol": "^2.0.0",
"micromark-util-types": "^2.0.0"
@@ -5279,6 +5863,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-symbol": "^2.0.0"
}
@@ -5297,6 +5882,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-character": "^2.0.0",
"micromark-util-symbol": "^2.0.0",
@@ -5317,6 +5903,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-chunked": "^2.0.0",
"micromark-util-types": "^2.0.0"
@@ -5336,6 +5923,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-symbol": "^2.0.0"
}
@@ -5354,6 +5942,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"micromark-util-character": "^2.0.0",
@@ -5374,12 +5963,13 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/micromark-util-events-to-acorn": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz",
- "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz",
+ "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -5390,8 +5980,8 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
- "@types/acorn": "^4.0.0",
"@types/estree": "^1.0.0",
"@types/unist": "^3.0.0",
"devlop": "^1.0.0",
@@ -5414,7 +6004,8 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/micromark-util-normalize-identifier": {
"version": "2.0.1",
@@ -5430,6 +6021,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-symbol": "^2.0.0"
}
@@ -5448,6 +6040,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-types": "^2.0.0"
}
@@ -5466,6 +6059,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-character": "^2.0.0",
"micromark-util-encode": "^2.0.0",
@@ -5473,9 +6067,9 @@
}
},
"node_modules/micromark-util-subtokenize": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz",
- "integrity": "sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
+ "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -5486,6 +6080,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
"micromark-util-chunked": "^2.0.0",
@@ -5506,12 +6101,13 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/micromark-util-types": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz",
- "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -5521,12 +6117,14 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "license": "MIT",
"dependencies": {
"braces": "^3.0.3",
"picomatch": "^2.3.1"
@@ -5539,6 +6137,7 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
"engines": {
"node": ">=8.6"
},
@@ -5546,31 +6145,22 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/mime": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
- "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
"node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz",
+ "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
+ "license": "MIT",
"dependencies": {
- "mime-db": "1.52.0"
+ "mime-db": "^1.54.0"
},
"engines": {
"node": ">= 0.6"
@@ -5580,6 +6170,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -5587,24 +6178,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/minimist": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -5613,19 +6191,49 @@
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "license": "ISC",
"engines": {
"node": ">=16 || 14 >=14.17"
}
},
+ "node_modules/minizlib": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
+ "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
+ "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "dist/cjs/src/bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/mkdirp-classic": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "license": "MIT"
},
"node_modules/mrmime": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
- "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+ "license": "MIT",
"engines": {
"node": ">=10"
}
@@ -5633,33 +6241,26 @@
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
},
"node_modules/muggle-string": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
- "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="
- },
- "node_modules/mz": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
- "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dependencies": {
- "any-promise": "^1.0.0",
- "object-assign": "^4.0.1",
- "thenify-all": "^1.0.0"
- }
+ "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
+ "license": "MIT"
},
"node_modules/nanoid": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
- "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -5668,14 +6269,16 @@
}
},
"node_modules/napi-build-utils": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
- "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg=="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
+ "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
+ "license": "MIT"
},
"node_modules/neotraverse": {
"version": "0.6.18",
"resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz",
"integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
+ "license": "MIT",
"engines": {
"node": ">= 10"
}
@@ -5684,6 +6287,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz",
"integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==",
+ "license": "MIT",
"dependencies": {
"@types/nlcst": "^2.0.0"
},
@@ -5693,9 +6297,10 @@
}
},
"node_modules/node-abi": {
- "version": "3.71.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz",
- "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==",
+ "version": "3.75.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz",
+ "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==",
+ "license": "MIT",
"dependencies": {
"semver": "^7.3.5"
},
@@ -5706,30 +6311,46 @@
"node_modules/node-addon-api": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
- "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA=="
+ "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
+ "license": "MIT"
+ },
+ "node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
},
"node_modules/node-fetch-native": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz",
- "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ=="
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz",
+ "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==",
+ "license": "MIT"
},
- "node_modules/node-releases": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
- "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="
+ "node_modules/node-mock-http": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.0.tgz",
+ "integrity": "sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==",
+ "license": "MIT"
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -5738,6 +6359,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "license": "BSD-2-Clause",
"dependencies": {
"boolbase": "^1.0.0"
},
@@ -5745,26 +6367,11 @@
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-hash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
- "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/ofetch": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz",
"integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==",
+ "license": "MIT",
"dependencies": {
"destr": "^2.0.3",
"node-fetch-native": "^1.6.4",
@@ -5772,14 +6379,16 @@
}
},
"node_modules/ohash": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz",
- "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g=="
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz",
+ "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
+ "license": "MIT"
},
"node_modules/on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "license": "MIT",
"dependencies": {
"ee-first": "1.1.1"
},
@@ -5791,30 +6400,40 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
+ "node_modules/oniguruma-parser": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz",
+ "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==",
+ "license": "MIT"
+ },
"node_modules/oniguruma-to-es": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-0.10.0.tgz",
- "integrity": "sha512-zapyOUOCJxt+xhiNRPPMtfJkHGsZ98HHB9qJEkdT8BGytO/+kpe4m1Ngf0MzbzTmhacn11w9yGeDP6tzDhnCdg==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz",
+ "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==",
+ "license": "MIT",
"dependencies": {
- "emoji-regex-xs": "^1.0.0",
- "regex": "^5.1.1",
- "regex-recursion": "^5.1.1"
+ "oniguruma-parser": "^0.12.1",
+ "regex": "^6.0.1",
+ "regex-recursion": "^6.0.2"
}
},
"node_modules/openapi-types": {
"version": "12.1.3",
"resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz",
"integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==",
+ "license": "MIT",
"peer": true
},
"node_modules/p-limit": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz",
"integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==",
+ "license": "MIT",
"dependencies": {
"yocto-queue": "^1.1.1"
},
@@ -5825,35 +6444,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-locate/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/p-queue": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz",
- "integrity": "sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz",
+ "integrity": "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==",
+ "license": "MIT",
"dependencies": {
"eventemitter3": "^5.0.1",
"p-timeout": "^6.1.2"
@@ -5869,6 +6464,7 @@
"version": "6.1.4",
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz",
"integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==",
+ "license": "MIT",
"engines": {
"node": ">=14.16"
},
@@ -5876,23 +6472,17 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/package-json-from-dist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
- "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
+ "node_modules/package-manager-detector": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz",
+ "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==",
+ "license": "MIT"
},
"node_modules/pagefind": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.3.0.tgz",
"integrity": "sha512-8KPLGT5g9s+olKMRTU9LFekLizkVIu9tes90O1/aigJ0T5LmyPqTzGJrETnSw3meSYg58YH7JTzhTTW/3z6VAw==",
+ "license": "MIT",
"bin": {
"pagefind": "lib/runner/bin.cjs"
},
@@ -5904,10 +6494,17 @@
"@pagefind/windows-x64": "1.3.0"
}
},
+ "node_modules/pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
+ "license": "MIT"
+ },
"node_modules/parse-entities": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
"integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^2.0.0",
"character-entities-legacy": "^3.0.0",
@@ -5925,12 +6522,14 @@
"node_modules/parse-entities/node_modules/@types/unist": {
"version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
- "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
+ "license": "MIT"
},
"node_modules/parse-latin": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz",
"integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==",
+ "license": "MIT",
"dependencies": {
"@types/nlcst": "^2.0.0",
"@types/unist": "^3.0.0",
@@ -5945,11 +6544,12 @@
}
},
"node_modules/parse5": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
- "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "license": "MIT",
"dependencies": {
- "entities": "^4.5.0"
+ "entities": "^6.0.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
@@ -5958,58 +6558,20 @@
"node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/pathe": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
- "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+ "license": "MIT"
},
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -6017,37 +6579,10 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
- "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/postcss": {
- "version": "8.4.49",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
- "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
+ "version": "8.5.5",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.5.tgz",
+ "integrity": "sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==",
"funding": [
{
"type": "opencollective",
@@ -6062,8 +6597,9 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "nanoid": "^3.3.7",
+ "nanoid": "^3.3.11",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
@@ -6071,74 +6607,6 @@
"node": "^10 || ^12 || >=14"
}
},
- "node_modules/postcss-import": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
- "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
- "dependencies": {
- "postcss-value-parser": "^4.0.0",
- "read-cache": "^1.0.0",
- "resolve": "^1.1.7"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "postcss": "^8.0.0"
- }
- },
- "node_modules/postcss-js": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
- "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
- "dependencies": {
- "camelcase-css": "^2.0.1"
- },
- "engines": {
- "node": "^12 || ^14 || >= 16"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": "^8.4.21"
- }
- },
- "node_modules/postcss-load-config": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
- "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "lilconfig": "^3.0.0",
- "yaml": "^2.3.4"
- },
- "engines": {
- "node": ">= 14"
- },
- "peerDependencies": {
- "postcss": ">=8.0.9",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "postcss": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
"node_modules/postcss-nested": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
@@ -6153,6 +6621,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.1.1"
},
@@ -6167,6 +6636,7 @@
"version": "6.1.2",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -6175,22 +6645,18 @@
"node": ">=4"
}
},
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
- },
"node_modules/prebuild-install": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz",
- "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
+ "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==",
+ "license": "MIT",
"dependencies": {
"detect-libc": "^2.0.0",
"expand-template": "^2.0.3",
"github-from-package": "0.0.0",
"minimist": "^1.2.3",
"mkdirp-classic": "^0.5.3",
- "napi-build-utils": "^1.0.1",
+ "napi-build-utils": "^2.0.0",
"node-abi": "^3.3.0",
"pump": "^3.0.0",
"rc": "^1.2.7",
@@ -6206,9 +6672,10 @@
}
},
"node_modules/prebuild-install/node_modules/tar-fs": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
- "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz",
+ "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==",
+ "license": "MIT",
"dependencies": {
"chownr": "^1.1.1",
"mkdirp-classic": "^0.5.2",
@@ -6220,6 +6687,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "license": "MIT",
"dependencies": {
"bl": "^4.0.3",
"end-of-stream": "^1.4.1",
@@ -6231,23 +6699,11 @@
"node": ">=6"
}
},
- "node_modules/preferred-pm": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-4.0.0.tgz",
- "integrity": "sha512-gYBeFTZLu055D8Vv3cSPox/0iTPtkzxpLroSYYA7WXgRi31WCJ51Uyl8ZiPeUUjyvs2MBzK+S8v9JVUgHU/Sqw==",
- "dependencies": {
- "find-up-simple": "^1.0.0",
- "find-yarn-workspace-root2": "1.2.16",
- "which-pm": "^3.0.0"
- },
- "engines": {
- "node": ">=18.12"
- }
- },
"node_modules/prettier": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz",
- "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
+ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+ "license": "MIT",
"optional": true,
"peer": true,
"bin": {
@@ -6261,9 +6717,10 @@
}
},
"node_modules/prismjs": {
- "version": "1.29.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
- "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
+ "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -6272,6 +6729,7 @@
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
"integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "license": "MIT",
"dependencies": {
"kleur": "^3.0.3",
"sisteransi": "^1.0.5"
@@ -6284,14 +6742,16 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/property-information": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
- "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
+ "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -6301,6 +6761,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
"integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
+ "license": "MIT",
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -6323,22 +6784,20 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
- },
- "node_modules/queue-tick": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
- "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
+ ],
+ "license": "MIT"
},
"node_modules/radix3": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz",
- "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="
+ "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==",
+ "license": "MIT"
},
"node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -6347,6 +6806,7 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
"dependencies": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
@@ -6357,18 +6817,11 @@
"rc": "cli.js"
}
},
- "node_modules/read-cache": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
- "dependencies": {
- "pify": "^2.3.0"
- }
- },
"node_modules/readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -6379,11 +6832,12 @@
}
},
"node_modules/readdirp": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
- "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "license": "MIT",
"engines": {
- "node": ">= 14.16.0"
+ "node": ">= 14.18.0"
},
"funding": {
"type": "individual",
@@ -6394,6 +6848,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz",
"integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"estree-util-build-jsx": "^3.0.0",
@@ -6408,6 +6863,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz",
"integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==",
+ "license": "MIT",
"dependencies": {
"acorn-jsx": "^5.0.0",
"estree-util-to-js": "^2.0.0",
@@ -6424,6 +6880,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz",
"integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"esast-util-from-js": "^2.0.0",
@@ -6439,6 +6896,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz",
"integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"estree-util-to-js": "^2.0.0",
@@ -6450,37 +6908,35 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/regenerator-runtime": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
- },
"node_modules/regex": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/regex/-/regex-5.1.1.tgz",
- "integrity": "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz",
+ "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==",
+ "license": "MIT",
"dependencies": {
"regex-utilities": "^2.3.0"
}
},
"node_modules/regex-recursion": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-5.1.1.tgz",
- "integrity": "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
+ "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+ "license": "MIT",
"dependencies": {
- "regex": "^5.1.1",
"regex-utilities": "^2.3.0"
}
},
"node_modules/regex-utilities": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
- "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="
+ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+ "license": "MIT"
},
"node_modules/rehype": {
"version": "13.0.2",
"resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz",
"integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"rehype-parse": "^9.0.0",
@@ -6493,17 +6949,19 @@
}
},
"node_modules/rehype-expressive-code": {
- "version": "0.38.3",
- "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.38.3.tgz",
- "integrity": "sha512-RYSSDkMBikoTbycZPkcWp6ELneANT4eTpND1DSRJ6nI2eVFUwTBDCvE2vO6jOOTaavwnPiydi4i/87NRyjpdOA==",
+ "version": "0.41.2",
+ "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.41.2.tgz",
+ "integrity": "sha512-vHYfWO9WxAw6kHHctddOt+P4266BtyT1mrOIuxJD+1ELuvuJAa5uBIhYt0OVMyOhlvf57hzWOXJkHnMhpaHyxw==",
+ "license": "MIT",
"dependencies": {
- "expressive-code": "^0.38.3"
+ "expressive-code": "^0.41.2"
}
},
"node_modules/rehype-format": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/rehype-format/-/rehype-format-5.0.1.tgz",
"integrity": "sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"hast-util-format": "^1.0.0"
@@ -6517,6 +6975,7 @@
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz",
"integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"hast-util-from-html": "^2.0.0",
@@ -6531,6 +6990,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
"integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"hast-util-raw": "^9.0.0",
@@ -6545,6 +7005,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz",
"integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"@types/hast": "^3.0.0",
@@ -6559,6 +7020,7 @@
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz",
"integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"hast-util-to-html": "^9.0.0",
@@ -6570,9 +7032,10 @@
}
},
"node_modules/remark-directive": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz",
- "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz",
+ "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-directive": "^3.0.0",
@@ -6585,9 +7048,10 @@
}
},
"node_modules/remark-gfm": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz",
- "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz",
+ "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-gfm": "^3.0.0",
@@ -6605,6 +7069,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz",
"integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==",
+ "license": "MIT",
"dependencies": {
"mdast-util-mdx": "^3.0.0",
"micromark-extension-mdxjs": "^3.0.0"
@@ -6618,6 +7083,7 @@
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
"integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-from-markdown": "^2.0.0",
@@ -6630,9 +7096,10 @@
}
},
"node_modules/remark-rehype": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz",
- "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==",
+ "version": "11.1.2",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz",
+ "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/mdast": "^4.0.0",
@@ -6649,6 +7116,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz",
"integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==",
+ "license": "MIT",
"dependencies": {
"retext": "^9.0.0",
"retext-smartypants": "^6.0.0",
@@ -6663,6 +7131,7 @@
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
"integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-to-markdown": "^2.0.0",
@@ -6676,12 +7145,14 @@
"node_modules/request-light": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz",
- "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q=="
+ "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==",
+ "license": "MIT"
},
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -6690,33 +7161,22 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/resolve": {
- "version": "1.22.10",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
- "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
- "dependencies": {
- "is-core-module": "^2.16.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "node_modules/restructure": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz",
+ "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==",
+ "license": "MIT"
},
"node_modules/retext": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz",
"integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==",
+ "license": "MIT",
"dependencies": {
"@types/nlcst": "^2.0.0",
"retext-latin": "^4.0.0",
@@ -6732,6 +7192,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz",
"integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==",
+ "license": "MIT",
"dependencies": {
"@types/nlcst": "^2.0.0",
"parse-latin": "^7.0.0",
@@ -6746,6 +7207,7 @@
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz",
"integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==",
+ "license": "MIT",
"dependencies": {
"@types/nlcst": "^2.0.0",
"nlcst-to-string": "^4.0.0",
@@ -6760,6 +7222,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz",
"integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==",
+ "license": "MIT",
"dependencies": {
"@types/nlcst": "^2.0.0",
"nlcst-to-string": "^4.0.0",
@@ -6771,20 +7234,22 @@
}
},
"node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "license": "MIT",
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
}
},
"node_modules/rollup": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.29.1.tgz",
- "integrity": "sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.43.0.tgz",
+ "integrity": "sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==",
+ "license": "MIT",
"dependencies": {
- "@types/estree": "1.0.6"
+ "@types/estree": "1.0.7"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -6794,28 +7259,35 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.29.1",
- "@rollup/rollup-android-arm64": "4.29.1",
- "@rollup/rollup-darwin-arm64": "4.29.1",
- "@rollup/rollup-darwin-x64": "4.29.1",
- "@rollup/rollup-freebsd-arm64": "4.29.1",
- "@rollup/rollup-freebsd-x64": "4.29.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.29.1",
- "@rollup/rollup-linux-arm-musleabihf": "4.29.1",
- "@rollup/rollup-linux-arm64-gnu": "4.29.1",
- "@rollup/rollup-linux-arm64-musl": "4.29.1",
- "@rollup/rollup-linux-loongarch64-gnu": "4.29.1",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.29.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.29.1",
- "@rollup/rollup-linux-s390x-gnu": "4.29.1",
- "@rollup/rollup-linux-x64-gnu": "4.29.1",
- "@rollup/rollup-linux-x64-musl": "4.29.1",
- "@rollup/rollup-win32-arm64-msvc": "4.29.1",
- "@rollup/rollup-win32-ia32-msvc": "4.29.1",
- "@rollup/rollup-win32-x64-msvc": "4.29.1",
+ "@rollup/rollup-android-arm-eabi": "4.43.0",
+ "@rollup/rollup-android-arm64": "4.43.0",
+ "@rollup/rollup-darwin-arm64": "4.43.0",
+ "@rollup/rollup-darwin-x64": "4.43.0",
+ "@rollup/rollup-freebsd-arm64": "4.43.0",
+ "@rollup/rollup-freebsd-x64": "4.43.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.43.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.43.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.43.0",
+ "@rollup/rollup-linux-arm64-musl": "4.43.0",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.43.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.43.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.43.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.43.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.43.0",
+ "@rollup/rollup-linux-x64-gnu": "4.43.0",
+ "@rollup/rollup-linux-x64-musl": "4.43.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.43.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.43.0",
+ "@rollup/rollup-win32-x64-msvc": "4.43.0",
"fsevents": "~2.3.2"
}
},
+ "node_modules/rollup/node_modules/@types/estree": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
+ "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
+ "license": "MIT"
+ },
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -6834,6 +7306,7 @@
"url": "https://feross.org/support"
}
],
+ "license": "MIT",
"dependencies": {
"queue-microtask": "^1.2.2"
}
@@ -6855,17 +7328,20 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/sax": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
- "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
+ "license": "ISC"
},
"node_modules/semver": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
- "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
@@ -6874,18 +7350,18 @@
}
},
"node_modules/send": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/send/-/send-1.1.0.tgz",
- "integrity": "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz",
+ "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==",
+ "license": "MIT",
"dependencies": {
"debug": "^4.3.5",
- "destroy": "^1.2.0",
"encodeurl": "^2.0.0",
"escape-html": "^1.0.3",
"etag": "^1.8.1",
- "fresh": "^0.5.2",
+ "fresh": "^2.0.0",
"http-errors": "^2.0.0",
- "mime-types": "^2.1.35",
+ "mime-types": "^3.0.1",
"ms": "^2.1.3",
"on-finished": "^2.4.1",
"range-parser": "^1.2.1",
@@ -6898,18 +7374,21 @@
"node_modules/server-destroy": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
- "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ=="
+ "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==",
+ "license": "ISC"
},
"node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "license": "ISC"
},
"node_modules/sharp": {
"version": "0.32.6",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz",
"integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==",
"hasInstallScript": true,
+ "license": "Apache-2.0",
"dependencies": {
"color": "^4.2.3",
"detect-libc": "^2.0.2",
@@ -6927,51 +7406,22 @@
"url": "https://opencollective.com/libvips"
}
},
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/shiki": {
- "version": "1.26.1",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.26.1.tgz",
- "integrity": "sha512-Gqg6DSTk3wYqaZ5OaYtzjcdxcBvX5kCy24yvRJEgjT5U+WHlmqCThLuBUx0juyxQBi+6ug53IGeuQS07DWwpcw==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.6.0.tgz",
+ "integrity": "sha512-tKn/Y0MGBTffQoklaATXmTqDU02zx8NYBGQ+F6gy87/YjKbizcLd+Cybh/0ZtOBX9r1NEnAy/GTRDKtOsc1L9w==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/core": "1.26.1",
- "@shikijs/engine-javascript": "1.26.1",
- "@shikijs/engine-oniguruma": "1.26.1",
- "@shikijs/langs": "1.26.1",
- "@shikijs/themes": "1.26.1",
- "@shikijs/types": "1.26.1",
- "@shikijs/vscode-textmate": "^10.0.1",
+ "@shikijs/core": "3.6.0",
+ "@shikijs/engine-javascript": "3.6.0",
+ "@shikijs/engine-oniguruma": "3.6.0",
+ "@shikijs/langs": "3.6.0",
+ "@shikijs/themes": "3.6.0",
+ "@shikijs/types": "3.6.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4"
}
},
- "node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/simple-concat": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
@@ -6989,7 +7439,8 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/simple-get": {
"version": "4.0.1",
@@ -7009,6 +7460,7 @@
"url": "https://feross.org/support"
}
],
+ "license": "MIT",
"dependencies": {
"decompress-response": "^6.0.0",
"once": "^1.3.1",
@@ -7019,6 +7471,7 @@
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "license": "MIT",
"dependencies": {
"is-arrayish": "^0.3.1"
}
@@ -7026,12 +7479,14 @@
"node_modules/sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "license": "MIT"
},
"node_modules/sitemap": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/sitemap/-/sitemap-8.0.0.tgz",
"integrity": "sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A==",
+ "license": "MIT",
"dependencies": {
"@types/node": "^17.0.5",
"@types/sax": "^1.2.1",
@@ -7049,12 +7504,26 @@
"node_modules/sitemap/node_modules/@types/node": {
"version": "17.0.45",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
- "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
+ "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==",
+ "license": "MIT"
+ },
+ "node_modules/smol-toml": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.4.tgz",
+ "integrity": "sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/cyyynthia"
+ }
},
"node_modules/source-map": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
"integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">= 8"
}
@@ -7063,6 +7532,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -7071,20 +7541,17 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
"integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
- },
"node_modules/starlight-openapi": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/starlight-openapi/-/starlight-openapi-0.9.0.tgz",
"integrity": "sha512-YKsYNqYhWu3VF91z4XB1os4ZXwTsgz1LCZggeK/G6RguV4hcaFH18wHYGtO9icqPR+ZbJyrLAdlAjF3CvGBAWA==",
+ "license": "MIT",
"dependencies": {
"@readme/openapi-parser": "^2.5.0",
"github-slugger": "^2.0.0"
@@ -7098,9 +7565,10 @@
}
},
"node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -7108,15 +7576,16 @@
"node_modules/stream-replace-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz",
- "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w=="
+ "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==",
+ "license": "MIT"
},
"node_modules/streamx": {
- "version": "2.21.1",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz",
- "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==",
+ "version": "2.22.1",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz",
+ "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==",
+ "license": "MIT",
"dependencies": {
"fast-fifo": "^1.3.2",
- "queue-tick": "^1.0.1",
"text-decoder": "^1.1.0"
},
"optionalDependencies": {
@@ -7127,6 +7596,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "license": "MIT",
"dependencies": {
"safe-buffer": "~5.2.0"
}
@@ -7135,6 +7605,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^10.3.0",
"get-east-asian-width": "^1.0.0",
@@ -7147,48 +7618,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/string-width-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/stringify-entities": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
"integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "license": "MIT",
"dependencies": {
"character-entities-html4": "^2.0.0",
"character-entities-legacy": "^3.0.0"
@@ -7202,6 +7636,7 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -7212,255 +7647,141 @@
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
+ "node_modules/style-to-js": {
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.16.tgz",
+ "integrity": "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==",
+ "license": "MIT",
+ "dependencies": {
+ "style-to-object": "1.0.8"
+ }
+ },
"node_modules/style-to-object": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz",
"integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==",
+ "license": "MIT",
"dependencies": {
"inline-style-parser": "0.2.4"
}
},
- "node_modules/sucrase": {
- "version": "3.35.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
- "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.2",
- "commander": "^4.0.0",
- "glob": "^10.3.10",
- "lines-and-columns": "^1.1.6",
- "mz": "^2.7.0",
- "pirates": "^4.0.1",
- "ts-interface-checker": "^0.1.9"
- },
- "bin": {
- "sucrase": "bin/sucrase",
- "sucrase-node": "bin/sucrase-node"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/tailwindcss": {
- "version": "3.4.17",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
- "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
- "dependencies": {
- "@alloc/quick-lru": "^5.2.0",
- "arg": "^5.0.2",
- "chokidar": "^3.6.0",
- "didyoumean": "^1.2.2",
- "dlv": "^1.1.3",
- "fast-glob": "^3.3.2",
- "glob-parent": "^6.0.2",
- "is-glob": "^4.0.3",
- "jiti": "^1.21.6",
- "lilconfig": "^3.1.3",
- "micromatch": "^4.0.8",
- "normalize-path": "^3.0.0",
- "object-hash": "^3.0.0",
- "picocolors": "^1.1.1",
- "postcss": "^8.4.47",
- "postcss-import": "^15.1.0",
- "postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.2",
- "postcss-nested": "^6.2.0",
- "postcss-selector-parser": "^6.1.2",
- "resolve": "^1.22.8",
- "sucrase": "^3.35.0"
- },
- "bin": {
- "tailwind": "lib/cli.js",
- "tailwindcss": "lib/cli.js"
- },
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.10.tgz",
+ "integrity": "sha512-P3nr6WkvKV/ONsTzj6Gb57sWPMX29EPNPopo7+FcpkQaNsrNpZ1pv8QmrYI2RqEKD7mlGqLnGovlcYnBK0IqUA==",
+ "license": "MIT"
+ },
+ "node_modules/tapable": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
+ "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
+ "license": "MIT",
"engines": {
- "node": ">=14.0.0"
+ "node": ">=6"
}
},
- "node_modules/tailwindcss/node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "node_modules/tar": {
+ "version": "7.4.3",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz",
+ "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==",
+ "license": "ISC",
"dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
+ "@isaacs/fs-minipass": "^4.0.0",
+ "chownr": "^3.0.0",
+ "minipass": "^7.1.2",
+ "minizlib": "^3.0.1",
+ "mkdirp": "^3.0.1",
+ "yallist": "^5.0.0"
},
"engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/tailwindcss/node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/tailwindcss/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/tailwindcss/node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
+ "node": ">=18"
}
},
"node_modules/tar-fs": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz",
- "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==",
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz",
+ "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==",
+ "license": "MIT",
"dependencies": {
"pump": "^3.0.0",
"tar-stream": "^3.1.5"
},
"optionalDependencies": {
- "bare-fs": "^2.1.1",
- "bare-path": "^2.1.0"
+ "bare-fs": "^4.0.1",
+ "bare-path": "^3.0.0"
}
},
"node_modules/tar-stream": {
"version": "3.1.7",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
"integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
+ "license": "MIT",
"dependencies": {
"b4a": "^1.6.4",
"fast-fifo": "^1.2.0",
"streamx": "^2.15.0"
}
},
+ "node_modules/tar/node_modules/chownr": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
+ "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/text-decoder": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
"integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "license": "Apache-2.0",
"dependencies": {
"b4a": "^1.6.4"
}
},
- "node_modules/thenify": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
- "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
- "dependencies": {
- "any-promise": "^1.0.0"
- }
- },
- "node_modules/thenify-all": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
- "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
- "dependencies": {
- "thenify": ">= 3.1.0 < 4"
- },
- "engines": {
- "node": ">=0.8"
- }
+ "node_modules/tiny-inflate": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
+ "license": "MIT"
},
"node_modules/tinyexec": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
- "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="
+ "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+ "license": "MIT"
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
+ "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -7472,14 +7793,22 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "license": "MIT",
"engines": {
"node": ">=0.6"
}
},
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "license": "MIT"
+ },
"node_modules/trim-lines": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
"integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -7489,20 +7818,17 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
"integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/ts-interface-checker": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
- },
"node_modules/tsconfck": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.4.tgz",
- "integrity": "sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz",
+ "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==",
+ "license": "MIT",
"bin": {
"tsconfck": "bin/tsconfck.js"
},
@@ -7522,12 +7848,13 @@
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "optional": true
+ "license": "0BSD"
},
"node_modules/tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "license": "Apache-2.0",
"dependencies": {
"safe-buffer": "^5.0.1"
},
@@ -7536,9 +7863,10 @@
}
},
"node_modules/type-fest": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.31.0.tgz",
- "integrity": "sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==",
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=16"
},
@@ -7549,12 +7877,14 @@
"node_modules/typesafe-path": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz",
- "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA=="
+ "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==",
+ "license": "MIT"
},
"node_modules/typescript": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
- "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
+ "version": "5.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
+ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -7564,49 +7894,63 @@
}
},
"node_modules/typescript-auto-import-cache": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.5.tgz",
- "integrity": "sha512-fAIveQKsoYj55CozUiBoj4b/7WpN0i4o74wiGY5JVUEoD0XiqDk1tJqTEjgzL2/AizKQrXxyRosSebyDzBZKjw==",
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.6.tgz",
+ "integrity": "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==",
+ "license": "MIT",
"dependencies": {
"semver": "^7.3.8"
}
},
"node_modules/ufo": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz",
- "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ=="
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz",
+ "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==",
+ "license": "MIT"
},
"node_modules/ultrahtml": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.5.3.tgz",
- "integrity": "sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg=="
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz",
+ "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==",
+ "license": "MIT"
},
"node_modules/uncrypto": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz",
- "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="
+ "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==",
+ "license": "MIT"
},
"node_modules/undici-types": {
- "version": "6.20.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
- "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
+ "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
+ "license": "MIT"
},
- "node_modules/unenv": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.10.0.tgz",
- "integrity": "sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==",
+ "node_modules/unicode-properties": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz",
+ "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==",
+ "license": "MIT",
"dependencies": {
- "consola": "^3.2.3",
- "defu": "^6.1.4",
- "mime": "^3.0.0",
- "node-fetch-native": "^1.6.4",
- "pathe": "^1.1.2"
+ "base64-js": "^1.3.0",
+ "unicode-trie": "^2.0.0"
+ }
+ },
+ "node_modules/unicode-trie": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz",
+ "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "pako": "^0.2.5",
+ "tiny-inflate": "^1.0.0"
}
},
"node_modules/unified": {
"version": "11.0.5",
"resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
"integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"bail": "^2.0.0",
@@ -7621,10 +7965,21 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/unifont": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.5.0.tgz",
+ "integrity": "sha512-4DueXMP5Hy4n607sh+vJ+rajoLu778aU3GzqeTCqsD/EaUcvqZT9wPC8kgK6Vjh22ZskrxyRCR71FwNOaYn6jA==",
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "^3.0.0",
+ "ohash": "^2.0.0"
+ }
+ },
"node_modules/unist-util-find-after": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
"integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-is": "^6.0.0"
@@ -7638,6 +7993,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
"integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0"
},
@@ -7650,6 +8006,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz",
"integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"array-iterate": "^2.0.0"
@@ -7663,6 +8020,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
"integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0"
},
@@ -7675,6 +8033,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz",
"integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0"
},
@@ -7687,6 +8046,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
"integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-visit": "^5.0.0"
@@ -7700,6 +8060,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
"integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0"
},
@@ -7712,6 +8073,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
"integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-is": "^6.0.0",
@@ -7726,6 +8088,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz",
"integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0"
},
@@ -7738,6 +8101,7 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
"integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-is": "^6.0.0"
@@ -7748,38 +8112,39 @@
}
},
"node_modules/unstorage": {
- "version": "1.14.4",
- "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.14.4.tgz",
- "integrity": "sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.16.0.tgz",
+ "integrity": "sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==",
+ "license": "MIT",
"dependencies": {
"anymatch": "^3.1.3",
- "chokidar": "^3.6.0",
- "destr": "^2.0.3",
- "h3": "^1.13.0",
+ "chokidar": "^4.0.3",
+ "destr": "^2.0.5",
+ "h3": "^1.15.2",
"lru-cache": "^10.4.3",
- "node-fetch-native": "^1.6.4",
+ "node-fetch-native": "^1.6.6",
"ofetch": "^1.4.1",
- "ufo": "^1.5.4"
+ "ufo": "^1.6.1"
},
"peerDependencies": {
"@azure/app-configuration": "^1.8.0",
"@azure/cosmos": "^4.2.0",
"@azure/data-tables": "^13.3.0",
- "@azure/identity": "^4.5.0",
+ "@azure/identity": "^4.6.0",
"@azure/keyvault-secrets": "^4.9.0",
"@azure/storage-blob": "^12.26.0",
- "@capacitor/preferences": "^6.0.3",
- "@deno/kv": ">=0.8.4",
+ "@capacitor/preferences": "^6.0.3 || ^7.0.0",
+ "@deno/kv": ">=0.9.0",
"@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0",
"@planetscale/database": "^1.19.0",
"@upstash/redis": "^1.34.3",
- "@vercel/blob": ">=0.27.0",
+ "@vercel/blob": ">=0.27.1",
"@vercel/kv": "^1.0.1",
"aws4fetch": "^1.0.20",
"db0": ">=0.2.1",
"idb-keyval": "^6.2.1",
"ioredis": "^5.4.2",
- "uploadthing": "^7.4.1"
+ "uploadthing": "^7.4.4"
},
"peerDependenciesMeta": {
"@azure/app-configuration": {
@@ -7838,89 +8203,17 @@
}
}
},
- "node_modules/unstorage/node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/unstorage/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/unstorage/node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
- "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.0"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
},
"node_modules/vfile": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
"integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"vfile-message": "^4.0.0"
@@ -7934,6 +8227,7 @@
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
"integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"vfile": "^6.0.0"
@@ -7947,6 +8241,7 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz",
"integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-stringify-position": "^4.0.0"
@@ -7957,13 +8252,17 @@
}
},
"node_modules/vite": {
- "version": "6.0.7",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.7.tgz",
- "integrity": "sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==",
+ "version": "6.3.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
+ "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
+ "license": "MIT",
"dependencies": {
- "esbuild": "^0.24.2",
- "postcss": "^8.4.49",
- "rollup": "^4.23.0"
+ "esbuild": "^0.25.0",
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2",
+ "postcss": "^8.5.3",
+ "rollup": "^4.34.9",
+ "tinyglobby": "^0.2.13"
},
"bin": {
"vite": "bin/vite.js"
@@ -8026,394 +8325,15 @@
}
}
},
- "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz",
- "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==",
- "cpu": [
- "ppc64"
- ],
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/android-arm": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz",
- "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/android-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz",
- "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/android-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz",
- "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz",
- "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/darwin-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz",
- "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz",
- "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz",
- "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-arm": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz",
- "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz",
- "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-ia32": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz",
- "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-loong64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz",
- "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==",
- "cpu": [
- "loong64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz",
- "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==",
- "cpu": [
- "mips64el"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz",
- "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==",
- "cpu": [
- "ppc64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz",
- "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==",
- "cpu": [
- "riscv64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-s390x": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz",
- "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==",
- "cpu": [
- "s390x"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz",
- "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz",
- "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz",
- "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/sunos-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz",
- "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/win32-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz",
- "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/win32-ia32": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz",
- "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/win32-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz",
- "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/esbuild": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz",
- "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==",
- "hasInstallScript": true,
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.24.2",
- "@esbuild/android-arm": "0.24.2",
- "@esbuild/android-arm64": "0.24.2",
- "@esbuild/android-x64": "0.24.2",
- "@esbuild/darwin-arm64": "0.24.2",
- "@esbuild/darwin-x64": "0.24.2",
- "@esbuild/freebsd-arm64": "0.24.2",
- "@esbuild/freebsd-x64": "0.24.2",
- "@esbuild/linux-arm": "0.24.2",
- "@esbuild/linux-arm64": "0.24.2",
- "@esbuild/linux-ia32": "0.24.2",
- "@esbuild/linux-loong64": "0.24.2",
- "@esbuild/linux-mips64el": "0.24.2",
- "@esbuild/linux-ppc64": "0.24.2",
- "@esbuild/linux-riscv64": "0.24.2",
- "@esbuild/linux-s390x": "0.24.2",
- "@esbuild/linux-x64": "0.24.2",
- "@esbuild/netbsd-arm64": "0.24.2",
- "@esbuild/netbsd-x64": "0.24.2",
- "@esbuild/openbsd-arm64": "0.24.2",
- "@esbuild/openbsd-x64": "0.24.2",
- "@esbuild/sunos-x64": "0.24.2",
- "@esbuild/win32-arm64": "0.24.2",
- "@esbuild/win32-ia32": "0.24.2",
- "@esbuild/win32-x64": "0.24.2"
- }
- },
"node_modules/vitefu": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.5.tgz",
- "integrity": "sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.6.tgz",
+ "integrity": "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==",
+ "license": "MIT",
+ "workspaces": [
+ "tests/deps/*",
+ "tests/projects/*"
+ ],
"peerDependencies": {
"vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
},
@@ -8427,6 +8347,7 @@
"version": "0.0.62",
"resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.62.tgz",
"integrity": "sha512-JwNyKsH3F8PuzZYuqPf+2e+4CTU8YoyUHEHVnoXNlrLe7wy9U3biomZ56llN69Ris7TTy/+DEX41yVxQpM4qvg==",
+ "license": "MIT",
"dependencies": {
"vscode-css-languageservice": "^6.3.0",
"vscode-languageserver-textdocument": "^1.0.11",
@@ -8445,6 +8366,7 @@
"version": "0.0.62",
"resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.62.tgz",
"integrity": "sha512-U4dxWDBWz7Pi4plpbXf4J4Z/ss6kBO3TYrACxWNsE29abu75QzVS0paxDDhI6bhqpbDFXlpsDhZ9aXVFpnfGRQ==",
+ "license": "MIT",
"dependencies": {
"@emmetio/css-parser": "^0.4.0",
"@emmetio/html-matcher": "^1.3.0",
@@ -8464,6 +8386,7 @@
"version": "0.0.62",
"resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.62.tgz",
"integrity": "sha512-Zw01aJsZRh4GTGUjveyfEzEqpULQUdQH79KNEiKVYHZyuGtdBRYCHlrus1sueSNMxwwkuF5WnOHfvBzafs8yyQ==",
+ "license": "MIT",
"dependencies": {
"vscode-html-languageservice": "^5.3.0",
"vscode-languageserver-textdocument": "^1.0.11",
@@ -8482,6 +8405,7 @@
"version": "0.0.62",
"resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.62.tgz",
"integrity": "sha512-h2yk1RqRTE+vkYZaI9KYuwpDfOQRrTEMvoHol0yW4GFKc75wWQRrb5n/5abDrzMPrkQbSip8JH2AXbvrRtYh4w==",
+ "license": "MIT",
"dependencies": {
"vscode-uri": "^3.0.8"
},
@@ -8502,6 +8426,7 @@
"version": "0.0.62",
"resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.62.tgz",
"integrity": "sha512-p7MPi71q7KOsH0eAbZwPBiKPp9B2+qrdHAd6VY5oTo9BUXatsOAdakTm9Yf0DUj6uWBAaOT01BSeVOPwucMV1g==",
+ "license": "MIT",
"dependencies": {
"path-browserify": "^1.0.1",
"semver": "^7.6.2",
@@ -8523,6 +8448,7 @@
"version": "0.0.62",
"resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.62.tgz",
"integrity": "sha512-KxFt4zydyJYYI0kFAcWPTh4u0Ha36TASPZkAnNY784GtgajerUqM80nX/W1d0wVhmcOFfAxkVsf/Ed+tiYU7ng==",
+ "license": "MIT",
"dependencies": {
"vscode-uri": "^3.0.8"
},
@@ -8539,6 +8465,7 @@
"version": "0.0.62",
"resolved": "https://registry.npmjs.org/volar-service-yaml/-/volar-service-yaml-0.0.62.tgz",
"integrity": "sha512-k7gvv7sk3wa+nGll3MaSKyjwQsJjIGCHFjVkl3wjaSP2nouKyn9aokGmqjrl39mi88Oy49giog2GkZH526wjig==",
+ "license": "MIT",
"dependencies": {
"vscode-uri": "^3.0.8",
"yaml-language-server": "~1.15.0"
@@ -8553,31 +8480,34 @@
}
},
"node_modules/vscode-css-languageservice": {
- "version": "6.3.2",
- "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.2.tgz",
- "integrity": "sha512-GEpPxrUTAeXWdZWHev1OJU9lz2Q2/PPBxQ2TIRmLGvQiH3WZbqaNoute0n0ewxlgtjzTW3AKZT+NHySk5Rf4Eg==",
+ "version": "6.3.6",
+ "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.6.tgz",
+ "integrity": "sha512-fU4h8mT3KlvfRcbF74v/M+Gzbligav6QMx4AD/7CbclWPYOpGb9kgIswfpZVJbIcOEJJACI9iYizkNwdiAqlHw==",
+ "license": "MIT",
"dependencies": {
"@vscode/l10n": "^0.0.18",
"vscode-languageserver-textdocument": "^1.0.12",
"vscode-languageserver-types": "3.17.5",
- "vscode-uri": "^3.0.8"
+ "vscode-uri": "^3.1.0"
}
},
"node_modules/vscode-html-languageservice": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.3.1.tgz",
- "integrity": "sha512-ysUh4hFeW/WOWz/TO9gm08xigiSsV/FOAZ+DolgJfeLftna54YdmZ4A+lIn46RbdO3/Qv5QHTn1ZGqmrXQhZyA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.5.0.tgz",
+ "integrity": "sha512-No6Er2P2L8IsXDnUFlp0bP4f2sdkJv+zJLZYFhtEQIp+2xNfxY8WYkhSxLJ/7bZhuV/aU55lmGSSHBVxSGer3Q==",
+ "license": "MIT",
"dependencies": {
"@vscode/l10n": "^0.0.18",
"vscode-languageserver-textdocument": "^1.0.12",
"vscode-languageserver-types": "^3.17.5",
- "vscode-uri": "^3.0.8"
+ "vscode-uri": "^3.1.0"
}
},
"node_modules/vscode-json-languageservice": {
"version": "4.1.8",
"resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.8.tgz",
"integrity": "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==",
+ "license": "MIT",
"dependencies": {
"jsonc-parser": "^3.0.0",
"vscode-languageserver-textdocument": "^1.0.1",
@@ -8592,12 +8522,14 @@
"node_modules/vscode-json-languageservice/node_modules/jsonc-parser": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
- "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="
+ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+ "license": "MIT"
},
"node_modules/vscode-jsonrpc": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
"integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
+ "license": "MIT",
"engines": {
"node": ">=14.0.0"
}
@@ -8606,6 +8538,7 @@
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
"integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
+ "license": "MIT",
"dependencies": {
"vscode-languageserver-protocol": "3.17.5"
},
@@ -8617,6 +8550,7 @@
"version": "3.17.5",
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
"integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
+ "license": "MIT",
"dependencies": {
"vscode-jsonrpc": "8.2.0",
"vscode-languageserver-types": "3.17.5"
@@ -8625,61 +8559,58 @@
"node_modules/vscode-languageserver-textdocument": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
- "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="
+ "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==",
+ "license": "MIT"
},
"node_modules/vscode-languageserver-types": {
"version": "3.17.5",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
- "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
+ "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
+ "license": "MIT"
},
"node_modules/vscode-nls": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz",
- "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng=="
+ "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==",
+ "license": "MIT"
},
"node_modules/vscode-uri": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
- "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
+ "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
+ "license": "MIT"
},
"node_modules/web-namespaces": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
"integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "license": "BSD-2-Clause"
},
- "node_modules/which-pm": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-3.0.0.tgz",
- "integrity": "sha512-ysVYmw6+ZBhx3+ZkcPwRuJi38ZOTLJJ33PSHaitLxSKUMsh0LkKd0nC69zZCwt5D+AYUcMK2hhw4yWny20vSGg==",
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "license": "MIT",
"dependencies": {
- "load-yaml-file": "^0.2.0"
- },
- "engines": {
- "node": ">=18.12"
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
}
},
"node_modules/which-pm-runs": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz",
"integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
@@ -8688,6 +8619,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz",
"integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==",
+ "license": "MIT",
"dependencies": {
"string-width": "^7.0.0"
},
@@ -8702,6 +8634,7 @@
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
"integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"string-width": "^7.0.0",
@@ -8714,107 +8647,53 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/wrap-ansi-cjs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
},
"node_modules/xxhash-wasm": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz",
- "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="
+ "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==",
+ "license": "MIT"
},
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "license": "ISC",
"engines": {
"node": ">=10"
}
},
+ "node_modules/yallist": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
+ "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/yaml": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
- "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
+ "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
+ "license": "ISC",
"bin": {
"yaml": "bin.mjs"
},
"engines": {
- "node": ">= 14"
+ "node": ">= 14.6"
}
},
"node_modules/yaml-language-server": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/yaml-language-server/-/yaml-language-server-1.15.0.tgz",
"integrity": "sha512-N47AqBDCMQmh6mBLmI6oqxryHRzi33aPFPsJhYy3VTUGCdLHYjGh4FZzpUjRlphaADBBkDmnkM/++KNIOHi5Rw==",
+ "license": "MIT",
"dependencies": {
"ajv": "^8.11.0",
"lodash": "4.17.21",
@@ -8838,6 +8717,7 @@
"version": "2.8.7",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz",
"integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
+ "license": "MIT",
"optional": true,
"bin": {
"prettier": "bin-prettier.js"
@@ -8852,12 +8732,14 @@
"node_modules/yaml-language-server/node_modules/request-light": {
"version": "0.5.8",
"resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz",
- "integrity": "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg=="
+ "integrity": "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==",
+ "license": "MIT"
},
"node_modules/yaml-language-server/node_modules/vscode-jsonrpc": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz",
"integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==",
+ "license": "MIT",
"engines": {
"node": ">=8.0.0 || >=10.0.0"
}
@@ -8866,6 +8748,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz",
"integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==",
+ "license": "MIT",
"dependencies": {
"vscode-languageserver-protocol": "3.16.0"
},
@@ -8877,6 +8760,7 @@
"version": "3.16.0",
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz",
"integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==",
+ "license": "MIT",
"dependencies": {
"vscode-jsonrpc": "6.0.0",
"vscode-languageserver-types": "3.16.0"
@@ -8885,12 +8769,14 @@
"node_modules/yaml-language-server/node_modules/vscode-languageserver-types": {
"version": "3.16.0",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
- "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA=="
+ "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==",
+ "license": "MIT"
},
"node_modules/yaml-language-server/node_modules/yaml": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
"integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
+ "license": "ISC",
"engines": {
"node": ">= 14"
}
@@ -8899,6 +8785,7 @@
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "license": "MIT",
"dependencies": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
@@ -8916,6 +8803,7 @@
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "license": "ISC",
"engines": {
"node": ">=12"
}
@@ -8924,6 +8812,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -8931,12 +8820,14 @@
"node_modules/yargs/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
},
"node_modules/yargs/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -8950,6 +8841,7 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -8958,9 +8850,10 @@
}
},
"node_modules/yocto-queue": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
- "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz",
+ "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==",
+ "license": "MIT",
"engines": {
"node": ">=12.20"
},
@@ -8969,9 +8862,10 @@
}
},
"node_modules/yocto-spinner": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.1.2.tgz",
- "integrity": "sha512-VfmLIh/ZSZOJnVRQZc/dvpPP90lWL4G0bmxQMP0+U/2vKBA8GSpcBuWv17y7F+CZItRuO97HN1wdbb4p10uhOg==",
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz",
+ "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==",
+ "license": "MIT",
"dependencies": {
"yoctocolors": "^2.1.1"
},
@@ -8986,6 +8880,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz",
"integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==",
+ "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -8994,17 +8889,19 @@
}
},
"node_modules/zod": {
- "version": "3.24.1",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz",
- "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==",
+ "version": "3.25.64",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.64.tgz",
+ "integrity": "sha512-hbP9FpSZf7pkS7hRVUrOjhwKJNyampPgtXKc3AN6DsWtoHsg2Sb4SQaS4Tcay380zSwd2VPo9G9180emBACp5g==",
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
"node_modules/zod-to-json-schema": {
- "version": "3.24.1",
- "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.1.tgz",
- "integrity": "sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==",
+ "version": "3.24.5",
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz",
+ "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==",
+ "license": "ISC",
"peerDependencies": {
"zod": "^3.24.1"
}
@@ -9022,6 +8919,7 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
"integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
diff --git a/docs/package.json b/docs/package.json
index a48d239c..1f05e682 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -1,7 +1,7 @@
{
"name": "docs",
"type": "module",
- "version": "0.16.5",
+ "version": "0.17.0",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
@@ -11,16 +11,16 @@
},
"dependencies": {
"@astrojs/check": "^0.9.4",
- "@astrojs/node": "^9.0.0",
- "@astrojs/starlight": "^0.30.3",
- "@astrojs/starlight-tailwind": "^3.0.0",
- "@astrojs/tailwind": "^5.1.3",
+ "@astrojs/node": "^9.2.2",
+ "@astrojs/starlight": "^0.34.4",
+ "@astrojs/starlight-tailwind": "^4.0.1",
"@fontsource/ibm-plex-mono": "^5.0.13",
"@fontsource/ibm-plex-sans": "^5.0.20",
- "astro": "^5.0.2",
+ "@tailwindcss/vite": "^4.1.10",
+ "astro": "^5.9.3",
"sharp": "^0.32.5",
"starlight-openapi": "^0.9.0",
- "tailwindcss": "^3.4.4",
+ "tailwindcss": "^4.1.10",
"typescript": "^5.4.5"
}
}
diff --git a/docs/src/assets/guides/pocketbase_backup.png b/docs/src/assets/guides/pocketbase_backup.png
new file mode 100644
index 00000000..97813210
Binary files /dev/null and b/docs/src/assets/guides/pocketbase_backup.png differ
diff --git a/docs/src/assets/guides/wanderer_follow.png b/docs/src/assets/guides/wanderer_follow.png
new file mode 100644
index 00000000..d0209651
Binary files /dev/null and b/docs/src/assets/guides/wanderer_follow.png differ
diff --git a/docs/src/assets/integrations.png b/docs/src/assets/integrations.png
new file mode 100644
index 00000000..c62bfded
Binary files /dev/null and b/docs/src/assets/integrations.png differ
diff --git a/docs/src/assets/social.png b/docs/src/assets/social.png
new file mode 100644
index 00000000..e8182cab
Binary files /dev/null and b/docs/src/assets/social.png differ
diff --git a/docs/src/components/footer.astro b/docs/src/components/footer.astro
index 54dc092f..9408dcd6 100644
--- a/docs/src/components/footer.astro
+++ b/docs/src/components/footer.astro
@@ -1,7 +1,7 @@
---
-import { version } from '../../package.json';
+import { version } from "../../package.json";
-const isNotHomepage = Astro.props.slug !== "";
+const isNotHomepage = Astro.locals.starlightRoute.id !== "";
---
{
@@ -121,9 +121,7 @@ const isNotHomepage = Astro.props.slug !== "";
Resources
-
- Demo
-
+ Demo
API Reference
@@ -140,19 +138,13 @@ const isNotHomepage = Astro.props.slug !== "";
wanderer
@@ -193,7 +188,7 @@ const isNotHomepage = Astro.props.slug !== "";
color: var(--sl-color-text);
}
footer ul {
- list-style-type: none;
+ list-style-type: none !important;
padding: 0;
}
diff --git a/docs/src/content/docs/guides/api.md b/docs/src/content/docs/develop/api.md
similarity index 78%
rename from docs/src/content/docs/guides/api.md
rename to docs/src/content/docs/develop/api.md
index 9efa6d87..1be8074f 100644
--- a/docs/src/content/docs/guides/api.md
+++ b/docs/src/content/docs/develop/api.md
@@ -24,7 +24,7 @@ http://localhost:3000/api/v1/auth/login
## Upload trails
-One common use case for wanderer's API is bulk uploading GPX files to create new trails. For that, the API provides a separate endpoint: `/trail/upload`. You must first log in to use the endpoint. Afterwards you can send a GPX file to the endpoint to let wanderer parse it an create a new trail in your collection. wanderer will try to infer as much information as possible from the file itself. All additional information can be added to the trail via the UPDATE [endpoint](/api-reference/operations/updatetrail).
+One common use case for wanderer's API is bulk uploading GPX files to create new trails. For that, the API provides a separate endpoint: `/trail/upload`. You must first log in to use the endpoint. Afterwards you can send a GPX file to the endpoint to let wanderer parse it an create a new trail in your collection. wanderer will try to infer as much information as possible from the file itself. All additional information can be added to the trail via the UPDATE [endpoint](/api-reference/operations/updatetrail).
### Example
```bash
diff --git a/docs/src/content/docs/develop/federation.md b/docs/src/content/docs/develop/federation.md
new file mode 100644
index 00000000..26154270
--- /dev/null
+++ b/docs/src/content/docs/develop/federation.md
@@ -0,0 +1,491 @@
+---
+title: Federation
+description: Technical documentation of federation in wanderer
+---
+
+wanderer is a federated trail-sharing platform built on ActivityPub. It enables users to publish trails, follow other explorers across instances, and interact with content such as comments, lists, and summit logs. All user-generated content in wanderer—whether it's a trail, a list, a comment, or a summit log—is modeled as a `Note` object in ActivityPub, adhering to a consistent structure for federation.
+
+This technical documentation provides a detailed overview of how federation works in wanderer, including the types of objects exchanged, the structure of those objects, and how interactions such as mentions, likes, and follows are processed across instances.
+
+Below, you’ll find examples of the different JSON representations used in federated communication. These illustrate how wanderer encodes and interprets core actions and content as standardized `Note` objects.
+
+## Context
+
+```json
+"@context":[
+ "https://www.w3.org/ns/activitystreams"
+]
+```
+The context is identical for all activities and objects.
+
+## Actors
+An actor represents a user of wanderer in a federated context.
+
+### Person
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Person",
+ "inbox": "https://demo.wanderer.to/api/v1/activitypub/user/demo/inbox",
+ "outbox": "https://demo.wanderer.to/api/v1/activitypub/user/demo/outbox",
+ "summary": "Born the day we installed the site.",
+ "name": "demo",
+ "preferredUsername": "demo",
+ "followers": "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers",
+ "following": "https://demo.wanderer.to/api/v1/activitypub/user/demo/following",
+ "url": "https://demo.wanderer.to/profile/@demo",
+ "published": "2025-05-05T15:07:59.943Z",
+ "icon": {
+ "type": "Image",
+ "url": "https://demo.wanderer.to/api/v1/files/users/26b1si1344ficl6/wlezq_um7vh2722q.jpg"
+ },
+ "publicKey": {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/user/demo#main-key",
+ "owner": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw0xyaRWP5X955bwSnUbr\nmwEF/2Fdmn5nlRRmEvej1BR0oBcPMVPYrrK4sz37mrAJ7Wbmg4KjmSDEROD4sApr\nM5FmKeU1OBsV2O3bL1DSW/8PXaf4JQRgl0AO+LiSAd7A/GO0viAzJXyJT4Rpaamf\n8Naclh7YR5E4JXrsjahPEWtUWcQ4g8Yhc6n2ptQ33ACI7Q1R3+U7q1tMaRCKAbdT\nbRahzqGs3iSxV+FjnsMR109KqDQJDMjwRB11USJTA4/nMpV6w8RS+171xNHl12Sg\nGpiuusmXMYYuoECdKDtLY7AsntusYMzXUjPzKfE+5EqPmIj5OTbg3A24p9hWIv5s\nmwIDAQAB\n-----END PUBLIC KEY-----\n"
+ }
+}
+```
+
+### Outbox
+
+Paginated outbox of an actor.
+
+```json
+{
+ "type": "OrderedCollectionPage",
+ "first": "https://demo.wanderer.to/api/v1/activitypub/user/demo/outbox?page=1",
+ "next": "https://demo.wanderer.to/api/v1/activitypub/user/demo/outbox?page=2",
+ "partOf": "https://demo.wanderer.to/api/v1/activitypub/user/demo/outbox",
+ "totalItems": 23,
+ "orderedItems": [
+ {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/ecy96j9vpke00hr",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://social.tchncs.de/users/flomp/inbox",
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/inbox"
+ ],
+ "published": "2025-06-20 19:41:53.504Z",
+ "object": {
+ "id": "https://demo.wanderer.to/api/v1/comment/htm169g4b2i48fc",
+ "type": "Note",
+ "content": "@flomp@social.tchncs.de
Wow! What a beautiful trail!
",
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "inReplyTo": "https://demo.wanderer.to/api/v1/trail/2ce3af7a2e80f52",
+ "tag": [
+ {
+ "id": "https://social.tchncs.de/users/flomp",
+ "type": "Mention",
+ "name": "@flomp@social.tchncs.de",
+ "href": "https://social.tchncs.de/users/flomp"
+ }
+ ],
+ "published": "2025-06-20T19:41:53Z"
+ }
+ }
+ ]
+}
+```
+
+### Followers
+
+Paginated collection of followers of an actor.
+
+```json
+{
+ "type": "OrderedCollectionPage",
+ "first": "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers?page=1",
+ "partOf": "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers",
+ "totalItems": 3,
+ "orderedItems": [
+ "https://social.tchncs.de/users/flomp",
+ "https://trails.magdeburg.jetzt/api/v1/activitypub/user/momar",
+ "https://darmstadt.social/users/stormii"
+ ]
+}
+```
+
+### Following
+
+Paginated collection of actors being followed by an actor.
+
+```json
+{
+ "type": "OrderedCollectionPage",
+ "first": "https://demo.wanderer.to/api/v1/activitypub/user/demo/following?page=1",
+ "partOf": "https://demo.wanderer.to/api/v1/activitypub/user/demo/following",
+ "totalItems": 3,
+ "orderedItems": [
+ "https://social.tchncs.de/users/milan",
+ "https://social.tchncs.de/users/flomp",
+ "https://trails.tchncs.de/api/v1/activitypub/user/milan"
+ ]
+}
+```
+
+## Objects
+
+### Trail
+
+Represents a trail with various metadata like description, photos, elevation data etc.
+
+:::note
+Waypoints, comments and summit logs are not part of a federated trail object. They are instead fetched on demand from the source instance when requesting a trail.
+:::
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/trail/2ce3af7a2e80f52",
+ "type": "Note",
+ "name": "12 days in the Zugspitz region on the peak hiking trail",
+ "content": "12 days in the Zugspitz region on the peak hiking trail @flomp@social.tchncs.de
https://demo.wanderer.to/trail/view/@demo/2ce3af7a2e80f52
",
+ "attachment": [
+ {
+ "type": "Image",
+ "mediaType": "image/jpeg",
+ "url": "https://demo.wanderer.to/api/v1/files/trails/2ce3af7a2e80f52/route_ldv172t0my.webp"
+ },
+ {
+ "type": "Document",
+ "mediaType": "application/xml+gpx",
+ "url": "https://demo.wanderer.to/api/v1/files/trails/2ce3af7a2e80f52/12_days_in_the_zugspitz_region_on_the_peak_hiking_trail_5ts04zgsuk.gpx"
+ }
+ ],
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "location": {
+ "type": "Place",
+ "name": "Murnau am Staffelsee, Bayern, Deutschland",
+ "latitude": 47.678592,
+ "longitude": 11.196068
+ },
+ "tag": [
+ {
+ "type": "Note",
+ "name": "category",
+ "content": "Biking"
+ },
+ {
+ "type": "Note",
+ "name": "difficulty",
+ "content": "easy"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_gain",
+ "content": "8902.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_loss",
+ "content": "8906.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "distance",
+ "content": "202403.824936m"
+ },
+ {
+ "type": "Note",
+ "name": "duration",
+ "content": "4037.183333m"
+ },
+ {
+ "id": "https://social.tchncs.de/users/flomp",
+ "type": "Mention",
+ "name": "@flomp@social.tchncs.de",
+ "href": "https://social.tchncs.de/users/flomp"
+ },
+ {
+ "type": "Note",
+ "name": "tag",
+ "content": "My awesome tag"
+ }
+ ],
+ "url": "https://demo.wanderer.to/trail/view/@demo/2ce3af7a2e80f52",
+ "published": "2025-06-17T21:40:02Z",
+ "startTime": "2025-06-14T00:00:00Z"
+}
+```
+
+### Summit log
+
+Represents a summit log that is attached to a trail. The trail is referenced in the "InReplyTo" field. It contains very similar metadata to a trail object.
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/summit-log/0l889g7nbju9ic2",
+ "type": "Note",
+ "content": "Hello World! This is a summit log!
@flomp@social.tchncs.de
",
+ "attachment": [
+ {
+ "type": "Image",
+ "mediaType": "image/jpeg",
+ "url": "https://demo.wanderer.to/api/v1/files/summit_logs/0l889g7nbju9ic2/walchensee_heimgarten_fahrenbergkopf_herzogstand_2020_10_25_loncv4fixp.jpg"
+ },
+ {
+ "type": "Document",
+ "mediaType": "application/xml+gpx",
+ "url": "https://demo.wanderer.to/api/v1/files/summit_logs/0l889g7nbju9ic2/12_days_in_the_zugspitz_region_on_the_peak_hiking_trail_8mw5gysia0.gpx"
+ }
+ ],
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "inReplyTo": "https://demo.wanderer.to/api/v1/trail/2ce3af7a2e80f52",
+ "tag": [
+ {
+ "type": "Note",
+ "name": "elevation_gain",
+ "content": "6343.200000m"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_loss",
+ "content": "6347.400000m"
+ },
+ {
+ "type": "Note",
+ "name": "distance",
+ "content": "202403.824936m"
+ },
+ {
+ "type": "Note",
+ "name": "duration",
+ "content": "242231.000000m"
+ },
+ {
+ "id": "https://social.tchncs.de/users/flomp",
+ "type": "Mention",
+ "name": "@flomp@social.tchncs.de",
+ "href": "https://social.tchncs.de/users/flomp"
+ }
+ ],
+ "url": "https://demo.wanderer.to/trail/view/@demo/2ce3af7a2e80f52",
+ "published": "2025-06-20T19:38:19Z",
+ "startTime": "2025-06-20T00:00:00Z"
+}
+```
+
+### Comment
+
+A comment attached to a trail. The trail is referenced in the "InReplyTo" field. Contains only text.
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/comment/htm169g4b2i48fc",
+ "type": "Note",
+ "content": "@flomp@social.tchncs.de
Wow! What a beautiful trail!
",
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "inReplyTo": "https://demo.wanderer.to/api/v1/trail/2ce3af7a2e80f52",
+ "tag": [
+ {
+ "id": "https://social.tchncs.de/users/flomp",
+ "type": "Mention",
+ "name": "@flomp@social.tchncs.de",
+ "href": "https://social.tchncs.de/users/flomp"
+ }
+ ],
+ "published": "2025-06-20T19:41:53Z"
+}
+```
+
+### List
+
+A collection of trails.
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/list/65i686yf6u3b394",
+ "type": "Note",
+ "name": "My Awesome List",
+ "content": "With my awesome description.
https://demo.wanderer.to/lists/@demo/65i686yf6u3b394
",
+ "attachment": [
+ {
+ "type": "Image",
+ "mediaType": "image/jpeg",
+ "url": "https://demo.wanderer.to/api/v1/files/lists/65i686yf6u3b394/walchensee_heimgarten_fahrenbergkopf_herzogstand_2020_10_25_m1ubtj7rwk.jpg"
+ }
+ ],
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "url": "https://demo.wanderer.to/lists/@demo/65i686yf6u3b394",
+ "published": "2025-05-18T22:03:19Z"
+}
+```
+
+## Activities
+
+### Create or Update trail
+
+Issued whenever a trail is created or updated. Broadcasted to all followers and all mentions. Editing a previously created trail will broadcast an identical activity, except the `type` being `Update`. The `object` is a [Trail](#trail).
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/wqt6poxjevq9oax",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers",
+ "https://social.tchncs.de/users/flomp/inbox"
+ ],
+ "published": "2025-06-15 14:56:38.800Z",
+ "object": {}
+}
+```
+
+### Create or Update summit log
+
+Issued whenever a summit log is created or updated. Broadcasted to the trail author, the author's followers and all mentions. Editing a previously created summit log will broadcast an identical activity, except the `type` being `Update`. The `object` is a [Summit Log](#summit-log).
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/i31uc0lki3crxwm",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "to": "https://www.w3.org/ns/activitystreams#Public",
+ "type": "Create",
+ "cc": [
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers",
+ "https://social.tchncs.de/users/flomp/inbox"
+ ],
+ "published": "2025-06-20 19:38:19.978Z",
+ "object": {}
+}
+```
+
+### Create or Update comment
+
+Issued whenever a comment is created or updated. Broadcasted to the trail's author and all mentions. Editing a previously created comment will broadcast an identical activity, except the `type` being `Update`. The `object` is a [Comment](#comment).
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/ecy96j9vpke00hr",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://social.tchncs.de/users/flomp/inbox",
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/inbox"
+ ],
+ "published": "2025-06-20 19:41:53.504Z",
+ "object": {}
+}
+```
+
+
+### Create or Update list
+
+Issued whenever a list is created or updated. Broadcasted to all followers. Editing a previously created list will broadcast an identical activity, except the `type` being `Update`. The `object` is a [List](#list).
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/zq30he84ng9of67",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers",
+ ],
+ "published": "2025-06-20 19:51:37.079Z",
+ "object": {}
+}
+```
+
+### Follow user
+
+Each actor in wanderer can be followed. The actor being followed will immediately send back an `Accept` activity. Future public trails and lists published by the actor being followed will be broadcasted to the following actors inbox.
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/ika3t06qjyvlx72",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Follow",
+ "to": null,
+ "cc": null,
+ "published": "2025-06-01 07:23:56.517Z",
+ "object": "https://social.tchncs.de/users/flomp"
+}
+```
+
+### Accept follow
+
+Automatically send by an actor as a response upon receiving a `Follow` activity.
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/9jpjjvvi79ayp9d",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Accept",
+ "to": null,
+ "cc": null,
+ "published": "2025-06-17 19:48:29.417Z",
+ "object": {
+ "id": "https://social.tchncs.de/8f702e81-9f85-419f-8e45-c44c8b6d8365",
+ "type": "Follow",
+ "actor": "https://social.tchncs.de/users/flomp",
+ "object": "https://demo.wanderer.to/api/v1/activitypub/user/demo"
+ }
+}
+```
+
+### Undo follow
+
+An unfollow is represented by an `Undo` activity with the original follow as its `object`.
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/n3n7ka5msa3il84",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Undo",
+ "to": null,
+ "cc": null,
+ "published": "2025-06-20 20:14:37.107Z",
+ "object": {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/ika3t06qjyvlx72",
+ "type": "Follow",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "object": "https://social.tchncs.de/users/flomp"
+ }
+}
+```
+
+### Like trail
+
+A like for a trail.
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/jjlcgm0il3jy2y7",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Like",
+ "to": null,
+ "cc": null,
+ "published": "2025-06-18 18:48:55.300Z",
+ "object": "https://demo.wanderer.to/api/v1/trail/23fd1747a29c3af"
+}
+```
+
+### Undo like trail
+
+Removing a like from a previously liked trail.
+
+```json
+{
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/jjlcgm0il3jy2y7",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Undo",
+ "to": null,
+ "cc": null,
+ "published": "2025-06-18 18:48:55.300Z",
+ "object": "https://demo.wanderer.to/api/v1/trail/23fd1747a29c3af"
+}
+```
\ No newline at end of file
diff --git a/docs/src/content/docs/getting-started/local-development.md b/docs/src/content/docs/develop/local-development.md
similarity index 53%
rename from docs/src/content/docs/getting-started/local-development.md
rename to docs/src/content/docs/develop/local-development.md
index 1cd03949..7f5b47e7 100644
--- a/docs/src/content/docs/getting-started/local-development.md
+++ b/docs/src/content/docs/develop/local-development.md
@@ -1,9 +1,9 @@
---
title: Local development
-description: How to install wanderer for local development
+description: How to install wanderer for local development
---
-If you would like to set up a development environment on your own machine to work on wanderer please first follow the bare-metal installation steps in the [installation guide](/getting-started/installation#from-source). We will slightly modify the launch script to launch a node server in development mode instead:
+If you would like to set up a development environment on your own machine to work on wanderer please first follow the bare-metal installation steps in the [installation guide](/run/installation#from-source). We will slightly modify the launch script to launch a node server in development mode instead:
```bash
trap "kill 0" EXIT
@@ -13,6 +13,7 @@ export MEILI_URL=http://127.0.0.1:7700
export MEILI_MASTER_KEY=p2gYZAWODOrwTPr4AYoahCZ9CI8y9bUd0yQLGk-E3m8
export PUBLIC_POCKETBASE_URL=http://127.0.0.1:8090
export PUBLIC_VALHALLA_URL=https://valhalla1.openstreetmap.de
+export POCKETBASE_ENCRYPTION_KEY=9ada3c93163812101e50e2bf49e880bc
cd search && ./meilisearch --master-key $MEILI_MASTER_KEY &
cd db && ./pocketbase serve &
@@ -21,15 +22,15 @@ cd web && npm run dev &
wait
```
-This will bring up a `meilisearch` instance on `http://127.0.0.1:7700`, a `PocketBase` instance on `http://127.0.0.1:8090`, and a `vite` server for the wanderer frontend on `http://localhost:5173`.
+This will bring up a `meilisearch` instance on `http://127.0.0.1:7700`, a `PocketBase` instance on `http://127.0.0.1:8090`, and a `vite` server for the wanderer frontend on `http://localhost:5173`.
-## Accessing the backend
+## PocketBase dashboard
-Sometimes it can be useful to edit data directly in the database. `PocketBase` offers a convenient web UI to do so. Simply head over to `http://127.0.0.1:8090/_/`. If you access the admin panel for the first time you will be asked to create an admin account. Afterwards, you can create, read, update, and delete data in the respective tables. To learn more about `PocketBase` you can head over to their extensive [documentation](https://pocketbase.io/docs).
+It is highly advisable to create an admin user to access PocketBase's dashboard. To do so, please refer to the [backend configuration](/run/backend-configuration#setup) section of the documentation.
## Building
-When you are done with development and would like to build wanderer for production there are some steps to follow.
+When you are done with development and would like to build wanderer for production there are some steps to follow.
### PocketBase
@@ -48,7 +49,7 @@ For the frontend there are no further caveats. Simply run `npm run build`.
### Docker
-To create local docker images of wanderer simply run the script below. These will work as drop-in replacements for the ones hosted on docker hub. This will only work if you have already completed the steps above.
+To create local docker images of wanderer simply run the script below. These will work as drop-in replacements for the ones hosted on docker hub. This will only work if you have already completed the steps above.
```bash
# db
diff --git a/docs/src/content/docs/getting-started/configuration.md b/docs/src/content/docs/getting-started/configuration.md
deleted file mode 100644
index 364d35ea..00000000
--- a/docs/src/content/docs/getting-started/configuration.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-title: Configuration
-description: How to configure wanderer with environment variables
----
-
-Global settings for wanderer can be adjusted via environment variables. If you depoloyed wanderer with docker you can change the environment variables directly in the `docker-compose.yaml`. If you deployed wanderer on bare-metal you can change the environment variables in the launch script.
-
-## Common
-These variables are shared between all three services.
-
-| Environment Variable | Description | Default |
-| -------------------- | ---------------------------------------------------------------- | ------------------------------------------- |
-| MEILI_URL | IP or hostname (including the port) of your meilisearch instance | http://search:7700 |
-| MEILI_MASTER_KEY | Master API key for your meilisearch instance | vODkljPcfFANYNepCHyDyGjzAMPcdHnrb6X5KyXQPWo |
-
-## Meilisearch
-Since we use an unmodified installation of meilisearch you can use all variables listed in meilisearch's documentation. You can find a full list over [here](https://www.meilisearch.com/docs/learn/configuration/instance_options).
-
-| Environment Variable | Description | Default |
-| -------------------- | ----------------------------- | ------- |
-| MEILI_NO_ANALYTICS | Disable meilisearch telemetry | true |
-
-## Pocketbase
-| Environment Variable | Description | Default |
-| ----------------------------- | ----------------------------------------------------------------------------------- | --------- |
-| POCKETBASE_ENCRYPTION_KEY | Valid 32 character AES key. Used to encrypt secrets | |
-| POCKETBASE_CRON_SYNC_SCHEDULE | Valid cron expression. Sets how often trails are synced from 3rd party integrations | 0 2 * * * |
-| POCKETBASE_SMTP_ENABLED | Enables or disables SMTP functionality. Accepted values are true or false | false |
-| POCKETBASE_SMTP_SENDER_ADRESS | The email address used as the "From" address in outgoing emails | |
-| POCKETBASE_SMTP_SENDER_NAME | The display name shown as the sender in outgoing emails | |
-| POCKETBASE_SMTP_HOST | The hostname or IP address of the SMTP server | |
-| POCKETBASE_SMTP_PORT | The port number used to connect to the SMTP server | |
-| POCKETBASE_SMTP_USERNAME | The username used to authenticate with the SMTP server | |
-| POCKETBASE_SMTP_PASSWORD | The password used to authenticate with the SMTP server | |
-
-## Frontend
-
-| Environment Variable | Description | Default |
-| --------------------- | -------------------------------------------------------------------- | ----------------------------------- |
-| ORIGIN | Public IP or hostname (including the port) of your wanderer instance | http://localhost:3000 |
-| BODY_SIZE_LIMIT | Maximum allowed upload size | Infinity |
-| PUBLIC_POCKETBASE_URL | IP or hostname (including the port) of your pocketbase instance | http://db:8090 |
-| PUBLIC_DISABLE_SIGNUP | Disables signup option for new users | false |
-| PUBLIC_VALHALLA_URL | Public IP or hostname (including the port) of a valhalla instance | https://valhalla1.openstreetmap.de |
-| PUBLIC_NOMINATIM_URL | Public IP or hostname (including the port) of a nominatim instance | https://nominatim.openstreetmap.org |
-| UPLOAD_FOLDER | Folder from which wanderer auto-uploads trails | /app/uploads |
-| UPLOAD_USER | Username for the account with which wanderer auto-uploads trails | |
-| UPLOAD_PASSWORD | Password for the account with which wanderer auto-uploads trails | |
diff --git a/docs/src/content/docs/getting-started/installation.mdx b/docs/src/content/docs/getting-started/installation.mdx
deleted file mode 100644
index fe38458c..00000000
--- a/docs/src/content/docs/getting-started/installation.mdx
+++ /dev/null
@@ -1,192 +0,0 @@
----
-title: Installation
-description: Detailed installation instructions for docker and bare-metal
----
-import { version } from '../../../../package.json';
-
-wanderer consists of three components:
-1. the frontend written with [SvelteKit](https://github.com/sveltejs/kit)
-2. the backend, a custom [PocketBase](https://github.com/pocketbase/pocketbase) fork
-3. the index, a standard [meilisearch](https://github.com/meilisearch/meilisearch) application
-
-You can install these components in two ways.
-
-## Docker
-
-This is the easiest and most convenient way to install wanderer. After cloning the repository you will find a [docker-compose.yml](https://github.com/Flomp/wanderer/blob/main/docker-compose.yml) file in the root directory that will install and run all necessary components by running `docker compose up -d`.
-
-:::note
-If you are not hosting wanderer at `http://localhost:3000` make sure to change `ORIGIN` environment variable to `http(s)://:`. Otherwise you will run into CORS errors.
-:::
-
-```yml
-version: '3'
-
-x-common-env: &cenv
- MEILI_URL: http://search:7700
- MEILI_MASTER_KEY: vODkljPcfFANYNepCHyDyGjzAMPcdHnrb6X5KyXQPWo
-
-services:
- search:
- container_name: wanderer-search
- image: getmeili/meilisearch:v1.11.3
- environment:
- <<: *cenv
- MEILI_NO_ANALYTICS: true
- ports:
- - 7700:7700
- networks:
- - wanderer
- volumes:
- - ./data/data.ms:/meili_data/data.ms
- restart: unless-stopped
- healthcheck:
- test: curl --fail http://localhost:7700/health || exit 1
- interval: 15s
- retries: 10
- start_period: 20s
- timeout: 10s
- db:
- container_name: wanderer-db
- image: flomp/wanderer-db
- depends_on:
- search:
- condition: service_healthy
- environment:
- <<: *cenv
- ports:
- - "8090:8090"
- networks:
- - wanderer
- restart: unless-stopped
- volumes:
- - ./data/pb_data:/pb_data
- web:
- container_name: wanderer-web
- image: flomp/wanderer-web
- depends_on:
- search:
- condition: service_healthy
- db:
- condition: service_started
- environment:
- <<: *cenv
- ORIGIN: http://localhost:3000
- BODY_SIZE_LIMIT: Infinity
- PUBLIC_POCKETBASE_URL: http://db:8090
- PUBLIC_DISABLE_SIGNUP: false
- UPLOAD_FOLDER: /app/uploads
- UPLOAD_USER:
- UPLOAD_PASSWORD:
- PUBLIC_VALHALLA_URL: https://valhalla1.openstreetmap.de
- PUBLIC_NOMINATIM_URL: https://nominatim.openstreetmap.org
- volumes:
- - ./data/uploads:/app/uploads
- ports:
- - "3000:3000"
- networks:
- - wanderer
- restart: unless-stopped
-
-networks:
- wanderer:
- driver: bridge
-```
-### Networking
-All three components must be on the same network for wanderer to function properly. This is the case in the default configuration shown above. However, if you run wanderer behind a proxy like traefik, please ensure all three components can communicate.
-Notice that you must set the `ORIGIN` environment variable for the web service to the public IP or hostname including the port that wanderer is reachable at. Otherwise, you will see wanderer's frontend throw an `Cross-site POST form submissions are forbidden` error.
-
-The standard configuration makes all three services publically available by forwarding their ports. For the database and the index service this is not strictly necessary. In case you do not require direct access to them you can disable their ports in the docker-compose file.
-
-### Volumes
-By default, wanderer uses two volumes. One for meilisearch indices and one for all PocketBase data. In the default configuration, the data is stored in volumes. However, if you prefer to use bind mounts you can simply adapt the configuration accordingly.
-
-### Environment
-The default configuration contains all necessary environment variables. However, there are more options that allow you to modify how the backend and index operate. For more details, you can take a look at the respective section of the [documentation](/getting-started/configuration).
-
-:::caution
-Ensure that you change the `MEILI_MASTER_KEY` to a different value if you plan to use wanderer in a production environment.
-:::
-
-### Updating
-
-To update all containers to a new version simply run `docker compose pull && docker compose up -d`. Make sure to read the changelog to check for breaking changes.
-
-## From source
-
-While not recommended it is absolutely possible to install wanderer from source.
-
-### Prerequisites
-1. git installed && git clone https://github.com/Flomp/wanderer.git --branch v{version} --single-branch
-2. go >= 1.23.0 installed
-3. node >= 18.17.0 installed
-4. npm >= 8.15.0 installed
-
-### meilisearch
-wanderer uses meilisearch without any further modifications. As a result, you can simply head over to [their website](https://www.meilisearch.com/docs/learn/getting_started/installation) and follow the instructions for your preferred platform. We assume that you put the binary in the `wanderer/search` directory. If you did not, adapt the launch script below accordingly.
-
-### PocketBase
-wanderer uses a slightly modified version of the PocketBase backend framework. As a result, you will need to build the PocketBase binary first.
-```bash
-cd wanderer/db
-go mod tidy && go build
-```
-This will create a binary in the `wanderer/db` folder. Verify that it is there.
-
-### Web
-wanderer's frontend is written in SvelteKit. We first install all dependencies and build the project.
-```bash
-cd wanderer/web
-npm ci --omit=dev
-npm run build
-```
-
-This will create a directory `wanderer/web/build`. Verify that it is there.
-
-In case vitest is not installed please do so using
-```bash
-npm i -s vitest
-```
-
-### Launch
-
-To launch our three services we will use a small bash script. This ensures that all necessary environment variables are set and the services are started in the correct order. All three services are executed as background tasks, but are being trapped so that terminating the bash script will also terminate all three services at once.
-
-:::caution
-Caution: Ensure that you change the `MEILI_MASTER_KEY` to a different value if you plan to use wanderer in a production environment.
-:::
-
-```bash
-trap "kill 0" EXIT
-
-# learn more about the configuration:
-# https://wanderer.to/getting-started/configuration/
-# required
-export ORIGIN=http://localhost:3000
-export MEILI_URL=http://127.0.0.1:7700
-export MEILI_MASTER_KEY=YOU_SHOULD_DEFINITELY_CHANGE_ME
-export PUBLIC_POCKETBASE_URL=http://127.0.0.1:8090
-export PUBLIC_VALHALLA_URL=https://valhalla1.openstreetmap.de
-
-# optional
-# export MEILI_NO_ANALYTICS=true
-# export BODY_SIZE_LIMIT=Infinity
-# export PUBLIC_DISABLE_SIGNUP=false
-# export UPLOAD_FOLDER=/app/uploads
-# export UPLOAD_USER=
-# export UPLOAD_PASSWORD=
-
-cd search && ./meilisearch --master-key $MEILI_MASTER_KEY &
-cd db && ./pocketbase serve &
-cd web && node build &
-
-wait
-```
-
-### Updating
-
-To update wanderer to the newest version simply run `git pull origin main` and run the launch script. Make sure to read the changelog to check for breaking changes.
-
-## Verify the installation
-No matter which installation method you chose, you should now be able to access wanderer on localhost:3000.
-
diff --git a/docs/src/content/docs/guides/authentication.md b/docs/src/content/docs/guides/authentication.md
deleted file mode 100644
index 7ac8e461..00000000
--- a/docs/src/content/docs/guides/authentication.md
+++ /dev/null
@@ -1,82 +0,0 @@
----
-title: Authentication
-description: Authentication with email/password and OAuth
----
-
-For the majority of wanderer's features you need an account to interact with them.
-
-## Email/Username & Password
-
-The quickest way to create an account is by heading over to `/register` and entering a username, a valid email address, and a password of your choice.
-After registering you will be redirected to the homepage and can start creating your first trail.
-
-:::note
-The username must be at least 3 characters long, the password at least 8.
-:::
-
-## OAuth2
-
-Alternatively, wanderer supports authenticating via OAuth2. The following providers are supported:
-
-- GitHub
-- Apple
-- Google
-- Microsoft
-- Yandex
-- Facebook
-- Instagram
-- GitLab
-- Bitbucket
-- Gitee
-- Gitea
-- Discord
-- Twitter
-- Kakao
-- VK
-- Spotify
-- Twitch
-- Patreon (v2)
-- Strava
-- LiveChat
-- mailcow
-- OpenID Connect
-
-### Prerequisites
-
-To set up OAuth support you will need to access the PocketBase backend. Make sure to forward port 8090 of the `wanderer-db` container. Access the PocketBase admin panel in your browser at `http://:8090/_/` and create an admin account.
-
-### Create an OAuth app
-
-This step will vary wildly from provider to provider. Please refer to your provider's documentation for the specific steps.
-
-No matter your provider, you will need a redirect URL. This redirect URL must have the following format: `$ORIGIN/login/redirect`. `$ORIGIN` refers to the `ORIGIN` environment variable that defines the public host at which your wanderer instance can be reached. So for the default installation, the redirect URL is `http://localhost:3000/login/redirect`.
-
-In any case, once you have successfully created your OAuth app you will receive a Client ID and a Client Secret.
-
-### Enable a provider in PocketBase
-
-
-In the PocketBase admin panel navigate to the `users` table. Click the gear icon at the top to open the table's settings and navigate to `Options`. In the tab `OAuth2`, add your provider and fill in the Client ID and Client Secret from the step before and save your changes.
-
-### Login using OAuth
-
-
-That's it! You should now see your OAuth provider appear in wanderer's login form. Click the button, authorize wanderer, and wait for the authentication to finish. You are now logged in and can use wanderer like any other user.
-
-## Forgot your password?
-wanderer offers the option to send password reset emails in case a user forgets his password.
-
-### Prerequisites
-
-To set up password reset emails you will need to access the PocketBase backend. Make sure to forward port 8090 of the `wanderer-db` container. Access the PocketBase admin panel in your browser at `http://:8090/_/` and create an admin account.
-
-### Configure SMTP settings
-
-
-
-Next in the pocketbase admin panel go to Settings -> Mail settings an enable "Use SMTP mail server". Enter the details of your SMTP server and send a test email to ensure your configuration is correct. On the same page you can also adjust the email template of the password reset email.
-
-Alternatively, you can set these options via the respective [environment variables](/getting-started/configuration/#pocketbase).
-
-### Request password reset
-Once the SMTP access is configured, users can click the "Forgot password" link in the login form. After requesting the reset the user will receive an email with a unique link to reset their password.
\ No newline at end of file
diff --git a/docs/src/content/docs/guides/create-a-trail.md b/docs/src/content/docs/guides/create-a-trail.md
deleted file mode 100644
index c9c7a37c..00000000
--- a/docs/src/content/docs/guides/create-a-trail.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: Create a trail
-description: How to create a trail by uploading or drawing a trail using Valhalla
----
-
-## What is a trail?
-
-In wanderer a trail is an object that contains both GPS data and various kinds of metadata (like a description, photos, waypoints etc.) that make it easily searchable.
-
-## Create a trail
-To create a new trail click the + New Trail button in the top right corner.
-
-### Provide a route
-A route is the GPS data of a trail. There are two main ways that a user can provide a route.
-
-#### Upload a file
-
-Click the `Upload file` button and choose a file. The file must be either in GPX, FIT, TCX, or KML format. Once you have selected a file you will see a couple of things happen:
-- the map will display and focus on your track.
-- the elevation profile and speed charts (if your file contains that information) will be updated accordingly.
-- in the left-hand panel information like the trail name, location, and distance will be displayed.
-
-#### Draw a route
-
-Instead of clicking the `Upload file` button, you can also click the `Draw a route` button. This will activate the drawing mode. Notice that your cursor is now a cross when hovering over the map. Clicking on the map in drawing mode will create a new waypoint. You can drag and drop it anywhere on the map to update its position. To delete it, click first on the waypoint and then on the red trashcan icon. Creating a second waypoint will create a route between it and the previous one.
-
-
-
-By default, wanderer uses the [valhalla routing engine](https://github.com/valhalla/valhalla) to calculate the route between the two points. Via the menu in the top-left corner of the map, you can choose your preferred mode of transport which will influence the route calculation. If you disable auto-routing wanderer will not use `valhalla`, but instead, simply draw a straight line between the two points.
-
-When you are done with drawing click the `Stop drawing` button to deactivate the drawing mode.
-
-:::tip
-wanderer uses a public, free `valhalla` server by default. The server is financed by donations. Please consider donating at [https://www.fossgis.de/verein/spenden/](https://www.fossgis.de/verein/spenden/).
-:::
-
-### Basic Info
-
-Most of the data in this section should be self-explanatory. The only required field is the name: every trail needs a name. If you created your route by uploading a file, wanderer tries to infer most of the information directly from the file. However, you are of course free to edit this information afterwards.
-Toggling the public switch to on will make the trail visible for everyone even visitors who are not logged in.
-
-### Waypoints
-
-Waypoints mark points of interest along the route. A trail can have as many waypoints as you like. Click the `+ Add Waypoint` button to start. By default, a waypoint will be positioned in the center of the map. You can change the position either directly by entering a new latitude and longitude or simply moving the waypoint around on the map after saving it first.
-
-Additionally, a waypoint has an icon that is displayed in the map marker. wanderer uses fontawsome icons, so any icon from this [list](https://fontawesome.com/search?q=share&o=r&m=free) is available. If you wish, you can also add photos to the waypoint to make it event more recognizable.
-
-### Photos
-
-You can also add photos to the trail itself. If you add more than one photo you can choose which one should be used as the thumbnail. It will be featured in the trail overview.
-
-### Summit book
-
-If you do the same trail multiple times but do not want to create a new trail every time, you can simply make a new entry in the summit book to log the completion of the trail. By default a new summit log entry is created automatically when you upload a fail containing GPS data in the trail creation process. For subsequent entries to the summit book you can provide an individual file containing your route data for this particular completion of the trail.
-
-## Save the trail
-
-Once you are done creating your trail simply click the Save Trail button. This will save your trail to the database and create a new index entry to make ensure that you will find your trail in the future.
diff --git a/docs/src/content/docs/guides/custom-categories.md b/docs/src/content/docs/guides/custom-categories.md
deleted file mode 100644
index 0aaac9b4..00000000
--- a/docs/src/content/docs/guides/custom-categories.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Custom categories
-description: How to create custom trail categories
----
-
-wanderer uses categories to classify what kind of activity a trail belongs to. Out of the box you get: Biking, Canoeing, Climbing, Hiking, Skiing and Walking. However, you can adapt these categories to your needs or add completely new ones.
-
-## Backend access
-
-First, you need access to the PocketBase backend. If you are using docker make sure to forward the internal port 8090 to a public port. With the default configuration, the PocketBase admin panel is available at `http://localhost:8090/_/`. If this is your first time visiting the panel you will need to create an admin account.
-To create backend access navigate to your docker-compose.yaml file and type:
-```
-docker compose exec -it db /pocketbase superuser upsert email@example.com myverysecurepassword
-```
-Now, you will have access with the user "email@example.com" and the password "myverysecurepassword" to all tables in the backend and can modify the underlying data directly.
-
-## Modifying categories
-
-
-
-In the PocketBase admin panel, click on the `categories` table in the list on the left side. All existing categories will be listed here. To edit one simply click on the row, edit the data you want to change, and click "Save". To delete a category check the box at the beginning of the row and click "Delete selected". To create a new category click the "New record" button in the top right corner, give your new category a name and a background image, and click "Save".
diff --git a/docs/src/content/docs/guides/integrations.md b/docs/src/content/docs/guides/integrations.md
deleted file mode 100644
index 63533905..00000000
--- a/docs/src/content/docs/guides/integrations.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-title: Integrations
-description: How to set up third-party integrations with wanderer.
----
-
-You can automatically sync trails to wanderer at regular intervals using the third-party integration feature. Currently, we support two providers: **strava** and **komoot**.
-
-It is important to note that synchronization only works from the provider to wanderer and not the other way around. Additionally, if a trail has already been synced to wanderer, subsequent changes made in the provider will not be transferred unless the trail is deleted in wanderer.
-
-## Prerequisites
-
-wanderer encrypts the credentials required to log in to either provider. To enable this encryption, you must create an encryption key and provide it via the `POCKETBASE_ENCRYPTION_KEY` [environment variable](/getting-started/configuration#pocketbase) to the `wanderer-db` container. To generate a new encryption key, run the following command:
-
-```bash
-openssl rand -hex 16
-# Example output: ce7f0ddb97100c42e6409a8537c11e23
-```
-
-:::caution
-Do not share this key with anyone!
-:::
-
-Once you have set the encryption key, restart the `wanderer-db` container and navigate to `/settings/integrations`.
-
-## strava Integration
-
-### Creating an App in strava
-
-Before integrating strava with wanderer, you need to create an API application in strava. Visit [strava's API settings](https://www.strava.com/settings/api) and follow the steps to create a new API application. Your setup should resemble the following:
-
-
-
-### Setting Up the Integration
-
-1. Copy the **Client ID** and **Client Secret**.
-2. Go to the integrations page in wanderer's settings.
-3. Click the settings button for the strava integration.
-4. Enter your **Client ID** and **Client Secret**.
-5. Choose whether you want to sync routes, activities, or both.
-
-
-
-6. Save the settings and toggle the integration on.
-7. You will be redirected to strava's authorization page. Keep all checkboxes selected and click **Authorize**.
-8. You will then be redirected back to wanderer. The strava integration is now active.
-
-## komoot Integration
-
-The komoot integration requires only your komoot username and password:
-
-1. Open the komoot settings from the integrations menu.
-2. Enter your komoot credentials.
-3. Save the settings.
-4. Toggle the integration on. It will become active immediately.
-
-Your planned and completed trails will now sync with wanderer.
-
-## Sync Interval
-
-By default, trails are synced every night at **02:00 AM**. You can modify this schedule using the `POCKETBASE_CRON_SYNC_SCHEDULE` [environment variable](/getting-started/configuration#pocketbase).
-
-:::note
-Please set a reasonable sync interval. Both strava and komoot impose usage limits on their APIs. Exceeding these limits may result in rejected requests or account suspension.
-:::
-
diff --git a/docs/src/content/docs/guides/share-trails.md b/docs/src/content/docs/guides/share-trails.md
deleted file mode 100644
index e6a371ae..00000000
--- a/docs/src/content/docs/guides/share-trails.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Share trails
-description: How to share trails with other users
----
-
-wanderer allows you to share your trails with other users. You can either publish you trail making it accessible for everyone or share it with specific users. To get started head over to `/trails` and select the trail you want to share or publish.
-
-## Publish a trail
-
-From the ⋮ menu select "Edit". In the panel on the right toggle the "Public" switch to on and save the trail. Your trail is now public and everyone can see it. Even people without an account.
-
-
-## Share a trail
-
-
-
-If you want to be more particular about who can see your trail you can instead share your trail. From the ⋮ menu select "Share". In the dialog, search for the user you want to share your trail with. You can now choose the permission the user should have. You can choose between "View" or "Edit". A user with "Edit" permission can change all data (including the route) of the trail.
-
-If you no longer want to share the trail with a user, simply click the red trashcan icon next to their name.
\ No newline at end of file
diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx
index 5db40aa4..2f9528d3 100644
--- a/docs/src/content/docs/index.mdx
+++ b/docs/src/content/docs/index.mdx
@@ -4,8 +4,8 @@ description: The self-hosted trail database
template: splash
hero:
title: |
- Welcome to wanderer
- tagline: wanderer is a self-hosted trail database. You can upload your recorded GPS tracks or create new ones and add various metadata to build an easily searchable catalogue.
+ Welcome to wanderer
+ tagline: wanderer is a decentralized, self-hosted trail database. You can upload your recorded GPS tracks or create new ones and add various metadata to build an easily searchable catalogue.
image:
html: |
@@ -14,7 +14,7 @@ hero:
link: https://demo.wanderer.to
icon: rocket
- text: Read the docs
- link: /getting-started/installation/
+ link: /welcome
icon: right-arrow
variant: secondary
@@ -22,43 +22,70 @@ hero:
import { Card, CardGrid } from '@astrojs/starlight/components';
-
+
+
+ 
+
+
+
Plan your trails wherever you go
+
+ Whether you're hiking through remote mountains or biking across the city, wanderer makes it easy to plan, record, and revisit your adventures. Draw new routes, upload GPS files, and access your trail data from any device — all while keeping full control over your data.
+
+
+
+
Import your trails from your favourite providers
+
+ Already tracking your adventures with Komoot or Strava? wanderer makes it easy to bring your existing trail history with you. With built-in support for both platforms, you can import your routes and activities directly — no file conversions needed. Consolidate your outdoor journeys in one place, fully under your control.
+
+
+
+ 
+
+
+ 
+
+
+
Explore together, even apart
+
+ wanderer isn’t just about trails — it’s about the people who share them. Follow other users to see their latest routes, like and comment on trails you love, and get notified when someone adds something new. Whether you're part of a local hiking group or just discovering new paths, wanderer makes it easy to stay connected — across instances and platforms.
+
+
-## Features
+
+
+# Why wanderer?
-
- Upload your trails from multiple file formats (like GPX or TCX) or plan a new trail directly in wanderer with the route drawing tool.
-
- [Learn more →](/guides/create-a-trail)
+
+ wanderer is built on the ActivityPub protocol, meaning your instance can connect with others to share trails, profiles, and updates. Follow users across the network, discover new trails from different communities, and interact seamlessly with other federated platforms like Mastodon — all without relying on a central server.
-
- wanderer comes with extensive filter and search functionality right out of the box, so you can focus only on the trails relevant to you.
-
-
- Simply upload all your trails in one go with wanderer 's automatic import feature.
-
- [Learn more →](/guides/import-export#import)
-
-
- Use wanderer 's API to interact with your trail data directly and automate the tasks you don't want to do manually.
+
+ Self-hosted and open-source, wanderer puts you in full control of your data. No tracking, no vendor lock-in, no compromises — your trails stay on your server.
+
+
+ Automate your workflows or build on top of wanderer with its comprehensive JSON API. Access, modify, and query your trail data programmatically.
[API reference →](/api-reference)
-
-
- wanderer is self-hosted and open-source. Your data stays on your machine and your machine only.
-
-
- We currently support 8 different languages, with plans to add more in the near future.
-
+
-## Contributing
+# Support wanderer
+
+wanderer is a passion project and will always stay free and open-source. If you like wanderer and want to support its development you can make a donation.
+
+
+
+# Contributing
Help is welcome at any time. Check out the [GitHub repository](https://github.com/Flomp/wanderer). to get started. If you are not sure where you can help, check the [roadmap](https://github.com/users/Flomp/projects/2) for features in the backlog. If you would like to contribute a translation, you can do so [here](https://crowdin.com/project/wanderer).
-
-## Support wanderer
-
-wanderer is a passion project and will always stay free and open-source. If you like wanderer and want to support it's development you can make a small donation and [buy me a coffee](https://buymeacoffee.com/wanderertrails).
\ No newline at end of file
diff --git a/docs/src/content/docs/run/backend-configuration.md b/docs/src/content/docs/run/backend-configuration.md
new file mode 100644
index 00000000..e90a7bb4
--- /dev/null
+++ b/docs/src/content/docs/run/backend-configuration.md
@@ -0,0 +1,43 @@
+---
+title: Backend configuration
+description: How to access the PocketBase backend
+---
+## Setup
+
+For many configuration options, it is necessary that you are able to access the PocketBase backend. PocketBase comes with a handy dashboard that allows you to configure basically everything in the backend.
+
+If you are using docker make sure to forward the internal port 8090 to a public port. With the default configuration, the PocketBase admin panel is available at `http://localhost:8090/_/`. If this is your first time visiting the panel you will need to create an admin account.
+To create backend access navigate to the location of your `docker-compose.yaml` file on the server and type:
+```
+docker compose exec -it db /pocketbase superuser upsert email@example.com myverysecurepassword
+```
+Via the online dashboard, you will now have access with the user "email@example.com" and the password "myverysecurepassword" to all tables in the backend and can modify the underlying data directly.
+
+## Configure SMTP settings
+
+wanderer can send email notifications to users (e.g. when a user gains a new follower). This is also relevant to send password reset notifications. To enable sending email, you need to configure your SMPT settings in PocketBase.
+
+
+
+In the pocketbase admin panel go to Settings -> Mail settings an enable "Use SMTP mail server". Enter the details of your SMTP server and send a test email to ensure your configuration is correct. On the same page you can also adjust the email template of the password reset email.
+
+Alternatively, you can set these options via the respective [environment variables](/run/environment-configuration/#pocketbase).
+
+## OAuth
+
+### Create an OAuth app
+
+This step will vary wildly from provider to provider. Please refer to your provider's documentation for the specific steps.
+
+No matter your provider, you will need a redirect URL. This redirect URL must have the following format: `$ORIGIN/login/redirect`. `$ORIGIN` refers to the `ORIGIN` environment variable that defines the public host at which your wanderer instance can be reached. So for the default installation, the redirect URL is `http://localhost:3000/login/redirect`.
+
+In any case, once you have successfully created your OAuth app you will receive a Client ID and a Client Secret.
+
+### Enable a provider in PocketBase
+
+
+In the PocketBase admin panel navigate to the `users` table. Click the gear icon at the top to open the table's settings and navigate to `Options`. In the tab `OAuth2`, add your provider and fill in the Client ID and Client Secret from the step before and save your changes.
+
+## More options
+
+To learn more about what you can do in the admin dashboard please refer to PocketBase's [documentation](https://pocketbase.io/docs/).
\ No newline at end of file
diff --git a/docs/src/content/docs/run/backup-server.md b/docs/src/content/docs/run/backup-server.md
new file mode 100644
index 00000000..2192e571
--- /dev/null
+++ b/docs/src/content/docs/run/backup-server.md
@@ -0,0 +1,53 @@
+---
+title: Backing up your server
+description: How to backup data
+---
+
+wanderer has two components that persist data: meilisearch and PocketBase. However the data from meilisearch can be fully reconstructed from PocketBase. This happens automatically when you start wanderer . It is therefore only necessary to backup the data generated by PocketBase.
+
+## Backup via dashboard
+
+
+
+Probably the most convenient method to backup your data is using the PocketBase admin dashbboard.
+1. Navigate to `Settings` -> `Backups`
+2. Press the `Initialize new backup` button.
+3. Give your backup a name and start it. That's it!
+
+If you want to backup your data in regular intervals you can do so by enabling auto backups in the backup options.
+
+## Backup manually
+
+Alternatively, if you require a more custom backup solution, you can simply backup the files directly on your server. All data is saved in folder called `pb_data`. If you installed wanderer via docker it is mounted as a volume. Check your `docker-compose.yml` file for its location. In there you typically find a `data.db` and `auxillary.db` file containing all table information of your instance. Furthermore, `pb_data` contains a `storage` folder holding all file upload data (e.g. GPX/image files).
+
+You can simply copy these files to your backup location using your preferred file transfer method.
+
+## Restore
+
+:::caution
+**Important**: Restores are only supported when the **minor version** of your wanderer instance matches the minor version of the backup. For example, a backup created with version `0.17.x` can only be restored into another `0.17.x` installation. Restoring across major or minor versions is not guaranteed to work and may result in data loss or corruption.
+:::
+
+### Restore via dashboard
+
+If you created your backup using the PocketBase admin interface, restoring it is just as easy:
+
+1. Open the PocketBase admin dashboard.
+2. Navigate to Settings → Backups.
+3. Locate the backup you want to restore.
+4. Click the Restore button next to it and confirm.
+
+PocketBase will automatically stop the running instance temporarily, replace the current data with the selected backup, and restart the database.
+
+After that, wanderer will rebuild the search index from the restored data automatically on the next start.
+
+### Restore manually
+
+If you backed up your data by copying the pb_data folder directly, restoring is simply a matter of replacing the current data directory:
+
+1. Stop the running wanderer instance (e.g. using docker compose down).
+2. Replace the contents of your current pb_data folder with your backup copy.
+3. Start wanderer again (docker compose up -d or equivalent).
+
+Just like with the dashboard method, the Meilisearch index will be rebuilt automatically from the restored PocketBase data.
+
diff --git a/docs/src/content/docs/getting-started/changelog.md b/docs/src/content/docs/run/changelog.md
similarity index 95%
rename from docs/src/content/docs/getting-started/changelog.md
rename to docs/src/content/docs/run/changelog.md
index 54306f24..9d13b9f0 100644
--- a/docs/src/content/docs/getting-started/changelog.md
+++ b/docs/src/content/docs/run/changelog.md
@@ -2,6 +2,29 @@
title: Changelog
description: What changed in the last patch?
---
+## v0.17.0
+:::caution
+This release contains breaking changes. They are marked with a ⚠️.
+**Please update to version v0.16.5 first before updating to v0.17.0.**
+:::
+
+### Configuration
+Check the reopsitory's [`docker-compose.yml`](https://github.com/Flomp/wanderer/blob/main/docker-compose.yml) for a valid configuration.
+
+- ⚠️ The PocketBase environment variable `POCKETBASE_ENCRYPTION_KEY` is now required. It requires a valid 32 character AES key as its value. To generate a key, run `openssl rand -hex 16`.
+- ⚠️ The PocketBase environment variable `ORIGIN`is now required. It must be set to the public IP or hostname (including the port) of your wanderer frontend and must equal the value set for the frontend's `ORIGIN` environment variable.
+
+### Features
+- Adds federation
+- Adds rich text editor for descriptions and comments
+
+### Docs
+- Adds documentation for federation
+- Restructures the documentation in three distinct parts (for users, admins & developers) for better separation of concerns
+
+### Translation
+- New language: Russian (thanks @jeffscrum)
+
## v0.16.5
### Features
- Further performance improvements when showing large amount of trails on the map
@@ -257,7 +280,7 @@ This release contains breaking changes. Most migrations will happen automaticall
- Fixes issue with GPX export when using Google Chrome (thanks [@tofublock](https://github.com/tofublock))
### Miscellaneous
-As the number of contributors to this project continues to grow (which I’m very happy about), I’ve set up a [Discord channel](https://discord.gg/MdpybUHc) for more direct communication. If you’re interested in helping with Wanderer, feel free to join!
+As the number of contributors to this project continues to grow (which I’m very happy about), I’ve set up a [Discord channel](https://discord.gg/MdpybUHc) for more direct communication. If you’re interested in helping with wanderer, feel free to join!
## v0.11.0
### Features
diff --git a/docs/src/content/docs/run/custom-categories.md b/docs/src/content/docs/run/custom-categories.md
new file mode 100644
index 00000000..699bf84f
--- /dev/null
+++ b/docs/src/content/docs/run/custom-categories.md
@@ -0,0 +1,12 @@
+---
+title: Custom categories
+description: How to create custom trail categories
+---
+
+wanderer uses categories to classify what kind of activity a trail belongs to. Out of the box you get: Biking, Canoeing, Climbing, Hiking, Skiing and Walking. However, you can adapt these categories to your needs or add completely new ones.
+
+## Modifying categories
+
+
+
+In the PocketBase admin panel, click on the `categories` table in the list on the left side. All existing categories will be listed here. To edit one simply click on the row, edit the data you want to change, and click "Save". To delete a category check the box at the beginning of the row and click "Delete selected". To create a new category click the "New record" button in the top right corner, give your new category a name and a background image, and click "Save".
diff --git a/docs/src/content/docs/run/environment-configuration.md b/docs/src/content/docs/run/environment-configuration.md
new file mode 100644
index 00000000..14092cee
--- /dev/null
+++ b/docs/src/content/docs/run/environment-configuration.md
@@ -0,0 +1,50 @@
+---
+title: Environment configuration
+description: How to configure wanderer with environment variables
+---
+
+Global settings for wanderer can be adjusted via environment variables. If you depoloyed wanderer with docker you can change the environment variables directly in the `docker-compose.yaml`. If you deployed wanderer on bare-metal you can change the environment variables in the launch script.
+
+## Common
+These variables are shared between all three services.
+
+| Environment Variable | Description | Default |
+| -------------------- | ---------------------------------------------------------------- | ------------------------------------------- |
+| MEILI_URL | IP or hostname (including the port) of your meilisearch instance | http://search:7700 |
+| MEILI_MASTER_KEY | Master API key for your meilisearch instance | vODkljPcfFANYNepCHyDyGjzAMPcdHnrb6X5KyXQPWo |
+
+## Meilisearch
+Since we use an unmodified installation of meilisearch you can use all variables listed in meilisearch's documentation. You can find a full list over [here](https://www.meilisearch.com/docs/learn/configuration/instance_options).
+
+| Environment Variable | Description | Default |
+| -------------------- | ----------------------------- | ------- |
+| MEILI_NO_ANALYTICS | Disable meilisearch telemetry | true |
+
+## Pocketbase
+| Environment Variable | Description | Default |
+| ----------------------------- | ----------------------------------------------------------------------------------------------------------------- | --------------------- |
+| ORIGIN | Public IP or hostname (including the port) of your wanderer frontend (must be the same as in the frontend config) | http://localhost:3000 |
+| POCKETBASE_ENCRYPTION_KEY | Valid 32 character AES key. Used to encrypt secrets | |
+| POCKETBASE_CRON_SYNC_SCHEDULE | Valid cron expression. Sets how often trails are synced from 3rd party integrations | 0 2 * * * |
+| POCKETBASE_SMTP_ENABLED | Enables or disables SMTP functionality. Accepted values are true or false | false |
+| POCKETBASE_SMTP_SENDER_ADRESS | The email address used as the "From" address in outgoing emails | |
+| POCKETBASE_SMTP_SENDER_NAME | The display name shown as the sender in outgoing emails | |
+| POCKETBASE_SMTP_HOST | The hostname or IP address of the SMTP server | |
+| POCKETBASE_SMTP_PORT | The port number used to connect to the SMTP server | |
+| POCKETBASE_SMTP_USERNAME | The username used to authenticate with the SMTP server | |
+| POCKETBASE_SMTP_PASSWORD | The password used to authenticate with the SMTP server | |
+
+## Frontend
+
+| Environment Variable | Description | Default |
+| ----------------------- | -------------------------------------------------------------------------------- | ----------------------------------- |
+| ORIGIN | Public IP or hostname (including the port) of your wanderer instance | http://localhost:3000 |
+| BODY_SIZE_LIMIT | Maximum allowed upload size | Infinity |
+| PUBLIC_POCKETBASE_URL | IP or hostname (including the port) of your pocketbase instance | http://db:8090 |
+| PUBLIC_DISABLE_SIGNUP | Disables signup option for new users | false |
+| PUBLIC_VALHALLA_URL | Public IP or hostname (including the port) of a valhalla instance | https://valhalla1.openstreetmap.de |
+| PUBLIC_NOMINATIM_URL | Public IP or hostname (including the port) of a nominatim instance | https://nominatim.openstreetmap.org |
+| PUBLIC_PRIVATE_INSTANCE | Setting this to true will block visitors from viewing content without an account | false |
+| UPLOAD_FOLDER | Folder from which wanderer auto-uploads trails | /app/uploads |
+| UPLOAD_USER | Username for the account with which wanderer auto-uploads trails | |
+| UPLOAD_PASSWORD | Password for the account with which wanderer auto-uploads trails | |
diff --git a/docs/src/content/docs/run/installation.mdx b/docs/src/content/docs/run/installation.mdx
new file mode 100644
index 00000000..001054b5
--- /dev/null
+++ b/docs/src/content/docs/run/installation.mdx
@@ -0,0 +1,275 @@
+---
+title: Installation
+description: Detailed installation instructions for Docker and bare-metal
+---
+import { version } from '../../../../package.json';
+
+wanderer is composed of three key components:
+
+1. A frontend built with [SvelteKit](https://github.com/sveltejs/kit)
+2. A backend, which is a custom fork of [PocketBase](https://github.com/pocketbase/pocketbase)
+3. An index service, powered by [Meilisearch](https://github.com/meilisearch/meilisearch)
+
+You can install these components either via Docker (recommended) or from source.
+
+---
+
+## Prerequisites
+
+wanderer uses encrypted secrets such as passwords and private keys. To support this, you must set an encryption key using the `POCKETBASE_ENCRYPTION_KEY` [environment variable](/run/environment-configuration#pocketbase). You can generate one using:
+
+```bash
+openssl rand -hex 16
+# Example output: ce7f0ddb97100c42e6409a8537c11e23
+```
+
+:::caution
+Do not share this key with anyone!
+:::
+
+Once you have set the encryption key, you can proceed to install wanderer .
+
+## Installation via Docker
+
+This is the easiest and most convenient way to install wanderer .
+
+After cloning the repository, you will find a [`docker-compose.yml`](https://github.com/Flomp/wanderer/blob/main/docker-compose.yml) file in the root directory. This file sets up all necessary components. Start everything by running:
+
+```bash
+docker compose up -d
+```
+
+### Configuration Notes
+
+If you're not hosting wanderer at `http://localhost:3000`, update the `ORIGIN` environment variable accordingly:
+
+```env
+ORIGIN=http(s)://:
+```
+
+If this is not set correctly, you may encounter CORS-related issues.
+
+### Docker Compose Overview
+
+Here's a minimal `docker-compose.yml` example with explanations:
+
+```yaml
+version: '3'
+
+x-common-env: &cenv
+ MEILI_URL: http://search:7700
+ MEILI_MASTER_KEY: vODkljPcfFANYNepCHyDyGjzAMPcdHnrb6X5KyXQPWo
+
+services:
+ search:
+ container_name: wanderer-search
+ image: getmeili/meilisearch:v1.11.3
+ environment:
+ <<: *cenv
+ MEILI_NO_ANALYTICS: true
+ ports:
+ - 7700:7700
+ networks:
+ - wanderer
+ volumes:
+ - ./data/data.ms:/meili_data/data.ms
+ restart: unless-stopped
+ healthcheck:
+ test: curl --fail http://localhost:7700/health || exit 1
+ interval: 15s
+ retries: 10
+ start_period: 20s
+ timeout: 10s
+
+ db:
+ container_name: wanderer-db
+ image: flomp/wanderer-db
+ depends_on:
+ search:
+ condition: service_healthy
+ environment:
+ <<: *cenv
+ POCKETBASE_ENCRYPTION_KEY:
+ ORIGIN: http://localhost:3000
+ ports:
+ - "8090:8090"
+ networks:
+ - wanderer
+ restart: unless-stopped
+ volumes:
+ - ./data/pb_data:/pb_data
+
+ web:
+ container_name: wanderer-web
+ image: flomp/wanderer-web
+ depends_on:
+ search:
+ condition: service_healthy
+ db:
+ condition: service_started
+ environment:
+ <<: *cenv
+ ORIGIN: http://localhost:3000
+ BODY_SIZE_LIMIT: Infinity
+ PUBLIC_POCKETBASE_URL: http://db:8090
+ PUBLIC_DISABLE_SIGNUP: false
+ UPLOAD_FOLDER: /app/uploads
+ UPLOAD_USER:
+ UPLOAD_PASSWORD:
+ PUBLIC_VALHALLA_URL: https://valhalla1.openstreetmap.de
+ PUBLIC_NOMINATIM_URL: https://nominatim.openstreetmap.org
+ volumes:
+ - ./data/uploads:/app/uploads
+ ports:
+ - "3000:3000"
+ networks:
+ - wanderer
+ restart: unless-stopped
+
+networks:
+ wanderer:
+ driver: bridge
+```
+
+### Networking
+
+All services must be part of the same Docker network. This is handled by the default `wanderer` network in the configuration above.
+
+Make sure to set the `ORIGIN` environment variable to the full public URL (including port) where your instance is reachable. If misconfigured, the frontend will show this error:
+
+> Cross-site POST form submissions are forbidden
+
+### Volumes
+
+By default, two volumes are mounted:
+
+- Meilisearch index data: `./data/data.ms`
+- PocketBase data: `./data/pb_data`
+
+These can be changed to bind mounts or other volume strategies if needed.
+
+### Environment
+
+The default Docker configuration defines all necessary environment variables. You can extend or override them as needed. For advanced options, refer to the [environment configuration documentation](/run/environment-configuration).
+
+:::caution
+Ensure you replace the default `MEILI_MASTER_KEY` with a strong, unique value in production environments. Also, remember to set the `POCKETBASE_ENCRYPTION_KEY` to the key you generated [before](#prerequisites).
+:::
+
+### Updating
+
+To update your instance to the latest version:
+
+```bash
+docker compose pull
+docker compose up -d
+```
+
+Always consult the [changelog](/run/changelog) before updating, in case of breaking changes.
+
+## Installation from Source
+
+While not as convenient as Docker, you can also install wanderer from source.
+
+### Prerequisites
+
+1. Clone the repository:
+
+```bash
+git clone https://github.com/Flomp/wanderer.git --branch v{version} --single-branch
+```
+2. Install dependencies:
+ - **Go** ≥ 1.23.0
+ - **Node.js** ≥ 18.17.0
+ - **npm** ≥ 8.15.0
+
+### meilisearch
+
+wanderer uses a standard Meilisearch binary. Download and install it according to your platform:
+
+https://www.meilisearch.com/docs/learn/getting_started/installation
+
+Place the binary in `wanderer/search`. If you choose a different location, update your scripts accordingly.
+
+### PocketBase
+
+wanderer uses a customized fork of PocketBase. You must build it before launching:
+
+```bash
+cd wanderer/db
+go mod tidy && go build
+```
+
+This will generate a `pocketbase` binary in the `wanderer/db` folder.
+
+### Web
+
+Build the frontend using:
+
+```bash
+cd wanderer/web
+npm ci --omit=dev
+npm run build
+```
+
+You should see a `build/` directory in `wanderer/web`.
+
+If `vitest` is not installed, add it manually:
+
+```bash
+npm i -s vitest
+```
+
+### Launch
+
+You can launch all three services using a shell script that sets environment variables and ensures proper startup order:
+
+```bash
+trap "kill 0" EXIT
+
+# Required configuration
+export ORIGIN=http://localhost:3000
+export MEILI_URL=http://127.0.0.1:7700
+export MEILI_MASTER_KEY=YOU_SHOULD_DEFINITELY_CHANGE_ME
+export PUBLIC_POCKETBASE_URL=http://127.0.0.1:8090
+export PUBLIC_VALHALLA_URL=https://valhalla1.openstreetmap.de
+export POCKETBASE_ENCRYPTION_KEY=YOUR_ENCRYPTION_KEY_HERE
+
+# Optional configuration
+# export MEILI_NO_ANALYTICS=true
+# export BODY_SIZE_LIMIT=Infinity
+# export PUBLIC_DISABLE_SIGNUP=false
+# export UPLOAD_FOLDER=/app/uploads
+# export UPLOAD_USER=
+# export UPLOAD_PASSWORD=
+
+cd search && ./meilisearch --master-key $MEILI_MASTER_KEY &
+cd db && ./pocketbase serve &
+cd web && node build &
+
+wait
+```
+
+:::caution
+Make sure you replace `MEILI_MASTER_KEY` with a secure value before going to production. Also, remember to set the `POCKETBASE_ENCRYPTION_KEY` to the key you generated [before](#prerequisites).
+:::
+
+### Updating
+
+To update to the latest version:
+
+```bash
+git pull origin main
+```
+
+Then re-run the launch script. Always review the [changelog](/run/changelog) for breaking changes.
+
+## Verify the Installation
+
+Regardless of the installation method, once everything is running you should be able to access wanderer at:
+
+```
+http://localhost:3000
+```
+
+If you see the UI and no errors in the logs, you're all set!
diff --git a/docs/src/content/docs/use/authentication.md b/docs/src/content/docs/use/authentication.md
new file mode 100644
index 00000000..d016363e
--- /dev/null
+++ b/docs/src/content/docs/use/authentication.md
@@ -0,0 +1,50 @@
+---
+title: Authentication
+description: Authentication with email/password and OAuth
+---
+
+For the majority of wanderer 's features you need an account to interact with them.
+
+## Email/Username & Password
+
+The quickest way to create an account is by heading over to `/register` and entering a username, a valid email address, and a password of your choice.
+After registering you will be redirected to the homepage and can start creating your first trail.
+
+:::note
+The username must be at least 3 characters long, the password at least 8.
+:::
+
+## OAuth2
+
+Alternatively, wanderer supports authenticating via OAuth2. The following providers are supported:
+
+- GitHub
+- Apple
+- Google
+- Microsoft
+- Yandex
+- Facebook
+- Instagram
+- GitLab
+- Bitbucket
+- Gitee
+- Gitea
+- Discord
+- Twitter
+- Kakao
+- VK
+- Spotify
+- Twitch
+- Patreon (v2)
+- Strava
+- LiveChat
+- mailcow
+- OpenID Connect
+
+
+
+If your instance offers OAuth logins, the enabled providers appear in wanderer 's login form. Click the button, authorize wanderer , and wait for the authentication to finish. You are now logged in and can use wanderer like any other user.
+
+## Forgot your password?
+wanderer offers the option to send password reset emails in case a user forgets his password.
+You can click the "Forgot password" link in the login form. After requesting the reset the user will receive an email with a unique link to reset their password.
\ No newline at end of file
diff --git a/docs/src/content/docs/use/community-interaction.md b/docs/src/content/docs/use/community-interaction.md
new file mode 100644
index 00000000..a1488cd0
--- /dev/null
+++ b/docs/src/content/docs/use/community-interaction.md
@@ -0,0 +1,69 @@
+---
+title: Interact with the community
+description: How federation works on wanderer
+---
+
+wanderer is part of the fediverse — a decentralized network of connected apps and communities. This allows users across different platforms and servers to follow each other, interact with trails, and stay updated on adventures — all using a universal identity.
+
+## Your Federated Identity
+
+Every wanderer user has a unique handle in the format:
+
+```
+@username@domain
+```
+
+
+For example: `@alice@wanderer.to`. This lets others on compatible platforms (like Mastodon or other wanderer instances) discover and follow you.
+
+---
+
+## Following Other Users
+
+
+
+
+You can follow other wanderer users. Once you follow someone, their new public trails and lists will be automatically synced to your instance and appear in your feed. You can interact with these trails and lists as if they exist on your own instance.
+
+### How to Find Users
+
+To discover and connect with other wanderer users, you can use the search bar located on the wanderer homepage. Simply enter the name or full handle of the user you're looking for—for example, `@bob@trails.social`. The search will return matching profiles from your instance as well as from other federated wanderer servers.
+
+Once you've found the profile you're interested in, click on it to view the user's public profile page. From there, you can see their shared trails and lists, and choose to follow them.
+
+## Social Features
+
+wanderer supports a rich social experience:
+
+- **Summit Logs**
+ Other users can add summit logs to your trails to share their experiences.
+- **Comments & Likes**
+ Users can comment on and like any public trail.
+- **Mentions**
+ Users can mention each other using their handle: `@username@domain`
+
+
+Mentions work in:
+- Comments
+- Trail descriptions
+- Summit log descriptions
+
+## Notifications
+
+wanderer notifies you about important interactions from the community. Notifications can appear on the website and/or be sent via email, depending on your preferences.
+
+You can configure which types of notifications you want to receive in your settings. Each notification type can be toggled individually, and you can choose whether to receive it on the website, by email, or both.
+
+### Notification Triggers
+
+You may receive a notification when:
+
+- Someone leaves a comment on your trail
+- You have a new follower
+- Someone shares a trail with you
+- Someone likes your trail
+- Someone shares a list with you
+- Someone creates a summit log on your trail
+- Someone mentions you in a trail description
+- Someone mentions you in a comment
+- Someone mentions you in a summit log description
\ No newline at end of file
diff --git a/docs/src/content/docs/use/create-a-trail.md b/docs/src/content/docs/use/create-a-trail.md
new file mode 100644
index 00000000..f9a7d5c1
--- /dev/null
+++ b/docs/src/content/docs/use/create-a-trail.md
@@ -0,0 +1,108 @@
+---
+title: Create a trail
+description: How to create a trail by uploading or drawing a trail using Valhalla
+---
+
+## What is a trail?
+
+In wanderer , a trail is a digital route that includes GPS data and descriptive metadata like name, difficulty, category, photos, and waypoints. Trails can be explored by others and searched in the app.
+
+
+
+## Create a trail
+
+To start, click the + New Trail button in the top right corner.
+
+
+
+## Step 1: Pick a route
+
+Each trail must begin with a route. There are two ways to provide one:
+
+### Upload a file
+
+Click the **Upload file** button to select a GPS file. Accepted formats are **GPX**, **FIT**, **TCX**, or **KML**.
+
+After uploading:
+
+- The map centers on the route
+- Elevation profile and speed (if available) are rendered
+- Distance, elevation gain/loss, and other metadata are extracted
+- The form fields on the left will be partially prefilled with data that extracted from the file
+
+### Draw a route
+
+Click the **Draw a route** button to manually define a route on the map. While in drawing mode:
+
+- Click on the map to place waypoints
+- wanderer will automatically route between points using the [Valhalla routing engine](https://github.com/valhalla/valhalla)
+- You can drag points to reposition them
+- Use the top-left menu to change routing mode (e.g. walking, cycling)
+- To remove a point, click on it and then click the red trash icon
+
+If you disable Valhalla routing, straight lines will be used between points instead.
+
+To finish drawing, click **Stop drawing**.
+
+:::tip
+wanderer uses a public, donation-financed Valhalla server by default. Please consider supporting it at [https://www.fossgis.de/verein/spenden/](https://www.fossgis.de/verein/spenden/).
+:::
+
+
+
+## Step 2: Fill out trail details
+
+### Basic Info
+
+- **Name** – Required. Every trail needs a name.
+- **Location** – Autofilled if available in the uploaded file.
+- **Date** – Defaults to today.
+- **Description** – Use the editor to describe your trail in as much detail as you want.
+- **Distance / Duration / Elevation** – These are automatically calculated but can be manually adjusted if needed.
+- **Tags** – Add descriptive tags to help categorize and search for your trail (e.g. forest, sunset, dog-friendly). Start typing to add a tag and press Enter to confirm.
+- **Difficulty** – Select the trail's difficulty (e.g. Easy, Moderate, Hard)
+- **Category** – Choose the activity type (e.g. Hiking, Cycling)
+
+### Visibility
+
+Toggle the **Private** switch if you do not want the trail to be visible to others. When set to private, only you will be able to view and access this trail.
+
+:::note
+Creating a public trail will automatically publish that trail to all your followers.
+:::
+
+
+## Step 3: Add Waypoints
+
+Waypoints are points of interest along the trail.
+
+- Click **+ Add Waypoint** to add one manually. It will appear centered on the map and can be dragged to another location.
+- Each waypoint can have a name, description, icon, and photos.
+- Use Font Awesome icons for map markers. You can browse them at [fontawesome.com](https://fontawesome.com/search?q=share&o=r&m=free).
+
+Alternatively, click **From Photos** to upload photos with GPS metadata. Waypoints will be created automatically based on the photo locations.
+
+
+
+## Step 4: Add Photos & Videos
+
+You can attach photos and videos to the trail itself. These will be shown in the trail's detail view. If you upload more than one, you can select one to be the trail’s thumbnail in the overview.
+
+
+
+## Step 5: Add to Summit Book
+
+If you've completed this trail yourself, you can log a summit book entry.
+
+- Click **+ Add Entry**
+- Upload a separate GPS file or just log the date of your completion
+- You can add multiple summit entries over time without creating duplicate trails
+
+To learn more about summit logs visit the [dedicated section](/use/summit-logs) of the documentation.
+
+
+
+## Step 6: Save the trail
+
+When you're done, click Save Trail to persist your trail to the database. This will also re-index it for search and display it in your trail list.
+
diff --git a/docs/src/content/docs/guides/customize-map.md b/docs/src/content/docs/use/customize-map.md
similarity index 75%
rename from docs/src/content/docs/guides/customize-map.md
rename to docs/src/content/docs/use/customize-map.md
index aac19f68..cf9b29b8 100644
--- a/docs/src/content/docs/guides/customize-map.md
+++ b/docs/src/content/docs/use/customize-map.md
@@ -3,7 +3,7 @@ title: Customize the map
description: How to customize the map with user defined tile sets
---
-wanderer is compatible with any provider of vector tile maps (e.g. CARTO, mapbox, maptiler, or self-hosted OpenMapTiles). Out of the box it comes with 4 different map styles:
+wanderer is compatible with any provider of vector tile maps (e.g. CARTO, mapbox, maptiler, or self-hosted OpenMapTiles). Out of the box it comes with 4 different map styles:
1. Open Street Maps
2. Open Topo Maps
3. CARTO Light
@@ -30,7 +30,7 @@ Once added, your custom style will be available in the style switcher menu, allo

-To enhance wanderer's map visualization, you can add two types of data sources to display 3D Terrain and Hillshading. This is achieved by providing URLs pointing to the required `tiles.json` files. Both the terrain and hillshading data must be in Mapbox TileJSON format and accessible through the provided URLs.
+To enhance wanderer 's map visualization, you can add two types of data sources to display 3D Terrain and Hillshading. This is achieved by providing URLs pointing to the required `tiles.json` files. Both the terrain and hillshading data must be in Mapbox TileJSON format and accessible through the provided URLs.
To add the respective URLs navigate to `Settings -> Display` and add them in the `Terrain` section. After adding the terrain & hillshading source, you can explore the 3D map view by interacting with the compass control on the map.
diff --git a/docs/src/content/docs/guides/import-export.md b/docs/src/content/docs/use/import-export.md
similarity index 59%
rename from docs/src/content/docs/guides/import-export.md
rename to docs/src/content/docs/use/import-export.md
index a9f37efe..79889ec0 100644
--- a/docs/src/content/docs/guides/import-export.md
+++ b/docs/src/content/docs/use/import-export.md
@@ -5,7 +5,7 @@ description: How to import and export trails in wanderer
## Import
-wanderer supports bulk uploading of trails via an auto-upload folder. A cronjob fetches all files from this folder and uploads them automatically every 15 minutes. This feature is currently only available for docker installations. If you want to replicate it in a bare metal installation you will need to create your own cronjob using the `web/cron.sh` script.
+wanderer supports bulk uploading of trails via an auto-upload folder. A cronjob fetches all files from this folder and uploads them automatically every 15 minutes. This feature is currently only available for docker installations. If you want to replicate it in a bare metal installation you will need to create your own cronjob using the `web/cron.sh` script.
:::caution
Successfully uploaded files will be deleted from the auto-upload folder.
@@ -16,7 +16,7 @@ Currently only GPX files are supported.
:::
### Configuration
-The following environment variables must be present in the `wanderer-web` docker container and set to valid values.
+The following environment variables must be present in the `wanderer -web` docker container and set to valid values.
| Environment Variable | Description | Default |
|----------------------|------------------------------------------------------------------------|--------------|
@@ -36,11 +36,6 @@ docker exec -it wanderer-web run-parts /etc/periodic/15min
## Export
-To export a single trail head over to `/trails` and select the trail you want to export. From the ⋮ menu select "Export". You can export the route data either in GPX or in GeoJSON format. Furthermore, you can choose whether you want to include the photos and the summit book of the trail. In any case, wanderer will create a ZIP archive with all the data that is then downloaded.
+To export a single trail head over to `/trails` and select the trail you want to export. From the ⋮ menu select "Export". You can export the route data either in GPX or in GeoJSON format. Furthermore, you can choose whether you want to include the photos and the summit book of the trail. In any case, wanderer will create a ZIP archive with all the data that is then downloaded.
You can also export all of your trails at once. To do so, head over to `/settings/export` and click "Export all trails". The other steps remain analogous to exporting a single trail.
-
-
-## Backups
-
-All of wanderer's persistent data is stored in PocketBase. PocketBase offers (automated) backups to local storage or S3. To learn more, check out [PocketBase's documentation](https://pocketbase.io/docs/going-to-production/#backup-and-restore).
\ No newline at end of file
diff --git a/docs/src/content/docs/use/integrations.md b/docs/src/content/docs/use/integrations.md
new file mode 100644
index 00000000..a19528a6
--- /dev/null
+++ b/docs/src/content/docs/use/integrations.md
@@ -0,0 +1,50 @@
+---
+title: Integrations
+description: How to set up third-party integrations with wanderer.
+---
+
+You can automatically sync trails to wanderer at regular intervals using the third-party integration feature. Currently, we support two providers: **strava** and **komoot**.
+
+It is important to note that synchronization only works from the provider to wanderer and not the other way around. Additionally, if a trail has already been synced to wanderer , subsequent changes made in the provider will not be transferred unless the trail is deleted in wanderer .
+
+## strava Integration
+
+### Creating an App in strava
+
+Before integrating strava with wanderer , you need to create an API application in strava. Visit [strava's API settings](https://www.strava.com/settings/api) and follow the steps to create a new API application. Your setup should resemble the following:
+
+
+
+### Setting Up the Integration
+
+1. Copy the **Client ID** and **Client Secret**.
+2. Go to the integrations page in wanderer 's settings.
+3. Click the settings button for the strava integration.
+4. Enter your **Client ID** and **Client Secret**.
+5. Choose whether you want to sync routes, activities, or both.
+
+
+
+6. Save the settings and toggle the integration on.
+7. You will be redirected to strava's authorization page. Keep all checkboxes selected and click **Authorize**.
+8. You will then be redirected back to wanderer . The strava integration is now active.
+
+## komoot Integration
+
+The komoot integration requires only your komoot username and password:
+
+1. Open the komoot settings from the integrations menu.
+2. Enter your komoot credentials.
+3. Save the settings.
+4. Toggle the integration on. It will become active immediately.
+
+Your planned and completed trails will now sync with wanderer .
+
+## Sync Interval
+
+By default, trails are synced every night at **02:00 AM**. You can modify this schedule using the `POCKETBASE_CRON_SYNC_SCHEDULE` [environment variable](/run/environment-configuration#pocketbase).
+
+:::note
+Please set a reasonable sync interval. Both strava and komoot impose usage limits on their APIs. Exceeding these limits may result in rejected requests or account suspension.
+:::
+
diff --git a/docs/src/content/docs/guides/lists.md b/docs/src/content/docs/use/lists.md
similarity index 75%
rename from docs/src/content/docs/guides/lists.md
rename to docs/src/content/docs/use/lists.md
index 50b4336e..4b196960 100644
--- a/docs/src/content/docs/guides/lists.md
+++ b/docs/src/content/docs/use/lists.md
@@ -18,7 +18,7 @@ Once you are done creating your list simply click the sharing a trail. Depending on the permission you set for the shared list a user can simply view the list or also modify its contents.
+You can also share a list to allow other users access it. To do so select the list in the overview and click "Share" in the ⋮ menu. Everything else works analogous to sharing a trail . Depending on the permission you set for the shared list a user can simply view the list or also modify its contents.
:::caution
Sharing a list with another user will also automatically share all trails contained in that list with the user. Unsharing a list will _not_ automatically unshare all trails contained in the list.
@@ -26,4 +26,4 @@ Sharing a list with another user will also automatically share all trails contai
## Edit & delete a list
-To edit or delete a list first select it from the overview. Then you can select the respective entry from the ⋮ menu.
\ No newline at end of file
+To edit or delete a list first select it from the overview. Then you can select the respective entry from the ⋮ menu.
\ No newline at end of file
diff --git a/docs/src/content/docs/use/share-trails.md b/docs/src/content/docs/use/share-trails.md
new file mode 100644
index 00000000..ae59e32b
--- /dev/null
+++ b/docs/src/content/docs/use/share-trails.md
@@ -0,0 +1,29 @@
+---
+title: Share trails
+description: How to share trails with other users
+---
+
+wanderer allows you to share your trails with other users. You can either publish you trail making it accessible for everyone or share it with specific users. To get started head over to `/trails` and select the trail you want to share or publish.
+
+## Publish a trail
+
+From the ⋮ menu select "Edit". In the panel on the right toggle the "Public" switch to on and save the trail. Your trail is now public and everyone can see it. Even people without an account.
+
+
+## Share a trail
+
+
+
+If you want to be more particular about who can see your trail you can instead share your trail. From the ⋮ menu select "Share". In the dialog, search for the user you want to share your trail with. You can now choose the permission the user should have. You can choose between "View" or "Edit". A user with "Edit" permission can change all data (including the route) of the trail.
+
+If you no longer want to share the trail with a user, simply click the red trashcan icon next to their name.
+
+:::note
+wanderer supports trail sharing between users on different instances (servers), thanks to its federated design. However, there are important limitations to be aware of:
+
+- **The trail must be public** in order to be shareable with users on other instances.
+- **Shared trails are view-only**: The user you share it with will be able to view the trail and engage with it (like or comment), but **they cannot edit it**.
+- Sharing a trail with another user is similar to a **mention** in the fediverse—it notifies them and gives them visibility, but does not grant collaborative access.
+
+If you're looking for true collaboration on a trail (such as shared editing), both users must be on the same instance.
+:::
\ No newline at end of file
diff --git a/docs/src/content/docs/guides/statistics.md b/docs/src/content/docs/use/statistics.md
similarity index 62%
rename from docs/src/content/docs/guides/statistics.md
rename to docs/src/content/docs/use/statistics.md
index 6f77dc00..d5a78076 100644
--- a/docs/src/content/docs/guides/statistics.md
+++ b/docs/src/content/docs/use/statistics.md
@@ -3,7 +3,7 @@ title: Statistics
description: Where can I find statistics and how are they derived?
---
-wanderer can you show you a wide range of useful statistics about your latest adventures. Head over to the profile page (`/profile`) to get started. wanderer derives the values for your statistics from the [summit books](guides/create-a-trail/#summit-book) of your trails. So make sure to add some entries with GPS data beofre proceeding.
+wanderer can you show you a wide range of useful statistics about your latest adventures. Head over to the profile page (`/profile`) to get started. wanderer derives the values for your statistics from the [summit logs](/use/summit-logs) of your trails. So make sure to add some entries with GPS data beofre proceeding.

diff --git a/docs/src/content/docs/use/summit-logs.md b/docs/src/content/docs/use/summit-logs.md
new file mode 100644
index 00000000..3079c882
--- /dev/null
+++ b/docs/src/content/docs/use/summit-logs.md
@@ -0,0 +1,34 @@
+---
+title: Summit logs
+description: What are summit logs?
+---
+Summit logs are a way to document and share each of your trail completions, whether you're repeating a route or contributing your experience to a trail uploaded by someone else.
+
+## What is a Summit Log?
+
+A summit log is an entry attached to a trail that records an individual outing. It can be created by the author of the trail or by any other user, as long as the trail is public. Summit logs allow for a more detailed and personal view of how and when a trail was completed, including photos, GPS data, and written reflections.
+
+## When to Use a Summit Log
+
+If you are hiking a trail that already exists on wanderer — whether uploaded by you or another user — you can log your hike by creating a summit log instead of uploading the trail again. This helps avoid duplicates and keeps the trail history consolidated. Summit logs are perfect for re-hikes, community contributions, or simply marking your progress over time.
+
+## What You Can Include
+
+When creating a summit log, you can provide the following:
+
+- **Date** of the outing
+- **Photos and videos** specific to this hike
+- **A separate GPS track** (if different from the original)
+- **Text description** with formatting options
+
+Mentions of other users can be included directly in the description field using the `@user@domain` format. Mentioned users will receive a notification and can view the summit log where they were referenced.
+
+## Creating a Summit Log
+
+To create a summit log, go to the trail's page and select the **"Add Entry"** button in the **Summit Book** tab. A form will appear where you can input your outing's details. If you are the author of the trail or have permission to edit the trail, you can also add a new summit log by editing an existing trail. Once saved, your entry will appear in the Summit Book table on the trail page.
+
+## Visibility and Interaction
+
+Summit logs are visible to other users but cannot receive comments or likes. Interaction is limited to the original trail, where others can leave feedback and appreciation.
+
+For more on mentions and notifications, refer to the [community interaction](/use/community-interaction) section of the documentation.
diff --git a/docs/src/content/docs/welcome/index.mdx b/docs/src/content/docs/welcome/index.mdx
new file mode 100644
index 00000000..ca43654b
--- /dev/null
+++ b/docs/src/content/docs/welcome/index.mdx
@@ -0,0 +1,77 @@
+---
+title: Welcome to wanderer
+description: What is wanderer?
+---
+
+import { LinkCard } from '@astrojs/starlight/components';
+
+wanderer is a self-hosted, federated trail database built for explorers who want full control over their outdoor data. Whether you're tracking personal hikes or publishing trail networks for a wider community, wanderer gives you the tools to manage, share, and discover trails all on your own terms.
+
+## What is wanderer?
+
+wanderer is an open-source web application that allows you to:
+
+- Upload GPS tracks from formats like GPX or TCX
+- Create new trails using a built-in route planner
+- Add metadata such as difficulty, terrain, tags, or region
+- Organize and search your trail collection with advanced filters
+- Follow other users, like and comment on trails
+- Host your own instance, with full data ownership and control
+
+Whether you're a solo adventurer, a local trail group, or building a public archive, wanderer adapts to your use case and keeps your data in your hands.
+
+## What is federation?
+
+Federation allows wanderer servers — called instances — to communicate with each other. This means users on different servers can interact, follow one another, and share trails across the network, even if their data lives on separate machines.
+
+But federation is completely optional. You can run wanderer entirely on your own, as a private trail database with no external connections. All features, from route planning to metadata management and search, work fully in standalone mode. Your server doesn’t need to talk to any others unless you choose to enable it.
+
+When federation is enabled, wanderer becomes part of a wider decentralized network. You can still control exactly who your instance connects with — or keep it entirely private if you prefer.
+
+This flexible design means wanderer works equally well for:
+
+- Individuals who want a private, local trail archive
+- Small groups collaborating on a shared server
+- Public communities contributing to a federated network of outdoor explorers
+
+For more detail on how wanderer uses federation, see the [community interaction guide](/use/community-interaction/).
+
+## What is ActivityPub?
+
+ActivityPub is an open, standardized protocol for decentralized social networking. It was developed by the W3C (World Wide Web Consortium) and is used by platforms like Mastodon (microblogging), PeerTube (video hosting), and WriteFreely (blogging). These platforms form what’s known as the Fediverse — a network of independently hosted services that can talk to each other.
+
+wanderer uses ActivityPub to enable federation between instances. This allows users on different wanderer servers to:
+
+- Follow each other
+- View and interact with trails across servers
+- Like and comment on trails, even if they were created elsewhere
+- Receive notifications about new trails or updates from followed users
+
+Because it follows a common standard, wanderer can also potentially interact with users from entirely different platforms in the Fediverse — for example, someone on Mastodon could follow a wanderer account and receive updates when new trails are published.
+
+
+## Community and support
+
+wanderer is open-source and developed in the open. You can help shape its future or get involved in many ways:
+
+- [GitHub repository](https://github.com/Flomp/wanderer)
+- [Issue tracker](https://github.com/Flomp/wanderer/issues)
+- [Translation project on Crowdin](https://crowdin.com/project/wanderer)
+- [Discord server](https://discord.gg/USSEBY98CP)
+
+Want to contribute? Start by checking the [roadmap](https://github.com/users/Flomp/projects/2) or browsing open issues on GitHub.
+
+
+
+## Next steps
+
+
\ No newline at end of file
diff --git a/docs/src/custom.css b/docs/src/custom.css
index a6edd639..3507933a 100644
--- a/docs/src/custom.css
+++ b/docs/src/custom.css
@@ -1,11 +1,18 @@
-@import 'tailwindcss/utilities';
-@import 'tailwindcss/base';
-@import 'tailwindcss/components';
+@import 'tailwindcss';
+@reference "./tailwind.css";
.card {
@apply rounded-xl
}
+.content-panel ul {
+ @apply list-disc list-inside ml-4
+}
+
+.content-panel ol {
+ @apply list-decimal list-inside ml-4
+}
+
.card .icon {
background-color: transparent !important;
diff --git a/docs/src/tailwind.css b/docs/src/tailwind.css
index 6eb579e0..b6870ff9 100644
--- a/docs/src/tailwind.css
+++ b/docs/src/tailwind.css
@@ -1,8 +1,32 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
+@layer base, starlight, theme, components, utilities;
+
+@import '@astrojs/starlight-tailwind';
+@import "tailwindcss/theme.css" layer(theme);
+@import "tailwindcss/preflight.css" layer(base);
+@import "tailwindcss/utilities.css";
+
+@theme {
+ --color-primary: #242734;
+
+ /* Generated accent color palettes. */
+ --color-accent-200: #b3c7ff;
+ --color-accent-600: #364bff;
+ --color-accent-900: #182775;
+ --color-accent-950: #131e4f;
+ /* Generated gray color palettes. */
+ --color-gray-100: #f5f6f8;
+ --color-gray-200: #eceef2;
+ --color-gray-300: #c0c2c7;
+ --color-gray-400: #888b96;
+ --color-gray-500: #545861;
+ --color-gray-700: #353841;
+ --color-gray-800: #24272f;
+ --color-gray-900: #17181c;
+
+ --font-sans: "IBMPlexSans"
+}
/*
-Add additional Tailwind styles to this file, for example with @layer:
-https://tailwindcss.com/docs/adding-custom-styles#using-css-and-layer
+Add additional Tailwind styles to this file:
+https://tailwindcss.com/docs/adding-custom-styles#using-custom-css
*/
\ No newline at end of file
diff --git a/docs/tailwind.config.mjs b/docs/tailwind.config.mjs
deleted file mode 100644
index cd56a16e..00000000
--- a/docs/tailwind.config.mjs
+++ /dev/null
@@ -1,27 +0,0 @@
-import colors from 'tailwindcss/colors';
-import starlightPlugin from '@astrojs/starlight-tailwind';
-
-const accent = { 200: '#b0c8fd', 600: '#2a56f1', 900: '#152b6d', 950: '#112149' };
-
-/** @type {import('tailwindcss').Config} */
-export default {
- content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
- theme: {
- extend: {
- colors: {
- primary: "#242734",
- // Your preferred accent color. Indigo is closest to Starlight’s defaults.
- accent: accent,
- // Your preferred gray scale. Zinc is closest to Starlight’s defaults.
- gray: colors.gray,
- },
- fontFamily: {
- // Deine bevorzugte Schriftart. Starlight verwendet standardmäßig eine Systemschriftart.
- sans: ['"IBM Plex Sans"'],
- // Deine bevorzugte Code-Schriftart. Starlight verwendet standardmäßig die Systemschriftart Monospace.
- mono: ['"IBM Plex Mono"'],
- },
- },
- },
- plugins: [starlightPlugin()],
-};
diff --git a/docs/wanderer.openapi.yaml b/docs/wanderer.openapi.yaml
index 9b26bc5a..cfb5530a 100644
--- a/docs/wanderer.openapi.yaml
+++ b/docs/wanderer.openapi.yaml
@@ -1,14640 +1,18486 @@
-openapi: 3.0.1
-info:
- title: wanderer
- description: ''
- version: 0.13.0
-tags:
- - name: activity
- - name: auth
- - name: category
- - name: comment
- - name: follow
- - name: trail-share
- - name: user
- - name: waypoint
- - name: list
- - name: list-share
- - name: notification
- - name: summit-log
- - name: trail
-paths:
- /activity:
- get:
- summary: list
- deprecated: false
- description: Merges and lists trails and summit logs.
- operationId: listActivities
- tags:
- - activity
- parameters:
- - name: page
- in: query
- description: Page number starting at 1
- required: false
- example: 1
- schema:
- type: number
- minimum: 0
- - name: perPage
- in: query
- description: Items per page
- required: false
- example: 5
- schema:
- type: number
- - name: sort
- in: query
- description: Sort string (-/+)
- required: false
- example: '-created'
- schema:
- type: string
- - name: filter
- in: query
- description: >-
- Filter string
- (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)
- required: false
- example: name="abc"
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: author
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: my-key
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- page:
- type: integer
- perPage:
- type: integer
- totalItems:
- type: integer
- totalPages:
- type: integer
- items:
- type: array
- items:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- description:
- type: string
- distance:
- type: number
- duration:
- type: integer
- elevation_gain:
- type: number
- elevation_loss:
- type: integer
- gpx:
- type: string
- id:
- type: string
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- trail_id:
- type: string
- type:
- type: string
- enum:
- - trail
- - summit_log
- required:
- - author
- - collectionId
- - collectionName
- - created
- - date
- - description
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - name
- - photos
- - trail_id
- - type
- required:
- - page
- - perPage
- - totalItems
- - totalPages
- - items
- examples:
- '1':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 69
- totalPages: 14
- items:
- - author: 3mugf953w4a9fg5
- collectionId: t9lphichi5xwyeu
- collectionName: activities
- created: '2024-10-06 09:33:11.404Z'
- date: '2024-10-06 00:00:00.000Z'
- description: >-
- Lorem ipsum dolor sit amet, consetetur sadipscing
- elitr, sed diam nonumy eirmod tempor invidunt ut
- labore et dolore magna aliquyam erat, sed diam
- voluptua. At vero eos et accusam et justo duo dolores
- et ea rebum. Stet clita kasd gubergren, no sea
- takimata sanctus est Lorem ipsum dolor sit amet. Lorem
- ipsum dolor sit amet, consetetur sadipscing elitr, sed
- diam nonumy eirmod tempor invidunt ut labore et dolore
- magna aliquyam erat, sed diam voluptua. At vero eos et
- accusam et justo duo dolores et ea rebum. Stet clita
- kasd gubergren, no sea takimata sanctus est Lorem
- ipsum dolor sit amet.
-
-
- Lorem ipsum dolor sit amet, consetetur sadipscing
- elitr, sed diam nonumy eirmod tempor invidunt ut
- labore et dolore magna aliquyam erat, sed diam
- voluptua. At vero eos et accusam et justo duo dolores
- et ea rebum. Stet clita kasd gubergren, no sea
- takimata sanctus est Lorem ipsum dolor sit amet. Lorem
- ipsum dolor sit amet, consetetur sadipscing elitr, sed
- diam nonumy eirmod tempor invidunt ut labore et dolore
- magna aliquyam erat, sed diam voluptua. At vero eos et
- accusam et justo duo dolores et ea rebum. Stet clita
- kasd gubergren, no sea takimata sanctus est Lorem
- ipsum dolor sit amet.
-
-
- Lorem ipsum dolor sit amet, consetetur sadipscing
- elitr, sed diam nonumy eirmod tempor invidunt ut
- labore et dolore magna aliquyam erat, sed diam
- voluptua. At vero eos et accusam et justo duo dolores
- et ea rebum. Stet clita kasd gubergren, no sea
- takimata sanctus est Lorem ipsum dolor sit amet. Lorem
- ipsum dolor sit amet, consetetur sadipscing elitr, sed
- diam nonumy eirmod tempor invidunt ut labore et dolore
- magna aliquyam erat, sed diam voluptua. At vero eos et
- accusam et justo duo dolores et ea rebum. Stet clita
- kasd gubergren, no sea takimata sanctus est Lorem
- ipsum dolor sit amet.
-
-
- Lorem ipsum dolor sit amet, consetetur sadipscing
- elitr, sed diam nonumy eirmod tempor invidunt ut
- labore et dolore magna aliquyam erat, sed diam
- voluptua. At vero eos et accusam et justo duo dolores
- et ea rebum. Stet clita kasd gubergren, no sea
- takimata sanctus est Lorem ipsum dolor sit amet. Lorem
- ipsum dolor sit amet, consetetur sadipscing elitr, sed
- diam nonumy eirmod tempor invidunt ut labore et dolore
- magna aliquyam erat, sed diam voluptua. At vero eos et
- accusam et justo duo dolores et ea rebum. Stet clita
- kasd gubergren, no sea takimata sanctus est Lorem
- ipsum dolor sit amet.
-
-
- Lorem ipsum dolor sit amet, consetetur sadipscing
- elitr, sed diam nonumy eirmod tempor invidunt ut
- labore et dolore magna aliquyam erat, sed diam
- voluptua. At vero eos et accusam et justo duo dolores
- et ea rebum. Stet clita kasd gubergren, no sea
- takimata sanctus est Lorem ipsum dolor sit amet. Lorem
- ipsum dolor sit amet, consetetur sadipscing elitr, sed
- diam nonumy eirmod tempor invidunt ut labore et dolore
- magna aliquyam erat, sed diam voluptua. At vero eos et
- accusam et justo duo dolores et ea rebum. Stet clita
- kasd gubergren, no sea takimata sanctus est Lorem
- ipsum dolor sit amet.
- distance: 7504.162098327643
- duration: 0
- elevation_gain: 840.19189453125
- elevation_loss: 0
- gpx: breitenstein_3_DvymxgjEm5.gpx
- id: 074jf18neqwfbsr
- name: Breitenstein
- photos: []
- trail_id: 074jf18neqwfbsr
- type: trail
- - author: 3mugf953w4a9fg5
- collectionId: t9lphichi5xwyeu
- collectionName: activities
- created: '2024-09-14 14:18:27.538Z'
- date: '2024-09-14 00:00:00.000Z'
- description: ''
- distance: 18487.660615835353
- duration: 0
- elevation_gain: 209.55000000000015
- elevation_loss: 0
- gpx: blob_BaoYdHnfYw.gpx
- id: 14y4qxqbqh0n10m
- name: Thiron-Gardais - Nogent-le-Rotrou
- photos: []
- trail_id: 14y4qxqbqh0n10m
- type: trail
- - author: 3mugf953w4a9fg5
- collectionId: t9lphichi5xwyeu
- collectionName: activities
- created: '2024-12-02 00:06:13.761Z'
- date: '2024-12-02 00:00:00.000Z'
- description: Heute war auch nicht schlecht!
- distance: 0
- duration: 0
- elevation_gain: 0
- elevation_loss: 0
- gpx: ''
- id: 22879d2ce902f57
- name: Ein Test mit Gipfelbuch
- photos:
- - wanderer_stats_QbRDtbqXp8.png
- trail_id: e3wk41l46eq3zgx
- type: summit_log
- - author: znhd3hgrxl85c9f
- collectionId: t9lphichi5xwyeu
- collectionName: activities
- created: '2024-11-15 18:50:36.223Z'
- date: '2024-11-15 00:00:00.000Z'
- description: ''
- distance: 283396.31855792465
- duration: 0
- elevation_gain: 0
- elevation_loss: 0
- gpx: 2024_10_22_04_28_2024_10_22_21_29_UUGET8zBuk.gpx
- id: 267r63tmbyezpck
- name: Gassi
- photos: []
- trail_id: 267r63tmbyezpck
- type: trail
- - author: 3mugf953w4a9fg5
- collectionId: t9lphichi5xwyeu
- collectionName: activities
- created: '2024-11-11 15:34:42.149Z'
- date: '2024-11-11 00:00:00.000Z'
- description: ''
- distance: 0
- duration: 0
- elevation_gain: 0
- elevation_loss: 0
- gpx: ''
- id: 282aa2f6aa2901d
- name: Illiers-Combray - Thiron-Gardais
- photos: []
- trail_id: fmin7pbj8urtxx0
- type: summit_log
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 0
- type: number
- inclusive: false
- exact: false
- message: Number must be greater than 0
- path:
- - page
- headers: {}
- x-400:Invalid sort/expand/filter:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Something went wrong while processing your request.
- detail:
- code: 400
- message: Something went wrong while processing your request.
- data: {}
- headers: {}
- security: []
- /auth/login:
- post:
- summary: login
- deprecated: false
- description: >-
- Authenticates a registered user. The session is returned in a cookie
- named `pb_auth`. You need to include this cookie in subsequent requests.
- operationId: login
- tags:
- - auth
- parameters:
- - name: Content-Type
- in: header
- description: ''
- required: true
- example: application/json
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- username:
- type: string
- minLength: 3
- password:
- type: string
- minLength: 8
- required:
- - username
- - password
- example:
- username: admin
- password: '12345678'
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- record:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- email:
- type: string
- emailVisibility:
- type: boolean
- id:
- type: string
- token:
- type: string
- updated:
- type: string
- username:
- type: string
- verified:
- type: boolean
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - email
- - emailVisibility
- - id
- - token
- - updated
- - username
- - verified
- token:
- type: string
- required:
- - record
- - token
- examples:
- '1':
- summary: Success
- value:
- record:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute Lorem in
- ullamco labore ex. Officia ea qui in exercitation amet.
- Consequat laboris id duis enim Lorem dolore fugiat
- excepteur sunt. Sint consectetur duis tempor deserunt
- non. Ex amet sunt eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur irure. Ea
- et reprehenderit ipsum adipisicing duis proident tempor
- esse excepteur dolor dolore anim consectetur aliqua.
- Laborum culpa eiusmod id ea consectetur do sit
- reprehenderit consequat voluptate mollit commodo.
- Ullamco aute ea minim enim et cupidatat ipsum cillum
- fugiat. Proident consectetur commodo Lorem do incididunt
- labore pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna. Laborum
- Lorem sunt amet occaecat occaecat mollit consectetur
- laborum ut.
- collectionId: _pb_users_auth_
- collectionName: users
- created: '2024-06-29 19:23:47.731Z'
- email: c.beutel08@googlemail.com
- emailVisibility: false
- id: 3mugf953w4a9fg5
- token: >-
- eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA
- updated: '2024-12-30 18:36:39.161Z'
- username: Flomp
- verified: true
- token: >-
- eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb2xsZWN0aW9uSWQiOiJfcGJfdXNlcnNfYXV0aF8iLCJleHAiOjE3MzY4MDEwMjksImlkIjoiM211Z2Y5NTN3NGE5Zmc1IiwidHlwZSI6ImF1dGhSZWNvcmQifQ.LBMx7FuCR4eRC6zG96TDX6BfEKMHBoo-9eQ9LvpU0rg
- headers:
- set-cookie:
- example: >-
- pb_auth=%7B%22token%22%3A%22eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb2xsZWN0aW9uSWQiOiJfcGJfdXNlcnNfYXV0aF8iLCJleHAiOjE3MzcxMjY5MjQsImlkIjoiM211Z2Y5NTN3NGE5Zmc1IiwidHlwZSI6ImF1dGhSZWNvcmQifQ.F-gRu-w_oUvt9GqjjGKZe18smdhtMO6oYhB36KJ5odo%22%2C%22model%22%3A%7B%22avatar%22%3A%2223xxesym0e9w18z2904frnpgy7_OzsVanAmWP.jpg%22%2C%22bio%22%3A%22Enim%20beatae%20labore%20vel.%20Pariatur%20hic%20doloribus%20quia%20quasi%20eos.%20Cumque%20error%20nobis.%22%2C%22collectionId%22%3A%22_pb_users_auth_%22%2C%22collectionName%22%3A%22users%22%2C%22created%22%3A%222024-06-29%2019%3A23%3A47.731Z%22%2C%22email%22%3A%22mymail%40gmail.com%22%2C%22emailVisibility%22%3Afalse%2C%22id%22%3A%223mugf953w4a9fg5%22%2C%22token%22%3A%22eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA%22%2C%22updated%22%3A%222025-01-03%2012%3A32%3A15.270Z%22%2C%22username%22%3A%22Flomp%22%2C%22verified%22%3Atrue%7D%7D;
- Path=/; Expires=Fri, 17 Jan 2025 15:15:24 GMT; SameSite=Strict
- required: false
- description: Contains the authentication cookie
- schema:
- type: string
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Failed to authenticate.
- detail:
- code: 400
- message: Failed to authenticate.
- data: {}
- headers: {}
- x-400:Invalid Params:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- expected:
- type: string
- received:
- type: string
- path:
- type: array
- items:
- type: string
- message:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: invalid_type
- expected: string
- received: undefined
- path:
- - password
- message: Required
- headers: {}
- x-400:Invalid JSON:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- required:
- - message
- examples:
- '1':
- summary: Invalid JSON
- value:
- message: invalid_json
- headers: {}
- security: []
- /category:
- get:
- summary: list
- deprecated: false
- description: Lists all categories.
- operationId: listCategories
- tags:
- - category
- parameters:
- - name: page
- in: query
- description: Page number starting at 1
- required: false
- example: 1
- schema:
- type: number
- - name: perPage
- in: query
- description: Items per page
- required: false
- example: 5
- schema:
- type: number
- - name: sort
- in: query
- description: Sort string (-/+)
- required: false
- example: '-created'
- schema:
- type: string
- - name: filter
- in: query
- description: >-
- Filter string
- (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)
- required: false
- example: name="abc"
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: id
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: my-key
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- page:
- type: integer
- perPage:
- type: integer
- totalItems:
- type: integer
- totalPages:
- type: integer
- items:
- type: array
- items:
- type: object
- properties:
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- img:
- type: string
- name:
- type: string
- updated:
- type: string
- required:
- - collectionId
- - collectionName
- - created
- - id
- - img
- - name
- - updated
- required:
- - page
- - perPage
- - totalItems
- - totalPages
- - items
- examples:
- '1':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 6
- totalPages: 2
- items:
- - collectionId: kjxvi8asj2igqwf
- collectionName: categories
- created: '2024-06-29 19:23:12.632Z'
- id: 8m2qclsl6p8at9k
- img: hiking_EwOAWJFKCg.jpg
- name: Hiking
- updated: '2024-06-29 19:23:12.632Z'
- - collectionId: kjxvi8asj2igqwf
- collectionName: categories
- created: '2024-06-29 19:23:12.648Z'
- id: x5y2ikswxzoznek
- img: walking_YOtlMqoDps.jpg
- name: Walking
- updated: '2024-06-29 19:23:12.648Z'
- - collectionId: kjxvi8asj2igqwf
- collectionName: categories
- created: '2024-06-29 19:23:12.658Z'
- id: 9ecf7bunl88bt4k
- img: climbing_vRyCdFwURk.jpg
- name: Climbing
- updated: '2024-06-29 19:23:12.658Z'
- - collectionId: kjxvi8asj2igqwf
- collectionName: categories
- created: '2024-06-29 19:23:12.669Z'
- id: pbwx1lg2nmcih0w
- img: skiing_KdUASbxv4C.jpg
- name: Skiing
- updated: '2024-06-29 19:23:12.669Z'
- - collectionId: kjxvi8asj2igqwf
- collectionName: categories
- created: '2024-06-29 19:23:12.679Z'
- id: 7sqwezntokmbvdr
- img: canoeing_QBmwxRx6uh.jpg
- name: Canoeing
- updated: '2024-06-29 19:23:12.679Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 0
- type: number
- inclusive: false
- exact: false
- message: Number must be greater than 0
- path:
- - page
- headers: {}
- x-400:Invalid sort/expand/filter:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Something went wrong while processing your request.
- detail:
- code: 400
- message: Something went wrong while processing your request.
- data: {}
- headers: {}
- security: []
- /comment:
- get:
- summary: list
- deprecated: false
- description: Lists all comments.
- operationId: listComments
- tags:
- - comment
- parameters:
- - name: page
- in: query
- description: Page number starting at 1
- required: false
- example: 1
- schema:
- type: number
- - name: perPage
- in: query
- description: Items per page
- required: false
- example: 5
- schema:
- type: number
- - name: sort
- in: query
- description: Sort string (-/+)
- required: false
- example: '-created'
- schema:
- type: string
- - name: filter
- in: query
- description: >-
- Filter string
- (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)
- required: false
- example: text="abc"
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: trail
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: my-key
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- page:
- type: integer
- perPage:
- type: integer
- totalItems:
- type: integer
- totalPages:
- type: integer
- items:
- type: array
- items:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- rating:
- type: integer
- text:
- type: string
- trail:
- type: string
- updated:
- type: string
- expand:
- type: object
- properties:
- author:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- required:
- - author
- required:
- - author
- - collectionId
- - collectionName
- - created
- - id
- - rating
- - text
- - trail
- - updated
- - expand
- required:
- - page
- - perPage
- - totalItems
- - totalPages
- - items
- examples:
- '1':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 5
- totalPages: 1
- items:
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-20 21:43:09.964Z'
- id: 13ikooi1f6tgjvd
- rating: 0
- text: Comment
- trail: 267r63tmbyezpck
- updated: '2024-12-20 21:43:09.964Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-20 20:37:33.558Z'
- id: 1rjjl1riy4jrdmm
- rating: 0
- text: C
- trail: l4u85lr0x6jgojd
- updated: '2024-12-20 20:37:33.558Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: znhd3hgrxl85c9f
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-19 21:18:30.979Z'
- id: 6vcudpc4wgc0cku
- rating: 0
- text: Zehn Ziegen zogen zehn Zentner Zucker zum Zoo!
- trail: oual4h0zovut2ph
- updated: '2024-12-19 21:18:30.979Z'
- expand:
- author:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-02 17:43:26.303Z'
- id: p4r2x69bq7iz8ah
- rating: 0
- text: Geht das?
- trail: 6558yf0g9knodhv
- updated: '2024-12-02 17:43:26.303Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-21 00:37:08.033Z'
- id: vkwrak7tytf9vur
- rating: 0
- text: >-
- Anim minim consequat veniam ad laboris velit magna
- veniam dolor. Incididunt in non fugiat aliqua. Ullamco
- sint ipsum cupidatat Lorem deserunt id quis. Irure
- minim duis pariatur irure commodo non officia cillum
- et exercitation laborum. Enim nisi ipsum velit nisi.
- Consectetur et ad enim laboris.
-
-
- Lorem commodo ex deserunt deserunt fugiat et consequat
- sit ad consequat nulla quis reprehenderit. Commodo sit
- eu consequat reprehenderit elit labore Lorem pariatur
- enim do ad irure ex ad. Nisi magna irure est dolore
- elit laboris commodo consectetur sint aliquip sit. Do
- exercitation ullamco incididunt culpa eu dolore dolore
- sint esse laboris elit enim cillum excepteur. Sit
- veniam veniam ex deserunt Lorem Lorem ut incididunt
- dolor sint nulla eiusmod magna adipisicing.
- trail: 267r63tmbyezpck
- updated: '2024-12-21 00:37:08.033Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 0
- type: number
- inclusive: false
- exact: false
- message: Number must be greater than 0
- path:
- - page
- headers: {}
- x-400:Invalid sort/expand/filter:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Something went wrong while processing your request.
- detail:
- code: 400
- message: Something went wrong while processing your request.
- data: {}
- headers: {}
- security: []
- put:
- summary: create
- deprecated: false
- description: 'Creates a comment. '
- operationId: createComment
- tags:
- - comment
- parameters:
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request id. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- minLength: 15
- maxLength: 15
- text:
- type: string
- trail:
- type: string
- minLength: 15
- maxLength: 15
- required:
- - text
- - author
- - trail
- example:
- text: test
- trail: 3zdz20mt9243f60
- author: z014o6bpcg680mg
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- expand:
- type: object
- properties:
- author:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- emailVisibility:
- type: boolean
- id:
- type: string
- token:
- type: string
- updated:
- type: string
- username:
- type: string
- verified:
- type: boolean
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - emailVisibility
- - id
- - token
- - updated
- - username
- - verified
- trail:
- type: object
- properties:
- author:
- type: string
- category:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- description:
- type: string
- difficulty:
- type: string
- distance:
- type: number
- duration:
- type: integer
- elevation_gain:
- type: integer
- elevation_loss:
- type: integer
- gpx:
- type: string
- id:
- type: string
- lat:
- type: number
- location:
- type: string
- lon:
- type: number
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- public:
- type: boolean
- summit_logs:
- type: array
- items:
- type: string
- thumbnail:
- type: integer
- updated:
- type: string
- waypoints:
- type: array
- items:
- type: string
- required:
- - author
- - category
- - collectionId
- - collectionName
- - created
- - date
- - description
- - difficulty
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - lat
- - location
- - lon
- - name
- - photos
- - public
- - summit_logs
- - thumbnail
- - updated
- - waypoints
- required:
- - author
- - trail
- id:
- type: string
- rating:
- type: integer
- text:
- type: string
- trail:
- type: string
- updated:
- type: string
- required:
- - author
- - collectionId
- - collectionName
- - created
- - expand
- - id
- - rating
- - text
- - trail
- - updated
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2025-01-02 20:48:00.278Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute Lorem in
- ullamco labore ex. Officia ea qui in exercitation
- amet. Consequat laboris id duis enim Lorem dolore
- fugiat excepteur sunt. Sint consectetur duis tempor
- deserunt non. Ex amet sunt eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur irure. Ea
- et reprehenderit ipsum adipisicing duis proident
- tempor esse excepteur dolor dolore anim consectetur
- aliqua. Laborum culpa eiusmod id ea consectetur do sit
- reprehenderit consequat voluptate mollit commodo.
- Ullamco aute ea minim enim et cupidatat ipsum cillum
- fugiat. Proident consectetur commodo Lorem do
- incididunt labore pariatur esse ea officia
- adipisicing. Do et sint culpa proident enim irure
- aliqua dolore magna. Laborum Lorem sunt amet occaecat
- occaecat mollit consectetur laborum ut.
- collectionId: _pb_users_auth_
- collectionName: users
- created: '2024-06-29 19:23:47.731Z'
- emailVisibility: false
- id: 3mugf953w4a9fg5
- token: >-
- eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA
- updated: '2024-12-30 18:36:39.161Z'
- username: Flomp
- verified: true
- trail:
- author: 3mugf953w4a9fg5
- category: pbwx1lg2nmcih0w
- collectionId: e864strfxo14pm4
- collectionName: trails
- created: '2024-12-30 18:57:35.453Z'
- date: '2024-12-30 00:00:00.000Z'
- description: ''
- difficulty: moderate
- distance: 5631.307320599051
- duration: 0
- elevation_gain: 76
- elevation_loss: 76
- gpx: blob_0E0x721wan.gpx
- id: z94vgei3jdc37k4
- lat: 47.385232
- location: ''
- lon: 9.655863
- name: Die Pottsau
- photos:
- - 23xxesym0e9w18z2904frnpgy7_2SQmCCI6DV.jpg
- - caret_right_solid_9154Rrvk6B.svg
- public: false
- summit_logs:
- - 95bb1d77c8dfa98
- thumbnail: 1
- updated: '2024-12-30 18:59:56.924Z'
- waypoints:
- - 7f6d2a8c9d50136
- - 60c2d435a5b66ed
- id: sv3finqrp3951av
- rating: 0
- text: API comment
- trail: z94vgei3jdc37k4
- updated: '2025-01-02 20:48:00.278Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties:
- author:
- type: object
- properties:
- code:
- type: string
- message:
- type: string
- required:
- - code
- - message
- required:
- - author
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Failed to create record.
- detail:
- code: 400
- message: Failed to create record.
- data:
- author:
- code: validation_missing_rel_records
- message: >-
- Failed to find all relation records with the
- provided ids.
- headers: {}
- x-400:Invalid Params:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- expected:
- type: string
- received:
- type: string
- path:
- type: array
- items:
- type: string
- message:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: invalid_type
- expected: string
- received: number
- path:
- - text
- message: Expected string, received number
- headers: {}
- security:
- - CookieAuth: []
- /comment/{id}:
- get:
- summary: show
- deprecated: false
- description: Shows a single comment.
- operationId: showComment
- tags:
- - comment
- parameters:
- - name: id
- in: path
- description: Comment Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- rating:
- type: integer
- text:
- type: string
- trail:
- type: string
- updated:
- type: string
- expand:
- type: object
- properties:
- author:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- required:
- - author
- required:
- - author
- - collectionId
- - collectionName
- - created
- - id
- - rating
- - text
- - trail
- - updated
- - expand
- examples:
- '1':
- summary: Success
- value:
- author: znhd3hgrxl85c9f
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-19 21:18:30.979Z'
- id: 6vcudpc4wgc0cku
- rating: 0
- text: Zehn Ziegen zogen zehn Zentner Zucker zum Zoo!
- trail: oual4h0zovut2ph
- updated: '2024-12-19 21:18:30.979Z'
- expand:
- author:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security: []
- post:
- summary: update
- deprecated: false
- description: Updates a comment.
- operationId: updateComment
- tags:
- - comment
- parameters:
- - name: id
- in: path
- description: Comment Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- - name: Content-Type
- in: header
- description: ''
- required: true
- example: application/json
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- text:
- type: string
- trail:
- type: string
- author:
- type: string
- required:
- - text
- - trail
- - author
- example: ''
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- rating:
- type: integer
- text:
- type: string
- trail:
- type: string
- updated:
- type: string
- required:
- - author
- - collectionId
- - collectionName
- - created
- - id
- - rating
- - text
- - trail
- - updated
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2025-01-02 20:43:00.030Z'
- id: tmof4bjvtw0sqqu
- rating: 0
- text: API comment updated
- trail: z94vgei3jdc37k4
- updated: '2025-01-02 21:00:03.866Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- delete:
- summary: delete
- deprecated: false
- description: Deletes a comment.
- operationId: deleteComment
- tags:
- - comment
- parameters:
- - name: id
- in: path
- description: Comment Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- acknowledged:
- type: boolean
- required:
- - acknowledged
- examples:
- '1':
- summary: Success
- value:
- acknowledged: true
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /follow/count/{id}:
- get:
- summary: show
- deprecated: false
- description: Shows follower and followee counts given a user Id.
- operationId: showFollowCount
- tags:
- - follow
- parameters:
- - name: id
- in: path
- description: User Id
- required: true
- example: 3mugf953w4a9fg5
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties: {}
- examples:
- '1':
- summary: Success
- value:
- collectionId: j6w72f0kb5ivd7x
- collectionName: follow_counts
- followers: 1
- following: 1
- id: 3mugf953w4a9fg5
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- x-200:OK:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- collectionId:
- type: string
- collectionName:
- type: string
- followers:
- type: integer
- following:
- type: integer
- id:
- type: string
- required:
- - collectionId
- - collectionName
- - followers
- - following
- - id
- headers: {}
- security: []
- /follow/{id}:
- delete:
- summary: delete
- deprecated: false
- description: Deletes a follow.
- operationId: deleteFollow
- tags:
- - follow
- parameters:
- - name: id
- in: path
- description: Follow Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- acknowledged:
- type: boolean
- required:
- - acknowledged
- examples:
- '1':
- summary: Success
- value:
- acknowledged: true
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /follow:
- get:
- summary: list
- deprecated: false
- description: Lists all follows.
- operationId: listFollows
- tags:
- - follow
- parameters:
- - name: page
- in: query
- description: Page number starting at 1
- required: false
- example: 1
- schema:
- type: number
- - name: perPage
- in: query
- description: Items per page
- required: false
- example: 5
- schema:
- type: number
- - name: sort
- in: query
- description: Sort string (-/+)
- required: false
- example: '-created'
- schema:
- type: string
- - name: filter
- in: query
- description: >-
- Filter string
- (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)
- required: false
- example: follower="3mugf953w4a9fg5"
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: follower
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: my-key
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- page:
- type: integer
- perPage:
- type: integer
- totalItems:
- type: integer
- totalPages:
- type: integer
- items:
- type: array
- items:
- type: object
- properties:
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- followee:
- type: string
- follower:
- type: string
- id:
- type: string
- updated:
- type: string
- expand:
- type: object
- properties:
- follower:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- followee:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- required:
- - follower
- - followee
- required:
- - collectionId
- - collectionName
- - created
- - followee
- - follower
- - id
- - updated
- - expand
- required:
- - page
- - perPage
- - totalItems
- - totalPages
- - items
- examples:
- '1':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 1
- totalPages: 1
- items:
- - collectionId: 8obn1ukumze565i
- collectionName: follows
- created: '2024-12-20 23:22:18.445Z'
- followee: 3mugf953w4a9fg5
- follower: znhd3hgrxl85c9f
- id: xajdtx5j8l10wov
- updated: '2024-12-20 23:22:18.445Z'
- expand:
- follower:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- followee:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 0
- type: number
- inclusive: false
- exact: false
- message: Number must be greater than 0
- path:
- - page
- headers: {}
- x-400:Invalid sort/expand/filter:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Something went wrong while processing your request.
- detail:
- code: 400
- message: Something went wrong while processing your request.
- data: {}
- headers: {}
- security: []
- put:
- summary: create
- deprecated: false
- description: Creates a follow.
- operationId: createFollow
- tags:
- - follow
- parameters:
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request id. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- follower:
- type: string
- minLength: 15
- maxLength: 15
- description: User Id of person following
- followee:
- type: string
- minLength: 15
- maxLength: 15
- description: User Id of person being followed
- required:
- - follower
- - followee
- example:
- text: test
- trail: 3zdz20mt9243f60
- author: z014o6bpcg680mg
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- expand:
- type: object
- properties:
- follower:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- emailVisibility:
- type: boolean
- id:
- type: string
- token:
- type: string
- updated:
- type: string
- username:
- type: string
- verified:
- type: boolean
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - emailVisibility
- - id
- - token
- - updated
- - username
- - verified
- required:
- - follower
- followee:
- type: string
- follower:
- type: string
- id:
- type: string
- updated:
- type: string
- required:
- - collectionId
- - collectionName
- - created
- - expand
- - followee
- - follower
- - id
- - updated
- examples:
- '1':
- summary: Success
- value:
- collectionId: 8obn1ukumze565i
- collectionName: follows
- created: '2025-01-02 22:01:46.741Z'
- expand:
- follower:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute Lorem in
- ullamco labore ex. Officia ea qui in exercitation
- amet. Consequat laboris id duis enim Lorem dolore
- fugiat excepteur sunt. Sint consectetur duis tempor
- deserunt non. Ex amet sunt eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur irure. Ea
- et reprehenderit ipsum adipisicing duis proident
- tempor esse excepteur dolor dolore anim consectetur
- aliqua. Laborum culpa eiusmod id ea consectetur do sit
- reprehenderit consequat voluptate mollit commodo.
- Ullamco aute ea minim enim et cupidatat ipsum cillum
- fugiat. Proident consectetur commodo Lorem do
- incididunt labore pariatur esse ea officia
- adipisicing. Do et sint culpa proident enim irure
- aliqua dolore magna. Laborum Lorem sunt amet occaecat
- occaecat mollit consectetur laborum ut.
- collectionId: _pb_users_auth_
- collectionName: users
- created: '2024-06-29 19:23:47.731Z'
- emailVisibility: false
- id: 3mugf953w4a9fg5
- token: >-
- eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA
- updated: '2024-12-30 18:36:39.161Z'
- username: Flomp
- verified: true
- followee: znhd3hgrxl85c9f
- follower: 3mugf953w4a9fg5
- id: 0vfwhxsdvhf2jn5
- updated: '2025-01-02 22:01:46.741Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties:
- author:
- type: object
- properties:
- code:
- type: string
- message:
- type: string
- required:
- - code
- - message
- required:
- - author
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Failed to create record.
- detail:
- code: 400
- message: Failed to create record.
- data:
- author:
- code: validation_missing_rel_records
- message: >-
- Failed to find all relation records with the
- provided ids.
- headers: {}
- x-400:Invalid Params:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - followee
- headers: {}
- security:
- - CookieAuth: []
- /trail-share/{id}:
- get:
- summary: show
- deprecated: false
- description: Shows a single trail share.
- operationId: showTrailShare
- tags:
- - trail-share
- parameters:
- - name: id
- in: path
- description: List Share Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- permission:
- type: string
- trail:
- type: string
- updated:
- type: string
- user:
- type: string
- required:
- - collectionId
- - collectionName
- - created
- - id
- - permission
- - trail
- - updated
- - user
- examples:
- '1':
- summary: Success
- value:
- collectionId: 1mns8mlal6uf9ku
- collectionName: trail_share
- created: '2024-12-08 21:48:07.886Z'
- id: 98ksbvxgqlp45jl
- permission: view
- trail: oual4h0zovut2ph
- updated: '2024-12-08 21:48:07.886Z'
- user: znhd3hgrxl85c9f
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- post:
- summary: update
- deprecated: false
- description: Updates a trail share.
- operationId: updateTrailShare
- tags:
- - trail-share
- parameters:
- - name: id
- in: path
- description: List Share Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- - name: Content-Type
- in: header
- description: ''
- required: true
- example: application/json
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- permission:
- type: string
- enum:
- - view
- - edit
- example:
- permission: view
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- permission:
- type: string
- trail:
- type: string
- updated:
- type: string
- user:
- type: string
- required:
- - collectionId
- - collectionName
- - created
- - id
- - permission
- - trail
- - updated
- - user
- examples:
- '1':
- summary: Success
- value:
- collectionId: 1mns8mlal6uf9ku
- collectionName: trail_share
- created: '2025-01-03 12:41:01.998Z'
- id: 93jrstjcngapleb
- permission: edit
- trail: z94vgei3jdc37k4
- updated: '2025-01-03 12:42:13.052Z'
- user: znhd3hgrxl85c9f
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- delete:
- summary: delete
- deprecated: false
- description: Deletes a trail share.
- operationId: deleteTrailShare
- tags:
- - trail-share
- parameters:
- - name: id
- in: path
- description: List Share Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- acknowledged:
- type: boolean
- required:
- - acknowledged
- examples:
- '1':
- summary: Success
- value:
- acknowledged: true
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /trail-share:
- get:
- summary: list
- deprecated: false
- description: Lists all trail-shares.
- operationId: listTrailShares
- tags:
- - trail-share
- parameters:
- - name: page
- in: query
- description: Page number starting at 1
- required: false
- example: 1
- schema:
- type: number
- - name: perPage
- in: query
- description: Items per page
- required: false
- example: 5
- schema:
- type: number
- - name: sort
- in: query
- description: Sort string (-/+)
- required: false
- example: '-created'
- schema:
- type: string
- - name: filter
- in: query
- description: >-
- Filter string
- (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)
- required: false
- example: permission="view"
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: user
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: my-key
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- page:
- type: integer
- perPage:
- type: integer
- totalItems:
- type: integer
- totalPages:
- type: integer
- items:
- type: array
- items:
- type: object
- properties:
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- trail:
- type: string
- permission:
- type: string
- updated:
- type: string
- user:
- type: string
- expand:
- type: object
- properties:
- user:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- required:
- - user
- required:
- - page
- - perPage
- - totalItems
- - totalPages
- - items
- examples:
- '1':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 30
- totalPages: 6
- items:
- - collectionId: 1mns8mlal6uf9ku
- collectionName: trail_share
- created: '2024-11-15 20:00:10.603Z'
- id: 027pf52phm4a5vx
- permission: view
- trail: l4u85lr0x6jgojd
- updated: '2024-11-15 20:00:10.603Z'
- user: 3mugf953w4a9fg5
- expand:
- user:
- avatar: 23xxesym0e9w18z2904frnpgy7_OzsVanAmWP.jpg
- bio: >-
- Enim beatae labore vel. Pariatur hic doloribus
- quia quasi eos. Cumque error nobis.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - collectionId: 1mns8mlal6uf9ku
- collectionName: trail_share
- created: '2024-09-14 14:36:36.470Z'
- id: 0q3pknqtbf5zsmu
- permission: view
- trail: 2o9c3pxfvrzclud
- updated: '2024-09-14 14:36:36.470Z'
- user: znhd3hgrxl85c9f
- expand:
- user:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- - collectionId: 1mns8mlal6uf9ku
- collectionName: trail_share
- created: '2024-09-14 13:05:39.661Z'
- id: 1n7oo2f14d2bwi5
- permission: view
- trail: yesm2tqc6jok8jq
- updated: '2024-09-14 13:05:39.661Z'
- user: znhd3hgrxl85c9f
- expand:
- user:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- - collectionId: 1mns8mlal6uf9ku
- collectionName: trail_share
- created: '2024-12-02 17:46:13.399Z'
- id: 23mpznfesfbyha1
- permission: view
- trail: 6558yf0g9knodhv
- updated: '2024-12-02 17:46:13.399Z'
- user: znhd3hgrxl85c9f
- expand:
- user:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- - collectionId: 1mns8mlal6uf9ku
- collectionName: trail_share
- created: '2024-09-14 14:36:36.155Z'
- id: 2lhw2wak0i71rmr
- permission: view
- trail: oy1auygew9fvha0
- updated: '2024-09-14 14:36:36.155Z'
- user: znhd3hgrxl85c9f
- expand:
- user:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- '2':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 5
- totalPages: 1
- items:
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-20 21:43:09.964Z'
- id: 13ikooi1f6tgjvd
- rating: 0
- text: Comment
- trail: 267r63tmbyezpck
- updated: '2024-12-20 21:43:09.964Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-20 20:37:33.558Z'
- id: 1rjjl1riy4jrdmm
- rating: 0
- text: C
- trail: l4u85lr0x6jgojd
- updated: '2024-12-20 20:37:33.558Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: znhd3hgrxl85c9f
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-19 21:18:30.979Z'
- id: 6vcudpc4wgc0cku
- rating: 0
- text: Zehn Ziegen zogen zehn Zentner Zucker zum Zoo!
- trail: oual4h0zovut2ph
- updated: '2024-12-19 21:18:30.979Z'
- expand:
- author:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-02 17:43:26.303Z'
- id: p4r2x69bq7iz8ah
- rating: 0
- text: Geht das?
- trail: 6558yf0g9knodhv
- updated: '2024-12-02 17:43:26.303Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-21 00:37:08.033Z'
- id: vkwrak7tytf9vur
- rating: 0
- text: >-
- Anim minim consequat veniam ad laboris velit magna
- veniam dolor. Incididunt in non fugiat aliqua. Ullamco
- sint ipsum cupidatat Lorem deserunt id quis. Irure
- minim duis pariatur irure commodo non officia cillum
- et exercitation laborum. Enim nisi ipsum velit nisi.
- Consectetur et ad enim laboris.
-
-
- Lorem commodo ex deserunt deserunt fugiat et consequat
- sit ad consequat nulla quis reprehenderit. Commodo sit
- eu consequat reprehenderit elit labore Lorem pariatur
- enim do ad irure ex ad. Nisi magna irure est dolore
- elit laboris commodo consectetur sint aliquip sit. Do
- exercitation ullamco incididunt culpa eu dolore dolore
- sint esse laboris elit enim cillum excepteur. Sit
- veniam veniam ex deserunt Lorem Lorem ut incididunt
- dolor sint nulla eiusmod magna adipisicing.
- trail: 267r63tmbyezpck
- updated: '2024-12-21 00:37:08.033Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- headers: {}
- x-400:Invalid sort/expand/filter:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Something went wrong while processing your request.
- detail:
- code: 400
- message: Something went wrong while processing your request.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- put:
- summary: create
- deprecated: false
- description: 'Creates a trail share. '
- operationId: createTrailShare
- tags:
- - trail-share
- parameters:
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request id. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- trail:
- type: string
- minLength: 15
- maxLength: 15
- description: Trail Id
- user:
- type: string
- minLength: 15
- maxLength: 15
- description: User Id
- permission:
- type: string
- enum:
- - view
- - edit
- description: Permissions for user
- required:
- - trail
- - user
- - permission
- example:
- trail: z94vgei3jdc37k4
- user: z014o6bpcg680mg
- permission: view
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- expand:
- type: object
- properties:
- trail:
- type: object
- properties:
- author:
- type: string
- category:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- description:
- type: string
- difficulty:
- type: string
- distance:
- type: number
- duration:
- type: integer
- elevation_gain:
- type: integer
- elevation_loss:
- type: integer
- expand:
- type: object
- properties:
- author:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- emailVisibility:
- type: boolean
- id:
- type: string
- token:
- type: string
- updated:
- type: string
- username:
- type: string
- verified:
- type: boolean
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - emailVisibility
- - id
- - token
- - updated
- - username
- - verified
- required:
- - author
- gpx:
- type: string
- id:
- type: string
- lat:
- type: number
- location:
- type: string
- lon:
- type: number
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- public:
- type: boolean
- summit_logs:
- type: array
- items:
- type: string
- thumbnail:
- type: integer
- updated:
- type: string
- waypoints:
- type: array
- items:
- type: string
- required:
- - author
- - category
- - collectionId
- - collectionName
- - created
- - date
- - description
- - difficulty
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - expand
- - gpx
- - id
- - lat
- - location
- - lon
- - name
- - photos
- - public
- - summit_logs
- - thumbnail
- - updated
- - waypoints
- required:
- - trail
- id:
- type: string
- permission:
- type: string
- trail:
- type: string
- updated:
- type: string
- user:
- type: string
- required:
- - collectionId
- - collectionName
- - created
- - expand
- - id
- - permission
- - trail
- - updated
- - user
- examples:
- '1':
- summary: Success
- value:
- collectionId: 1mns8mlal6uf9ku
- collectionName: trail_share
- created: '2025-01-03 12:41:01.998Z'
- expand:
- trail:
- author: 3mugf953w4a9fg5
- category: pbwx1lg2nmcih0w
- collectionId: e864strfxo14pm4
- collectionName: trails
- created: '2024-12-30 18:57:35.453Z'
- date: '2024-12-30 00:00:00.000Z'
- description: ''
- difficulty: moderate
- distance: 5631.307320599051
- duration: 0
- elevation_gain: 76
- elevation_loss: 76
- expand:
- author:
- avatar: 23xxesym0e9w18z2904frnpgy7_OzsVanAmWP.jpg
- bio: >-
- Enim beatae labore vel. Pariatur hic doloribus
- quia quasi eos. Cumque error nobis.
- collectionId: _pb_users_auth_
- collectionName: users
- created: '2024-06-29 19:23:47.731Z'
- emailVisibility: false
- id: 3mugf953w4a9fg5
- token: >-
- eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA
- updated: '2025-01-03 12:32:15.270Z'
- username: Flomp
- verified: true
- gpx: blob_0E0x721wan.gpx
- id: z94vgei3jdc37k4
- lat: 47.385232
- location: ''
- lon: 9.655863
- name: Die Pottsau
- photos:
- - 23xxesym0e9w18z2904frnpgy7_2SQmCCI6DV.jpg
- - caret_right_solid_9154Rrvk6B.svg
- public: false
- summit_logs:
- - 95bb1d77c8dfa98
- thumbnail: 1
- updated: '2024-12-30 18:59:56.924Z'
- waypoints:
- - 7f6d2a8c9d50136
- - 60c2d435a5b66ed
- id: 93jrstjcngapleb
- permission: view
- trail: z94vgei3jdc37k4
- updated: '2025-01-03 12:41:01.998Z'
- user: znhd3hgrxl85c9f
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties:
- author:
- type: object
- properties:
- code:
- type: string
- message:
- type: string
- required:
- - code
- - message
- required:
- - author
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Failed to create record.
- detail:
- code: 400
- message: Failed to create record.
- data:
- author:
- code: validation_missing_rel_records
- message: >-
- Failed to find all relation records with the
- provided ids.
- headers: {}
- x-400:Invalid Params:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- expected:
- type: string
- received:
- type: string
- path:
- type: array
- items:
- type: string
- message:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: invalid_type
- expected: string
- received: number
- path:
- - text
- message: Expected string, received number
- headers: {}
- security:
- - CookieAuth: []
- /user/anonymous/{id}:
- get:
- summary: show
- deprecated: false
- description: Shows a single anonymized user (email and token are hidden).
- operationId: showUserAnonymous
- tags:
- - user
- parameters:
- - name: id
- in: path
- description: User Id
- required: true
- example: 3mugf953w4a9fg5
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- examples:
- '1':
- summary: Success
- value:
- avatar: 23xxesym0e9w18z2904frnpgy7_OzsVanAmWP.jpg
- bio: >-
- Enim beatae labore vel. Pariatur hic doloribus quia quasi
- eos. Cumque error nobis.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /user/anonymous:
- get:
- summary: list
- deprecated: false
- description: Lists all anonymized users (email and token are hidden).
- operationId: listUsersAnonymous
- tags:
- - user
- parameters:
- - name: page
- in: query
- description: Page number starting at 1
- required: false
- example: 1
- schema:
- type: number
- - name: perPage
- in: query
- description: Items per page
- required: false
- example: 5
- schema:
- type: number
- - name: sort
- in: query
- description: Sort string (-/+)
- required: false
- example: '-created'
- schema:
- type: string
- - name: filter
- in: query
- description: >-
- Filter string
- (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)
- required: false
- example: username="Flomp"
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: id
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: my-key
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- page:
- type: integer
- perPage:
- type: integer
- totalItems:
- type: integer
- totalPages:
- type: integer
- items:
- type: array
- items:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- required:
- - page
- - perPage
- - totalItems
- - totalPages
- - items
- examples:
- '1':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 2
- totalPages: 1
- items:
- - avatar: 23xxesym0e9w18z2904frnpgy7_OzsVanAmWP.jpg
- bio: >-
- Enim beatae labore vel. Pariatur hic doloribus quia
- quasi eos. Cumque error nobis.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- '2':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 5
- totalPages: 1
- items:
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-20 21:43:09.964Z'
- id: 13ikooi1f6tgjvd
- rating: 0
- text: Comment
- trail: 267r63tmbyezpck
- updated: '2024-12-20 21:43:09.964Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-20 20:37:33.558Z'
- id: 1rjjl1riy4jrdmm
- rating: 0
- text: C
- trail: l4u85lr0x6jgojd
- updated: '2024-12-20 20:37:33.558Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: znhd3hgrxl85c9f
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-19 21:18:30.979Z'
- id: 6vcudpc4wgc0cku
- rating: 0
- text: Zehn Ziegen zogen zehn Zentner Zucker zum Zoo!
- trail: oual4h0zovut2ph
- updated: '2024-12-19 21:18:30.979Z'
- expand:
- author:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-02 17:43:26.303Z'
- id: p4r2x69bq7iz8ah
- rating: 0
- text: Geht das?
- trail: 6558yf0g9knodhv
- updated: '2024-12-02 17:43:26.303Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-21 00:37:08.033Z'
- id: vkwrak7tytf9vur
- rating: 0
- text: >-
- Anim minim consequat veniam ad laboris velit magna
- veniam dolor. Incididunt in non fugiat aliqua. Ullamco
- sint ipsum cupidatat Lorem deserunt id quis. Irure
- minim duis pariatur irure commodo non officia cillum
- et exercitation laborum. Enim nisi ipsum velit nisi.
- Consectetur et ad enim laboris.
-
-
- Lorem commodo ex deserunt deserunt fugiat et consequat
- sit ad consequat nulla quis reprehenderit. Commodo sit
- eu consequat reprehenderit elit labore Lorem pariatur
- enim do ad irure ex ad. Nisi magna irure est dolore
- elit laboris commodo consectetur sint aliquip sit. Do
- exercitation ullamco incididunt culpa eu dolore dolore
- sint esse laboris elit enim cillum excepteur. Sit
- veniam veniam ex deserunt Lorem Lorem ut incididunt
- dolor sint nulla eiusmod magna adipisicing.
- trail: 267r63tmbyezpck
- updated: '2024-12-21 00:37:08.033Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- headers: {}
- x-400:Invalid sort/expand/filter:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Something went wrong while processing your request.
- detail:
- code: 400
- message: Something went wrong while processing your request.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /user/{id}:
- get:
- summary: show
- deprecated: false
- description: >-
- Shows a single user. The only valid id is the one of the logged-in user.
- Use the "user/anonymous/{id}" endpoint for all other users.
- operationId: showUser
- tags:
- - user
- parameters:
- - name: id
- in: path
- description: User Id
- required: true
- example: 3mugf953w4a9fg5
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- email:
- type: string
- emailVisibility:
- type: boolean
- id:
- type: string
- token:
- type: string
- updated:
- type: string
- username:
- type: string
- verified:
- type: boolean
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - email
- - emailVisibility
- - id
- - token
- - updated
- - username
- - verified
- examples:
- '1':
- summary: Success
- value:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit ullamco
- elit culpa eiusmod officia irure aute Lorem in ullamco
- labore ex. Officia ea qui in exercitation amet. Consequat
- laboris id duis enim Lorem dolore fugiat excepteur sunt.
- Sint consectetur duis tempor deserunt non. Ex amet sunt eu
- commodo.
-
-
- Mollit labore cupidatat qui enim consectetur irure. Ea et
- reprehenderit ipsum adipisicing duis proident tempor esse
- excepteur dolor dolore anim consectetur aliqua. Laborum
- culpa eiusmod id ea consectetur do sit reprehenderit
- consequat voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore pariatur
- esse ea officia adipisicing. Do et sint culpa proident
- enim irure aliqua dolore magna. Laborum Lorem sunt amet
- occaecat occaecat mollit consectetur laborum ut.
- collectionId: _pb_users_auth_
- collectionName: users
- created: '2024-06-29 19:23:47.731Z'
- email: c.beutel08@googlemail.com
- emailVisibility: false
- id: 3mugf953w4a9fg5
- token: >-
- eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA
- updated: '2024-12-30 18:36:39.161Z'
- username: Flomp
- verified: true
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- post:
- summary: update
- deprecated: false
- description: Updates a user.
- operationId: updateUser
- tags:
- - user
- parameters:
- - name: id
- in: path
- description: User Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- - name: Content-Type
- in: header
- description: ''
- required: true
- example: application/json
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- username:
- type: string
- minLength: 3
- password:
- type: string
- minLength: 8
- passwordConfirm:
- type: string
- minLength: 8
- description: Must be equal to "password"
- email:
- type: string
- format: email
- bio:
- type: string
- description: User biography
- example:
- username: Kim_Hettinger23
- password: minim elit
- passwordConfirm: minim elit
- email: Theodora_Kovacek@yahoo.com
- bio: >-
- A sed velit cum esse. Delectus minus nulla animi fugit minima
- omnis. Perspiciatis voluptas iure ipsa a dignissimos. Sequi
- magni odio beatae quisquam.
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- email:
- type: string
- emailVisibility:
- type: boolean
- id:
- type: string
- token:
- type: string
- updated:
- type: string
- username:
- type: string
- verified:
- type: boolean
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - email
- - emailVisibility
- - id
- - token
- - updated
- - username
- - verified
- examples:
- '1':
- summary: Success
- value:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- Enim beatae labore vel. Pariatur hic doloribus quia quasi
- eos. Cumque error nobis.
- collectionId: _pb_users_auth_
- collectionName: users
- created: '2024-06-29 19:23:47.731Z'
- email: mymail@gmail.com
- emailVisibility: false
- id: 3mugf953w4a9fg5
- token: >-
- eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA
- updated: '2025-01-03 12:29:55.103Z'
- username: Flomp
- verified: true
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- delete:
- summary: delete
- deprecated: false
- description: Deletes a user.
- operationId: deleteUser
- tags:
- - user
- parameters:
- - name: id
- in: path
- description: Comment Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- acknowledged:
- type: boolean
- required:
- - acknowledged
- examples:
- '1':
- summary: Success
- value:
- acknowledged: true
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /user:
- put:
- summary: create
- deprecated: false
- description: 'Creates a user. '
- operationId: createUser
- tags:
- - user
- parameters:
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request id. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- username:
- type: string
- minLength: 3
- password:
- type: string
- minLength: 8
- passwordConfirm:
- type: string
- minLength: 8
- description: Must be equal to "password"
- email:
- type: string
- format: email
- required:
- - username
- - password
- - passwordConfirm
- - email
- example:
- username: Angela.Pacocha95
- password: deserunt
- passwordConfirm: deserunt
- email: Braulio98@gmail.com
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- emailVisibility:
- type: boolean
- id:
- type: string
- token:
- type: string
- updated:
- type: string
- username:
- type: string
- verified:
- type: boolean
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - emailVisibility
- - id
- - token
- - updated
- - username
- - verified
- examples:
- '1':
- summary: Success
- value:
- avatar: ''
- bio: ''
- collectionId: _pb_users_auth_
- collectionName: users
- created: '2025-01-03 12:23:01.865Z'
- emailVisibility: false
- id: nfynp8jhat2o4sy
- token: >-
- eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSBuZnlucDhqaGF0Mm80c3kgT1Igc2hhcmVzID0gbmZ5bnA4amhhdDJvNHN5In19fQ.RtK_w6Bjqni720FEjVqIwaWhtrqqy5rFPA7qAdPd0iA
- updated: '2025-01-03 12:23:01.867Z'
- username: Dewayne33
- verified: false
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties:
- author:
- type: object
- properties:
- code:
- type: string
- message:
- type: string
- required:
- - code
- - message
- required:
- - author
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Failed to create record.
- detail:
- code: 400
- message: Failed to create record.
- data:
- author:
- code: validation_missing_rel_records
- message: >-
- Failed to find all relation records with the
- provided ids.
- headers: {}
- x-400:Invalid Params:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- expected:
- type: string
- received:
- type: string
- path:
- type: array
- items:
- type: string
- message:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: invalid_type
- expected: string
- received: number
- path:
- - text
- message: Expected string, received number
- headers: {}
- security: []
- /user/{id}/file:
- post:
- summary: file
- deprecated: false
- description: Uploads an avatar file for a user.
- operationId: fileUser
- tags:
- - user
- parameters:
- - name: id
- in: path
- description: User Id
- required: true
- example: 4yql7587j64qdo5
- schema:
- type: string
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- avatar:
- type: string
- format: binary
- description: 'Avatar image file. Allowed file types: PNG, JPG, WEBP, SVG'
- example: >-
- file:///Users/christianbeutel/Downloads/23xxesym0e9w18z2904frnpgy7.jpg
- required:
- - avatar
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- email:
- type: string
- emailVisibility:
- type: boolean
- id:
- type: string
- token:
- type: string
- updated:
- type: string
- username:
- type: string
- verified:
- type: boolean
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - email
- - emailVisibility
- - id
- - token
- - updated
- - username
- - verified
- examples:
- '1':
- summary: Success
- value:
- avatar: 23xxesym0e9w18z2904frnpgy7_OzsVanAmWP.jpg
- bio: >-
- Enim beatae labore vel. Pariatur hic doloribus quia quasi
- eos. Cumque error nobis.
- collectionId: _pb_users_auth_
- collectionName: users
- created: '2024-06-29 19:23:47.731Z'
- email: mymail@gmail.com
- emailVisibility: false
- id: 3mugf953w4a9fg5
- token: >-
- eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA
- updated: '2025-01-03 12:32:15.270Z'
- username: Flomp
- verified: true
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /waypoint/{id}:
- get:
- summary: show
- deprecated: false
- description: Shows a single waypoint.
- operationId: showWaypoint
- tags:
- - waypoint
- parameters:
- - name: id
- in: path
- description: Waypoint Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- description:
- type: string
- icon:
- type: string
- id:
- type: string
- lat:
- type: number
- lon:
- type: number
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- updated:
- type: string
- required:
- - author
- - collectionId
- - collectionName
- - created
- - description
- - icon
- - id
- - lat
- - lon
- - name
- - photos
- - updated
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- collectionId: goeo2ubp103rzp9
- collectionName: waypoints
- created: '2024-11-09 10:33:45.943Z'
- description: ''
- icon: circle
- id: 035691efaa5cf0a
- lat: 47.71415538
- lon: 11.98004365
- name: Kesselalm (1275 m)
- photos: []
- updated: '2024-11-09 10:33:45.943Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security: []
- post:
- summary: update
- deprecated: false
- description: Updates a waypoint.
- operationId: updateWaypoint
- tags:
- - waypoint
- parameters:
- - name: id
- in: path
- description: Waypoint Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- - name: Content-Type
- in: header
- description: ''
- required: true
- example: application/json
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- name:
- type: string
- description:
- type: string
- lat:
- type: number
- minimum: -90
- maximum: 90
- lon:
- type: number
- minimum: -180
- maximum: 180
- icon:
- type: string
- description: >-
- Fontawesome icon string
- (https://fontawesome.com/v6/search?o=r&m=free)
- example:
- name: molestias suscipit asperiores
- description: >-
- Quidem illum labore illum quo doloribus ratione temporibus.
- Voluptatem voluptatum tempore deleniti amet voluptate.
- Consectetur soluta repellat accusantium blanditiis. Quis
- sapiente inventore. Sed excepturi cum incidunt dolores tempora
- illum neque. Non nostrum alias ut facere assumenda.
- lat: -78.53460271991707
- lon: 112.79017323734126
- icon: house
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- description:
- type: string
- icon:
- type: string
- id:
- type: string
- lat:
- type: number
- lon:
- type: number
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- updated:
- type: string
- required:
- - author
- - collectionId
- - collectionName
- - created
- - description
- - icon
- - id
- - lat
- - lon
- - name
- - photos
- - updated
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- collectionId: goeo2ubp103rzp9
- collectionName: waypoints
- created: '2025-01-03 13:07:25.852Z'
- description: >-
- Quidem illum labore illum quo doloribus ratione
- temporibus. Voluptatem voluptatum tempore deleniti amet
- voluptate. Consectetur soluta repellat accusantium
- blanditiis. Quis sapiente inventore. Sed excepturi cum
- incidunt dolores tempora illum neque. Non nostrum alias ut
- facere assumenda.
- icon: house
- id: fjqcwd17fawiy83
- lat: -78.53460271991707
- lon: 112.79017323734126
- name: molestias suscipit asperiores
- photos: []
- updated: '2025-01-03 13:09:45.168Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- delete:
- summary: delete
- deprecated: false
- description: Deletes a waypoint.
- operationId: deleteWaypoint
- tags:
- - waypoint
- parameters:
- - name: id
- in: path
- description: Waypoint Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- acknowledged:
- type: boolean
- required:
- - acknowledged
- examples:
- '1':
- summary: Success
- value:
- acknowledged: true
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /waypoint:
- get:
- summary: list
- deprecated: false
- description: Lists all waypoints.
- operationId: listWaypoints
- tags:
- - waypoint
- parameters:
- - name: page
- in: query
- description: Page number starting at 1
- required: false
- example: 1
- schema:
- type: number
- - name: perPage
- in: query
- description: Items per page
- required: false
- example: 5
- schema:
- type: number
- - name: sort
- in: query
- description: Sort string (-/+)
- required: false
- example: '-created'
- schema:
- type: string
- - name: filter
- in: query
- description: >-
- Filter string
- (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)
- required: false
- example: name="abc"
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: author
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: my-key
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- page:
- type: integer
- perPage:
- type: integer
- totalItems:
- type: integer
- totalPages:
- type: integer
- items:
- type: array
- items:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- description:
- type: string
- icon:
- type: string
- id:
- type: string
- lat:
- type: number
- lon:
- type: number
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- updated:
- type: string
- required:
- - author
- - collectionId
- - collectionName
- - created
- - description
- - icon
- - id
- - lat
- - lon
- - name
- - photos
- - updated
- required:
- - page
- - perPage
- - totalItems
- - totalPages
- - items
- examples:
- '1':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 96
- totalPages: 20
- items:
- - author: 3mugf953w4a9fg5
- collectionId: goeo2ubp103rzp9
- collectionName: waypoints
- created: '2024-11-09 10:33:45.943Z'
- description: ''
- icon: circle
- id: 035691efaa5cf0a
- lat: 47.71415538
- lon: 11.98004365
- name: Kesselalm (1275 m)
- photos: []
- updated: '2024-11-09 10:33:45.943Z'
- - author: 3mugf953w4a9fg5
- collectionId: goeo2ubp103rzp9
- collectionName: waypoints
- created: '2024-10-06 09:33:11.379Z'
- description: ''
- icon: circle
- id: 04328b07923294e
- lat: 47.71415538
- lon: 11.98004365
- name: Kesselalm (1275 m)
- photos: []
- updated: '2024-10-06 09:33:11.379Z'
- - author: 3mugf953w4a9fg5
- collectionId: goeo2ubp103rzp9
- collectionName: waypoints
- created: '2024-11-09 10:31:37.884Z'
- description: ''
- icon: circle
- id: 056510042fb882d
- lat: 47.71215663291514
- lon: 11.964081572368741
- name: Birkenstein (850 m)
- photos: []
- updated: '2024-11-09 10:31:37.884Z'
- - author: 3mugf953w4a9fg5
- collectionId: goeo2ubp103rzp9
- collectionName: waypoints
- created: '2024-09-07 11:11:29.646Z'
- description: ''
- icon: circle
- id: 0b8bb0a2c97b669
- lat: 47.449586391448975
- lon: 11.238069534301758
- name: St. Anton (Restaurant)
- photos: []
- updated: '2024-09-07 11:11:29.646Z'
- - author: 3mugf953w4a9fg5
- collectionId: goeo2ubp103rzp9
- collectionName: waypoints
- created: '2024-09-07 11:11:29.459Z'
- description: ''
- icon: circle
- id: 0c4fb8ae0465eb1
- lat: 47.44074583053589
- lon: 11.212363243103027
- name: Ferchensee (Bushaltestelle)
- photos: []
- updated: '2024-09-07 11:11:29.459Z'
- '2':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 5
- totalPages: 1
- items:
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-20 21:43:09.964Z'
- id: 13ikooi1f6tgjvd
- rating: 0
- text: Comment
- trail: 267r63tmbyezpck
- updated: '2024-12-20 21:43:09.964Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-20 20:37:33.558Z'
- id: 1rjjl1riy4jrdmm
- rating: 0
- text: C
- trail: l4u85lr0x6jgojd
- updated: '2024-12-20 20:37:33.558Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: znhd3hgrxl85c9f
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-19 21:18:30.979Z'
- id: 6vcudpc4wgc0cku
- rating: 0
- text: Zehn Ziegen zogen zehn Zentner Zucker zum Zoo!
- trail: oual4h0zovut2ph
- updated: '2024-12-19 21:18:30.979Z'
- expand:
- author:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-02 17:43:26.303Z'
- id: p4r2x69bq7iz8ah
- rating: 0
- text: Geht das?
- trail: 6558yf0g9knodhv
- updated: '2024-12-02 17:43:26.303Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-21 00:37:08.033Z'
- id: vkwrak7tytf9vur
- rating: 0
- text: >-
- Anim minim consequat veniam ad laboris velit magna
- veniam dolor. Incididunt in non fugiat aliqua. Ullamco
- sint ipsum cupidatat Lorem deserunt id quis. Irure
- minim duis pariatur irure commodo non officia cillum
- et exercitation laborum. Enim nisi ipsum velit nisi.
- Consectetur et ad enim laboris.
-
-
- Lorem commodo ex deserunt deserunt fugiat et consequat
- sit ad consequat nulla quis reprehenderit. Commodo sit
- eu consequat reprehenderit elit labore Lorem pariatur
- enim do ad irure ex ad. Nisi magna irure est dolore
- elit laboris commodo consectetur sint aliquip sit. Do
- exercitation ullamco incididunt culpa eu dolore dolore
- sint esse laboris elit enim cillum excepteur. Sit
- veniam veniam ex deserunt Lorem Lorem ut incididunt
- dolor sint nulla eiusmod magna adipisicing.
- trail: 267r63tmbyezpck
- updated: '2024-12-21 00:37:08.033Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- headers: {}
- x-400:Invalid sort/expand/filter:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Something went wrong while processing your request.
- detail:
- code: 400
- message: Something went wrong while processing your request.
- data: {}
- headers: {}
- security: []
- put:
- summary: create
- deprecated: false
- description: 'Creates a waypoint. '
- operationId: createWaypoint
- tags:
- - waypoint
- parameters:
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request id. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- name:
- type: string
- description:
- type: string
- lat:
- type: number
- minimum: -90
- maximum: 90
- lon:
- type: number
- minimum: -180
- maximum: 180
- icon:
- type: string
- description: >-
- Fontawesome icon string
- (https://fontawesome.com/v6/search?o=r&m=free)
- author:
- type: string
- description: User Id
- minLength: 15
- maxLength: 15
- required:
- - lon
- - lat
- - author
- example:
- name: non repellat possimus
- description: >-
- Impedit modi nisi quibusdam eum rerum illo. Minus mollitia
- delectus vitae optio vero. Maiores praesentium dolores nostrum
- laborum saepe. Dolorem qui non. Dolorem dolores facere facere
- reiciendis ab doloribus.
- lat: -81.44545573482735
- lon: 178.9999004930424
- icon: pen
- author: 3mugf953w4a9fg5
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- description:
- type: string
- icon:
- type: string
- id:
- type: string
- lat:
- type: number
- lon:
- type: number
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- updated:
- type: string
- required:
- - author
- - collectionId
- - collectionName
- - created
- - description
- - icon
- - id
- - lat
- - lon
- - name
- - photos
- - updated
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- collectionId: goeo2ubp103rzp9
- collectionName: waypoints
- created: '2025-01-03 13:07:25.852Z'
- description: >-
- Impedit modi nisi quibusdam eum rerum illo. Minus mollitia
- delectus vitae optio vero. Maiores praesentium dolores
- nostrum laborum saepe. Dolorem qui non. Dolorem dolores
- facere facere reiciendis ab doloribus.
- icon: pen
- id: fjqcwd17fawiy83
- lat: -81.44545573482735
- lon: 178.9999004930424
- name: non repellat possimus
- photos: []
- updated: '2025-01-03 13:07:25.852Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties:
- author:
- type: object
- properties:
- code:
- type: string
- message:
- type: string
- required:
- - code
- - message
- required:
- - author
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Failed to create record.
- detail:
- code: 400
- message: Failed to create record.
- data:
- author:
- code: validation_missing_rel_records
- message: >-
- Failed to find all relation records with the
- provided ids.
- headers: {}
- x-400:Invalid Params:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- expected:
- type: string
- received:
- type: string
- path:
- type: array
- items:
- type: string
- message:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: invalid_type
- expected: string
- received: number
- path:
- - text
- message: Expected string, received number
- headers: {}
- security:
- - CookieAuth: []
- /list/{id}:
- get:
- summary: show
- deprecated: false
- description: Shows a single list.
- operationId: showList
- tags:
- - list
- parameters:
- - name: id
- in: path
- description: Comment Id
- required: true
- example: 4yql7587j64qdo5
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- avatar:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- description:
- type: string
- id:
- type: string
- name:
- type: string
- public:
- type: boolean
- trails:
- type: array
- items:
- type: string
- updated:
- type: string
- expand:
- type: object
- properties:
- author:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- required:
- - author
- required:
- - author
- - avatar
- - collectionId
- - collectionName
- - created
- - description
- - id
- - name
- - public
- - trails
- - updated
- - expand
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- avatar: ''
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2025-01-02 22:29:19.092Z'
- description: This list was updated by the wanderer API
- id: 4yql7587j64qdo5
- name: Updated API List
- public: false
- trails: []
- updated: '2025-01-02 22:39:36.944Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute Lorem in
- ullamco labore ex. Officia ea qui in exercitation
- amet. Consequat laboris id duis enim Lorem dolore
- fugiat excepteur sunt. Sint consectetur duis tempor
- deserunt non. Ex amet sunt eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur irure. Ea
- et reprehenderit ipsum adipisicing duis proident
- tempor esse excepteur dolor dolore anim consectetur
- aliqua. Laborum culpa eiusmod id ea consectetur do sit
- reprehenderit consequat voluptate mollit commodo.
- Ullamco aute ea minim enim et cupidatat ipsum cillum
- fugiat. Proident consectetur commodo Lorem do
- incididunt labore pariatur esse ea officia
- adipisicing. Do et sint culpa proident enim irure
- aliqua dolore magna. Laborum Lorem sunt amet occaecat
- occaecat mollit consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security: []
- post:
- summary: update
- deprecated: false
- description: Updates a list.
- operationId: updateList
- tags:
- - list
- parameters:
- - name: id
- in: path
- description: List Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- - name: Content-Type
- in: header
- description: ''
- required: true
- example: application/json
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- name:
- type: string
- description: Name of the list
- description:
- type: string
- description: Description of the list
- public:
- type: boolean
- description: Visible for everyone
- trails:
- type: array
- items:
- type: string
- description: Trail Id
- minLength: 15
- maxLength: 15
- description: List of trail Ids contained in the list
- minItems: 0
- example:
- name: API List
- description: A list created via the wanderer API
- public: true
- trails: []
- author: 3mugf953w4a9fg5
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- avatar:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- description:
- type: string
- id:
- type: string
- name:
- type: string
- public:
- type: boolean
- trails:
- type: array
- items:
- type: string
- updated:
- type: string
- required:
- - author
- - avatar
- - collectionId
- - collectionName
- - created
- - description
- - id
- - name
- - public
- - trails
- - updated
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- avatar: ''
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2025-01-02 22:29:19.092Z'
- description: This list was updated by the wanderer API
- id: 4yql7587j64qdo5
- name: Updated API List
- public: false
- trails: []
- updated: '2025-01-02 22:39:36.944Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- delete:
- summary: delete
- deprecated: false
- description: Deletes a list.
- operationId: deleteList
- tags:
- - list
- parameters:
- - name: id
- in: path
- description: List Id
- required: true
- example: 4yql7587j64qdo5
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- acknowledged:
- type: boolean
- required:
- - acknowledged
- examples:
- '1':
- summary: Success
- value:
- acknowledged: true
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /list:
- get:
- summary: list
- deprecated: false
- description: Lists all lists.
- operationId: listLists
- tags:
- - list
- parameters:
- - name: page
- in: query
- description: Page number starting at 1
- required: false
- example: 1
- schema:
- type: number
- - name: perPage
- in: query
- description: Items per page
- required: false
- example: 5
- schema:
- type: number
- - name: sort
- in: query
- description: Sort string (-/+)
- required: false
- example: '-created'
- schema:
- type: string
- - name: filter
- in: query
- description: >-
- Filter string
- (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)
- required: false
- example: name="abc"
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: author
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: my-key
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- page:
- type: integer
- perPage:
- type: integer
- totalItems:
- type: integer
- totalPages:
- type: integer
- items:
- type: array
- items:
- type: object
- properties:
- author:
- type: string
- avatar:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- description:
- type: string
- id:
- type: string
- name:
- type: string
- public:
- type: boolean
- trails:
- type: array
- items:
- type: string
- updated:
- type: string
- expand:
- type: object
- properties:
- author:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- required:
- - author
- required:
- - author
- - avatar
- - collectionId
- - collectionName
- - created
- - description
- - id
- - name
- - public
- - trails
- - updated
- - expand
- required:
- - page
- - perPage
- - totalItems
- - totalPages
- - items
- examples:
- '1':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 4
- totalPages: 1
- items:
- - author: 3mugf953w4a9fg5
- avatar: ''
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2025-01-02 22:29:19.092Z'
- description: This list was updated by the wanderer API
- id: 4yql7587j64qdo5
- name: Updated API List
- public: false
- trails: []
- updated: '2025-01-02 22:39:36.944Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- avatar: 640px_mont_saint_michel_vu_du_ciel_MvWoudBkPE.jpg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-09-09 22:10:07.972Z'
- description: "La Véloscénie is a 450-kilometre (280 mi) cycle route that takes you on an adventure from Paris to Mont-Saint-Michel on the Channel coast. From the capital to the beaches, passing through numerous hamlets and stunning towns such as Chartres, this journey westwards has many surprises in store.\r\n\r\nWe suggest you complete this journey in seven stages. This is a challenging pace, but should still leave you time to discover the many attractions en route. Cathedrals, castles, lakes, stunning landscapes and historic villages will show you that you don't have to wait for Mont-Saint-Michel to be amazed.\r\n\r\nThe itinerary alternates between little-used secondary roads, greenways and trails. This trip is best ridden on a bike that can handle rougher trails, like a touring, hybrid or gravel bike.\r\n\r\nParis is easy to reach from anywhere in France, but the choice is more limited if you want to leave from Mont-Saint-Michel. The nearest railway station is in Pontorson, 10 kilometres (6 mi) from Mont-Saint-Michel. From Pontorson, direct trains to Paris leave every evening, around 6pm on weekdays and at weekends, only between June and the end of September. Bikes can be taken on board free of charge by prior arrangement. Apart from this seasonal service, there are other ways of returning to Paris, with at least one train change required. For more information: veloscenic.com/reaching-the-veloscenic-cycle-route\r\n\r\nAlthough the route is accessible all year round, some accommodation and tourist attractions are likely to close in the low season, so it’s best to ride in spring or summer. While some stages end in big cities, others end in more rural areas and you’ll need to book your accommodation in advance. It’s not necessary to book restaurants along the route, but it is best to plan stops for refreshments, as not all the villages you pass through have restaurants or shops."
- id: bdv9iukn4d2lf2i
- name: From Paris to Mont-Saint-Michel — La Véloscénie
- public: false
- trails:
- - jou2tcf0y8jj9m3
- - ilyvsa4xr52lxlr
- - 2y8o7bwmor4yltt
- - gmh81mczhjp834l
- - 6hpvcyosmqr8uk8
- - iql9fifaxnb5u6m
- - y9hjysn5xhbmi86
- - fehuzqkfi49hkwn
- - fmin7pbj8urtxx0
- - 14y4qxqbqh0n10m
- - 6fv6krwusycttbl
- - 66jj108gizquc2r
- - wbuwzu8tp48hljg
- - x3lo6ru4ly753w6
- - h91u3vl8n5ekune
- - bzodytd0vd2e56g
- - oy1auygew9fvha0
- - 6atd6i73bzle0ar
- - iz2ohx9hbn8irrc
- - 2o9c3pxfvrzclud
- - btn09xkl7ab0n9k
- - ek2cb00tw4v4fav
- updated: '2024-12-27 00:55:25.917Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- avatar: dscn0010_xN987yGxE0.jpg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-12-30 17:41:00.152Z'
- description: Hallo
- id: dci7qk44birm2bn
- name: Liste mit Oachkatzerl
- public: true
- trails:
- - ovo0m6pxxjupfp9
- - yesm2tqc6jok8jq
- - z94vgei3jdc37k4
- updated: '2024-12-30 18:58:44.269Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- avatar: caret_right_solid_iUtggzDoh7.svg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-12-13 12:46:49.620Z'
- description: ''
- id: m59tuo2yyretv7z
- name: Flomp's List 2
- public: false
- trails:
- - ovo0m6pxxjupfp9
- updated: '2024-12-27 00:55:21.456Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 0
- type: number
- inclusive: false
- exact: false
- message: Number must be greater than 0
- path:
- - page
- headers: {}
- x-400:Invalid sort/expand/filter:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Something went wrong while processing your request.
- detail:
- code: 400
- message: Something went wrong while processing your request.
- data: {}
- headers: {}
- security: []
- put:
- summary: create
- deprecated: false
- description: 'Creates a list. '
- operationId: createList
- tags:
- - list
- parameters:
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request id. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- name:
- type: string
- description: Name of the list
- description:
- type: string
- description: Description of the list
- public:
- type: boolean
- description: Visible for everyone
- trails:
- type: array
- items:
- type: string
- description: Trail Id
- minLength: 15
- maxLength: 15
- description: List of trail Ids contained in the list
- minItems: 0
- author:
- type: string
- minLength: 15
- maxLength: 15
- description: User Id
- required:
- - name
- - public
- - trails
- - author
- example:
- name: API List
- description: A list created via the wanderer API
- public: true
- trails: []
- author: 3mugf953w4a9fg5
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- avatar:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- description:
- type: string
- id:
- type: string
- name:
- type: string
- public:
- type: boolean
- trails:
- type: array
- items:
- type: string
- updated:
- type: string
- required:
- - author
- - avatar
- - collectionId
- - collectionName
- - created
- - description
- - id
- - name
- - public
- - trails
- - updated
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- avatar: ''
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2025-01-02 22:29:19.092Z'
- description: A list created via the wanderer API
- id: 4yql7587j64qdo5
- name: API List
- public: true
- trails: []
- updated: '2025-01-02 22:29:19.092Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties:
- author:
- type: object
- properties:
- code:
- type: string
- message:
- type: string
- required:
- - code
- - message
- required:
- - author
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Failed to create record.
- detail:
- code: 400
- message: Failed to create record.
- data:
- author:
- code: validation_missing_rel_records
- message: >-
- Failed to find all relation records with the
- provided ids.
- headers: {}
- x-400:Invalid Params:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- expected:
- type: string
- received:
- type: string
- path:
- type: array
- items:
- type: string
- message:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: invalid_type
- expected: string
- received: number
- path:
- - name
- message: Expected string, received number
- headers: {}
- security:
- - CookieAuth: []
- /list/{id}/file:
- post:
- summary: file
- deprecated: false
- description: Uploads an avatar file for a list.
- operationId: fileList
- tags:
- - list
- parameters:
- - name: id
- in: path
- description: List Id
- required: true
- example: 4yql7587j64qdo5
- schema:
- type: string
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- avatar:
- type: string
- format: binary
- description: 'Avatar image file. Allowed file types: PNG, JPG, WEBP, SVG'
- example: >-
- file:///Users/christianbeutel/Downloads/23xxesym0e9w18z2904frnpgy7.jpg
- required:
- - avatar
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- avatar:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- description:
- type: string
- id:
- type: string
- name:
- type: string
- public:
- type: boolean
- trails:
- type: array
- items:
- type: string
- updated:
- type: string
- required:
- - author
- - avatar
- - collectionId
- - collectionName
- - created
- - description
- - id
- - name
- - public
- - trails
- - updated
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- avatar: 23xxesym0e9w18z2904frnpgy7_bmAvN4NpoA.jpg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-12-13 12:46:49.620Z'
- description: ''
- id: m59tuo2yyretv7z
- name: Flomp's List 2
- public: false
- trails:
- - ovo0m6pxxjupfp9
- updated: '2025-01-02 23:06:30.788Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /list-share/{id}:
- get:
- summary: show
- deprecated: false
- description: Shows a single list share.
- operationId: showListShare
- tags:
- - list-share
- parameters:
- - name: id
- in: path
- description: List Share Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- list:
- type: string
- permission:
- type: string
- updated:
- type: string
- user:
- type: string
- required:
- - collectionId
- - collectionName
- - created
- - id
- - list
- - permission
- - updated
- - user
- examples:
- '1':
- summary: Success
- value:
- collectionId: 1kot7t9na3hi0gl
- collectionName: list_share
- created: '2024-11-15 16:34:15.333Z'
- id: xjn56wlra4rqdtl
- list: bdv9iukn4d2lf2i
- permission: view
- updated: '2024-11-15 16:34:15.333Z'
- user: znhd3hgrxl85c9f
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- post:
- summary: update
- deprecated: false
- description: Updates a list share.
- operationId: updateListShare
- tags:
- - list-share
- parameters:
- - name: id
- in: path
- description: List Share Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- - name: Content-Type
- in: header
- description: ''
- required: true
- example: application/json
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- permission:
- type: string
- enum:
- - view
- - edit
- example:
- permission: view
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- list:
- type: string
- permission:
- type: string
- updated:
- type: string
- user:
- type: string
- required:
- - collectionId
- - collectionName
- - created
- - id
- - list
- - permission
- - updated
- - user
- examples:
- '1':
- summary: Success
- value:
- collectionId: 1kot7t9na3hi0gl
- collectionName: list_share
- created: '2025-01-03 10:36:23.596Z'
- id: r8r938af52vdae1
- list: dci7qk44birm2bn
- permission: edit
- updated: '2025-01-03 10:39:28.597Z'
- user: znhd3hgrxl85c9f
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- delete:
- summary: delete
- deprecated: false
- description: Deletes a list share.
- operationId: deleteListShare
- tags:
- - list-share
- parameters:
- - name: id
- in: path
- description: List Share Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- acknowledged:
- type: boolean
- required:
- - acknowledged
- examples:
- '1':
- summary: Success
- value:
- acknowledged: true
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /list-share:
- put:
- summary: create
- deprecated: false
- description: 'Creates a list share. '
- operationId: createListShare
- tags:
- - list-share
- parameters:
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request id. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- list:
- type: string
- minLength: 15
- maxLength: 15
- description: List Id
- user:
- type: string
- minLength: 15
- maxLength: 15
- description: User Id
- permission:
- type: string
- enum:
- - view
- - edit
- description: Permissions for user
- required:
- - list
- - user
- - permission
- example:
- list: dci7qk44birm2bn
- user: z014o6bpcg680mg
- permission: view
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- expand:
- type: object
- properties:
- list:
- type: object
- properties:
- author:
- type: string
- avatar:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- description:
- type: string
- expand:
- type: object
- properties:
- author:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- emailVisibility:
- type: boolean
- id:
- type: string
- token:
- type: string
- updated:
- type: string
- username:
- type: string
- verified:
- type: boolean
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - emailVisibility
- - id
- - token
- - updated
- - username
- - verified
- required:
- - author
- id:
- type: string
- name:
- type: string
- public:
- type: boolean
- trails:
- type: array
- items:
- type: string
- updated:
- type: string
- required:
- - author
- - avatar
- - collectionId
- - collectionName
- - created
- - description
- - expand
- - id
- - name
- - public
- - trails
- - updated
- required:
- - list
- id:
- type: string
- list:
- type: string
- permission:
- type: string
- updated:
- type: string
- user:
- type: string
- required:
- - collectionId
- - collectionName
- - created
- - expand
- - id
- - list
- - permission
- - updated
- - user
- examples:
- '1':
- summary: Success
- value:
- collectionId: 1kot7t9na3hi0gl
- collectionName: list_share
- created: '2025-01-03 10:36:23.596Z'
- expand:
- list:
- author: 3mugf953w4a9fg5
- avatar: dscn0010_xN987yGxE0.jpg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-12-30 17:41:00.152Z'
- description: Hallo
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: _pb_users_auth_
- collectionName: users
- created: '2024-06-29 19:23:47.731Z'
- emailVisibility: false
- id: 3mugf953w4a9fg5
- token: >-
- eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA
- updated: '2024-12-30 18:36:39.161Z'
- username: Flomp
- verified: true
- id: dci7qk44birm2bn
- name: Liste mit Oachkatzerl
- public: true
- trails:
- - ovo0m6pxxjupfp9
- - yesm2tqc6jok8jq
- - z94vgei3jdc37k4
- updated: '2024-12-30 18:58:44.269Z'
- id: r8r938af52vdae1
- list: dci7qk44birm2bn
- permission: view
- updated: '2025-01-03 10:36:23.596Z'
- user: znhd3hgrxl85c9f
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties:
- author:
- type: object
- properties:
- code:
- type: string
- message:
- type: string
- required:
- - code
- - message
- required:
- - author
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Failed to create record.
- detail:
- code: 400
- message: Failed to create record.
- data:
- author:
- code: validation_missing_rel_records
- message: >-
- Failed to find all relation records with the
- provided ids.
- headers: {}
- x-400:Invalid Params:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- expected:
- type: string
- received:
- type: string
- path:
- type: array
- items:
- type: string
- message:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: invalid_type
- expected: string
- received: number
- path:
- - text
- message: Expected string, received number
- headers: {}
- security:
- - CookieAuth: []
- get:
- summary: list
- deprecated: false
- description: Lists all list-shares.
- operationId: listListShares
- tags:
- - list-share
- parameters:
- - name: page
- in: query
- description: Page number starting at 1
- required: false
- example: 1
- schema:
- type: number
- - name: perPage
- in: query
- description: Items per page
- required: false
- example: 5
- schema:
- type: number
- - name: sort
- in: query
- description: Sort string (-/+)
- required: false
- example: '-created'
- schema:
- type: string
- - name: filter
- in: query
- description: >-
- Filter string
- (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)
- required: false
- example: permission="view"
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: user
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: my-key
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- page:
- type: integer
- perPage:
- type: integer
- totalItems:
- type: integer
- totalPages:
- type: integer
- items:
- type: array
- items:
- type: object
- properties:
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- list:
- type: string
- permission:
- type: string
- updated:
- type: string
- user:
- type: string
- expand:
- type: object
- properties:
- user:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- required:
- - user
- required:
- - page
- - perPage
- - totalItems
- - totalPages
- - items
- examples:
- '1':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 1
- totalPages: 1
- items:
- - collectionId: 1kot7t9na3hi0gl
- collectionName: list_share
- created: '2024-11-15 16:34:15.333Z'
- id: xjn56wlra4rqdtl
- list: bdv9iukn4d2lf2i
- permission: view
- updated: '2024-11-15 16:34:15.333Z'
- user: znhd3hgrxl85c9f
- expand:
- user:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- '2':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 5
- totalPages: 1
- items:
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-20 21:43:09.964Z'
- id: 13ikooi1f6tgjvd
- rating: 0
- text: Comment
- trail: 267r63tmbyezpck
- updated: '2024-12-20 21:43:09.964Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-20 20:37:33.558Z'
- id: 1rjjl1riy4jrdmm
- rating: 0
- text: C
- trail: l4u85lr0x6jgojd
- updated: '2024-12-20 20:37:33.558Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: znhd3hgrxl85c9f
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-19 21:18:30.979Z'
- id: 6vcudpc4wgc0cku
- rating: 0
- text: Zehn Ziegen zogen zehn Zentner Zucker zum Zoo!
- trail: oual4h0zovut2ph
- updated: '2024-12-19 21:18:30.979Z'
- expand:
- author:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-02 17:43:26.303Z'
- id: p4r2x69bq7iz8ah
- rating: 0
- text: Geht das?
- trail: 6558yf0g9knodhv
- updated: '2024-12-02 17:43:26.303Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- collectionId: lf06qip3f4d11yk
- collectionName: comments
- created: '2024-12-21 00:37:08.033Z'
- id: vkwrak7tytf9vur
- rating: 0
- text: >-
- Anim minim consequat veniam ad laboris velit magna
- veniam dolor. Incididunt in non fugiat aliqua. Ullamco
- sint ipsum cupidatat Lorem deserunt id quis. Irure
- minim duis pariatur irure commodo non officia cillum
- et exercitation laborum. Enim nisi ipsum velit nisi.
- Consectetur et ad enim laboris.
-
-
- Lorem commodo ex deserunt deserunt fugiat et consequat
- sit ad consequat nulla quis reprehenderit. Commodo sit
- eu consequat reprehenderit elit labore Lorem pariatur
- enim do ad irure ex ad. Nisi magna irure est dolore
- elit laboris commodo consectetur sint aliquip sit. Do
- exercitation ullamco incididunt culpa eu dolore dolore
- sint esse laboris elit enim cillum excepteur. Sit
- veniam veniam ex deserunt Lorem Lorem ut incididunt
- dolor sint nulla eiusmod magna adipisicing.
- trail: 267r63tmbyezpck
- updated: '2024-12-21 00:37:08.033Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- headers: {}
- x-400:Invalid sort/expand/filter:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Something went wrong while processing your request.
- detail:
- code: 400
- message: Something went wrong while processing your request.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /notification:
- get:
- summary: list
- deprecated: false
- description: Lists all notifications.
- operationId: listNotifications
- tags:
- - notification
- parameters:
- - name: page
- in: query
- description: Page number starting at 1
- required: false
- example: 1
- schema:
- type: number
- - name: perPage
- in: query
- description: Items per page
- required: false
- example: 5
- schema:
- type: number
- - name: sort
- in: query
- description: Sort string (-/+)
- required: false
- example: '-created'
- schema:
- type: string
- - name: filter
- in: query
- description: >-
- Filter string
- (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)
- required: false
- example: recipient="r8r938af52vdae1"
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: author
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: my-key
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- page:
- type: integer
- perPage:
- type: integer
- totalItems:
- type: integer
- totalPages:
- type: integer
- items:
- type: array
- items:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- metadata:
- type: object
- properties:
- author:
- type: string
- id:
- type: string
- list:
- type: string
- required:
- - author
- - id
- - list
- recipient:
- type: string
- seen:
- type: boolean
- type:
- type: string
- updated:
- type: string
- expand:
- type: object
- properties:
- recipient:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- author:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- required:
- - recipient
- - author
- required:
- - page
- - perPage
- - totalItems
- - totalPages
- - items
- examples:
- '1':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 1
- totalPages: 1
- items:
- - author: znhd3hgrxl85c9f
- collectionId: khrcci2uqknny8h
- collectionName: notifications
- created: '2025-01-03 10:36:23.603Z'
- id: yu9vp1kbid56s6u
- metadata:
- author: Flomp
- id: dci7qk44birm2bn
- list: Liste mit Oachkatzerl
- recipient: 3mugf953w4a9fg5
- seen: false
- type: list_share
- updated: '2025-01-03 10:49:22.945Z'
- expand:
- recipient:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- author:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- '2':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 4
- totalPages: 1
- items:
- - author: 3mugf953w4a9fg5
- avatar: ''
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2025-01-02 22:29:19.092Z'
- description: This list was updated by the wanderer API
- id: 4yql7587j64qdo5
- name: Updated API List
- public: false
- trails: []
- updated: '2025-01-02 22:39:36.944Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- avatar: 640px_mont_saint_michel_vu_du_ciel_MvWoudBkPE.jpg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-09-09 22:10:07.972Z'
- description: "La Véloscénie is a 450-kilometre (280 mi) cycle route that takes you on an adventure from Paris to Mont-Saint-Michel on the Channel coast. From the capital to the beaches, passing through numerous hamlets and stunning towns such as Chartres, this journey westwards has many surprises in store.\r\n\r\nWe suggest you complete this journey in seven stages. This is a challenging pace, but should still leave you time to discover the many attractions en route. Cathedrals, castles, lakes, stunning landscapes and historic villages will show you that you don't have to wait for Mont-Saint-Michel to be amazed.\r\n\r\nThe itinerary alternates between little-used secondary roads, greenways and trails. This trip is best ridden on a bike that can handle rougher trails, like a touring, hybrid or gravel bike.\r\n\r\nParis is easy to reach from anywhere in France, but the choice is more limited if you want to leave from Mont-Saint-Michel. The nearest railway station is in Pontorson, 10 kilometres (6 mi) from Mont-Saint-Michel. From Pontorson, direct trains to Paris leave every evening, around 6pm on weekdays and at weekends, only between June and the end of September. Bikes can be taken on board free of charge by prior arrangement. Apart from this seasonal service, there are other ways of returning to Paris, with at least one train change required. For more information: veloscenic.com/reaching-the-veloscenic-cycle-route\r\n\r\nAlthough the route is accessible all year round, some accommodation and tourist attractions are likely to close in the low season, so it’s best to ride in spring or summer. While some stages end in big cities, others end in more rural areas and you’ll need to book your accommodation in advance. It’s not necessary to book restaurants along the route, but it is best to plan stops for refreshments, as not all the villages you pass through have restaurants or shops."
- id: bdv9iukn4d2lf2i
- name: From Paris to Mont-Saint-Michel — La Véloscénie
- public: false
- trails:
- - jou2tcf0y8jj9m3
- - ilyvsa4xr52lxlr
- - 2y8o7bwmor4yltt
- - gmh81mczhjp834l
- - 6hpvcyosmqr8uk8
- - iql9fifaxnb5u6m
- - y9hjysn5xhbmi86
- - fehuzqkfi49hkwn
- - fmin7pbj8urtxx0
- - 14y4qxqbqh0n10m
- - 6fv6krwusycttbl
- - 66jj108gizquc2r
- - wbuwzu8tp48hljg
- - x3lo6ru4ly753w6
- - h91u3vl8n5ekune
- - bzodytd0vd2e56g
- - oy1auygew9fvha0
- - 6atd6i73bzle0ar
- - iz2ohx9hbn8irrc
- - 2o9c3pxfvrzclud
- - btn09xkl7ab0n9k
- - ek2cb00tw4v4fav
- updated: '2024-12-27 00:55:25.917Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- avatar: dscn0010_xN987yGxE0.jpg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-12-30 17:41:00.152Z'
- description: Hallo
- id: dci7qk44birm2bn
- name: Liste mit Oachkatzerl
- public: true
- trails:
- - ovo0m6pxxjupfp9
- - yesm2tqc6jok8jq
- - z94vgei3jdc37k4
- updated: '2024-12-30 18:58:44.269Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- avatar: caret_right_solid_iUtggzDoh7.svg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-12-13 12:46:49.620Z'
- description: ''
- id: m59tuo2yyretv7z
- name: Flomp's List 2
- public: false
- trails:
- - ovo0m6pxxjupfp9
- updated: '2024-12-27 00:55:21.456Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- headers: {}
- x-400:Invalid sort/expand/filter:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Something went wrong while processing your request.
- detail:
- code: 400
- message: Something went wrong while processing your request.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /notification/{id}:
- post:
- summary: update
- deprecated: false
- description: Marks a notification as seen.
- operationId: updateNotification
- tags:
- - notification
- parameters:
- - name: id
- in: path
- description: Notification Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- - name: Content-Type
- in: header
- description: ''
- required: true
- example: application/json
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- seen:
- type: boolean
- default: true
- required:
- - seen
- example:
- seen: true
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- metadata:
- type: object
- properties:
- author:
- type: string
- id:
- type: string
- list:
- type: string
- required:
- - author
- - id
- - list
- recipient:
- type: string
- seen:
- type: boolean
- type:
- type: string
- updated:
- type: string
- required:
- - author
- - collectionId
- - collectionName
- - created
- - id
- - metadata
- - recipient
- - seen
- - type
- - updated
- examples:
- '1':
- summary: Success
- value:
- author: znhd3hgrxl85c9f
- collectionId: khrcci2uqknny8h
- collectionName: notifications
- created: '2025-01-03 10:36:23.603Z'
- id: yu9vp1kbid56s6u
- metadata:
- author: Flomp
- id: dci7qk44birm2bn
- list: Liste mit Oachkatzerl
- recipient: 3mugf953w4a9fg5
- seen: true
- type: list_share
- updated: '2025-01-03 10:57:22.899Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /summit-log:
- get:
- summary: list
- deprecated: false
- description: Lists all summit logs.
- operationId: listSummitLogs
- tags:
- - summit-log
- parameters:
- - name: page
- in: query
- description: Page number starting at 1
- required: false
- example: 1
- schema:
- type: number
- - name: perPage
- in: query
- description: Items per page
- required: false
- example: 5
- schema:
- type: number
- - name: sort
- in: query
- description: Sort string (-/+)
- required: false
- example: '-created'
- schema:
- type: string
- - name: filter
- in: query
- description: >-
- Filter string
- (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)
- required: false
- example: distance>=500
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: author
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: my-key
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- page:
- type: integer
- perPage:
- type: integer
- totalItems:
- type: integer
- totalPages:
- type: integer
- items:
- type: array
- items:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- distance:
- type: integer
- duration:
- type: integer
- elevation_gain:
- type: integer
- elevation_loss:
- type: integer
- gpx:
- type: string
- id:
- type: string
- photos:
- type: array
- items:
- type: string
- text:
- type: string
- updated:
- type: string
- required:
- - author
- - collectionId
- - collectionName
- - created
- - date
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - photos
- - text
- - updated
- required:
- - page
- - perPage
- - totalItems
- - totalPages
- - items
- examples:
- '1':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 14
- totalPages: 3
- items:
- - author: 3mugf953w4a9fg5
- collectionId: dd2l9a4vxpy2ni8
- collectionName: summit_logs
- created: '2024-12-02 00:06:13.761Z'
- date: '2024-12-02 00:00:00.000Z'
- distance: 0
- duration: 0
- elevation_gain: 0
- elevation_loss: 0
- gpx: ''
- id: 22879d2ce902f57
- photos:
- - wanderer_stats_QbRDtbqXp8.png
- text: Heute war auch nicht schlecht!
- updated: '2024-12-02 00:06:13.802Z'
- - author: 3mugf953w4a9fg5
- collectionId: dd2l9a4vxpy2ni8
- collectionName: summit_logs
- created: '2024-11-11 15:34:42.149Z'
- date: '2024-11-11 00:00:00.000Z'
- distance: 0
- duration: 0
- elevation_gain: 0
- elevation_loss: 0
- gpx: ''
- id: 282aa2f6aa2901d
- photos: []
- text: ''
- updated: '2024-11-11 15:34:42.149Z'
- - author: 3mugf953w4a9fg5
- collectionId: dd2l9a4vxpy2ni8
- collectionName: summit_logs
- created: '2024-12-30 18:42:22.407Z'
- date: '2010-06-26 00:00:00.000Z'
- distance: 17.272892451353634
- duration: 19
- elevation_gain: 0.48071279999999916
- elevation_loss: 3.845214800000001
- gpx: blob_li_rt_ludnm5_CTr98mgc40.tcx
- id: 4p1gjllhdrhnuyr
- photos: []
- text: ''
- updated: '2024-12-30 18:42:22.463Z'
- - author: 3mugf953w4a9fg5
- collectionId: dd2l9a4vxpy2ni8
- collectionName: summit_logs
- created: '2024-12-26 21:35:23.376Z'
- date: '2024-12-26 00:00:00.000Z'
- distance: 14055.576293821563
- duration: 5060
- elevation_gain: 1197
- elevation_loss: 1194
- gpx: herzogstand_4uFe02QqSL.gpx
- id: 5yftqj5opprl9ju
- photos:
- - 23xxesym0e9w18z2904frnpgy7_hR8ogccdVG.jpg
- text: ''
- updated: '2024-12-26 21:35:23.458Z'
- - author: 3mugf953w4a9fg5
- collectionId: dd2l9a4vxpy2ni8
- collectionName: summit_logs
- created: '2024-11-05 22:05:43.778Z'
- date: '2024-11-02 00:00:00.000Z'
- distance: 12452.945922907797
- duration: 16993
- elevation_gain: 770.0000000000002
- elevation_loss: 770.4800000000002
- gpx: kranzberg_tzNjcOwhf2.gpx
- id: 7072f62edbb8e62
- photos: []
- text: ''
- updated: '2024-11-05 22:06:19.100Z'
- '2':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 4
- totalPages: 1
- items:
- - author: 3mugf953w4a9fg5
- avatar: ''
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2025-01-02 22:29:19.092Z'
- description: This list was updated by the wanderer API
- id: 4yql7587j64qdo5
- name: Updated API List
- public: false
- trails: []
- updated: '2025-01-02 22:39:36.944Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- avatar: 640px_mont_saint_michel_vu_du_ciel_MvWoudBkPE.jpg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-09-09 22:10:07.972Z'
- description: "La Véloscénie is a 450-kilometre (280 mi) cycle route that takes you on an adventure from Paris to Mont-Saint-Michel on the Channel coast. From the capital to the beaches, passing through numerous hamlets and stunning towns such as Chartres, this journey westwards has many surprises in store.\r\n\r\nWe suggest you complete this journey in seven stages. This is a challenging pace, but should still leave you time to discover the many attractions en route. Cathedrals, castles, lakes, stunning landscapes and historic villages will show you that you don't have to wait for Mont-Saint-Michel to be amazed.\r\n\r\nThe itinerary alternates between little-used secondary roads, greenways and trails. This trip is best ridden on a bike that can handle rougher trails, like a touring, hybrid or gravel bike.\r\n\r\nParis is easy to reach from anywhere in France, but the choice is more limited if you want to leave from Mont-Saint-Michel. The nearest railway station is in Pontorson, 10 kilometres (6 mi) from Mont-Saint-Michel. From Pontorson, direct trains to Paris leave every evening, around 6pm on weekdays and at weekends, only between June and the end of September. Bikes can be taken on board free of charge by prior arrangement. Apart from this seasonal service, there are other ways of returning to Paris, with at least one train change required. For more information: veloscenic.com/reaching-the-veloscenic-cycle-route\r\n\r\nAlthough the route is accessible all year round, some accommodation and tourist attractions are likely to close in the low season, so it’s best to ride in spring or summer. While some stages end in big cities, others end in more rural areas and you’ll need to book your accommodation in advance. It’s not necessary to book restaurants along the route, but it is best to plan stops for refreshments, as not all the villages you pass through have restaurants or shops."
- id: bdv9iukn4d2lf2i
- name: From Paris to Mont-Saint-Michel — La Véloscénie
- public: false
- trails:
- - jou2tcf0y8jj9m3
- - ilyvsa4xr52lxlr
- - 2y8o7bwmor4yltt
- - gmh81mczhjp834l
- - 6hpvcyosmqr8uk8
- - iql9fifaxnb5u6m
- - y9hjysn5xhbmi86
- - fehuzqkfi49hkwn
- - fmin7pbj8urtxx0
- - 14y4qxqbqh0n10m
- - 6fv6krwusycttbl
- - 66jj108gizquc2r
- - wbuwzu8tp48hljg
- - x3lo6ru4ly753w6
- - h91u3vl8n5ekune
- - bzodytd0vd2e56g
- - oy1auygew9fvha0
- - 6atd6i73bzle0ar
- - iz2ohx9hbn8irrc
- - 2o9c3pxfvrzclud
- - btn09xkl7ab0n9k
- - ek2cb00tw4v4fav
- updated: '2024-12-27 00:55:25.917Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- avatar: dscn0010_xN987yGxE0.jpg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-12-30 17:41:00.152Z'
- description: Hallo
- id: dci7qk44birm2bn
- name: Liste mit Oachkatzerl
- public: true
- trails:
- - ovo0m6pxxjupfp9
- - yesm2tqc6jok8jq
- - z94vgei3jdc37k4
- updated: '2024-12-30 18:58:44.269Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- avatar: caret_right_solid_iUtggzDoh7.svg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-12-13 12:46:49.620Z'
- description: ''
- id: m59tuo2yyretv7z
- name: Flomp's List 2
- public: false
- trails:
- - ovo0m6pxxjupfp9
- updated: '2024-12-27 00:55:21.456Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- headers: {}
- x-400:Invalid sort/expand/filter:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Something went wrong while processing your request.
- detail:
- code: 400
- message: Something went wrong while processing your request.
- data: {}
- headers: {}
- security: []
- put:
- summary: create
- deprecated: false
- description: 'Creates a summit log. '
- operationId: createSummitLog
- tags:
- - summit-log
- parameters:
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request id. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- date:
- type: string
- description: Date of the summit log
- format: date
- text:
- type: string
- description: Description of the summit log
- distance:
- type: number
- minimum: 0
- description: Distance in meters
- elevation_gain:
- type: number
- minimum: 0
- description: Elevation gain in vertical meters
- elevation_loss:
- type: number
- minimum: 0
- description: Elevation loss in vertical meters
- duration:
- type: number
- minimum: 0
- description: Duration in seconds
- author:
- type: string
- description: User Id
- minLength: 15
- maxLength: 15
- required:
- - date
- - author
- example:
- date: '2025-01-01'
- text: Created by wanderer API
- distance: 12
- elevation_gain: 34
- elevation_loss: 42
- duration: 21
- author: 3mugf953w4a9fg5
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- distance:
- type: integer
- duration:
- type: integer
- elevation_gain:
- type: integer
- elevation_loss:
- type: integer
- gpx:
- type: string
- id:
- type: string
- photos:
- type: array
- items:
- type: string
- text:
- type: string
- updated:
- type: string
- required:
- - author
- - collectionId
- - collectionName
- - created
- - date
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - photos
- - text
- - updated
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- collectionId: dd2l9a4vxpy2ni8
- collectionName: summit_logs
- created: '2025-01-03 09:56:37.620Z'
- date: '2025-01-01 00:00:00.000Z'
- distance: 12
- duration: 21
- elevation_gain: 34
- elevation_loss: 42
- gpx: ''
- id: 58iuq9j30qbbwmq
- photos: []
- text: Created by wanderer API
- updated: '2025-01-03 09:56:37.620Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties:
- author:
- type: object
- properties:
- code:
- type: string
- message:
- type: string
- required:
- - code
- - message
- required:
- - author
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Failed to create record.
- detail:
- code: 400
- message: Failed to create record.
- data:
- author:
- code: validation_missing_rel_records
- message: >-
- Failed to find all relation records with the
- provided ids.
- headers: {}
- x-400:Invalid Params:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- validation:
- type: string
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - code
- - message
- - path
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: invalid_string
- validation: date
- message: Invalid date
- path:
- - date
- - code: custom
- message: invalid-date
- path:
- - date
- headers: {}
- security:
- - CookieAuth: []
- /summit-log/{id}:
- get:
- summary: show
- deprecated: false
- description: Shows a single summit log.
- operationId: showSummitLog
- tags:
- - summit-log
- parameters:
- - name: id
- in: path
- description: Summit Log Id
- required: true
- example: 95bb1d77c8dfa98
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- distance:
- type: number
- duration:
- type: integer
- elevation_gain:
- type: integer
- elevation_loss:
- type: integer
- gpx:
- type: string
- id:
- type: string
- photos:
- type: array
- items:
- type: string
- text:
- type: string
- updated:
- type: string
- expand:
- type: object
- properties:
- author:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- required:
- - author
- required:
- - author
- - collectionId
- - collectionName
- - created
- - date
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - photos
- - text
- - updated
- - expand
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- collectionId: dd2l9a4vxpy2ni8
- collectionName: summit_logs
- created: '2024-12-30 18:58:04.809Z'
- date: '2024-12-10 00:00:00.000Z'
- distance: 283396.31855792465
- duration: 0
- elevation_gain: 0
- elevation_loss: 0
- gpx: 2024_10_22_04_28_2024_10_22_21_29_AicYbqRkLD.gpx
- id: 95bb1d77c8dfa98
- photos:
- - dscn0010_7MuzM5ExLa.jpg
- - caret_right_solid_OLanLqeV1l.svg
- text: ''
- updated: '2024-12-30 18:59:56.822Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute Lorem in
- ullamco labore ex. Officia ea qui in exercitation
- amet. Consequat laboris id duis enim Lorem dolore
- fugiat excepteur sunt. Sint consectetur duis tempor
- deserunt non. Ex amet sunt eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur irure. Ea
- et reprehenderit ipsum adipisicing duis proident
- tempor esse excepteur dolor dolore anim consectetur
- aliqua. Laborum culpa eiusmod id ea consectetur do sit
- reprehenderit consequat voluptate mollit commodo.
- Ullamco aute ea minim enim et cupidatat ipsum cillum
- fugiat. Proident consectetur commodo Lorem do
- incididunt labore pariatur esse ea officia
- adipisicing. Do et sint culpa proident enim irure
- aliqua dolore magna. Laborum Lorem sunt amet occaecat
- occaecat mollit consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security: []
- post:
- summary: update
- deprecated: false
- description: Updates a summit log.
- operationId: updateSummitLog
- tags:
- - summit-log
- parameters:
- - name: id
- in: path
- description: Summit Log Id
- required: true
- example: 6vcudpc4wgc0ckk
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- - name: Content-Type
- in: header
- description: ''
- required: true
- example: application/json
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- date:
- type: string
- description: Date of the summit log
- format: date
- text:
- type: string
- description: Description of the summit log
- distance:
- type: number
- minimum: 0
- description: Distance in meters
- elevation_gain:
- type: number
- minimum: 0
- description: Elevation gain in vertical meters
- elevation_loss:
- type: number
- minimum: 0
- description: Elevation loss in vertical meters
- duration:
- type: number
- minimum: 0
- description: Duration in seconds
- example: |-
- {
- "date": "2025-12-12",
- "text": "Updated by wanderer API",
- "distance": 32,
- "elevation_gain": 45,
- "elevation_loss": 21,
- "duration": 29,
+{
+ "openapi": "3.0.1",
+ "info": {
+ "title": "wanderer",
+ "description": "",
+ "version": "1.0.0"
+ },
+ "tags": [
+ {
+ "name": "auth"
+ },
+ {
+ "name": "category"
+ },
+ {
+ "name": "comment"
+ },
+ {
+ "name": "follow"
+ },
+ {
+ "name": "trail-share"
+ },
+ {
+ "name": "user"
+ },
+ {
+ "name": "waypoint"
+ },
+ {
+ "name": "list"
+ },
+ {
+ "name": "list-share"
+ },
+ {
+ "name": "notification"
+ },
+ {
+ "name": "summit-log"
+ },
+ {
+ "name": "trail"
+ }
+ ],
+ "paths": {
+ "/activitypub/activity/{id}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "",
+ "tags": [],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "",
+ "required": true,
+ "example": "",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/activity+json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "actor": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "to": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "cc": {
+ "type": "string"
+ },
+ "published": {
+ "type": "string"
+ },
+ "object": {
+ "type": "object",
+ "properties": {},
+ "description": "ActivityPub object"
+ }
+ },
+ "required": [
+ "id",
+ "actor",
+ "to",
+ "cc",
+ "published",
+ "object",
+ "type"
+ ]
+ }
}
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- distance:
- type: number
- duration:
- type: number
- elevation_gain:
- type: number
- elevation_loss:
- type: number
- gpx:
- type: string
- id:
- type: string
- photos:
- type: array
- items:
- type: string
- text:
- type: string
- updated:
- type: string
- required:
- - author
- - collectionId
- - collectionName
- - created
- - date
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - photos
- - text
- - updated
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- collectionId: dd2l9a4vxpy2ni8
- collectionName: summit_logs
- created: '2025-01-03 09:56:37.620Z'
- date: '2025-01-02 00:00:00.000Z'
- distance: 36983010.25256769
- duration: 68163654.92949024
- elevation_gain: 44389248.880456366
- elevation_loss: 6494274.720874871
- gpx: ''
- id: 58iuq9j30qbbwmq
- photos: []
- text: et magna veniam anim cillum
- updated: '2025-01-03 10:11:22.553Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- delete:
- summary: delete
- deprecated: false
- description: Deletes a summit log.
- operationId: deleteSummitLog
- tags:
- - summit-log
- parameters:
- - name: id
- in: path
- description: Summit Log Id
- required: true
- example: 4yql7587j64qdo5
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- acknowledged:
- type: boolean
- required:
- - acknowledged
- examples:
- '1':
- summary: Success
- value:
- acknowledged: true
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /summit-log/{id}/file:
- post:
- summary: file
- deprecated: false
- description: Uploads or removes photos, uploads GPS data file for a summit log.
- operationId: fileSummitLog
- tags:
- - summit-log
- parameters:
- - name: id
- in: path
- description: Summit Log Id
- required: true
- example: 4yql7587j64qdo5
- schema:
- type: string
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- photos:
- format: binary
- type: string
- description: >-
- List of image files to add. Allowed file types: PNG, JPG,
- WEBP, SVG
- example:
- - ''
- photos-:
- type: array
- items:
- type: string
- description: List of file names to delete.
- example: ''
- gpx:
- type: string
- format: binary
- minLength: 0
- maxLength: 1
- description: >-
- File containing GPS track data. Allowed file types: GPX,
- JSON, FIT, KML
- example: >-
- file:///Users/christianbeutel/Downloads/2021-10-24_536064034_Essen-Mitte.nach.Bochum-Hauptbahnhof.gpx
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- distance:
- type: number
- duration:
- type: number
- elevation_gain:
- type: number
- elevation_loss:
- type: number
- gpx:
- type: string
- id:
- type: string
- photos:
- type: array
- items:
- type: string
- text:
- type: string
- updated:
- type: string
- required:
- - author
- - collectionId
- - collectionName
- - created
- - date
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - photos
- - text
- - updated
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- collectionId: dd2l9a4vxpy2ni8
- collectionName: summit_logs
- created: '2025-01-03 09:56:37.620Z'
- date: '2025-01-02 00:00:00.000Z'
- distance: 36983010.25256769
- duration: 68163654.92949024
- elevation_gain: 44389248.880456366
- elevation_loss: 6494274.720874871
- gpx: >-
- 2021_11_14_564807964_dusseldorf_angermund_nach_n4R1NcyDsY.Neuss-Hamm.gpx
- id: 58iuq9j30qbbwmq
- photos:
- - 23xxesym0e9w18z2904frnpgy7_CTPOstkHAC.jpg
- text: et magna veniam anim cillum
- updated: '2025-01-03 10:22:09.893Z'
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /trail:
- get:
- summary: list
- deprecated: false
- description: Lists all trails.
- operationId: listTrails
- tags:
- - trail
- parameters:
- - name: page
- in: query
- description: Page number starting at 1
- required: false
- example: 1
- schema:
- type: number
- - name: perPage
- in: query
- description: Items per page
- required: false
- example: 5
- schema:
- type: number
- - name: sort
- in: query
- description: Sort string (-/+)
- required: false
- example: '-created'
- schema:
- type: string
- - name: filter
- in: query
- description: >-
- Filter string
- (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)
- required: false
- example: name="MyTrail"
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: author
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: my-key
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- page:
- type: integer
- perPage:
- type: integer
- totalItems:
- type: integer
- totalPages:
- type: integer
- items:
- type: array
- items:
- type: object
- properties:
- author:
- type: string
- category:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- description:
- type: string
- difficulty:
- type: string
- distance:
- type: number
- duration:
- type: integer
- elevation_gain:
- type: number
- elevation_loss:
- type: integer
- gpx:
- type: string
- id:
- type: string
- lat:
- type: number
- location:
- type: string
- lon:
- type: number
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- public:
- type: boolean
- summit_logs:
- type: array
- items:
- type: string
- thumbnail:
- type: integer
- updated:
- type: string
- waypoints:
- type: array
- items:
- type: string
- expand:
- type: object
- properties:
- author:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- required:
- - author
- required:
- - author
- - category
- - collectionId
- - collectionName
- - created
- - date
- - description
- - difficulty
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - lat
- - location
- - lon
- - name
- - photos
- - public
- - summit_logs
- - thumbnail
- - updated
- - waypoints
- - expand
- required:
- - page
- - perPage
- - totalItems
- - totalPages
- - items
- examples:
- '1':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 53
- totalPages: 11
- items:
- - author: 3mugf953w4a9fg5
- category: x5y2ikswxzoznek
- collectionId: e864strfxo14pm4
- collectionName: trails
- created: '2024-10-06 09:33:11.404Z'
- date: '2024-10-06 00:00:00.000Z'
- description: >-
- Lorem ipsum dolor sit amet, consetetur sadipscing
- elitr, sed diam nonumy eirmod tempor invidunt ut
- labore et dolore magna aliquyam erat, sed diam
- voluptua. At vero eos et accusam et justo duo dolores
- et ea rebum. Stet clita kasd gubergren, no sea
- takimata sanctus est Lorem ipsum dolor sit amet. Lorem
- ipsum dolor sit amet, consetetur sadipscing elitr, sed
- diam nonumy eirmod tempor invidunt ut labore et dolore
- magna aliquyam erat, sed diam voluptua. At vero eos et
- accusam et justo duo dolores et ea rebum. Stet clita
- kasd gubergren, no sea takimata sanctus est Lorem
- ipsum dolor sit amet.
-
-
- Lorem ipsum dolor sit amet, consetetur sadipscing
- elitr, sed diam nonumy eirmod tempor invidunt ut
- labore et dolore magna aliquyam erat, sed diam
- voluptua. At vero eos et accusam et justo duo dolores
- et ea rebum. Stet clita kasd gubergren, no sea
- takimata sanctus est Lorem ipsum dolor sit amet. Lorem
- ipsum dolor sit amet, consetetur sadipscing elitr, sed
- diam nonumy eirmod tempor invidunt ut labore et dolore
- magna aliquyam erat, sed diam voluptua. At vero eos et
- accusam et justo duo dolores et ea rebum. Stet clita
- kasd gubergren, no sea takimata sanctus est Lorem
- ipsum dolor sit amet.
-
-
- Lorem ipsum dolor sit amet, consetetur sadipscing
- elitr, sed diam nonumy eirmod tempor invidunt ut
- labore et dolore magna aliquyam erat, sed diam
- voluptua. At vero eos et accusam et justo duo dolores
- et ea rebum. Stet clita kasd gubergren, no sea
- takimata sanctus est Lorem ipsum dolor sit amet. Lorem
- ipsum dolor sit amet, consetetur sadipscing elitr, sed
- diam nonumy eirmod tempor invidunt ut labore et dolore
- magna aliquyam erat, sed diam voluptua. At vero eos et
- accusam et justo duo dolores et ea rebum. Stet clita
- kasd gubergren, no sea takimata sanctus est Lorem
- ipsum dolor sit amet.
-
-
- Lorem ipsum dolor sit amet, consetetur sadipscing
- elitr, sed diam nonumy eirmod tempor invidunt ut
- labore et dolore magna aliquyam erat, sed diam
- voluptua. At vero eos et accusam et justo duo dolores
- et ea rebum. Stet clita kasd gubergren, no sea
- takimata sanctus est Lorem ipsum dolor sit amet. Lorem
- ipsum dolor sit amet, consetetur sadipscing elitr, sed
- diam nonumy eirmod tempor invidunt ut labore et dolore
- magna aliquyam erat, sed diam voluptua. At vero eos et
- accusam et justo duo dolores et ea rebum. Stet clita
- kasd gubergren, no sea takimata sanctus est Lorem
- ipsum dolor sit amet.
-
-
- Lorem ipsum dolor sit amet, consetetur sadipscing
- elitr, sed diam nonumy eirmod tempor invidunt ut
- labore et dolore magna aliquyam erat, sed diam
- voluptua. At vero eos et accusam et justo duo dolores
- et ea rebum. Stet clita kasd gubergren, no sea
- takimata sanctus est Lorem ipsum dolor sit amet. Lorem
- ipsum dolor sit amet, consetetur sadipscing elitr, sed
- diam nonumy eirmod tempor invidunt ut labore et dolore
- magna aliquyam erat, sed diam voluptua. At vero eos et
- accusam et justo duo dolores et ea rebum. Stet clita
- kasd gubergren, no sea takimata sanctus est Lorem
- ipsum dolor sit amet.
- difficulty: easy
- distance: 7504.162098327643
- duration: 0
- elevation_gain: 840.19189453125
- elevation_loss: 0
- gpx: breitenstein_3_DvymxgjEm5.gpx
- id: 074jf18neqwfbsr
- lat: 47.71215663291514
- location: ''
- lon: 11.964081572368741
- name: Breitenstein
- photos: []
- public: false
- summit_logs: []
- thumbnail: 0
- updated: '2024-11-05 21:54:20.799Z'
- waypoints:
- - 43570e9537dd83a
- - 2efed4a4b90e8b3
- - d1ae45c1f4e6353
- - 69de69fdb3b47b5
- - 162d22a68a1a98b
- - 04328b07923294e
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- category: x5y2ikswxzoznek
- collectionId: e864strfxo14pm4
- collectionName: trails
- created: '2024-09-14 14:18:27.538Z'
- date: '2024-09-14 00:00:00.000Z'
- description: ''
- difficulty: easy
- distance: 18487.660615835353
- duration: 0
- elevation_gain: 209.55000000000015
- elevation_loss: 0
- gpx: blob_BaoYdHnfYw.gpx
- id: 14y4qxqbqh0n10m
- lat: 48.311547246
- location: ''
- lon: 0.993056622
- name: Thiron-Gardais - Nogent-le-Rotrou
- photos: []
- public: true
- summit_logs: []
- thumbnail: 0
- updated: '2024-12-08 21:26:17.269Z'
- waypoints: []
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: znhd3hgrxl85c9f
- category: x5y2ikswxzoznek
- collectionId: e864strfxo14pm4
- collectionName: trails
- created: '2024-11-15 18:50:36.223Z'
- date: '2024-11-15 00:00:00.000Z'
- description: ''
- difficulty: easy
- distance: 283396.31855792465
- duration: 0
- elevation_gain: 0
- elevation_loss: 0
- gpx: 2024_10_22_04_28_2024_10_22_21_29_UUGET8zBuk.gpx
- id: 267r63tmbyezpck
- lat: 41.754053
- location: ''
- lon: -2.484733
- name: Gassi
- photos: []
- public: true
- summit_logs:
- - e980ffa422f1603
- thumbnail: 0
- updated: '2024-11-16 12:49:33.814Z'
- waypoints: []
- expand:
- author:
- avatar: >-
- screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png
- bio: ''
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-30 21:02:11.693Z'
- id: znhd3hgrxl85c9f
- private: false
- username: John
- - author: 3mugf953w4a9fg5
- category: x5y2ikswxzoznek
- collectionId: e864strfxo14pm4
- collectionName: trails
- created: '2024-09-14 14:18:26.946Z'
- date: '2024-09-14 00:00:00.000Z'
- description: ''
- difficulty: easy
- distance: 10942.463179990422
- duration: 0
- elevation_gain: 66.64999999999999
- elevation_loss: 0
- gpx: blob_ZjF1DuT8Rl.gpx
- id: 2o9c3pxfvrzclud
- lat: 48.626390603
- location: ''
- lon: -0.960178937
- name: Mortain - St-Hilaire-du-Harcouët
- photos: []
- public: true
- summit_logs: []
- thumbnail: 0
- updated: '2024-12-08 21:26:17.888Z'
- waypoints: []
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- category: x5y2ikswxzoznek
- collectionId: e864strfxo14pm4
- collectionName: trails
- created: '2024-09-14 14:18:27.604Z'
- date: '2024-09-14 00:00:00.000Z'
- description: ''
- difficulty: easy
- distance: 23920.21858179372
- duration: 0
- elevation_gain: 238.07999999999996
- elevation_loss: 0
- gpx: blob_oyW3EXsfqS.gpx
- id: 2y8o7bwmor4yltt
- lat: 48.8029381
- location: ''
- lon: 2.1264017
- name: Versailles - St-Rémy-lès-Chevreuse
- photos: []
- public: true
- summit_logs: []
- thumbnail: 0
- updated: '2024-12-08 21:26:16.840Z'
- waypoints: []
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- '2':
- summary: Success
- value:
- page: 1
- perPage: 5
- totalItems: 4
- totalPages: 1
- items:
- - author: 3mugf953w4a9fg5
- avatar: ''
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2025-01-02 22:29:19.092Z'
- description: This list was updated by the wanderer API
- id: 4yql7587j64qdo5
- name: Updated API List
- public: false
- trails: []
- updated: '2025-01-02 22:39:36.944Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- avatar: 640px_mont_saint_michel_vu_du_ciel_MvWoudBkPE.jpg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-09-09 22:10:07.972Z'
- description: "La Véloscénie is a 450-kilometre (280 mi) cycle route that takes you on an adventure from Paris to Mont-Saint-Michel on the Channel coast. From the capital to the beaches, passing through numerous hamlets and stunning towns such as Chartres, this journey westwards has many surprises in store.\r\n\r\nWe suggest you complete this journey in seven stages. This is a challenging pace, but should still leave you time to discover the many attractions en route. Cathedrals, castles, lakes, stunning landscapes and historic villages will show you that you don't have to wait for Mont-Saint-Michel to be amazed.\r\n\r\nThe itinerary alternates between little-used secondary roads, greenways and trails. This trip is best ridden on a bike that can handle rougher trails, like a touring, hybrid or gravel bike.\r\n\r\nParis is easy to reach from anywhere in France, but the choice is more limited if you want to leave from Mont-Saint-Michel. The nearest railway station is in Pontorson, 10 kilometres (6 mi) from Mont-Saint-Michel. From Pontorson, direct trains to Paris leave every evening, around 6pm on weekdays and at weekends, only between June and the end of September. Bikes can be taken on board free of charge by prior arrangement. Apart from this seasonal service, there are other ways of returning to Paris, with at least one train change required. For more information: veloscenic.com/reaching-the-veloscenic-cycle-route\r\n\r\nAlthough the route is accessible all year round, some accommodation and tourist attractions are likely to close in the low season, so it’s best to ride in spring or summer. While some stages end in big cities, others end in more rural areas and you’ll need to book your accommodation in advance. It’s not necessary to book restaurants along the route, but it is best to plan stops for refreshments, as not all the villages you pass through have restaurants or shops."
- id: bdv9iukn4d2lf2i
- name: From Paris to Mont-Saint-Michel — La Véloscénie
- public: false
- trails:
- - jou2tcf0y8jj9m3
- - ilyvsa4xr52lxlr
- - 2y8o7bwmor4yltt
- - gmh81mczhjp834l
- - 6hpvcyosmqr8uk8
- - iql9fifaxnb5u6m
- - y9hjysn5xhbmi86
- - fehuzqkfi49hkwn
- - fmin7pbj8urtxx0
- - 14y4qxqbqh0n10m
- - 6fv6krwusycttbl
- - 66jj108gizquc2r
- - wbuwzu8tp48hljg
- - x3lo6ru4ly753w6
- - h91u3vl8n5ekune
- - bzodytd0vd2e56g
- - oy1auygew9fvha0
- - 6atd6i73bzle0ar
- - iz2ohx9hbn8irrc
- - 2o9c3pxfvrzclud
- - btn09xkl7ab0n9k
- - ek2cb00tw4v4fav
- updated: '2024-12-27 00:55:25.917Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- avatar: dscn0010_xN987yGxE0.jpg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-12-30 17:41:00.152Z'
- description: Hallo
- id: dci7qk44birm2bn
- name: Liste mit Oachkatzerl
- public: true
- trails:
- - ovo0m6pxxjupfp9
- - yesm2tqc6jok8jq
- - z94vgei3jdc37k4
- updated: '2024-12-30 18:58:44.269Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- - author: 3mugf953w4a9fg5
- avatar: caret_right_solid_iUtggzDoh7.svg
- collectionId: r6gu2ajyidy1x69
- collectionName: lists
- created: '2024-12-13 12:46:49.620Z'
- description: ''
- id: m59tuo2yyretv7z
- name: Flomp's List 2
- public: false
- trails:
- - ovo0m6pxxjupfp9
- updated: '2024-12-27 00:55:21.456Z'
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute
- Lorem in ullamco labore ex. Officia ea qui in
- exercitation amet. Consequat laboris id duis enim
- Lorem dolore fugiat excepteur sunt. Sint
- consectetur duis tempor deserunt non. Ex amet sunt
- eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur
- irure. Ea et reprehenderit ipsum adipisicing duis
- proident tempor esse excepteur dolor dolore anim
- consectetur aliqua. Laborum culpa eiusmod id ea
- consectetur do sit reprehenderit consequat
- voluptate mollit commodo. Ullamco aute ea minim
- enim et cupidatat ipsum cillum fugiat. Proident
- consectetur commodo Lorem do incididunt labore
- pariatur esse ea officia adipisicing. Do et sint
- culpa proident enim irure aliqua dolore magna.
- Laborum Lorem sunt amet occaecat occaecat mollit
- consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- headers: {}
- x-400:Invalid sort/expand/filter:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Something went wrong while processing your request.
- detail:
- code: 400
- message: Something went wrong while processing your request.
- data: {}
- headers: {}
- security: []
- put:
- summary: create
- deprecated: false
- description: Creates a trail.
- operationId: createTrail
- tags:
- - trail
- parameters:
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request id. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- name:
- type: string
- description: Name of the trail
- public:
- type: boolean
- description: Visible for everyone
- category:
- type: string
- minLength: 15
- maxLength: 15
- description: Category Id
- date:
- type: string
- format: date
- description: Date of the trail
- description:
- type: string
- description: Description of the trail
- difficulty:
- type: string
- enum:
- - easy
- - moderate
- - difficult
- description: Difficulty of the trail
- distance:
- type: number
- description: Distance in meters
- minimum: 0
- duration:
- type: number
- description: Duration in seconds
- minimum: 0
- elevation_gain:
- type: number
- description: Elevation gain in vertical meters
- minimum: 0
- elevation_loss:
- type: number
- description: Elevation loss in vertical meters
- minimum: 0
- lat:
- type: number
- description: Latitude of the starting point
- minimum: -90
- maximum: 90
- location:
- type: string
- description: Nearest city/village
- lon:
- type: number
- description: Longitude of the starting point
- minimum: -180
- maximum: 180
- thumbnail:
- type: integer
- description: Index of the photo that should be used as the thumbnail.
- minimum: 0
- author:
- type: string
- minLength: 15
- maxLength: 15
- description: User Id
- required:
- - name
- - public
- - author
- example:
- name: at error minus
- public: false
- category: l3q348pprel6opd
- date: '2025-01-03T00:36:48.554Z'
- description: >-
- Minima architecto maiores maiores architecto. Nobis aliquid
- magni magni ipsum. Itaque maxime mollitia. Laboriosam placeat
- ipsa omnis magni atque non.
- difficulty: moderate
- distance: 46585640.67167308
- duration: 8687485.195364153
- elevation_gain: 4089694.238652264
- elevation_loss: 12108588.345680581
- lat: 86.60827022966254
- location: sunt
- lon: 112.96378311445648
- thumbnail: 0
- author: 3mugf953w4a9fg5
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- category:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- description:
- type: string
- difficulty:
- type: string
- distance:
- type: number
- duration:
- type: number
- elevation_gain:
- type: number
- elevation_loss:
- type: number
- gpx:
- type: string
- id:
- type: string
- lat:
- type: number
- location:
- type: string
- lon:
- type: number
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- public:
- type: boolean
- summit_logs:
- type: array
- items:
- type: string
- thumbnail:
- type: integer
- updated:
- type: string
- waypoints:
- type: array
- items:
- type: string
- required:
- - author
- - category
- - collectionId
- - collectionName
- - created
- - date
- - description
- - difficulty
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - lat
- - location
- - lon
- - name
- - photos
- - public
- - summit_logs
- - thumbnail
- - updated
- - waypoints
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- category: l3q348pprel6opd
- collectionId: e864strfxo14pm4
- collectionName: trails
- created: '2025-01-03 11:36:58.976Z'
- date: '2025-01-03 00:36:48.554Z'
- description: >-
- Minima architecto maiores maiores architecto. Nobis
- aliquid magni magni ipsum. Itaque maxime mollitia.
- Laboriosam placeat ipsa omnis magni atque non.
- difficulty: moderate
- distance: 46585640.67167308
- duration: 8687485.195364153
- elevation_gain: 4089694.238652264
- elevation_loss: 12108588.345680581
- gpx: ''
- id: d9ba280yjycrk0k
- lat: 86.60827022966254
- location: sunt
- lon: 112.96378311445648
- name: at error minus
- photos: []
- public: false
- summit_logs: []
- thumbnail: 0
- updated: '2025-01-03 11:36:58.976Z'
- waypoints: []
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties:
- author:
- type: object
- properties:
- code:
- type: string
- message:
- type: string
- required:
- - code
- - message
- required:
- - author
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: Failed to create record.
- detail:
- code: 400
- message: Failed to create record.
- data:
- author:
- code: validation_missing_rel_records
- message: >-
- Failed to find all relation records with the
- provided ids.
- headers: {}
- x-400:Invalid Params:
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- validation:
- type: string
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - code
- - message
- - path
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: invalid_string
- validation: date
- message: Invalid date
- path:
- - date
- - code: custom
- message: invalid-date
- path:
- - date
- headers: {}
- security:
- - CookieAuth: []
- /trail/{id}:
- get:
- summary: show
- deprecated: false
- description: Shows a single trail.
- operationId: showTrail
- tags:
- - trail
- parameters:
- - name: id
- in: path
- description: Trail Id
- required: true
- example: 95bb1d77c8dfa98
- schema:
- type: string
- minLength: 15
- maxLength: 15
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- example: ''
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- example: ''
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- category:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- description:
- type: string
- difficulty:
- type: string
- distance:
- type: number
- duration:
- type: integer
- elevation_gain:
- type: integer
- elevation_loss:
- type: integer
- gpx:
- type: string
- id:
- type: string
- lat:
- type: number
- location:
- type: string
- lon:
- type: number
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- public:
- type: boolean
- summit_logs:
- type: array
- items:
- type: string
- thumbnail:
- type: integer
- updated:
- type: string
- waypoints:
- type: array
- items:
- type: string
- expand:
- type: object
- properties:
- author:
- type: object
- properties:
- avatar:
- type: string
- bio:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- id:
- type: string
- private:
- type: boolean
- username:
- type: string
- required:
- - avatar
- - bio
- - collectionId
- - collectionName
- - created
- - id
- - private
- - username
- required:
- - author
- required:
- - author
- - category
- - collectionId
- - collectionName
- - created
- - date
- - description
- - difficulty
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - lat
- - location
- - lon
- - name
- - photos
- - public
- - summit_logs
- - thumbnail
- - updated
- - waypoints
- - expand
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- category: pbwx1lg2nmcih0w
- collectionId: e864strfxo14pm4
- collectionName: trails
- created: '2024-12-30 18:57:35.453Z'
- date: '2024-12-30'
- description: ''
- difficulty: moderate
- distance: 5631.307320599051
- duration: 0
- elevation_gain: 76
- elevation_loss: 76
- gpx: blob_0E0x721wan.gpx
- id: z94vgei3jdc37k4
- lat: 47.385232
- location: ''
- lon: 9.655863
- name: Die Pottsau
- photos:
- - 23xxesym0e9w18z2904frnpgy7_2SQmCCI6DV.jpg
- - caret_right_solid_9154Rrvk6B.svg
- public: false
- summit_logs:
- - 95bb1d77c8dfa98
- thumbnail: 1
- updated: '2024-12-30 18:59:56.924Z'
- waypoints:
- - 7f6d2a8c9d50136
- - 60c2d435a5b66ed
- expand:
- author:
- avatar: pexels_photo_2230444_WILu8cRHVb.jpg
- bio: >-
- ex aliqua velit deserunt ea exercitation do. Velit
- ullamco elit culpa eiusmod officia irure aute Lorem in
- ullamco labore ex. Officia ea qui in exercitation
- amet. Consequat laboris id duis enim Lorem dolore
- fugiat excepteur sunt. Sint consectetur duis tempor
- deserunt non. Ex amet sunt eu commodo.
-
-
- Mollit labore cupidatat qui enim consectetur irure. Ea
- et reprehenderit ipsum adipisicing duis proident
- tempor esse excepteur dolor dolore anim consectetur
- aliqua. Laborum culpa eiusmod id ea consectetur do sit
- reprehenderit consequat voluptate mollit commodo.
- Ullamco aute ea minim enim et cupidatat ipsum cillum
- fugiat. Proident consectetur commodo Lorem do
- incididunt labore pariatur esse ea officia
- adipisicing. Do et sint culpa proident enim irure
- aliqua dolore magna. Laborum Lorem sunt amet occaecat
- occaecat mollit consectetur laborum ut.
- collectionId: xku110v5a5xbufa
- collectionName: users_anonymous
- created: '2024-06-29 19:23:47.731Z'
- id: 3mugf953w4a9fg5
- private: false
- username: Flomp
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security: []
- post:
- summary: update
- deprecated: false
- description: ''
- operationId: updateTrail
- tags:
- - trail
- parameters:
- - name: id
- in: path
- description: Trail Id
- required: true
- example: ''
- schema:
- type: string
- - name: Content-Type
- in: header
- description: ''
- required: true
- example: application/json
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- name:
- type: string
- description: Name of the trail
- category:
- type: string
- minLength: 15
- maxLength: 15
- description: Category Id
- date:
- type: string
- format: date
- description: Date of the trail
- description:
- type: string
- description: Description of the trail
- difficulty:
- type: string
- enum:
- - easy
- - moderate
- - difficult
- description: Difficulty of the trail
- distance:
- type: number
- description: Distance in meters
- minimum: 0
- duration:
- type: number
- description: Duration in seconds
- minimum: 0
- elevation_gain:
- type: number
- description: Elevation gain in vertical meters
- minimum: 0
- elevation_loss:
- type: number
- description: Elevation loss in vertical meters
- minimum: 0
- lat:
- type: number
- description: Latitude of the starting point
- minimum: -90
- maximum: 90
- location:
- type: string
- description: Nearest city/village
- lon:
- type: number
- description: Longitude of the starting point
- minimum: -180
- maximum: 180
- public:
- type: boolean
- description: Visible for everyone
- thumbnail:
- type: integer
- description: Index of the photo that should be used as the thumbnail.
- minimum: 0
- example:
- name: inventore est laboriosam
- category: 7sqwezntokmbvdr
- date: '2025-01-03T07:14:55.803Z'
- description: >-
- At dolor deleniti architecto nulla nemo in perspiciatis. Iste
- iusto ex quidem sed modi. Ipsam unde doloribus aut. Molestias
- ducimus molestias soluta.
- difficulty: easy
- distance: 71499916.19683264
- duration: 87771408.86514412
- elevation_gain: 67291819.86293587
- elevation_loss: 76718134.08675973
- lat: 85.23610854378416
- location: ex laborum
- lon: -48.60959423486602
- public: true
- thumbnail: 0
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- category:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- description:
- type: string
- difficulty:
- type: string
- distance:
- type: number
- duration:
- type: number
- elevation_gain:
- type: number
- elevation_loss:
- type: number
- gpx:
- type: string
- id:
- type: string
- lat:
- type: number
- location:
- type: string
- lon:
- type: number
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- public:
- type: boolean
- summit_logs:
- type: array
- items:
- type: string
- thumbnail:
- type: integer
- updated:
- type: string
- waypoints:
- type: array
- items:
- type: string
- required:
- - author
- - category
- - collectionId
- - collectionName
- - created
- - date
- - description
- - difficulty
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - lat
- - location
- - lon
- - name
- - photos
- - public
- - summit_logs
- - thumbnail
- - updated
- - waypoints
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- category: 7sqwezntokmbvdr
- collectionId: e864strfxo14pm4
- collectionName: trails
- created: '2025-01-03 11:42:07.848Z'
- date: '2025-01-03 07:14:55.803Z'
- description: >-
- At dolor deleniti architecto nulla nemo in perspiciatis.
- Iste iusto ex quidem sed modi. Ipsam unde doloribus aut.
- Molestias ducimus molestias soluta.
- difficulty: easy
- distance: 71499916.19683264
- duration: 87771408.86514412
- elevation_gain: 67291819.86293587
- elevation_loss: 76718134.08675973
- gpx: >-
- 2021_11_14_564807964_dusseldorf_angermund_nach_ZpNsRB5SEW.Neuss-Hamm.gpx
- id: hfdmpa1n1ulyr64
- lat: 85.23610854378416
- location: ex laborum
- lon: -48.60959423486602
- name: inventore est laboriosam
- photos: []
- public: true
- summit_logs:
- - 3pagejfjt1cz4vr
- thumbnail: 0
- updated: '2025-01-03 11:48:41.963Z'
- waypoints: []
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- headers: {}
- security:
- - CookieAuth: []
- delete:
- summary: delete
- deprecated: false
- description: Deletes a summit log.
- operationId: deleteTrail
- tags:
- - trail
- parameters:
- - name: id
- in: path
- description: Summit Log Id
- required: true
- example: 4yql7587j64qdo5
- schema:
- type: string
- - name: expand
- in: query
- description: >-
- Expand a foreign key column
- (https://pocketbase.io/docs/working-with-relations/#expanding-relations).
- required: false
- schema:
- type: string
- - name: requestKey
- in: query
- description: >-
- Unique request key. Prevents auto cancel when sending multiple
- requests.
- required: false
- schema:
- type: string
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- acknowledged:
- type: boolean
- required:
- - acknowledged
- examples:
- '1':
- summary: Success
- value:
- acknowledged: true
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /trail/{id}/file:
- post:
- summary: file
- deprecated: false
- description: Uploads or removes photos, uploads GPS data file for a trail.
- operationId: fileTrail
- tags:
- - trail
- parameters:
- - name: id
- in: path
- description: Trail Id
- required: true
- example: 4yql7587j64qdo5
- schema:
- type: string
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- photos:
- format: binary
- type: string
- description: >-
- List of image files to add. Allowed file types: PNG, JPG,
- WEBP, SVG
- example:
- - ''
- photos-:
- type: array
- items:
- type: string
- description: List of file names to delete.
- example: ''
- gpx:
- type: string
- format: binary
- minLength: 0
- maxLength: 1
- description: >-
- File containing GPS track data. Allowed file types: GPX,
- JSON, FIT, KML
- example: >-
- file:///Users/christianbeutel/Downloads/2021-10-24_536064034_Essen-Mitte.nach.Bochum-Hauptbahnhof.gpx
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- category:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- description:
- type: string
- difficulty:
- type: string
- distance:
- type: number
- duration:
- type: number
- elevation_gain:
- type: number
- elevation_loss:
- type: number
- gpx:
- type: string
- id:
- type: string
- lat:
- type: number
- location:
- type: string
- lon:
- type: number
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- public:
- type: boolean
- summit_logs:
- type: array
- items:
- type: string
- thumbnail:
- type: integer
- updated:
- type: string
- waypoints:
- type: array
- items:
- type: string
- required:
- - author
- - category
- - collectionId
- - collectionName
- - created
- - date
- - description
- - difficulty
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - lat
- - location
- - lon
- - name
- - photos
- - public
- - summit_logs
- - thumbnail
- - updated
- - waypoints
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- category: 7sqwezntokmbvdr
- collectionId: e864strfxo14pm4
- collectionName: trails
- created: '2025-01-03 11:42:07.848Z'
- date: '2025-01-03 07:14:55.803Z'
- description: >-
- At dolor deleniti architecto nulla nemo in perspiciatis.
- Iste iusto ex quidem sed modi. Ipsam unde doloribus aut.
- Molestias ducimus molestias soluta.
- difficulty: easy
- distance: 71499916.19683264
- duration: 87771408.86514412
- elevation_gain: 67291819.86293587
- elevation_loss: 76718134.08675973
- gpx: 4_champex_to_le_chable_h8sE0CwAes.gpx
- id: hfdmpa1n1ulyr64
- lat: 85.23610854378416
- location: ex laborum
- lon: -48.60959423486602
- name: inventore est laboriosam
- photos:
- - 23xxesym0e9w18z2904frnpgy7_0h84aa22yv.jpg
- - 23xxesym0e9w18z2904frnpgy7_7JhLWsRrsm.jpg
- public: true
- summit_logs:
- - 3pagejfjt1cz4vr
- thumbnail: 0
- updated: '2025-01-03 12:08:43.037Z'
- waypoints: []
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: array
- items:
- type: object
- properties:
- code:
- type: string
- minimum:
- type: integer
- type:
- type: string
- inclusive:
- type: boolean
- exact:
- type: boolean
- message:
- type: string
- path:
- type: array
- items:
- type: string
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: invalid_params
- detail:
- - code: too_small
- minimum: 15
- type: string
- inclusive: true
- exact: true
- message: String must contain exactly 15 character(s)
- path:
- - id
- headers: {}
- '404':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- type: string
- detail:
- type: object
- properties:
- code:
- type: integer
- message:
- type: string
- data:
- type: object
- properties: {}
- required:
- - code
- - message
- - data
- required:
- - message
- - detail
- examples:
- '1':
- summary: Exception
- value:
- message: The requested resource wasn't found.
- detail:
- code: 404
- message: The requested resource wasn't found.
- data: {}
- headers: {}
- security:
- - CookieAuth: []
- /trail/upload:
- put:
- summary: upload
- deprecated: false
- description: >-
- Automatically creates a trail from the uploaded file. Tries to infer as
- much information as possible from the file's metadata.
- operationId: uploadTrail
- tags:
- - trail
- parameters:
- - name: Content-Type
- in: header
- description: ''
- required: true
- example: application/gpx+xml
- schema:
- type: string
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- file:
- format: binary
- type: string
- description: >-
- File containing GPS track data. Allowed file types: GPX,
- JSON, FIT, KML
- example: >-
- file:///Users/christianbeutel/Downloads/4_champex_to_le_chable.gpx
- name:
- description: File name
- example: ''
- type: string
- required:
- - file
- responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- author:
- type: string
- category:
- type: string
- collectionId:
- type: string
- collectionName:
- type: string
- created:
- type: string
- date:
- type: string
- description:
- type: string
- difficulty:
- type: string
- distance:
- type: number
- duration:
- type: number
- elevation_gain:
- type: number
- elevation_loss:
- type: number
- gpx:
- type: string
- id:
- type: string
- lat:
- type: number
- location:
- type: string
- lon:
- type: number
- name:
- type: string
- photos:
- type: array
- items:
- type: string
- public:
- type: boolean
- summit_logs:
- type: array
- items:
- type: string
- thumbnail:
- type: integer
- updated:
- type: string
- waypoints:
- type: array
- items:
- type: string
- required:
- - author
- - category
- - collectionId
- - collectionName
- - created
- - date
- - description
- - difficulty
- - distance
- - duration
- - elevation_gain
- - elevation_loss
- - gpx
- - id
- - lat
- - location
- - lon
- - name
- - photos
- - public
- - summit_logs
- - thumbnail
- - updated
- - waypoints
- examples:
- '1':
- summary: Success
- value:
- author: 3mugf953w4a9fg5
- category: ''
- collectionId: e864strfxo14pm4
- collectionName: trails
- created: '2025-01-03 11:42:07.848Z'
- date: '2021-11-14 00:00:00.000Z'
- description: ''
- difficulty: easy
- distance: 24077.68400534589
- duration: 297.01666666666665
- elevation_gain: 40.10210099999998
- elevation_loss: 45.42742099999999
- gpx: >-
- 2021_11_14_564807964_dusseldorf_angermund_nach_ZpNsRB5SEW.Neuss-Hamm.gpx
- id: hfdmpa1n1ulyr64
- lat: 51.33429
- location: ''
- lon: 6.768533
- name: Düsseldorf-Angermund nach Neuss-Hamm
- photos: []
- public: false
- summit_logs:
- - 3pagejfjt1cz4vr
- thumbnail: 0
- updated: '2025-01-03 11:42:07.962Z'
- waypoints: []
- headers: {}
- '400':
- description: ''
- content:
- application/json:
- schema:
- type: object
- properties:
- url:
- type: string
- status:
- type: integer
- response:
- type: object
- properties:
- message:
- type: string
- required:
- - message
- isAbort:
- type: boolean
- originalError:
- type: object
- properties:
- status:
- type: integer
- response:
- type: object
- properties:
- message:
- type: string
- required:
- - message
- required:
- - status
- - response
- name:
- type: string
- required:
- - url
- - status
- - response
- - isAbort
- - originalError
- - name
- examples:
- '1':
- summary: Exception
- value:
- url: ''
- status: 400
- response:
- message: Invalid file
- isAbort: false
- originalError:
- status: 400
- response:
- message: Invalid file
- name: ClientResponseError 400
- headers: {}
- security:
- - CookieAuth: []
-components:
- schemas: {}
- securitySchemes:
- CookieAuth:
- type: apiKey
- in: cookie
- name: pb_auth
-servers:
- - url: http://localhost:5173/api/v1
- description: Dev Env
- - url: https://demo.wanderer.to/api/v1
- description: Prod Env
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/activitypub/comment/{id}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "",
+ "tags": [],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "",
+ "required": true,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/activity+json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "@context": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "content": {
+ "type": "string"
+ },
+ "attributedTo": {
+ "type": "string"
+ },
+ "inReplyTo": {
+ "type": "string"
+ },
+ "published": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "@context",
+ "id",
+ "type",
+ "content",
+ "attributedTo",
+ "inReplyTo",
+ "published"
+ ]
+ },
+ "example": {
+ "@context": [
+ "https://www.w3.org/ns/activitystreams"
+ ],
+ "id": "https://demo.wanderer.to/api/v1/comment/32wf88038cb800i",
+ "type": "Note",
+ "content": "@flomp@social.tchncs.de
Ja, echt toll!
",
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "inReplyTo": "https://demo.wanderer.to/api/v1/trail/23fd1747a29c3af",
+ "published": "2025-06-18T18:48:15Z"
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/activitypub/trail/{id}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "",
+ "tags": [],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "",
+ "required": true,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/activity+json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "@context": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "content": {
+ "type": "string"
+ },
+ "attachment": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "mediaType": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "mediaType",
+ "url"
+ ]
+ }
+ },
+ "attributedTo": {
+ "type": "string"
+ },
+ "location": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "latitude": {
+ "type": "number"
+ },
+ "longitude": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "type",
+ "name",
+ "latitude",
+ "longitude"
+ ]
+ },
+ "tag": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "content": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "name",
+ "content"
+ ]
+ }
+ },
+ "url": {
+ "type": "string"
+ },
+ "published": {
+ "type": "string"
+ },
+ "startTime": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "@context",
+ "id",
+ "type",
+ "name",
+ "content",
+ "attachment",
+ "attributedTo",
+ "location",
+ "tag",
+ "url",
+ "published",
+ "startTime"
+ ]
+ },
+ "example": {
+ "@context": [
+ "https://www.w3.org/ns/activitystreams"
+ ],
+ "id": "https://demo.wanderer.to/api/v1/trail/2ce3af7a2e80f52",
+ "type": "Note",
+ "name": "12 days in the Zugspitz region on the peak hiking trail",
+ "content": "12 days in the Zugspitz region on the peak hiking trail https://demo.wanderer.to/trail/view/@demo/2ce3af7a2e80f52
",
+ "attachment": [
+ {
+ "type": "Image",
+ "mediaType": "image/jpeg",
+ "url": "https://demo.wanderer.to/api/v1/files/trails/2ce3af7a2e80f52/route_ldv172t0my.webp"
+ },
+ {
+ "type": "Document",
+ "mediaType": "application/xml+gpx",
+ "url": "https://demo.wanderer.to/api/v1/files/trails/2ce3af7a2e80f52/12_days_in_the_zugspitz_region_on_the_peak_hiking_trail_5ts04zgsuk.gpx"
+ }
+ ],
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "location": {
+ "type": "Place",
+ "name": "Murnau am Staffelsee, Bayern, Deutschland",
+ "latitude": 47.678592,
+ "longitude": 11.196068
+ },
+ "tag": [
+ {
+ "type": "Note",
+ "name": "category",
+ "content": "Biking"
+ },
+ {
+ "type": "Note",
+ "name": "difficulty",
+ "content": "easy"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_gain",
+ "content": "8902.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_loss",
+ "content": "8906.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "distance",
+ "content": "202403.824936m"
+ },
+ {
+ "type": "Note",
+ "name": "duration",
+ "content": "4037.183333m"
+ }
+ ],
+ "url": "https://demo.wanderer.to/trail/view/@demo/2ce3af7a2e80f52",
+ "published": "2025-06-17T21:40:02Z",
+ "startTime": "2025-06-14T00:00:00Z"
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/activitypub/user/{handle}/followers": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "",
+ "tags": [],
+ "parameters": [
+ {
+ "name": "handle",
+ "in": "path",
+ "description": "",
+ "required": true,
+ "example": "@user@domain",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/activity+json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "@context": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "type": {
+ "type": "string"
+ },
+ "first": {
+ "type": "string"
+ },
+ "partOf": {
+ "type": "string"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "orderedItems": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "@context",
+ "type",
+ "first",
+ "partOf",
+ "totalItems",
+ "orderedItems"
+ ]
+ },
+ "example": {
+ "@context": [
+ "https://www.w3.org/ns/activitystreams"
+ ],
+ "type": "OrderedCollectionPage",
+ "first": "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers?page=1",
+ "partOf": "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers",
+ "totalItems": 3,
+ "orderedItems": [
+ "https://social.tchncs.de/users/flomp",
+ "https://trails.magdeburg.jetzt/api/v1/activitypub/user/momar",
+ "https://darmstadt.social/users/stormii"
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/activitypub/user/{handle}/outbox": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "",
+ "tags": [],
+ "parameters": [
+ {
+ "name": "handle",
+ "in": "path",
+ "description": "",
+ "required": true,
+ "example": "@user@domain",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/activity+json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "@context": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "type": {
+ "type": "string"
+ },
+ "first": {
+ "type": "string"
+ },
+ "next": {
+ "type": "string"
+ },
+ "partOf": {
+ "type": "string"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "orderedItems": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "actor": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "to": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "cc": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "published": {
+ "type": "string"
+ },
+ "object": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "content": {
+ "type": "string"
+ },
+ "attachment": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "mediaType": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "mediaType",
+ "url"
+ ]
+ }
+ },
+ "attributedTo": {
+ "type": "string"
+ },
+ "inReplyTo": {
+ "type": "string"
+ },
+ "tag": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "content": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "href": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "name",
+ "content",
+ "id",
+ "href"
+ ]
+ }
+ },
+ "url": {
+ "type": "string"
+ },
+ "published": {
+ "type": "string"
+ },
+ "startTime": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "location": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "latitude": {
+ "type": "number"
+ },
+ "longitude": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "type",
+ "name",
+ "latitude",
+ "longitude"
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "type",
+ "name",
+ "content",
+ "attachment",
+ "attributedTo",
+ "location",
+ "tag",
+ "url",
+ "published",
+ "startTime"
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "actor",
+ "type",
+ "to",
+ "cc",
+ "published",
+ "object"
+ ]
+ }
+ }
+ },
+ "required": [
+ "@context",
+ "type",
+ "first",
+ "next",
+ "partOf",
+ "totalItems",
+ "orderedItems"
+ ]
+ },
+ "example": {
+ "@context": [
+ "https://www.w3.org/ns/activitystreams"
+ ],
+ "type": "OrderedCollectionPage",
+ "first": "https://demo.wanderer.to/api/v1/activitypub/user/demo/outbox?page=1",
+ "next": "https://demo.wanderer.to/api/v1/activitypub/user/demo/outbox?page=2",
+ "partOf": "https://demo.wanderer.to/api/v1/activitypub/user/demo/outbox",
+ "totalItems": 21,
+ "orderedItems": [
+ {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/ypx6zhvsaonmkos",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": "https://www.w3.org/ns/activitystreams#Public",
+ "cc": [
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers",
+ "https://social.tchncs.de/users/flomp/inbox"
+ ],
+ "published": "2025-06-18 18:50:02.518Z",
+ "object": {
+ "id": "https://demo.wanderer.to/api/v1/summit-log/75md7yw7099j5rh",
+ "type": "Note",
+ "content": "@flomp@social.tchncs.de
",
+ "attachment": [],
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "inReplyTo": "https://demo.wanderer.to/api/v1/trail/23fd1747a29c3af",
+ "tag": [
+ {
+ "type": "Note",
+ "name": "elevation_gain",
+ "content": "0.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_loss",
+ "content": "0.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "distance",
+ "content": "0.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "duration",
+ "content": "0.000000m"
+ },
+ {
+ "id": "https://social.tchncs.de/users/flomp",
+ "type": "Mention",
+ "name": "@flomp@social.tchncs.de",
+ "href": "https://social.tchncs.de/users/flomp"
+ }
+ ],
+ "url": "https://demo.wanderer.to/trail/view/@demo/23fd1747a29c3af",
+ "published": "2025-06-18T18:50:02Z",
+ "startTime": "2025-06-18T00:00:00Z"
+ }
+ },
+ {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/k6h3nxcgcg8ztjt",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://social.tchncs.de/users/flomp/inbox",
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/inbox"
+ ],
+ "published": "2025-06-18 18:48:15.481Z",
+ "object": {
+ "id": "https://demo.wanderer.to/api/v1/comment/32wf88038cb800i",
+ "type": "Note",
+ "content": "@flomp@social.tchncs.de
Ja, echt toll!
",
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "inReplyTo": "https://demo.wanderer.to/api/v1/trail/23fd1747a29c3af",
+ "tag": [
+ {
+ "id": "https://social.tchncs.de/users/flomp",
+ "type": "Mention",
+ "name": "@flomp@social.tchncs.de",
+ "href": "https://social.tchncs.de/users/flomp"
+ }
+ ],
+ "published": "2025-06-18T18:48:15Z"
+ }
+ },
+ {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/ll0f2ectiohy55d",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers",
+ "https://social.tchncs.de/users/flomp/inbox"
+ ],
+ "published": "2025-06-18 18:46:54.717Z",
+ "object": {
+ "id": "https://demo.wanderer.to/api/v1/trail/23fd1747a29c3af",
+ "type": "Note",
+ "name": "Radfernweg Berlin-Usedom",
+ "content": "Radfernweg Berlin-Usedom Auf nach Usedom!
@flomp@social.tchncs.de
https://demo.wanderer.to/trail/view/@demo/23fd1747a29c3af
",
+ "attachment": [
+ {
+ "type": "Image",
+ "mediaType": "image/jpeg",
+ "url": "https://demo.wanderer.to/api/v1/files/trails/23fd1747a29c3af/default_thumbnail_fz982rp32o.webp"
+ },
+ {
+ "type": "Document",
+ "mediaType": "application/xml+gpx",
+ "url": "https://demo.wanderer.to/api/v1/files/trails/23fd1747a29c3af/radfernweg_berlin_usedom_c1ftlwpxqq.gpx"
+ }
+ ],
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "location": {
+ "type": "Place",
+ "name": "Berlin, Deutschland",
+ "latitude": 52.516379,
+ "longitude": 13.402514
+ },
+ "tag": [
+ {
+ "type": "Note",
+ "name": "category",
+ "content": "Biking"
+ },
+ {
+ "type": "Note",
+ "name": "difficulty",
+ "content": "easy"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_gain",
+ "content": "1755.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_loss",
+ "content": "1795.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "distance",
+ "content": "340287.513156m"
+ },
+ {
+ "type": "Note",
+ "name": "duration",
+ "content": "1298.616667m"
+ },
+ {
+ "id": "https://social.tchncs.de/users/flomp",
+ "type": "Mention",
+ "name": "@flomp@social.tchncs.de",
+ "href": "https://social.tchncs.de/users/flomp"
+ }
+ ],
+ "url": "https://demo.wanderer.to/trail/view/@demo/23fd1747a29c3af",
+ "published": "2025-06-18T18:46:54Z",
+ "startTime": "2020-07-27T00:00:00Z"
+ }
+ },
+ {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/2ok0a8jk137niua",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://social.tchncs.de/users/flomp/inbox",
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/inbox"
+ ],
+ "published": "2025-06-18 14:38:11.150Z",
+ "object": {
+ "id": "https://demo.wanderer.to/api/v1/comment/i2xy97z4kmy8wj5",
+ "type": "Note",
+ "content": "@flomp@social.tchncs.de
Genau!
",
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "inReplyTo": "https://demo.wanderer.to/api/v1/trail/c7fba19d7f3121e",
+ "published": "2025-06-18T14:38:11Z"
+ }
+ },
+ {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/um1cjums1ls0vhr",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers"
+ ],
+ "published": "2025-06-18 14:37:03.367Z",
+ "object": {
+ "id": "https://demo.wanderer.to/api/v1/trail/c7fba19d7f3121e",
+ "type": "Note",
+ "name": "Herzogstand",
+ "content": "Schöne Routehttps://demo.wanderer.to/trail/view/@demo/c7fba19d7f3121e
",
+ "attachment": [
+ {
+ "type": "Image",
+ "mediaType": "image/jpeg",
+ "url": "https://demo.wanderer.to/api/v1/files/trails/c7fba19d7f3121e/bard_bunny_fkdoahvxn3.svg"
+ },
+ {
+ "type": "Document",
+ "mediaType": "application/xml+gpx",
+ "url": "https://demo.wanderer.to/api/v1/files/trails/c7fba19d7f3121e/herzogstand_8itqbamj9j.gpx"
+ }
+ ],
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "location": {
+ "type": "Place",
+ "name": "Kochel am See, Bayern, Deutschland",
+ "latitude": 47.62039,
+ "longitude": 11.34908
+ },
+ "tag": [
+ {
+ "type": "Note",
+ "name": "category",
+ "content": "Biking"
+ },
+ {
+ "type": "Note",
+ "name": "difficulty",
+ "content": "easy"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_gain",
+ "content": "950.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_loss",
+ "content": "950.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "distance",
+ "content": "14040.219641m"
+ },
+ {
+ "type": "Note",
+ "name": "duration",
+ "content": "84.333333m"
+ }
+ ],
+ "url": "https://demo.wanderer.to/trail/view/@demo/c7fba19d7f3121e",
+ "published": "2025-06-18T14:37:03Z",
+ "startTime": "2010-01-01T00:00:00Z"
+ }
+ },
+ {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/zhum5i1znle0u5s",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://social.tchncs.de/users/flomp/inbox",
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/inbox"
+ ],
+ "published": "2025-06-18 14:32:29.664Z",
+ "object": {
+ "id": "https://demo.wanderer.to/api/v1/comment/9jk7qjtv177hlf2",
+ "type": "Note",
+ "content": "@flomp@social.tchncs.de
Stimmt!
",
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "inReplyTo": "https://demo.wanderer.to/api/v1/activitypub/trail/2ce3af7a2e80f52",
+ "published": "2025-06-18T14:32:29Z"
+ }
+ },
+ {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/8zcj46423elzpbk",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://social.tchncs.de/users/flomp/inbox",
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/inbox"
+ ],
+ "published": "2025-06-18 14:05:12.530Z",
+ "object": {
+ "id": "https://demo.wanderer.to/api/v1/comment/lf95x0w2h0s51l3",
+ "type": "Note",
+ "content": "@flomp@social.tchncs.de
Stimmt, echt lang!
",
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "inReplyTo": "https://demo.wanderer.to/api/v1/trail/2ce3af7a2e80f52",
+ "published": "2025-06-18T14:05:12Z"
+ }
+ },
+ {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/wokmv9tfpu7uvm7",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers"
+ ],
+ "published": "2025-06-18 09:12:01.344Z",
+ "object": {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/trail/a0965dc31384a2b",
+ "type": "Note",
+ "name": "test",
+ "content": "https://demo.wanderer.to/trail/view/@demo/a0965dc31384a2b
",
+ "attachment": [
+ {
+ "type": "Image",
+ "mediaType": "image/jpeg",
+ "url": "https://demo.wanderer.to/api/v1/files/trails/a0965dc31384a2b/route_zqddtv52qk.webp"
+ },
+ {
+ "type": "Document",
+ "mediaType": "application/xml+gpx",
+ "url": "https://demo.wanderer.to/api/v1/files/trails/a0965dc31384a2b/blob_vxtu95acms.gpx"
+ }
+ ],
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "location": {
+ "type": "Place",
+ "name": "Prien am Chiemsee, Bavaria, Germany",
+ "latitude": 47.858914,
+ "longitude": 12.364729
+ },
+ "tag": [
+ {
+ "type": "Note",
+ "name": "category",
+ "content": "Biking"
+ },
+ {
+ "type": "Note",
+ "name": "difficulty",
+ "content": "easy"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_gain",
+ "content": "259.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_loss",
+ "content": "185.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "distance",
+ "content": "16314.394386m"
+ },
+ {
+ "type": "Note",
+ "name": "duration",
+ "content": "94.749000m"
+ }
+ ],
+ "url": "https://demo.wanderer.to/trail/view/@demo/a0965dc31384a2b",
+ "published": "2025-06-18T09:12:01Z",
+ "startTime": "2025-06-18T00:00:00Z"
+ }
+ },
+ {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/fgizij4fvb9s5v6",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo"
+ ],
+ "published": "2025-06-17 21:53:23.738Z",
+ "object": {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/comment/3tn68g135406duj",
+ "type": "Note",
+ "content": "Ja, ist echt so!
",
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "inReplyTo": "https://demo.wanderer.to/api/v1/activitypub/trail/2ce3af7a2e80f52",
+ "published": "2025-06-17T21:53:23Z"
+ }
+ },
+ {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/activity/nix8x5h1hvh75bf",
+ "actor": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Create",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers"
+ ],
+ "published": "2025-06-17 21:40:02.336Z",
+ "object": {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/trail/2ce3af7a2e80f52",
+ "type": "Note",
+ "name": "12 days in the Zugspitz region on the peak hiking trail",
+ "content": "https://demo.wanderer.to/trail/view/@demo/2ce3af7a2e80f52
",
+ "attachment": [
+ {
+ "type": "Image",
+ "mediaType": "image/jpeg",
+ "url": "https://demo.wanderer.to/api/v1/files/trails/2ce3af7a2e80f52/route_ldv172t0my.webp"
+ },
+ {
+ "type": "Document",
+ "mediaType": "application/xml+gpx",
+ "url": "https://demo.wanderer.to/api/v1/files/trails/2ce3af7a2e80f52/12_days_in_the_zugspitz_region_on_the_peak_hiking_trail_5ts04zgsuk.gpx"
+ }
+ ],
+ "attributedTo": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "location": {
+ "type": "Place",
+ "name": "Murnau am Staffelsee, Bayern, Deutschland",
+ "latitude": 47.678592,
+ "longitude": 11.196068
+ },
+ "tag": [
+ {
+ "type": "Note",
+ "name": "category",
+ "content": "Biking"
+ },
+ {
+ "type": "Note",
+ "name": "difficulty",
+ "content": "easy"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_gain",
+ "content": "8902.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "elevation_loss",
+ "content": "8906.000000m"
+ },
+ {
+ "type": "Note",
+ "name": "distance",
+ "content": "202403.824936m"
+ },
+ {
+ "type": "Note",
+ "name": "duration",
+ "content": "4037.183333m"
+ }
+ ],
+ "url": "https://demo.wanderer.to/trail/view/@demo/2ce3af7a2e80f52",
+ "published": "2025-06-17T21:40:02Z",
+ "startTime": "2025-06-14T00:00:00Z"
+ }
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/activitypub/user/{handle}/inbox": {
+ "post": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "Expects a valid, signed ActivityPub activity as json input",
+ "tags": [],
+ "parameters": [
+ {
+ "name": "handle",
+ "in": "path",
+ "description": "",
+ "required": true,
+ "example": "@user@domain",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/activity+json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/activitypub/user/{handle}/following": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "",
+ "tags": [],
+ "parameters": [
+ {
+ "name": "handle",
+ "in": "path",
+ "description": "",
+ "required": true,
+ "example": "@user@domain",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/activity+json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "@context": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "type": {
+ "type": "string"
+ },
+ "first": {
+ "type": "string"
+ },
+ "partOf": {
+ "type": "string"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "orderedItems": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "@context",
+ "type",
+ "first",
+ "partOf",
+ "totalItems",
+ "orderedItems"
+ ]
+ },
+ "example": {
+ "@context": [
+ "https://www.w3.org/ns/activitystreams"
+ ],
+ "type": "OrderedCollectionPage",
+ "first": "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers?page=1",
+ "partOf": "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers",
+ "totalItems": 3,
+ "orderedItems": [
+ "https://social.tchncs.de/users/flomp",
+ "https://trails.magdeburg.jetzt/api/v1/activitypub/user/momar",
+ "https://darmstadt.social/users/stormii"
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/activitypub/user/{handle}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "",
+ "tags": [],
+ "parameters": [
+ {
+ "name": "handle",
+ "in": "path",
+ "description": "",
+ "required": true,
+ "example": "@user@domain",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/activity+json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "@context": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inbox": {
+ "type": "string"
+ },
+ "outbox": {
+ "type": "string"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "preferredUsername": {
+ "type": "string"
+ },
+ "followers": {
+ "type": "string"
+ },
+ "following": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ },
+ "published": {
+ "type": "string"
+ },
+ "icon": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "url"
+ ]
+ },
+ "publicKey": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "publicKeyPem": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "owner",
+ "publicKeyPem"
+ ]
+ }
+ },
+ "required": [
+ "@context",
+ "id",
+ "type",
+ "inbox",
+ "outbox",
+ "summary",
+ "name",
+ "preferredUsername",
+ "followers",
+ "following",
+ "url",
+ "published",
+ "icon",
+ "publicKey"
+ ]
+ },
+ "example": {
+ "@context": [
+ "https://www.w3.org/ns/activitystreams"
+ ],
+ "id": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "type": "Person",
+ "inbox": "https://demo.wanderer.to/api/v1/activitypub/user/demo/inbox",
+ "outbox": "https://demo.wanderer.to/api/v1/activitypub/user/demo/outbox",
+ "summary": "Born the day we installed the site.",
+ "name": "demo",
+ "preferredUsername": "demo",
+ "followers": "https://demo.wanderer.to/api/v1/activitypub/user/demo/followers",
+ "following": "https://demo.wanderer.to/api/v1/activitypub/user/demo/following",
+ "url": "https://demo.wanderer.to/profile/@demo",
+ "published": "2025-05-05T15:07:59.943Z",
+ "icon": {
+ "type": "Image",
+ "url": "https://demo.wanderer.to/api/v1/files/users/26b1si1344ficl6/wlezq_um7vh2722q.jpg"
+ },
+ "publicKey": {
+ "id": "https://demo.wanderer.to/api/v1/activitypub/user/demo#main-key",
+ "owner": "https://demo.wanderer.to/api/v1/activitypub/user/demo",
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw0xyaRWP5X955bwSnUbr\nmwEF/2Fdmn5nlRRmEvej1BR0oBcPMVPYrrK4sz37mrAJ7Wbmg4KjmSDEROD4sApr\nM5FmKeU1OBsV2O3bL1DSW/8PXaf4JQRgl0AO+LiSAd7A/GO0viAzJXyJT4Rpaamf\n8Naclh7YR5E4JXrsjahPEWtUWcQ4g8Yhc6n2ptQ33ACI7Q1R3+U7q1tMaRCKAbdT\nbRahzqGs3iSxV+FjnsMR109KqDQJDMjwRB11USJTA4/nMpV6w8RS+171xNHl12Sg\nGpiuusmXMYYuoECdKDtLY7AsntusYMzXUjPzKfE+5EqPmIj5OTbg3A24p9hWIv5s\nmwIDAQAB\n-----END PUBLIC KEY-----\n"
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/auth/login": {
+ "post": {
+ "summary": "login",
+ "deprecated": false,
+ "description": "Authenticates a registered user. The session is returned in a cookie named `pb_auth`. You need to include this cookie in subsequent requests.",
+ "operationId": "login",
+ "tags": [
+ "auth"
+ ],
+ "parameters": [
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "username": {
+ "type": "string",
+ "minLength": 3
+ },
+ "password": {
+ "type": "string",
+ "minLength": 8
+ }
+ },
+ "required": [
+ "username",
+ "password"
+ ]
+ },
+ "example": {
+ "username": "admin",
+ "password": "12345678"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "record": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "emailVisibility": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "token": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "verified": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "avatar",
+ "collectionId",
+ "collectionName",
+ "created",
+ "email",
+ "emailVisibility",
+ "id",
+ "token",
+ "updated",
+ "username",
+ "verified"
+ ]
+ },
+ "token": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "record",
+ "token"
+ ]
+ },
+ "example": {
+ "record": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "_pb_users_auth_",
+ "collectionName": "users",
+ "created": "2024-06-29 19:23:47.731Z",
+ "email": "c.beutel08@googlemail.com",
+ "emailVisibility": false,
+ "id": "3mugf953w4a9fg5",
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA",
+ "updated": "2024-12-30 18:36:39.161Z",
+ "username": "Flomp",
+ "verified": true
+ },
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb2xsZWN0aW9uSWQiOiJfcGJfdXNlcnNfYXV0aF8iLCJleHAiOjE3MzY4MDEwMjksImlkIjoiM211Z2Y5NTN3NGE5Zmc1IiwidHlwZSI6ImF1dGhSZWNvcmQifQ.LBMx7FuCR4eRC6zG96TDX6BfEKMHBoo-9eQ9LvpU0rg"
+ }
+ }
+ },
+ "headers": {
+ "set-cookie": {
+ "example": "pb_auth=%7B%22token%22%3A%22eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb2xsZWN0aW9uSWQiOiJfcGJfdXNlcnNfYXV0aF8iLCJleHAiOjE3MzcxMjY5MjQsImlkIjoiM211Z2Y5NTN3NGE5Zmc1IiwidHlwZSI6ImF1dGhSZWNvcmQifQ.F-gRu-w_oUvt9GqjjGKZe18smdhtMO6oYhB36KJ5odo%22%2C%22model%22%3A%7B%22avatar%22%3A%2223xxesym0e9w18z2904frnpgy7_OzsVanAmWP.jpg%22%2C%22bio%22%3A%22Enim%20beatae%20labore%20vel.%20Pariatur%20hic%20doloribus%20quia%20quasi%20eos.%20Cumque%20error%20nobis.%22%2C%22collectionId%22%3A%22_pb_users_auth_%22%2C%22collectionName%22%3A%22users%22%2C%22created%22%3A%222024-06-29%2019%3A23%3A47.731Z%22%2C%22email%22%3A%22mymail%40gmail.com%22%2C%22emailVisibility%22%3Afalse%2C%22id%22%3A%223mugf953w4a9fg5%22%2C%22token%22%3A%22eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA%22%2C%22updated%22%3A%222025-01-03%2012%3A32%3A15.270Z%22%2C%22username%22%3A%22Flomp%22%2C%22verified%22%3Atrue%7D%7D; Path=/; Expires=Fri, 17 Jan 2025 15:15:24 GMT; SameSite=Strict",
+ "required": false,
+ "description": "Contains the authentication cookie",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Failed to authenticate.",
+ "detail": {
+ "code": 400,
+ "message": "Failed to authenticate.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid Params": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "expected": {
+ "type": "string"
+ },
+ "received": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "invalid_type",
+ "expected": "string",
+ "received": "undefined",
+ "path": [
+ "password"
+ ],
+ "message": "Required"
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid JSON": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "message"
+ ]
+ },
+ "example": {
+ "message": "invalid_json"
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ }
+ },
+ "/category": {
+ "get": {
+ "summary": "list",
+ "deprecated": false,
+ "description": "Lists all categories.",
+ "operationId": "listCategories",
+ "tags": [
+ "category"
+ ],
+ "parameters": [
+ {
+ "name": "page",
+ "in": "query",
+ "description": "Page number starting at 1",
+ "required": false,
+ "example": 1,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "perPage",
+ "in": "query",
+ "description": "Items per page",
+ "required": false,
+ "example": 5,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "sort",
+ "in": "query",
+ "description": "Sort string (-/+)",
+ "required": false,
+ "example": "-created",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "filter",
+ "in": "query",
+ "description": "Filter string (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)",
+ "required": false,
+ "example": "name=\"abc\"",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "id",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "my-key",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "page": {
+ "type": "integer"
+ },
+ "perPage": {
+ "type": "integer"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "totalPages": {
+ "type": "integer"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "img": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "img",
+ "name",
+ "updated"
+ ]
+ }
+ }
+ },
+ "required": [
+ "page",
+ "perPage",
+ "totalItems",
+ "totalPages",
+ "items"
+ ]
+ },
+ "example": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 6,
+ "totalPages": 2,
+ "items": [
+ {
+ "collectionId": "kjxvi8asj2igqwf",
+ "collectionName": "categories",
+ "created": "2024-06-29 19:23:12.632Z",
+ "id": "8m2qclsl6p8at9k",
+ "img": "hiking_EwOAWJFKCg.jpg",
+ "name": "Hiking",
+ "updated": "2024-06-29 19:23:12.632Z"
+ },
+ {
+ "collectionId": "kjxvi8asj2igqwf",
+ "collectionName": "categories",
+ "created": "2024-06-29 19:23:12.648Z",
+ "id": "x5y2ikswxzoznek",
+ "img": "walking_YOtlMqoDps.jpg",
+ "name": "Walking",
+ "updated": "2024-06-29 19:23:12.648Z"
+ },
+ {
+ "collectionId": "kjxvi8asj2igqwf",
+ "collectionName": "categories",
+ "created": "2024-06-29 19:23:12.658Z",
+ "id": "9ecf7bunl88bt4k",
+ "img": "climbing_vRyCdFwURk.jpg",
+ "name": "Climbing",
+ "updated": "2024-06-29 19:23:12.658Z"
+ },
+ {
+ "collectionId": "kjxvi8asj2igqwf",
+ "collectionName": "categories",
+ "created": "2024-06-29 19:23:12.669Z",
+ "id": "pbwx1lg2nmcih0w",
+ "img": "skiing_KdUASbxv4C.jpg",
+ "name": "Skiing",
+ "updated": "2024-06-29 19:23:12.669Z"
+ },
+ {
+ "collectionId": "kjxvi8asj2igqwf",
+ "collectionName": "categories",
+ "created": "2024-06-29 19:23:12.679Z",
+ "id": "7sqwezntokmbvdr",
+ "img": "canoeing_QBmwxRx6uh.jpg",
+ "name": "Canoeing",
+ "updated": "2024-06-29 19:23:12.679Z"
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 0,
+ "type": "number",
+ "inclusive": false,
+ "exact": false,
+ "message": "Number must be greater than 0",
+ "path": [
+ "page"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid sort/expand/filter": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Something went wrong while processing your request.",
+ "detail": {
+ "code": 400,
+ "message": "Something went wrong while processing your request.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ }
+ },
+ "/comment": {
+ "get": {
+ "summary": "list",
+ "deprecated": false,
+ "description": "Lists all comments.",
+ "operationId": "listComments",
+ "tags": [
+ "comment"
+ ],
+ "parameters": [
+ {
+ "name": "page",
+ "in": "query",
+ "description": "Page number starting at 1",
+ "required": false,
+ "example": 1,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "perPage",
+ "in": "query",
+ "description": "Items per page",
+ "required": false,
+ "example": 5,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "sort",
+ "in": "query",
+ "description": "Sort string (-/+)",
+ "required": false,
+ "example": "-created",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "filter",
+ "in": "query",
+ "description": "Filter string (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)",
+ "required": false,
+ "example": "text=\"abc\"",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "trail",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "my-key",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "iri": {
+ "type": "string"
+ },
+ "text": {
+ "type": "string"
+ },
+ "trail": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "iri",
+ "text",
+ "trail",
+ "updated"
+ ]
+ }
+ },
+ "page": {
+ "type": "integer"
+ },
+ "perPage": {
+ "type": "integer"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "totalPages": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "items",
+ "page",
+ "perPage",
+ "totalItems",
+ "totalPages"
+ ]
+ },
+ "example": {
+ "items": [
+ {
+ "author": "8uvv7d6dh667xh1",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2025-05-27 07:58:10.194Z",
+ "id": "224z7nsu3m35b6k",
+ "iri": "",
+ "text": "https://readerclub.my.id/book.php?isbn=216156650-rewind-it-back",
+ "trail": "072fba5eaee0e2b",
+ "updated": "2025-05-27 07:58:10.194Z"
+ },
+ {
+ "author": "l1a076cl9w16g9b",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2025-06-17 21:40:20.796Z",
+ "id": "2wrgay454lu7t08",
+ "iri": "https://social.tchncs.de/users/flomp/statuses/114700872618854877",
+ "text": "@demo
Ganz schön lang!
",
+ "trail": "2ce3af7a2e80f52",
+ "updated": "2025-06-17 21:40:20.796Z"
+ },
+ {
+ "author": "pnat0l9g6p3nh2a",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2025-05-31 14:14:40.077Z",
+ "id": "30h73u05t60ku3u",
+ "iri": "",
+ "text": "Fixe!",
+ "trail": "c0ec3039d47cc48",
+ "updated": "2025-05-31 14:14:40.077Z"
+ },
+ {
+ "author": "pnat0l9g6p3nh2a",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2025-06-18 18:48:15.477Z",
+ "id": "32wf88038cb800i",
+ "iri": "",
+ "text": "@flomp@social.tchncs.de
Ja, echt toll!
",
+ "trail": "23fd1747a29c3af",
+ "updated": "2025-06-18 18:48:15.477Z"
+ },
+ {
+ "author": "pnat0l9g6p3nh2a",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2025-05-31 13:01:03.235Z",
+ "id": "5nm8og6umaiipc8",
+ "iri": "",
+ "text": "stuff",
+ "trail": "8beaf58dbf3ce95",
+ "updated": "2025-05-31 13:01:03.235Z"
+ }
+ ],
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 14,
+ "totalPages": 3
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 0,
+ "type": "number",
+ "inclusive": false,
+ "exact": false,
+ "message": "Number must be greater than 0",
+ "path": [
+ "page"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid sort/expand/filter": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Something went wrong while processing your request.",
+ "detail": {
+ "code": 400,
+ "message": "Something went wrong while processing your request.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ },
+ "put": {
+ "summary": "create",
+ "deprecated": false,
+ "description": "Creates a comment. ",
+ "operationId": "createComment",
+ "tags": [
+ "comment"
+ ],
+ "parameters": [
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request id. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ },
+ "text": {
+ "type": "string"
+ },
+ "trail": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ "required": [
+ "text",
+ "author",
+ "trail"
+ ]
+ },
+ "example": {
+ "text": "test",
+ "trail": "3zdz20mt9243f60",
+ "author": "z014o6bpcg680mg"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "emailVisibility": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "token": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "verified": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "emailVisibility",
+ "id",
+ "token",
+ "updated",
+ "username",
+ "verified"
+ ]
+ },
+ "trail": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "difficulty": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "number"
+ },
+ "duration": {
+ "type": "integer"
+ },
+ "elevation_gain": {
+ "type": "integer"
+ },
+ "elevation_loss": {
+ "type": "integer"
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "location": {
+ "type": "string"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "summit_logs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "thumbnail": {
+ "type": "integer"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "waypoints": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "author",
+ "category",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "description",
+ "difficulty",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "gpx",
+ "id",
+ "lat",
+ "location",
+ "lon",
+ "name",
+ "photos",
+ "public",
+ "summit_logs",
+ "thumbnail",
+ "updated",
+ "waypoints"
+ ]
+ }
+ },
+ "required": [
+ "author",
+ "trail"
+ ]
+ },
+ "id": {
+ "type": "string"
+ },
+ "rating": {
+ "type": "integer"
+ },
+ "text": {
+ "type": "string"
+ },
+ "trail": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "expand",
+ "id",
+ "rating",
+ "text",
+ "trail",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2025-01-02 20:48:00.278Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "_pb_users_auth_",
+ "collectionName": "users",
+ "created": "2024-06-29 19:23:47.731Z",
+ "emailVisibility": false,
+ "id": "3mugf953w4a9fg5",
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA",
+ "updated": "2024-12-30 18:36:39.161Z",
+ "username": "Flomp",
+ "verified": true
+ },
+ "trail": {
+ "author": "3mugf953w4a9fg5",
+ "category": "pbwx1lg2nmcih0w",
+ "collectionId": "e864strfxo14pm4",
+ "collectionName": "trails",
+ "created": "2024-12-30 18:57:35.453Z",
+ "date": "2024-12-30 00:00:00.000Z",
+ "description": "",
+ "difficulty": "moderate",
+ "distance": 5631.307320599051,
+ "duration": 0,
+ "elevation_gain": 76,
+ "elevation_loss": 76,
+ "gpx": "blob_0E0x721wan.gpx",
+ "id": "z94vgei3jdc37k4",
+ "lat": 47.385232,
+ "location": "",
+ "lon": 9.655863,
+ "name": "Die Pottsau",
+ "photos": [
+ "23xxesym0e9w18z2904frnpgy7_2SQmCCI6DV.jpg",
+ "caret_right_solid_9154Rrvk6B.svg"
+ ],
+ "public": false,
+ "summit_logs": [
+ "95bb1d77c8dfa98"
+ ],
+ "thumbnail": 1,
+ "updated": "2024-12-30 18:59:56.924Z",
+ "waypoints": [
+ "7f6d2a8c9d50136",
+ "60c2d435a5b66ed"
+ ]
+ }
+ },
+ "id": "sv3finqrp3951av",
+ "rating": 0,
+ "text": "API comment",
+ "trail": "z94vgei3jdc37k4",
+ "updated": "2025-01-02 20:48:00.278Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Failed to create record.",
+ "detail": {
+ "code": 400,
+ "message": "Failed to create record.",
+ "data": {
+ "author": {
+ "code": "validation_missing_rel_records",
+ "message": "Failed to find all relation records with the provided ids."
+ }
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid Params": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "expected": {
+ "type": "string"
+ },
+ "received": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "invalid_type",
+ "expected": "string",
+ "received": "number",
+ "path": [
+ "text"
+ ],
+ "message": "Expected string, received number"
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/comment/{id}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "Shows a single comment.",
+ "operationId": "showComment",
+ "tags": [
+ "comment"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Comment Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "iri": {
+ "type": "string"
+ },
+ "text": {
+ "type": "string"
+ },
+ "trail": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "iri",
+ "text",
+ "trail",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "pnat0l9g6p3nh2a",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2025-06-18 18:48:15.477Z",
+ "id": "32wf88038cb800i",
+ "iri": "",
+ "text": "@flomp@social.tchncs.de
Ja, echt toll!
",
+ "trail": "23fd1747a29c3af",
+ "updated": "2025-06-18 18:48:15.477Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ },
+ "post": {
+ "summary": "update",
+ "deprecated": false,
+ "description": "Updates a comment.",
+ "operationId": "updateComment",
+ "tags": [
+ "comment"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Comment Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "type": "string"
+ },
+ "trail": {
+ "type": "string"
+ },
+ "author": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "text",
+ "trail",
+ "author"
+ ]
+ },
+ "example": ""
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "rating": {
+ "type": "integer"
+ },
+ "text": {
+ "type": "string"
+ },
+ "trail": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "rating",
+ "text",
+ "trail",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2025-01-02 20:43:00.030Z",
+ "id": "tmof4bjvtw0sqqu",
+ "rating": 0,
+ "text": "API comment updated",
+ "trail": "z94vgei3jdc37k4",
+ "updated": "2025-01-02 21:00:03.866Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "delete": {
+ "summary": "delete",
+ "deprecated": false,
+ "description": "Deletes a comment.",
+ "operationId": "deleteComment",
+ "tags": [
+ "comment"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Comment Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "acknowledged": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "acknowledged"
+ ]
+ },
+ "example": {
+ "acknowledged": true
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/follow": {
+ "get": {
+ "summary": "list",
+ "deprecated": false,
+ "description": "Lists all follows.",
+ "operationId": "listFollows",
+ "tags": [
+ "follow"
+ ],
+ "parameters": [
+ {
+ "name": "page",
+ "in": "query",
+ "description": "Page number starting at 1",
+ "required": false,
+ "example": 1,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "perPage",
+ "in": "query",
+ "description": "Items per page",
+ "required": false,
+ "example": 5,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "sort",
+ "in": "query",
+ "description": "Sort string (-/+)",
+ "required": false,
+ "example": "-created",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "filter",
+ "in": "query",
+ "description": "Filter string (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)",
+ "required": false,
+ "example": "follower=\"3mugf953w4a9fg5\"",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "follower",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "my-key",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "type",
+ "in": "query",
+ "description": "Return followers or following",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "enum": [
+ "followers",
+ "following"
+ ]
+ }
+ },
+ {
+ "name": "handle",
+ "in": "query",
+ "description": "Handle of the actor in question (@user@domain)",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "page": {
+ "type": "integer"
+ },
+ "perPage": {
+ "type": "integer"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "totalPages": {
+ "type": "integer"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "followee": {
+ "type": "string"
+ },
+ "follower": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "follower": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ },
+ "followee": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ }
+ },
+ "required": [
+ "follower",
+ "followee"
+ ]
+ }
+ },
+ "required": [
+ "collectionId",
+ "collectionName",
+ "created",
+ "followee",
+ "follower",
+ "id",
+ "updated",
+ "expand"
+ ]
+ }
+ }
+ },
+ "required": [
+ "page",
+ "perPage",
+ "totalItems",
+ "totalPages",
+ "items"
+ ]
+ },
+ "example": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 1,
+ "totalPages": 1,
+ "items": [
+ {
+ "collectionId": "8obn1ukumze565i",
+ "collectionName": "follows",
+ "created": "2024-12-20 23:22:18.445Z",
+ "followee": "3mugf953w4a9fg5",
+ "follower": "znhd3hgrxl85c9f",
+ "id": "xajdtx5j8l10wov",
+ "updated": "2024-12-20 23:22:18.445Z",
+ "expand": {
+ "follower": {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ },
+ "followee": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 0,
+ "type": "number",
+ "inclusive": false,
+ "exact": false,
+ "message": "Number must be greater than 0",
+ "path": [
+ "page"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid sort/expand/filter": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Something went wrong while processing your request.",
+ "detail": {
+ "code": 400,
+ "message": "Something went wrong while processing your request.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ },
+ "put": {
+ "summary": "create",
+ "deprecated": false,
+ "description": "Creates a follow.",
+ "operationId": "createFollow",
+ "tags": [
+ "follow"
+ ],
+ "parameters": [
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request id. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "follower": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15,
+ "description": "User Id of person following"
+ },
+ "followee": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15,
+ "description": "User Id of person being followed"
+ }
+ },
+ "required": [
+ "follower",
+ "followee"
+ ]
+ },
+ "example": {
+ "text": "test",
+ "trail": "3zdz20mt9243f60",
+ "author": "z014o6bpcg680mg"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "follower": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "emailVisibility": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "token": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "verified": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "emailVisibility",
+ "id",
+ "token",
+ "updated",
+ "username",
+ "verified"
+ ]
+ }
+ },
+ "required": [
+ "follower"
+ ]
+ },
+ "followee": {
+ "type": "string"
+ },
+ "follower": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "collectionId",
+ "collectionName",
+ "created",
+ "expand",
+ "followee",
+ "follower",
+ "id",
+ "updated"
+ ]
+ },
+ "example": {
+ "collectionId": "8obn1ukumze565i",
+ "collectionName": "follows",
+ "created": "2025-01-02 22:01:46.741Z",
+ "expand": {
+ "follower": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "_pb_users_auth_",
+ "collectionName": "users",
+ "created": "2024-06-29 19:23:47.731Z",
+ "emailVisibility": false,
+ "id": "3mugf953w4a9fg5",
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA",
+ "updated": "2024-12-30 18:36:39.161Z",
+ "username": "Flomp",
+ "verified": true
+ }
+ },
+ "followee": "znhd3hgrxl85c9f",
+ "follower": "3mugf953w4a9fg5",
+ "id": "0vfwhxsdvhf2jn5",
+ "updated": "2025-01-02 22:01:46.741Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Failed to create record.",
+ "detail": {
+ "code": 400,
+ "message": "Failed to create record.",
+ "data": {
+ "author": {
+ "code": "validation_missing_rel_records",
+ "message": "Failed to find all relation records with the provided ids."
+ }
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid Params": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "followee"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/follow/{id}": {
+ "delete": {
+ "summary": "delete",
+ "deprecated": false,
+ "description": "Deletes a follow.",
+ "operationId": "deleteFollow",
+ "tags": [
+ "follow"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Follow Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "acknowledged": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "acknowledged"
+ ]
+ },
+ "example": {
+ "acknowledged": true
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/trail-share": {
+ "get": {
+ "summary": "list",
+ "deprecated": false,
+ "description": "Lists all trail-shares.",
+ "operationId": "listTrailShares",
+ "tags": [
+ "trail-share"
+ ],
+ "parameters": [
+ {
+ "name": "page",
+ "in": "query",
+ "description": "Page number starting at 1",
+ "required": false,
+ "example": 1,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "perPage",
+ "in": "query",
+ "description": "Items per page",
+ "required": false,
+ "example": 5,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "sort",
+ "in": "query",
+ "description": "Sort string (-/+)",
+ "required": false,
+ "example": "-created",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "filter",
+ "in": "query",
+ "description": "Filter string (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)",
+ "required": false,
+ "example": "permission=\"view\"",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "user",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "my-key",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "page": {
+ "type": "integer"
+ },
+ "perPage": {
+ "type": "integer"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "totalPages": {
+ "type": "integer"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "trail": {
+ "type": "string"
+ },
+ "permission": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "user": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ }
+ },
+ "required": [
+ "user"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "page",
+ "perPage",
+ "totalItems",
+ "totalPages",
+ "items"
+ ]
+ },
+ "examples": {
+ "1": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 30,
+ "totalPages": 6,
+ "items": [
+ {
+ "collectionId": "1mns8mlal6uf9ku",
+ "collectionName": "trail_share",
+ "created": "2024-11-15 20:00:10.603Z",
+ "id": "027pf52phm4a5vx",
+ "permission": "view",
+ "trail": "l4u85lr0x6jgojd",
+ "updated": "2024-11-15 20:00:10.603Z",
+ "user": "3mugf953w4a9fg5",
+ "expand": {
+ "user": {
+ "avatar": "23xxesym0e9w18z2904frnpgy7_OzsVanAmWP.jpg",
+ "bio": "Enim beatae labore vel. Pariatur hic doloribus quia quasi eos. Cumque error nobis.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "collectionId": "1mns8mlal6uf9ku",
+ "collectionName": "trail_share",
+ "created": "2024-09-14 14:36:36.470Z",
+ "id": "0q3pknqtbf5zsmu",
+ "permission": "view",
+ "trail": "2o9c3pxfvrzclud",
+ "updated": "2024-09-14 14:36:36.470Z",
+ "user": "znhd3hgrxl85c9f",
+ "expand": {
+ "user": {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ }
+ }
+ },
+ {
+ "collectionId": "1mns8mlal6uf9ku",
+ "collectionName": "trail_share",
+ "created": "2024-09-14 13:05:39.661Z",
+ "id": "1n7oo2f14d2bwi5",
+ "permission": "view",
+ "trail": "yesm2tqc6jok8jq",
+ "updated": "2024-09-14 13:05:39.661Z",
+ "user": "znhd3hgrxl85c9f",
+ "expand": {
+ "user": {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ }
+ }
+ },
+ {
+ "collectionId": "1mns8mlal6uf9ku",
+ "collectionName": "trail_share",
+ "created": "2024-12-02 17:46:13.399Z",
+ "id": "23mpznfesfbyha1",
+ "permission": "view",
+ "trail": "6558yf0g9knodhv",
+ "updated": "2024-12-02 17:46:13.399Z",
+ "user": "znhd3hgrxl85c9f",
+ "expand": {
+ "user": {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ }
+ }
+ },
+ {
+ "collectionId": "1mns8mlal6uf9ku",
+ "collectionName": "trail_share",
+ "created": "2024-09-14 14:36:36.155Z",
+ "id": "2lhw2wak0i71rmr",
+ "permission": "view",
+ "trail": "oy1auygew9fvha0",
+ "updated": "2024-09-14 14:36:36.155Z",
+ "user": "znhd3hgrxl85c9f",
+ "expand": {
+ "user": {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "3": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 5,
+ "totalPages": 1,
+ "items": [
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-20 21:43:09.964Z",
+ "id": "13ikooi1f6tgjvd",
+ "rating": 0,
+ "text": "Comment",
+ "trail": "267r63tmbyezpck",
+ "updated": "2024-12-20 21:43:09.964Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-20 20:37:33.558Z",
+ "id": "1rjjl1riy4jrdmm",
+ "rating": 0,
+ "text": "C",
+ "trail": "l4u85lr0x6jgojd",
+ "updated": "2024-12-20 20:37:33.558Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "znhd3hgrxl85c9f",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-19 21:18:30.979Z",
+ "id": "6vcudpc4wgc0cku",
+ "rating": 0,
+ "text": "Zehn Ziegen zogen zehn Zentner Zucker zum Zoo!",
+ "trail": "oual4h0zovut2ph",
+ "updated": "2024-12-19 21:18:30.979Z",
+ "expand": {
+ "author": {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-02 17:43:26.303Z",
+ "id": "p4r2x69bq7iz8ah",
+ "rating": 0,
+ "text": "Geht das?",
+ "trail": "6558yf0g9knodhv",
+ "updated": "2024-12-02 17:43:26.303Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-21 00:37:08.033Z",
+ "id": "vkwrak7tytf9vur",
+ "rating": 0,
+ "text": "Anim minim consequat veniam ad laboris velit magna veniam dolor. Incididunt in non fugiat aliqua. Ullamco sint ipsum cupidatat Lorem deserunt id quis. Irure minim duis pariatur irure commodo non officia cillum et exercitation laborum. Enim nisi ipsum velit nisi. Consectetur et ad enim laboris.\n\nLorem commodo ex deserunt deserunt fugiat et consequat sit ad consequat nulla quis reprehenderit. Commodo sit eu consequat reprehenderit elit labore Lorem pariatur enim do ad irure ex ad. Nisi magna irure est dolore elit laboris commodo consectetur sint aliquip sit. Do exercitation ullamco incididunt culpa eu dolore dolore sint esse laboris elit enim cillum excepteur. Sit veniam veniam ex deserunt Lorem Lorem ut incididunt dolor sint nulla eiusmod magna adipisicing.",
+ "trail": "267r63tmbyezpck",
+ "updated": "2024-12-21 00:37:08.033Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid sort/expand/filter": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Something went wrong while processing your request.",
+ "detail": {
+ "code": 400,
+ "message": "Something went wrong while processing your request.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "put": {
+ "summary": "create",
+ "deprecated": false,
+ "description": "Creates a trail share. ",
+ "operationId": "createTrailShare",
+ "tags": [
+ "trail-share"
+ ],
+ "parameters": [
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request id. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "trail": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15,
+ "description": "Trail Id"
+ },
+ "user": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15,
+ "description": "User Id"
+ },
+ "permission": {
+ "type": "string",
+ "enum": [
+ "view",
+ "edit"
+ ],
+ "description": "Permissions for user"
+ }
+ },
+ "required": [
+ "trail",
+ "user",
+ "permission"
+ ]
+ },
+ "example": {
+ "trail": "z94vgei3jdc37k4",
+ "user": "z014o6bpcg680mg",
+ "permission": "view"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "trail": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "difficulty": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "number"
+ },
+ "duration": {
+ "type": "integer"
+ },
+ "elevation_gain": {
+ "type": "integer"
+ },
+ "elevation_loss": {
+ "type": "integer"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "emailVisibility": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "token": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "verified": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "emailVisibility",
+ "id",
+ "token",
+ "updated",
+ "username",
+ "verified"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "location": {
+ "type": "string"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "summit_logs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "thumbnail": {
+ "type": "integer"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "waypoints": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "author",
+ "category",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "description",
+ "difficulty",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "expand",
+ "gpx",
+ "id",
+ "lat",
+ "location",
+ "lon",
+ "name",
+ "photos",
+ "public",
+ "summit_logs",
+ "thumbnail",
+ "updated",
+ "waypoints"
+ ]
+ }
+ },
+ "required": [
+ "trail"
+ ]
+ },
+ "id": {
+ "type": "string"
+ },
+ "permission": {
+ "type": "string"
+ },
+ "trail": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "collectionId",
+ "collectionName",
+ "created",
+ "expand",
+ "id",
+ "permission",
+ "trail",
+ "updated",
+ "user"
+ ]
+ },
+ "example": {
+ "collectionId": "1mns8mlal6uf9ku",
+ "collectionName": "trail_share",
+ "created": "2025-01-03 12:41:01.998Z",
+ "expand": {
+ "trail": {
+ "author": "3mugf953w4a9fg5",
+ "category": "pbwx1lg2nmcih0w",
+ "collectionId": "e864strfxo14pm4",
+ "collectionName": "trails",
+ "created": "2024-12-30 18:57:35.453Z",
+ "date": "2024-12-30 00:00:00.000Z",
+ "description": "",
+ "difficulty": "moderate",
+ "distance": 5631.307320599051,
+ "duration": 0,
+ "elevation_gain": 76,
+ "elevation_loss": 76,
+ "expand": {
+ "author": {
+ "avatar": "23xxesym0e9w18z2904frnpgy7_OzsVanAmWP.jpg",
+ "bio": "Enim beatae labore vel. Pariatur hic doloribus quia quasi eos. Cumque error nobis.",
+ "collectionId": "_pb_users_auth_",
+ "collectionName": "users",
+ "created": "2024-06-29 19:23:47.731Z",
+ "emailVisibility": false,
+ "id": "3mugf953w4a9fg5",
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA",
+ "updated": "2025-01-03 12:32:15.270Z",
+ "username": "Flomp",
+ "verified": true
+ }
+ },
+ "gpx": "blob_0E0x721wan.gpx",
+ "id": "z94vgei3jdc37k4",
+ "lat": 47.385232,
+ "location": "",
+ "lon": 9.655863,
+ "name": "Die Pottsau",
+ "photos": [
+ "23xxesym0e9w18z2904frnpgy7_2SQmCCI6DV.jpg",
+ "caret_right_solid_9154Rrvk6B.svg"
+ ],
+ "public": false,
+ "summit_logs": [
+ "95bb1d77c8dfa98"
+ ],
+ "thumbnail": 1,
+ "updated": "2024-12-30 18:59:56.924Z",
+ "waypoints": [
+ "7f6d2a8c9d50136",
+ "60c2d435a5b66ed"
+ ]
+ }
+ },
+ "id": "93jrstjcngapleb",
+ "permission": "view",
+ "trail": "z94vgei3jdc37k4",
+ "updated": "2025-01-03 12:41:01.998Z",
+ "user": "znhd3hgrxl85c9f"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Failed to create record.",
+ "detail": {
+ "code": 400,
+ "message": "Failed to create record.",
+ "data": {
+ "author": {
+ "code": "validation_missing_rel_records",
+ "message": "Failed to find all relation records with the provided ids."
+ }
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid Params": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "expected": {
+ "type": "string"
+ },
+ "received": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "invalid_type",
+ "expected": "string",
+ "received": "number",
+ "path": [
+ "text"
+ ],
+ "message": "Expected string, received number"
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/trail-share/{id}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "Shows a single trail share.",
+ "operationId": "showTrailShare",
+ "tags": [
+ "trail-share"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "List Share Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "permission": {
+ "type": "string"
+ },
+ "trail": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "permission",
+ "trail",
+ "updated",
+ "user"
+ ]
+ },
+ "example": {
+ "collectionId": "1mns8mlal6uf9ku",
+ "collectionName": "trail_share",
+ "created": "2024-12-08 21:48:07.886Z",
+ "id": "98ksbvxgqlp45jl",
+ "permission": "view",
+ "trail": "oual4h0zovut2ph",
+ "updated": "2024-12-08 21:48:07.886Z",
+ "user": "znhd3hgrxl85c9f"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "post": {
+ "summary": "update",
+ "deprecated": false,
+ "description": "Updates a trail share.",
+ "operationId": "updateTrailShare",
+ "tags": [
+ "trail-share"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "List Share Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "permission": {
+ "type": "string",
+ "enum": [
+ "view",
+ "edit"
+ ]
+ }
+ }
+ },
+ "example": {
+ "permission": "view"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "permission": {
+ "type": "string"
+ },
+ "trail": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "permission",
+ "trail",
+ "updated",
+ "user"
+ ]
+ },
+ "example": {
+ "collectionId": "1mns8mlal6uf9ku",
+ "collectionName": "trail_share",
+ "created": "2025-01-03 12:41:01.998Z",
+ "id": "93jrstjcngapleb",
+ "permission": "edit",
+ "trail": "z94vgei3jdc37k4",
+ "updated": "2025-01-03 12:42:13.052Z",
+ "user": "znhd3hgrxl85c9f"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "delete": {
+ "summary": "delete",
+ "deprecated": false,
+ "description": "Deletes a trail share.",
+ "operationId": "deleteTrailShare",
+ "tags": [
+ "trail-share"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "List Share Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "acknowledged": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "acknowledged"
+ ]
+ },
+ "example": {
+ "acknowledged": true
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/user/anonymous": {
+ "get": {
+ "summary": "list",
+ "deprecated": false,
+ "description": "Lists all anonymized users (email and token are hidden).",
+ "operationId": "listUsersAnonymous",
+ "tags": [
+ "user"
+ ],
+ "parameters": [
+ {
+ "name": "page",
+ "in": "query",
+ "description": "Page number starting at 1",
+ "required": false,
+ "example": 1,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "perPage",
+ "in": "query",
+ "description": "Items per page",
+ "required": false,
+ "example": 5,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "sort",
+ "in": "query",
+ "description": "Sort string (-/+)",
+ "required": false,
+ "example": "-created",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "filter",
+ "in": "query",
+ "description": "Filter string (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)",
+ "required": false,
+ "example": "username=\"Flomp\"",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "id",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "my-key",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "page": {
+ "type": "integer"
+ },
+ "perPage": {
+ "type": "integer"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "totalPages": {
+ "type": "integer"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ }
+ }
+ },
+ "required": [
+ "page",
+ "perPage",
+ "totalItems",
+ "totalPages",
+ "items"
+ ]
+ },
+ "examples": {
+ "1": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 2,
+ "totalPages": 1,
+ "items": [
+ {
+ "avatar": "23xxesym0e9w18z2904frnpgy7_OzsVanAmWP.jpg",
+ "bio": "Enim beatae labore vel. Pariatur hic doloribus quia quasi eos. Cumque error nobis.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ },
+ {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ }
+ ]
+ }
+ },
+ "3": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 5,
+ "totalPages": 1,
+ "items": [
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-20 21:43:09.964Z",
+ "id": "13ikooi1f6tgjvd",
+ "rating": 0,
+ "text": "Comment",
+ "trail": "267r63tmbyezpck",
+ "updated": "2024-12-20 21:43:09.964Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-20 20:37:33.558Z",
+ "id": "1rjjl1riy4jrdmm",
+ "rating": 0,
+ "text": "C",
+ "trail": "l4u85lr0x6jgojd",
+ "updated": "2024-12-20 20:37:33.558Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "znhd3hgrxl85c9f",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-19 21:18:30.979Z",
+ "id": "6vcudpc4wgc0cku",
+ "rating": 0,
+ "text": "Zehn Ziegen zogen zehn Zentner Zucker zum Zoo!",
+ "trail": "oual4h0zovut2ph",
+ "updated": "2024-12-19 21:18:30.979Z",
+ "expand": {
+ "author": {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-02 17:43:26.303Z",
+ "id": "p4r2x69bq7iz8ah",
+ "rating": 0,
+ "text": "Geht das?",
+ "trail": "6558yf0g9knodhv",
+ "updated": "2024-12-02 17:43:26.303Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-21 00:37:08.033Z",
+ "id": "vkwrak7tytf9vur",
+ "rating": 0,
+ "text": "Anim minim consequat veniam ad laboris velit magna veniam dolor. Incididunt in non fugiat aliqua. Ullamco sint ipsum cupidatat Lorem deserunt id quis. Irure minim duis pariatur irure commodo non officia cillum et exercitation laborum. Enim nisi ipsum velit nisi. Consectetur et ad enim laboris.\n\nLorem commodo ex deserunt deserunt fugiat et consequat sit ad consequat nulla quis reprehenderit. Commodo sit eu consequat reprehenderit elit labore Lorem pariatur enim do ad irure ex ad. Nisi magna irure est dolore elit laboris commodo consectetur sint aliquip sit. Do exercitation ullamco incididunt culpa eu dolore dolore sint esse laboris elit enim cillum excepteur. Sit veniam veniam ex deserunt Lorem Lorem ut incididunt dolor sint nulla eiusmod magna adipisicing.",
+ "trail": "267r63tmbyezpck",
+ "updated": "2024-12-21 00:37:08.033Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid sort/expand/filter": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Something went wrong while processing your request.",
+ "detail": {
+ "code": 400,
+ "message": "Something went wrong while processing your request.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/user/anonymous/{id}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "Shows a single anonymized user (email and token are hidden).",
+ "operationId": "showUserAnonymous",
+ "tags": [
+ "user"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "User Id",
+ "required": true,
+ "example": "3mugf953w4a9fg5",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ },
+ "example": {
+ "avatar": "23xxesym0e9w18z2904frnpgy7_OzsVanAmWP.jpg",
+ "bio": "Enim beatae labore vel. Pariatur hic doloribus quia quasi eos. Cumque error nobis.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/user/{id}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "Shows a single user. The only valid id is the one of the logged-in user. Use the \"user/anonymous/{id}\" endpoint for all other users.",
+ "operationId": "showUser",
+ "tags": [
+ "user"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "User Id",
+ "required": true,
+ "example": "3mugf953w4a9fg5",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "emailVisibility": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "token": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "verified": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "email",
+ "emailVisibility",
+ "id",
+ "token",
+ "updated",
+ "username",
+ "verified"
+ ]
+ },
+ "example": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "_pb_users_auth_",
+ "collectionName": "users",
+ "created": "2024-06-29 19:23:47.731Z",
+ "email": "c.beutel08@googlemail.com",
+ "emailVisibility": false,
+ "id": "3mugf953w4a9fg5",
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA",
+ "updated": "2024-12-30 18:36:39.161Z",
+ "username": "Flomp",
+ "verified": true
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "post": {
+ "summary": "update",
+ "deprecated": false,
+ "description": "Updates a user.",
+ "operationId": "updateUser",
+ "tags": [
+ "user"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "User Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "username": {
+ "type": "string",
+ "minLength": 3
+ },
+ "password": {
+ "type": "string",
+ "minLength": 8
+ },
+ "passwordConfirm": {
+ "type": "string",
+ "minLength": 8,
+ "description": "Must be equal to \"password\""
+ },
+ "email": {
+ "type": "string",
+ "format": "email"
+ },
+ "bio": {
+ "type": "string",
+ "description": "User biography"
+ }
+ }
+ },
+ "example": {
+ "username": "Kim_Hettinger23",
+ "password": "minim elit",
+ "passwordConfirm": "minim elit",
+ "email": "Theodora_Kovacek@yahoo.com",
+ "bio": "A sed velit cum esse. Delectus minus nulla animi fugit minima omnis. Perspiciatis voluptas iure ipsa a dignissimos. Sequi magni odio beatae quisquam."
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "emailVisibility": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "token": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "verified": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "email",
+ "emailVisibility",
+ "id",
+ "token",
+ "updated",
+ "username",
+ "verified"
+ ]
+ },
+ "example": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "Enim beatae labore vel. Pariatur hic doloribus quia quasi eos. Cumque error nobis.",
+ "collectionId": "_pb_users_auth_",
+ "collectionName": "users",
+ "created": "2024-06-29 19:23:47.731Z",
+ "email": "mymail@gmail.com",
+ "emailVisibility": false,
+ "id": "3mugf953w4a9fg5",
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA",
+ "updated": "2025-01-03 12:29:55.103Z",
+ "username": "Flomp",
+ "verified": true
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "delete": {
+ "summary": "delete",
+ "deprecated": false,
+ "description": "Deletes a user.",
+ "operationId": "deleteUser",
+ "tags": [
+ "user"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Comment Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "acknowledged": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "acknowledged"
+ ]
+ },
+ "example": {
+ "acknowledged": true
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/user": {
+ "put": {
+ "summary": "create",
+ "deprecated": false,
+ "description": "Creates a user. ",
+ "operationId": "createUser",
+ "tags": [
+ "user"
+ ],
+ "parameters": [
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request id. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "username": {
+ "type": "string",
+ "minLength": 3
+ },
+ "password": {
+ "type": "string",
+ "minLength": 8
+ },
+ "passwordConfirm": {
+ "type": "string",
+ "minLength": 8,
+ "description": "Must be equal to \"password\""
+ },
+ "email": {
+ "type": "string",
+ "format": "email"
+ }
+ },
+ "required": [
+ "username",
+ "password",
+ "passwordConfirm",
+ "email"
+ ]
+ },
+ "example": {
+ "username": "Angela.Pacocha95",
+ "password": "deserunt",
+ "passwordConfirm": "deserunt",
+ "email": "Braulio98@gmail.com"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "emailVisibility": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "token": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "verified": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "avatar",
+ "collectionName",
+ "created",
+ "emailVisibility",
+ "id",
+ "token",
+ "updated",
+ "username",
+ "verified"
+ ]
+ },
+ "example": {
+ "avatar": "",
+ "bio": "",
+ "collectionId": "_pb_users_auth_",
+ "collectionName": "users",
+ "created": "2025-01-03 12:23:01.865Z",
+ "emailVisibility": false,
+ "id": "nfynp8jhat2o4sy",
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSBuZnlucDhqaGF0Mm80c3kgT1Igc2hhcmVzID0gbmZ5bnA4amhhdDJvNHN5In19fQ.RtK_w6Bjqni720FEjVqIwaWhtrqqy5rFPA7qAdPd0iA",
+ "updated": "2025-01-03 12:23:01.867Z",
+ "username": "Dewayne33",
+ "verified": false
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Failed to create record.",
+ "detail": {
+ "code": 400,
+ "message": "Failed to create record.",
+ "data": {
+ "author": {
+ "code": "validation_missing_rel_records",
+ "message": "Failed to find all relation records with the provided ids."
+ }
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid Params": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "expected": {
+ "type": "string"
+ },
+ "received": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "invalid_type",
+ "expected": "string",
+ "received": "number",
+ "path": [
+ "text"
+ ],
+ "message": "Expected string, received number"
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ }
+ },
+ "/user/{id}/file": {
+ "post": {
+ "summary": "file",
+ "deprecated": false,
+ "description": "Uploads an avatar file for a user.",
+ "operationId": "fileUser",
+ "tags": [
+ "user"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "User Id",
+ "required": true,
+ "example": "4yql7587j64qdo5",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string",
+ "format": "binary",
+ "description": "Avatar image file. Allowed file types: PNG, JPG, WEBP, SVG",
+ "example": "file:///Users/christianbeutel/Downloads/23xxesym0e9w18z2904frnpgy7.jpg"
+ }
+ },
+ "required": [
+ "avatar"
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "emailVisibility": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "token": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "verified": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "email",
+ "emailVisibility",
+ "id",
+ "token",
+ "updated",
+ "username",
+ "verified"
+ ]
+ },
+ "example": {
+ "avatar": "23xxesym0e9w18z2904frnpgy7_OzsVanAmWP.jpg",
+ "bio": "Enim beatae labore vel. Pariatur hic doloribus quia quasi eos. Cumque error nobis.",
+ "collectionId": "_pb_users_auth_",
+ "collectionName": "users",
+ "created": "2024-06-29 19:23:47.731Z",
+ "email": "mymail@gmail.com",
+ "emailVisibility": false,
+ "id": "3mugf953w4a9fg5",
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA",
+ "updated": "2025-01-03 12:32:15.270Z",
+ "username": "Flomp",
+ "verified": true
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/waypoint": {
+ "get": {
+ "summary": "list",
+ "deprecated": false,
+ "description": "Lists all waypoints.",
+ "operationId": "listWaypoints",
+ "tags": [
+ "waypoint"
+ ],
+ "parameters": [
+ {
+ "name": "page",
+ "in": "query",
+ "description": "Page number starting at 1",
+ "required": false,
+ "example": 1,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "perPage",
+ "in": "query",
+ "description": "Items per page",
+ "required": false,
+ "example": 5,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "sort",
+ "in": "query",
+ "description": "Sort string (-/+)",
+ "required": false,
+ "example": "-created",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "filter",
+ "in": "query",
+ "description": "Filter string (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)",
+ "required": false,
+ "example": "name=\"abc\"",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "author",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "my-key",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "page": {
+ "type": "integer"
+ },
+ "perPage": {
+ "type": "integer"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "totalPages": {
+ "type": "integer"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "icon": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "description",
+ "icon",
+ "id",
+ "lat",
+ "lon",
+ "name",
+ "photos",
+ "updated"
+ ]
+ }
+ }
+ },
+ "required": [
+ "page",
+ "perPage",
+ "totalItems",
+ "totalPages",
+ "items"
+ ]
+ },
+ "examples": {
+ "1": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 96,
+ "totalPages": 20,
+ "items": [
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "goeo2ubp103rzp9",
+ "collectionName": "waypoints",
+ "created": "2024-11-09 10:33:45.943Z",
+ "description": "",
+ "icon": "circle",
+ "id": "035691efaa5cf0a",
+ "lat": 47.71415538,
+ "lon": 11.98004365,
+ "name": "Kesselalm (1275 m)",
+ "photos": [],
+ "updated": "2024-11-09 10:33:45.943Z"
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "goeo2ubp103rzp9",
+ "collectionName": "waypoints",
+ "created": "2024-10-06 09:33:11.379Z",
+ "description": "",
+ "icon": "circle",
+ "id": "04328b07923294e",
+ "lat": 47.71415538,
+ "lon": 11.98004365,
+ "name": "Kesselalm (1275 m)",
+ "photos": [],
+ "updated": "2024-10-06 09:33:11.379Z"
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "goeo2ubp103rzp9",
+ "collectionName": "waypoints",
+ "created": "2024-11-09 10:31:37.884Z",
+ "description": "",
+ "icon": "circle",
+ "id": "056510042fb882d",
+ "lat": 47.71215663291514,
+ "lon": 11.964081572368741,
+ "name": "Birkenstein (850 m)",
+ "photos": [],
+ "updated": "2024-11-09 10:31:37.884Z"
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "goeo2ubp103rzp9",
+ "collectionName": "waypoints",
+ "created": "2024-09-07 11:11:29.646Z",
+ "description": "",
+ "icon": "circle",
+ "id": "0b8bb0a2c97b669",
+ "lat": 47.449586391448975,
+ "lon": 11.238069534301758,
+ "name": "St. Anton (Restaurant)",
+ "photos": [],
+ "updated": "2024-09-07 11:11:29.646Z"
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "goeo2ubp103rzp9",
+ "collectionName": "waypoints",
+ "created": "2024-09-07 11:11:29.459Z",
+ "description": "",
+ "icon": "circle",
+ "id": "0c4fb8ae0465eb1",
+ "lat": 47.44074583053589,
+ "lon": 11.212363243103027,
+ "name": "Ferchensee (Bushaltestelle)",
+ "photos": [],
+ "updated": "2024-09-07 11:11:29.459Z"
+ }
+ ]
+ }
+ },
+ "3": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 5,
+ "totalPages": 1,
+ "items": [
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-20 21:43:09.964Z",
+ "id": "13ikooi1f6tgjvd",
+ "rating": 0,
+ "text": "Comment",
+ "trail": "267r63tmbyezpck",
+ "updated": "2024-12-20 21:43:09.964Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-20 20:37:33.558Z",
+ "id": "1rjjl1riy4jrdmm",
+ "rating": 0,
+ "text": "C",
+ "trail": "l4u85lr0x6jgojd",
+ "updated": "2024-12-20 20:37:33.558Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "znhd3hgrxl85c9f",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-19 21:18:30.979Z",
+ "id": "6vcudpc4wgc0cku",
+ "rating": 0,
+ "text": "Zehn Ziegen zogen zehn Zentner Zucker zum Zoo!",
+ "trail": "oual4h0zovut2ph",
+ "updated": "2024-12-19 21:18:30.979Z",
+ "expand": {
+ "author": {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-02 17:43:26.303Z",
+ "id": "p4r2x69bq7iz8ah",
+ "rating": 0,
+ "text": "Geht das?",
+ "trail": "6558yf0g9knodhv",
+ "updated": "2024-12-02 17:43:26.303Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-21 00:37:08.033Z",
+ "id": "vkwrak7tytf9vur",
+ "rating": 0,
+ "text": "Anim minim consequat veniam ad laboris velit magna veniam dolor. Incididunt in non fugiat aliqua. Ullamco sint ipsum cupidatat Lorem deserunt id quis. Irure minim duis pariatur irure commodo non officia cillum et exercitation laborum. Enim nisi ipsum velit nisi. Consectetur et ad enim laboris.\n\nLorem commodo ex deserunt deserunt fugiat et consequat sit ad consequat nulla quis reprehenderit. Commodo sit eu consequat reprehenderit elit labore Lorem pariatur enim do ad irure ex ad. Nisi magna irure est dolore elit laboris commodo consectetur sint aliquip sit. Do exercitation ullamco incididunt culpa eu dolore dolore sint esse laboris elit enim cillum excepteur. Sit veniam veniam ex deserunt Lorem Lorem ut incididunt dolor sint nulla eiusmod magna adipisicing.",
+ "trail": "267r63tmbyezpck",
+ "updated": "2024-12-21 00:37:08.033Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid sort/expand/filter": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Something went wrong while processing your request.",
+ "detail": {
+ "code": 400,
+ "message": "Something went wrong while processing your request.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ },
+ "put": {
+ "summary": "create",
+ "deprecated": false,
+ "description": "Creates a waypoint. ",
+ "operationId": "createWaypoint",
+ "tags": [
+ "waypoint"
+ ],
+ "parameters": [
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request id. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number",
+ "minimum": -90,
+ "maximum": 90
+ },
+ "lon": {
+ "type": "number",
+ "minimum": -180,
+ "maximum": 180
+ },
+ "icon": {
+ "type": "string",
+ "description": "Fontawesome icon string (https://fontawesome.com/v6/search?o=r&m=free)"
+ },
+ "author": {
+ "type": "string",
+ "description": "User Id",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ "required": [
+ "lon",
+ "lat",
+ "author"
+ ]
+ },
+ "example": {
+ "name": "non repellat possimus",
+ "description": "Impedit modi nisi quibusdam eum rerum illo. Minus mollitia delectus vitae optio vero. Maiores praesentium dolores nostrum laborum saepe. Dolorem qui non. Dolorem dolores facere facere reiciendis ab doloribus.",
+ "lat": -81.44545573482735,
+ "lon": 178.9999004930424,
+ "icon": "pen",
+ "author": "3mugf953w4a9fg5"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "icon": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "description",
+ "icon",
+ "id",
+ "lat",
+ "lon",
+ "name",
+ "photos",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "goeo2ubp103rzp9",
+ "collectionName": "waypoints",
+ "created": "2025-01-03 13:07:25.852Z",
+ "description": "Impedit modi nisi quibusdam eum rerum illo. Minus mollitia delectus vitae optio vero. Maiores praesentium dolores nostrum laborum saepe. Dolorem qui non. Dolorem dolores facere facere reiciendis ab doloribus.",
+ "icon": "pen",
+ "id": "fjqcwd17fawiy83",
+ "lat": -81.44545573482735,
+ "lon": 178.9999004930424,
+ "name": "non repellat possimus",
+ "photos": [],
+ "updated": "2025-01-03 13:07:25.852Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Failed to create record.",
+ "detail": {
+ "code": 400,
+ "message": "Failed to create record.",
+ "data": {
+ "author": {
+ "code": "validation_missing_rel_records",
+ "message": "Failed to find all relation records with the provided ids."
+ }
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid Params": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "expected": {
+ "type": "string"
+ },
+ "received": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "invalid_type",
+ "expected": "string",
+ "received": "number",
+ "path": [
+ "text"
+ ],
+ "message": "Expected string, received number"
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/waypoint/{id}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "Shows a single waypoint.",
+ "operationId": "showWaypoint",
+ "tags": [
+ "waypoint"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Waypoint Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "icon": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "description",
+ "icon",
+ "id",
+ "lat",
+ "lon",
+ "name",
+ "photos",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "goeo2ubp103rzp9",
+ "collectionName": "waypoints",
+ "created": "2024-11-09 10:33:45.943Z",
+ "description": "",
+ "icon": "circle",
+ "id": "035691efaa5cf0a",
+ "lat": 47.71415538,
+ "lon": 11.98004365,
+ "name": "Kesselalm (1275 m)",
+ "photos": [],
+ "updated": "2024-11-09 10:33:45.943Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ },
+ "post": {
+ "summary": "update",
+ "deprecated": false,
+ "description": "Updates a waypoint.",
+ "operationId": "updateWaypoint",
+ "tags": [
+ "waypoint"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Waypoint Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number",
+ "minimum": -90,
+ "maximum": 90
+ },
+ "lon": {
+ "type": "number",
+ "minimum": -180,
+ "maximum": 180
+ },
+ "icon": {
+ "type": "string",
+ "description": "Fontawesome icon string (https://fontawesome.com/v6/search?o=r&m=free)"
+ }
+ }
+ },
+ "example": {
+ "name": "molestias suscipit asperiores",
+ "description": "Quidem illum labore illum quo doloribus ratione temporibus. Voluptatem voluptatum tempore deleniti amet voluptate. Consectetur soluta repellat accusantium blanditiis. Quis sapiente inventore. Sed excepturi cum incidunt dolores tempora illum neque. Non nostrum alias ut facere assumenda.",
+ "lat": -78.53460271991707,
+ "lon": 112.79017323734126,
+ "icon": "house"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "icon": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "description",
+ "icon",
+ "id",
+ "lat",
+ "lon",
+ "name",
+ "photos",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "goeo2ubp103rzp9",
+ "collectionName": "waypoints",
+ "created": "2025-01-03 13:07:25.852Z",
+ "description": "Quidem illum labore illum quo doloribus ratione temporibus. Voluptatem voluptatum tempore deleniti amet voluptate. Consectetur soluta repellat accusantium blanditiis. Quis sapiente inventore. Sed excepturi cum incidunt dolores tempora illum neque. Non nostrum alias ut facere assumenda.",
+ "icon": "house",
+ "id": "fjqcwd17fawiy83",
+ "lat": -78.53460271991707,
+ "lon": 112.79017323734126,
+ "name": "molestias suscipit asperiores",
+ "photos": [],
+ "updated": "2025-01-03 13:09:45.168Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "delete": {
+ "summary": "delete",
+ "deprecated": false,
+ "description": "Deletes a waypoint.",
+ "operationId": "deleteWaypoint",
+ "tags": [
+ "waypoint"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Waypoint Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "acknowledged": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "acknowledged"
+ ]
+ },
+ "example": {
+ "acknowledged": true
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/list": {
+ "get": {
+ "summary": "list",
+ "deprecated": false,
+ "description": "Lists all lists.",
+ "operationId": "listLists",
+ "tags": [
+ "list"
+ ],
+ "parameters": [
+ {
+ "name": "page",
+ "in": "query",
+ "description": "Page number starting at 1",
+ "required": false,
+ "example": 1,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "perPage",
+ "in": "query",
+ "description": "Items per page",
+ "required": false,
+ "example": 5,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "sort",
+ "in": "query",
+ "description": "Sort string (-/+)",
+ "required": false,
+ "example": "-created",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "filter",
+ "in": "query",
+ "description": "Filter string (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)",
+ "required": false,
+ "example": "name=\"abc\"",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "author",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "my-key",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "page": {
+ "type": "integer"
+ },
+ "perPage": {
+ "type": "integer"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "totalPages": {
+ "type": "integer"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "avatar": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "trails": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "updated": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "author",
+ "avatar",
+ "collectionId",
+ "collectionName",
+ "created",
+ "description",
+ "id",
+ "name",
+ "public",
+ "trails",
+ "updated",
+ "expand"
+ ]
+ }
+ }
+ },
+ "required": [
+ "page",
+ "perPage",
+ "totalItems",
+ "totalPages",
+ "items"
+ ]
+ },
+ "example": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 4,
+ "totalPages": 1,
+ "items": [
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2025-01-02 22:29:19.092Z",
+ "description": "This list was updated by the wanderer API",
+ "id": "4yql7587j64qdo5",
+ "name": "Updated API List",
+ "public": false,
+ "trails": [],
+ "updated": "2025-01-02 22:39:36.944Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "640px_mont_saint_michel_vu_du_ciel_MvWoudBkPE.jpg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-09-09 22:10:07.972Z",
+ "description": "La Véloscénie is a 450-kilometre (280 mi) cycle route that takes you on an adventure from Paris to Mont-Saint-Michel on the Channel coast. From the capital to the beaches, passing through numerous hamlets and stunning towns such as Chartres, this journey westwards has many surprises in store.\r\n\r\nWe suggest you complete this journey in seven stages. This is a challenging pace, but should still leave you time to discover the many attractions en route. Cathedrals, castles, lakes, stunning landscapes and historic villages will show you that you don't have to wait for Mont-Saint-Michel to be amazed.\r\n\r\nThe itinerary alternates between little-used secondary roads, greenways and trails. This trip is best ridden on a bike that can handle rougher trails, like a touring, hybrid or gravel bike.\r\n\r\nParis is easy to reach from anywhere in France, but the choice is more limited if you want to leave from Mont-Saint-Michel. The nearest railway station is in Pontorson, 10 kilometres (6 mi) from Mont-Saint-Michel. From Pontorson, direct trains to Paris leave every evening, around 6pm on weekdays and at weekends, only between June and the end of September. Bikes can be taken on board free of charge by prior arrangement. Apart from this seasonal service, there are other ways of returning to Paris, with at least one train change required. For more information: veloscenic.com/reaching-the-veloscenic-cycle-route\r\n\r\nAlthough the route is accessible all year round, some accommodation and tourist attractions are likely to close in the low season, so it’s best to ride in spring or summer. While some stages end in big cities, others end in more rural areas and you’ll need to book your accommodation in advance. It’s not necessary to book restaurants along the route, but it is best to plan stops for refreshments, as not all the villages you pass through have restaurants or shops.",
+ "id": "bdv9iukn4d2lf2i",
+ "name": "From Paris to Mont-Saint-Michel — La Véloscénie",
+ "public": false,
+ "trails": [
+ "jou2tcf0y8jj9m3",
+ "ilyvsa4xr52lxlr",
+ "2y8o7bwmor4yltt",
+ "gmh81mczhjp834l",
+ "6hpvcyosmqr8uk8",
+ "iql9fifaxnb5u6m",
+ "y9hjysn5xhbmi86",
+ "fehuzqkfi49hkwn",
+ "fmin7pbj8urtxx0",
+ "14y4qxqbqh0n10m",
+ "6fv6krwusycttbl",
+ "66jj108gizquc2r",
+ "wbuwzu8tp48hljg",
+ "x3lo6ru4ly753w6",
+ "h91u3vl8n5ekune",
+ "bzodytd0vd2e56g",
+ "oy1auygew9fvha0",
+ "6atd6i73bzle0ar",
+ "iz2ohx9hbn8irrc",
+ "2o9c3pxfvrzclud",
+ "btn09xkl7ab0n9k",
+ "ek2cb00tw4v4fav"
+ ],
+ "updated": "2024-12-27 00:55:25.917Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "dscn0010_xN987yGxE0.jpg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-12-30 17:41:00.152Z",
+ "description": "Hallo",
+ "id": "dci7qk44birm2bn",
+ "name": "Liste mit Oachkatzerl",
+ "public": true,
+ "trails": [
+ "ovo0m6pxxjupfp9",
+ "yesm2tqc6jok8jq",
+ "z94vgei3jdc37k4"
+ ],
+ "updated": "2024-12-30 18:58:44.269Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "caret_right_solid_iUtggzDoh7.svg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-12-13 12:46:49.620Z",
+ "description": "",
+ "id": "m59tuo2yyretv7z",
+ "name": "Flomp's List 2",
+ "public": false,
+ "trails": [
+ "ovo0m6pxxjupfp9"
+ ],
+ "updated": "2024-12-27 00:55:21.456Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 0,
+ "type": "number",
+ "inclusive": false,
+ "exact": false,
+ "message": "Number must be greater than 0",
+ "path": [
+ "page"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid sort/expand/filter": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Something went wrong while processing your request.",
+ "detail": {
+ "code": 400,
+ "message": "Something went wrong while processing your request.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ },
+ "put": {
+ "summary": "create",
+ "deprecated": false,
+ "description": "Creates a list. ",
+ "operationId": "createList",
+ "tags": [
+ "list"
+ ],
+ "parameters": [
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request id. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the list"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of the list"
+ },
+ "public": {
+ "type": "boolean",
+ "description": "Visible for everyone"
+ },
+ "trails": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "description": "Trail Id",
+ "minLength": 15,
+ "maxLength": 15
+ },
+ "description": "List of trail Ids contained in the list",
+ "minItems": 0
+ },
+ "author": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15,
+ "description": "User Id"
+ }
+ },
+ "required": [
+ "name",
+ "public",
+ "trails",
+ "author"
+ ]
+ },
+ "example": {
+ "name": "API List",
+ "description": "A list created via the wanderer API",
+ "public": true,
+ "trails": [],
+ "author": "3mugf953w4a9fg5"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "avatar": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "trails": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "avatar",
+ "collectionId",
+ "collectionName",
+ "created",
+ "description",
+ "id",
+ "name",
+ "public",
+ "trails",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2025-01-02 22:29:19.092Z",
+ "description": "A list created via the wanderer API",
+ "id": "4yql7587j64qdo5",
+ "name": "API List",
+ "public": true,
+ "trails": [],
+ "updated": "2025-01-02 22:29:19.092Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Failed to create record.",
+ "detail": {
+ "code": 400,
+ "message": "Failed to create record.",
+ "data": {
+ "author": {
+ "code": "validation_missing_rel_records",
+ "message": "Failed to find all relation records with the provided ids."
+ }
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid Params": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "expected": {
+ "type": "string"
+ },
+ "received": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "invalid_type",
+ "expected": "string",
+ "received": "number",
+ "path": [
+ "name"
+ ],
+ "message": "Expected string, received number"
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/list/{id}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "Shows a single list.",
+ "operationId": "showList",
+ "tags": [
+ "list"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Comment Id",
+ "required": true,
+ "example": "4yql7587j64qdo5",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "avatar": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "trails": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "updated": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "author",
+ "avatar",
+ "collectionId",
+ "collectionName",
+ "created",
+ "description",
+ "id",
+ "name",
+ "public",
+ "trails",
+ "updated",
+ "expand"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2025-01-02 22:29:19.092Z",
+ "description": "This list was updated by the wanderer API",
+ "id": "4yql7587j64qdo5",
+ "name": "Updated API List",
+ "public": false,
+ "trails": [],
+ "updated": "2025-01-02 22:39:36.944Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ },
+ "post": {
+ "summary": "update",
+ "deprecated": false,
+ "description": "Updates a list.",
+ "operationId": "updateList",
+ "tags": [
+ "list"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "List Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the list"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of the list"
+ },
+ "public": {
+ "type": "boolean",
+ "description": "Visible for everyone"
+ },
+ "trails": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "description": "Trail Id",
+ "minLength": 15,
+ "maxLength": 15
+ },
+ "description": "List of trail Ids contained in the list",
+ "minItems": 0
+ }
+ }
+ },
+ "example": {
+ "name": "API List",
+ "description": "A list created via the wanderer API",
+ "public": true,
+ "trails": [],
+ "author": "3mugf953w4a9fg5"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "avatar": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "trails": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "avatar",
+ "collectionId",
+ "collectionName",
+ "created",
+ "description",
+ "id",
+ "name",
+ "public",
+ "trails",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2025-01-02 22:29:19.092Z",
+ "description": "This list was updated by the wanderer API",
+ "id": "4yql7587j64qdo5",
+ "name": "Updated API List",
+ "public": false,
+ "trails": [],
+ "updated": "2025-01-02 22:39:36.944Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "delete": {
+ "summary": "delete",
+ "deprecated": false,
+ "description": "Deletes a list.",
+ "operationId": "deleteList",
+ "tags": [
+ "list"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "List Id",
+ "required": true,
+ "example": "4yql7587j64qdo5",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "acknowledged": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "acknowledged"
+ ]
+ },
+ "example": {
+ "acknowledged": true
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/list/{id}/file": {
+ "post": {
+ "summary": "file",
+ "deprecated": false,
+ "description": "Uploads an avatar file for a list.",
+ "operationId": "fileList",
+ "tags": [
+ "list"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "List Id",
+ "required": true,
+ "example": "4yql7587j64qdo5",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string",
+ "format": "binary",
+ "description": "Avatar image file. Allowed file types: PNG, JPG, WEBP, SVG",
+ "example": "file:///Users/christianbeutel/Downloads/23xxesym0e9w18z2904frnpgy7.jpg"
+ }
+ },
+ "required": [
+ "avatar"
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "avatar": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "trails": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "avatar",
+ "collectionId",
+ "collectionName",
+ "created",
+ "description",
+ "id",
+ "name",
+ "public",
+ "trails",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "23xxesym0e9w18z2904frnpgy7_bmAvN4NpoA.jpg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-12-13 12:46:49.620Z",
+ "description": "",
+ "id": "m59tuo2yyretv7z",
+ "name": "Flomp's List 2",
+ "public": false,
+ "trails": [
+ "ovo0m6pxxjupfp9"
+ ],
+ "updated": "2025-01-02 23:06:30.788Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/list-share": {
+ "get": {
+ "summary": "list",
+ "deprecated": false,
+ "description": "Lists all list-shares.",
+ "operationId": "listListShares",
+ "tags": [
+ "list-share"
+ ],
+ "parameters": [
+ {
+ "name": "page",
+ "in": "query",
+ "description": "Page number starting at 1",
+ "required": false,
+ "example": 1,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "perPage",
+ "in": "query",
+ "description": "Items per page",
+ "required": false,
+ "example": 5,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "sort",
+ "in": "query",
+ "description": "Sort string (-/+)",
+ "required": false,
+ "example": "-created",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "filter",
+ "in": "query",
+ "description": "Filter string (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)",
+ "required": false,
+ "example": "permission=\"view\"",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "user",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "my-key",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "page": {
+ "type": "integer"
+ },
+ "perPage": {
+ "type": "integer"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "totalPages": {
+ "type": "integer"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "list": {
+ "type": "string"
+ },
+ "permission": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "user": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ }
+ },
+ "required": [
+ "user"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "page",
+ "perPage",
+ "totalItems",
+ "totalPages",
+ "items"
+ ]
+ },
+ "examples": {
+ "1": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 1,
+ "totalPages": 1,
+ "items": [
+ {
+ "collectionId": "1kot7t9na3hi0gl",
+ "collectionName": "list_share",
+ "created": "2024-11-15 16:34:15.333Z",
+ "id": "xjn56wlra4rqdtl",
+ "list": "bdv9iukn4d2lf2i",
+ "permission": "view",
+ "updated": "2024-11-15 16:34:15.333Z",
+ "user": "znhd3hgrxl85c9f",
+ "expand": {
+ "user": {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "3": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 5,
+ "totalPages": 1,
+ "items": [
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-20 21:43:09.964Z",
+ "id": "13ikooi1f6tgjvd",
+ "rating": 0,
+ "text": "Comment",
+ "trail": "267r63tmbyezpck",
+ "updated": "2024-12-20 21:43:09.964Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-20 20:37:33.558Z",
+ "id": "1rjjl1riy4jrdmm",
+ "rating": 0,
+ "text": "C",
+ "trail": "l4u85lr0x6jgojd",
+ "updated": "2024-12-20 20:37:33.558Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "znhd3hgrxl85c9f",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-19 21:18:30.979Z",
+ "id": "6vcudpc4wgc0cku",
+ "rating": 0,
+ "text": "Zehn Ziegen zogen zehn Zentner Zucker zum Zoo!",
+ "trail": "oual4h0zovut2ph",
+ "updated": "2024-12-19 21:18:30.979Z",
+ "expand": {
+ "author": {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-02 17:43:26.303Z",
+ "id": "p4r2x69bq7iz8ah",
+ "rating": 0,
+ "text": "Geht das?",
+ "trail": "6558yf0g9knodhv",
+ "updated": "2024-12-02 17:43:26.303Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "lf06qip3f4d11yk",
+ "collectionName": "comments",
+ "created": "2024-12-21 00:37:08.033Z",
+ "id": "vkwrak7tytf9vur",
+ "rating": 0,
+ "text": "Anim minim consequat veniam ad laboris velit magna veniam dolor. Incididunt in non fugiat aliqua. Ullamco sint ipsum cupidatat Lorem deserunt id quis. Irure minim duis pariatur irure commodo non officia cillum et exercitation laborum. Enim nisi ipsum velit nisi. Consectetur et ad enim laboris.\n\nLorem commodo ex deserunt deserunt fugiat et consequat sit ad consequat nulla quis reprehenderit. Commodo sit eu consequat reprehenderit elit labore Lorem pariatur enim do ad irure ex ad. Nisi magna irure est dolore elit laboris commodo consectetur sint aliquip sit. Do exercitation ullamco incididunt culpa eu dolore dolore sint esse laboris elit enim cillum excepteur. Sit veniam veniam ex deserunt Lorem Lorem ut incididunt dolor sint nulla eiusmod magna adipisicing.",
+ "trail": "267r63tmbyezpck",
+ "updated": "2024-12-21 00:37:08.033Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid sort/expand/filter": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Something went wrong while processing your request.",
+ "detail": {
+ "code": 400,
+ "message": "Something went wrong while processing your request.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "put": {
+ "summary": "create",
+ "deprecated": false,
+ "description": "Creates a list share. ",
+ "operationId": "createListShare",
+ "tags": [
+ "list-share"
+ ],
+ "parameters": [
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request id. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "list": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15,
+ "description": "List Id"
+ },
+ "user": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15,
+ "description": "User Id"
+ },
+ "permission": {
+ "type": "string",
+ "enum": [
+ "view",
+ "edit"
+ ],
+ "description": "Permissions for user"
+ }
+ },
+ "required": [
+ "list",
+ "user",
+ "permission"
+ ]
+ },
+ "example": {
+ "list": "dci7qk44birm2bn",
+ "user": "z014o6bpcg680mg",
+ "permission": "view"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "list": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "avatar": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "emailVisibility": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "token": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "verified": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "emailVisibility",
+ "id",
+ "token",
+ "updated",
+ "username",
+ "verified"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "trails": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "avatar",
+ "collectionId",
+ "collectionName",
+ "created",
+ "description",
+ "expand",
+ "id",
+ "name",
+ "public",
+ "trails",
+ "updated"
+ ]
+ }
+ },
+ "required": [
+ "list"
+ ]
+ },
+ "id": {
+ "type": "string"
+ },
+ "list": {
+ "type": "string"
+ },
+ "permission": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "collectionId",
+ "collectionName",
+ "created",
+ "expand",
+ "id",
+ "list",
+ "permission",
+ "updated",
+ "user"
+ ]
+ },
+ "example": {
+ "collectionId": "1kot7t9na3hi0gl",
+ "collectionName": "list_share",
+ "created": "2025-01-03 10:36:23.596Z",
+ "expand": {
+ "list": {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "dscn0010_xN987yGxE0.jpg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-12-30 17:41:00.152Z",
+ "description": "Hallo",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "_pb_users_auth_",
+ "collectionName": "users",
+ "created": "2024-06-29 19:23:47.731Z",
+ "emailVisibility": false,
+ "id": "3mugf953w4a9fg5",
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlLZXlVaWQiOiIzMjk3NmExMi03ODE1LTQ1NGQtYTU5Yi1hNzY0ZTE4NmJjNjIiLCJzZWFyY2hSdWxlcyI6eyJjaXRpZXM1MDAiOnt9LCJ0cmFpbHMiOnsiZmlsdGVyIjoicHVibGljID0gdHJ1ZSBPUiBhdXRob3IgPSAzbXVnZjk1M3c0YTlmZzUgT1Igc2hhcmVzID0gM211Z2Y5NTN3NGE5Zmc1In19fQ.swips6eep2qMd0Nf3hdZr711N2fHyikOo7syWvuLEIA",
+ "updated": "2024-12-30 18:36:39.161Z",
+ "username": "Flomp",
+ "verified": true
+ }
+ },
+ "id": "dci7qk44birm2bn",
+ "name": "Liste mit Oachkatzerl",
+ "public": true,
+ "trails": [
+ "ovo0m6pxxjupfp9",
+ "yesm2tqc6jok8jq",
+ "z94vgei3jdc37k4"
+ ],
+ "updated": "2024-12-30 18:58:44.269Z"
+ }
+ },
+ "id": "r8r938af52vdae1",
+ "list": "dci7qk44birm2bn",
+ "permission": "view",
+ "updated": "2025-01-03 10:36:23.596Z",
+ "user": "znhd3hgrxl85c9f"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Failed to create record.",
+ "detail": {
+ "code": 400,
+ "message": "Failed to create record.",
+ "data": {
+ "author": {
+ "code": "validation_missing_rel_records",
+ "message": "Failed to find all relation records with the provided ids."
+ }
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid Params": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "expected": {
+ "type": "string"
+ },
+ "received": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "invalid_type",
+ "expected": "string",
+ "received": "number",
+ "path": [
+ "text"
+ ],
+ "message": "Expected string, received number"
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/list-share/{id}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "Shows a single list share.",
+ "operationId": "showListShare",
+ "tags": [
+ "list-share"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "List Share Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "list": {
+ "type": "string"
+ },
+ "permission": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "list",
+ "permission",
+ "updated",
+ "user"
+ ]
+ },
+ "example": {
+ "collectionId": "1kot7t9na3hi0gl",
+ "collectionName": "list_share",
+ "created": "2024-11-15 16:34:15.333Z",
+ "id": "xjn56wlra4rqdtl",
+ "list": "bdv9iukn4d2lf2i",
+ "permission": "view",
+ "updated": "2024-11-15 16:34:15.333Z",
+ "user": "znhd3hgrxl85c9f"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "post": {
+ "summary": "update",
+ "deprecated": false,
+ "description": "Updates a list share.",
+ "operationId": "updateListShare",
+ "tags": [
+ "list-share"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "List Share Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "permission": {
+ "type": "string",
+ "enum": [
+ "view",
+ "edit"
+ ]
+ }
+ }
+ },
+ "example": {
+ "permission": "view"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "list": {
+ "type": "string"
+ },
+ "permission": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "list",
+ "permission",
+ "updated",
+ "user"
+ ]
+ },
+ "example": {
+ "collectionId": "1kot7t9na3hi0gl",
+ "collectionName": "list_share",
+ "created": "2025-01-03 10:36:23.596Z",
+ "id": "r8r938af52vdae1",
+ "list": "dci7qk44birm2bn",
+ "permission": "edit",
+ "updated": "2025-01-03 10:39:28.597Z",
+ "user": "znhd3hgrxl85c9f"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "delete": {
+ "summary": "delete",
+ "deprecated": false,
+ "description": "Deletes a list share.",
+ "operationId": "deleteListShare",
+ "tags": [
+ "list-share"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "List Share Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "acknowledged": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "acknowledged"
+ ]
+ },
+ "example": {
+ "acknowledged": true
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/notification": {
+ "get": {
+ "summary": "list",
+ "deprecated": false,
+ "description": "Lists all notifications.",
+ "operationId": "listNotifications",
+ "tags": [
+ "notification"
+ ],
+ "parameters": [
+ {
+ "name": "page",
+ "in": "query",
+ "description": "Page number starting at 1",
+ "required": false,
+ "example": 1,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "perPage",
+ "in": "query",
+ "description": "Items per page",
+ "required": false,
+ "example": 5,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "sort",
+ "in": "query",
+ "description": "Sort string (-/+)",
+ "required": false,
+ "example": "-created",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "filter",
+ "in": "query",
+ "description": "Filter string (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)",
+ "required": false,
+ "example": "recipient=\"r8r938af52vdae1\"",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "author",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "my-key",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "page": {
+ "type": "integer"
+ },
+ "perPage": {
+ "type": "integer"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "totalPages": {
+ "type": "integer"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "metadata": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "list": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "id",
+ "list"
+ ]
+ },
+ "recipient": {
+ "type": "string"
+ },
+ "seen": {
+ "type": "boolean"
+ },
+ "type": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "recipient": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ },
+ "author": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ }
+ },
+ "required": [
+ "recipient",
+ "author"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "page",
+ "perPage",
+ "totalItems",
+ "totalPages",
+ "items"
+ ]
+ },
+ "examples": {
+ "1": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 1,
+ "totalPages": 1,
+ "items": [
+ {
+ "author": "znhd3hgrxl85c9f",
+ "collectionId": "khrcci2uqknny8h",
+ "collectionName": "notifications",
+ "created": "2025-01-03 10:36:23.603Z",
+ "id": "yu9vp1kbid56s6u",
+ "metadata": {
+ "author": "Flomp",
+ "id": "dci7qk44birm2bn",
+ "list": "Liste mit Oachkatzerl"
+ },
+ "recipient": "3mugf953w4a9fg5",
+ "seen": false,
+ "type": "list_share",
+ "updated": "2025-01-03 10:49:22.945Z",
+ "expand": {
+ "recipient": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ },
+ "author": {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "3": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 4,
+ "totalPages": 1,
+ "items": [
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2025-01-02 22:29:19.092Z",
+ "description": "This list was updated by the wanderer API",
+ "id": "4yql7587j64qdo5",
+ "name": "Updated API List",
+ "public": false,
+ "trails": [],
+ "updated": "2025-01-02 22:39:36.944Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "640px_mont_saint_michel_vu_du_ciel_MvWoudBkPE.jpg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-09-09 22:10:07.972Z",
+ "description": "La Véloscénie is a 450-kilometre (280 mi) cycle route that takes you on an adventure from Paris to Mont-Saint-Michel on the Channel coast. From the capital to the beaches, passing through numerous hamlets and stunning towns such as Chartres, this journey westwards has many surprises in store.\r\n\r\nWe suggest you complete this journey in seven stages. This is a challenging pace, but should still leave you time to discover the many attractions en route. Cathedrals, castles, lakes, stunning landscapes and historic villages will show you that you don't have to wait for Mont-Saint-Michel to be amazed.\r\n\r\nThe itinerary alternates between little-used secondary roads, greenways and trails. This trip is best ridden on a bike that can handle rougher trails, like a touring, hybrid or gravel bike.\r\n\r\nParis is easy to reach from anywhere in France, but the choice is more limited if you want to leave from Mont-Saint-Michel. The nearest railway station is in Pontorson, 10 kilometres (6 mi) from Mont-Saint-Michel. From Pontorson, direct trains to Paris leave every evening, around 6pm on weekdays and at weekends, only between June and the end of September. Bikes can be taken on board free of charge by prior arrangement. Apart from this seasonal service, there are other ways of returning to Paris, with at least one train change required. For more information: veloscenic.com/reaching-the-veloscenic-cycle-route\r\n\r\nAlthough the route is accessible all year round, some accommodation and tourist attractions are likely to close in the low season, so it’s best to ride in spring or summer. While some stages end in big cities, others end in more rural areas and you’ll need to book your accommodation in advance. It’s not necessary to book restaurants along the route, but it is best to plan stops for refreshments, as not all the villages you pass through have restaurants or shops.",
+ "id": "bdv9iukn4d2lf2i",
+ "name": "From Paris to Mont-Saint-Michel — La Véloscénie",
+ "public": false,
+ "trails": [
+ "jou2tcf0y8jj9m3",
+ "ilyvsa4xr52lxlr",
+ "2y8o7bwmor4yltt",
+ "gmh81mczhjp834l",
+ "6hpvcyosmqr8uk8",
+ "iql9fifaxnb5u6m",
+ "y9hjysn5xhbmi86",
+ "fehuzqkfi49hkwn",
+ "fmin7pbj8urtxx0",
+ "14y4qxqbqh0n10m",
+ "6fv6krwusycttbl",
+ "66jj108gizquc2r",
+ "wbuwzu8tp48hljg",
+ "x3lo6ru4ly753w6",
+ "h91u3vl8n5ekune",
+ "bzodytd0vd2e56g",
+ "oy1auygew9fvha0",
+ "6atd6i73bzle0ar",
+ "iz2ohx9hbn8irrc",
+ "2o9c3pxfvrzclud",
+ "btn09xkl7ab0n9k",
+ "ek2cb00tw4v4fav"
+ ],
+ "updated": "2024-12-27 00:55:25.917Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "dscn0010_xN987yGxE0.jpg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-12-30 17:41:00.152Z",
+ "description": "Hallo",
+ "id": "dci7qk44birm2bn",
+ "name": "Liste mit Oachkatzerl",
+ "public": true,
+ "trails": [
+ "ovo0m6pxxjupfp9",
+ "yesm2tqc6jok8jq",
+ "z94vgei3jdc37k4"
+ ],
+ "updated": "2024-12-30 18:58:44.269Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "caret_right_solid_iUtggzDoh7.svg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-12-13 12:46:49.620Z",
+ "description": "",
+ "id": "m59tuo2yyretv7z",
+ "name": "Flomp's List 2",
+ "public": false,
+ "trails": [
+ "ovo0m6pxxjupfp9"
+ ],
+ "updated": "2024-12-27 00:55:21.456Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid sort/expand/filter": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Something went wrong while processing your request.",
+ "detail": {
+ "code": 400,
+ "message": "Something went wrong while processing your request.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/notification/{id}": {
+ "post": {
+ "summary": "update",
+ "deprecated": false,
+ "description": "Marks a notification as seen.",
+ "operationId": "updateNotification",
+ "tags": [
+ "notification"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Notification Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "seen": {
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "required": [
+ "seen"
+ ]
+ },
+ "example": {
+ "seen": true
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "metadata": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "list": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "id",
+ "list"
+ ]
+ },
+ "recipient": {
+ "type": "string"
+ },
+ "seen": {
+ "type": "boolean"
+ },
+ "type": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "metadata",
+ "recipient",
+ "seen",
+ "type",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "znhd3hgrxl85c9f",
+ "collectionId": "khrcci2uqknny8h",
+ "collectionName": "notifications",
+ "created": "2025-01-03 10:36:23.603Z",
+ "id": "yu9vp1kbid56s6u",
+ "metadata": {
+ "author": "Flomp",
+ "id": "dci7qk44birm2bn",
+ "list": "Liste mit Oachkatzerl"
+ },
+ "recipient": "3mugf953w4a9fg5",
+ "seen": true,
+ "type": "list_share",
+ "updated": "2025-01-03 10:57:22.899Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/summit-log": {
+ "get": {
+ "summary": "list",
+ "deprecated": false,
+ "description": "Lists all summit logs.",
+ "operationId": "listSummitLogs",
+ "tags": [
+ "summit-log"
+ ],
+ "parameters": [
+ {
+ "name": "page",
+ "in": "query",
+ "description": "Page number starting at 1",
+ "required": false,
+ "example": 1,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "perPage",
+ "in": "query",
+ "description": "Items per page",
+ "required": false,
+ "example": 5,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "sort",
+ "in": "query",
+ "description": "Sort string (-/+)",
+ "required": false,
+ "example": "-created",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "filter",
+ "in": "query",
+ "description": "Filter string (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)",
+ "required": false,
+ "example": "distance>=500",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "author",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "my-key",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "page": {
+ "type": "integer"
+ },
+ "perPage": {
+ "type": "integer"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "totalPages": {
+ "type": "integer"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "integer"
+ },
+ "duration": {
+ "type": "integer"
+ },
+ "elevation_gain": {
+ "type": "integer"
+ },
+ "elevation_loss": {
+ "type": "integer"
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "text": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "gpx",
+ "id",
+ "photos",
+ "text",
+ "updated"
+ ]
+ }
+ }
+ },
+ "required": [
+ "page",
+ "perPage",
+ "totalItems",
+ "totalPages",
+ "items"
+ ]
+ },
+ "examples": {
+ "1": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 14,
+ "totalPages": 3,
+ "items": [
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "dd2l9a4vxpy2ni8",
+ "collectionName": "summit_logs",
+ "created": "2024-12-02 00:06:13.761Z",
+ "date": "2024-12-02 00:00:00.000Z",
+ "distance": 0,
+ "duration": 0,
+ "elevation_gain": 0,
+ "elevation_loss": 0,
+ "gpx": "",
+ "id": "22879d2ce902f57",
+ "photos": [
+ "wanderer_stats_QbRDtbqXp8.png"
+ ],
+ "text": "Heute war auch nicht schlecht!",
+ "updated": "2024-12-02 00:06:13.802Z"
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "dd2l9a4vxpy2ni8",
+ "collectionName": "summit_logs",
+ "created": "2024-11-11 15:34:42.149Z",
+ "date": "2024-11-11 00:00:00.000Z",
+ "distance": 0,
+ "duration": 0,
+ "elevation_gain": 0,
+ "elevation_loss": 0,
+ "gpx": "",
+ "id": "282aa2f6aa2901d",
+ "photos": [],
+ "text": "",
+ "updated": "2024-11-11 15:34:42.149Z"
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "dd2l9a4vxpy2ni8",
+ "collectionName": "summit_logs",
+ "created": "2024-12-30 18:42:22.407Z",
+ "date": "2010-06-26 00:00:00.000Z",
+ "distance": 17.272892451353634,
+ "duration": 19,
+ "elevation_gain": 0.48071279999999916,
+ "elevation_loss": 3.845214800000001,
+ "gpx": "blob_li_rt_ludnm5_CTr98mgc40.tcx",
+ "id": "4p1gjllhdrhnuyr",
+ "photos": [],
+ "text": "",
+ "updated": "2024-12-30 18:42:22.463Z"
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "dd2l9a4vxpy2ni8",
+ "collectionName": "summit_logs",
+ "created": "2024-12-26 21:35:23.376Z",
+ "date": "2024-12-26 00:00:00.000Z",
+ "distance": 14055.576293821563,
+ "duration": 5060,
+ "elevation_gain": 1197,
+ "elevation_loss": 1194,
+ "gpx": "herzogstand_4uFe02QqSL.gpx",
+ "id": "5yftqj5opprl9ju",
+ "photos": [
+ "23xxesym0e9w18z2904frnpgy7_hR8ogccdVG.jpg"
+ ],
+ "text": "",
+ "updated": "2024-12-26 21:35:23.458Z"
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "dd2l9a4vxpy2ni8",
+ "collectionName": "summit_logs",
+ "created": "2024-11-05 22:05:43.778Z",
+ "date": "2024-11-02 00:00:00.000Z",
+ "distance": 12452.945922907797,
+ "duration": 16993,
+ "elevation_gain": 770.0000000000002,
+ "elevation_loss": 770.4800000000002,
+ "gpx": "kranzberg_tzNjcOwhf2.gpx",
+ "id": "7072f62edbb8e62",
+ "photos": [],
+ "text": "",
+ "updated": "2024-11-05 22:06:19.100Z"
+ }
+ ]
+ }
+ },
+ "3": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 4,
+ "totalPages": 1,
+ "items": [
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2025-01-02 22:29:19.092Z",
+ "description": "This list was updated by the wanderer API",
+ "id": "4yql7587j64qdo5",
+ "name": "Updated API List",
+ "public": false,
+ "trails": [],
+ "updated": "2025-01-02 22:39:36.944Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "640px_mont_saint_michel_vu_du_ciel_MvWoudBkPE.jpg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-09-09 22:10:07.972Z",
+ "description": "La Véloscénie is a 450-kilometre (280 mi) cycle route that takes you on an adventure from Paris to Mont-Saint-Michel on the Channel coast. From the capital to the beaches, passing through numerous hamlets and stunning towns such as Chartres, this journey westwards has many surprises in store.\r\n\r\nWe suggest you complete this journey in seven stages. This is a challenging pace, but should still leave you time to discover the many attractions en route. Cathedrals, castles, lakes, stunning landscapes and historic villages will show you that you don't have to wait for Mont-Saint-Michel to be amazed.\r\n\r\nThe itinerary alternates between little-used secondary roads, greenways and trails. This trip is best ridden on a bike that can handle rougher trails, like a touring, hybrid or gravel bike.\r\n\r\nParis is easy to reach from anywhere in France, but the choice is more limited if you want to leave from Mont-Saint-Michel. The nearest railway station is in Pontorson, 10 kilometres (6 mi) from Mont-Saint-Michel. From Pontorson, direct trains to Paris leave every evening, around 6pm on weekdays and at weekends, only between June and the end of September. Bikes can be taken on board free of charge by prior arrangement. Apart from this seasonal service, there are other ways of returning to Paris, with at least one train change required. For more information: veloscenic.com/reaching-the-veloscenic-cycle-route\r\n\r\nAlthough the route is accessible all year round, some accommodation and tourist attractions are likely to close in the low season, so it’s best to ride in spring or summer. While some stages end in big cities, others end in more rural areas and you’ll need to book your accommodation in advance. It’s not necessary to book restaurants along the route, but it is best to plan stops for refreshments, as not all the villages you pass through have restaurants or shops.",
+ "id": "bdv9iukn4d2lf2i",
+ "name": "From Paris to Mont-Saint-Michel — La Véloscénie",
+ "public": false,
+ "trails": [
+ "jou2tcf0y8jj9m3",
+ "ilyvsa4xr52lxlr",
+ "2y8o7bwmor4yltt",
+ "gmh81mczhjp834l",
+ "6hpvcyosmqr8uk8",
+ "iql9fifaxnb5u6m",
+ "y9hjysn5xhbmi86",
+ "fehuzqkfi49hkwn",
+ "fmin7pbj8urtxx0",
+ "14y4qxqbqh0n10m",
+ "6fv6krwusycttbl",
+ "66jj108gizquc2r",
+ "wbuwzu8tp48hljg",
+ "x3lo6ru4ly753w6",
+ "h91u3vl8n5ekune",
+ "bzodytd0vd2e56g",
+ "oy1auygew9fvha0",
+ "6atd6i73bzle0ar",
+ "iz2ohx9hbn8irrc",
+ "2o9c3pxfvrzclud",
+ "btn09xkl7ab0n9k",
+ "ek2cb00tw4v4fav"
+ ],
+ "updated": "2024-12-27 00:55:25.917Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "dscn0010_xN987yGxE0.jpg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-12-30 17:41:00.152Z",
+ "description": "Hallo",
+ "id": "dci7qk44birm2bn",
+ "name": "Liste mit Oachkatzerl",
+ "public": true,
+ "trails": [
+ "ovo0m6pxxjupfp9",
+ "yesm2tqc6jok8jq",
+ "z94vgei3jdc37k4"
+ ],
+ "updated": "2024-12-30 18:58:44.269Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "caret_right_solid_iUtggzDoh7.svg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-12-13 12:46:49.620Z",
+ "description": "",
+ "id": "m59tuo2yyretv7z",
+ "name": "Flomp's List 2",
+ "public": false,
+ "trails": [
+ "ovo0m6pxxjupfp9"
+ ],
+ "updated": "2024-12-27 00:55:21.456Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid sort/expand/filter": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Something went wrong while processing your request.",
+ "detail": {
+ "code": 400,
+ "message": "Something went wrong while processing your request.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ },
+ "put": {
+ "summary": "create",
+ "deprecated": false,
+ "description": "Creates a summit log. ",
+ "operationId": "createSummitLog",
+ "tags": [
+ "summit-log"
+ ],
+ "parameters": [
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request id. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "date": {
+ "type": "string",
+ "description": "Date of the summit log",
+ "format": "date"
+ },
+ "text": {
+ "type": "string",
+ "description": "Description of the summit log"
+ },
+ "distance": {
+ "type": "number",
+ "minimum": 0,
+ "description": "Distance in meters"
+ },
+ "elevation_gain": {
+ "type": "number",
+ "minimum": 0,
+ "description": "Elevation gain in vertical meters"
+ },
+ "elevation_loss": {
+ "type": "number",
+ "minimum": 0,
+ "description": "Elevation loss in vertical meters"
+ },
+ "duration": {
+ "type": "number",
+ "minimum": 0,
+ "description": "Duration in seconds"
+ },
+ "author": {
+ "type": "string",
+ "description": "User Id",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ "required": [
+ "date",
+ "author"
+ ]
+ },
+ "example": {
+ "date": "2025-01-01",
+ "text": "Created by wanderer API",
+ "distance": 12,
+ "elevation_gain": 34,
+ "elevation_loss": 42,
+ "duration": 21,
+ "author": "3mugf953w4a9fg5"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "integer"
+ },
+ "duration": {
+ "type": "integer"
+ },
+ "elevation_gain": {
+ "type": "integer"
+ },
+ "elevation_loss": {
+ "type": "integer"
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "text": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "gpx",
+ "id",
+ "photos",
+ "text",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "dd2l9a4vxpy2ni8",
+ "collectionName": "summit_logs",
+ "created": "2025-01-03 09:56:37.620Z",
+ "date": "2025-01-01 00:00:00.000Z",
+ "distance": 12,
+ "duration": 21,
+ "elevation_gain": 34,
+ "elevation_loss": 42,
+ "gpx": "",
+ "id": "58iuq9j30qbbwmq",
+ "photos": [],
+ "text": "Created by wanderer API",
+ "updated": "2025-01-03 09:56:37.620Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Failed to create record.",
+ "detail": {
+ "code": 400,
+ "message": "Failed to create record.",
+ "data": {
+ "author": {
+ "code": "validation_missing_rel_records",
+ "message": "Failed to find all relation records with the provided ids."
+ }
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid Params": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "validation": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "path"
+ ]
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "invalid_string",
+ "validation": "date",
+ "message": "Invalid date",
+ "path": [
+ "date"
+ ]
+ },
+ {
+ "code": "custom",
+ "message": "invalid-date",
+ "path": [
+ "date"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/summit-log/{id}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "Shows a single summit log.",
+ "operationId": "showSummitLog",
+ "tags": [
+ "summit-log"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Summit Log Id",
+ "required": true,
+ "example": "95bb1d77c8dfa98",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "number"
+ },
+ "duration": {
+ "type": "integer"
+ },
+ "elevation_gain": {
+ "type": "integer"
+ },
+ "elevation_loss": {
+ "type": "integer"
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "text": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "gpx",
+ "id",
+ "photos",
+ "text",
+ "updated",
+ "expand"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "dd2l9a4vxpy2ni8",
+ "collectionName": "summit_logs",
+ "created": "2024-12-30 18:58:04.809Z",
+ "date": "2024-12-10 00:00:00.000Z",
+ "distance": 283396.31855792465,
+ "duration": 0,
+ "elevation_gain": 0,
+ "elevation_loss": 0,
+ "gpx": "2024_10_22_04_28_2024_10_22_21_29_AicYbqRkLD.gpx",
+ "id": "95bb1d77c8dfa98",
+ "photos": [
+ "dscn0010_7MuzM5ExLa.jpg",
+ "caret_right_solid_OLanLqeV1l.svg"
+ ],
+ "text": "",
+ "updated": "2024-12-30 18:59:56.822Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ },
+ "post": {
+ "summary": "update",
+ "deprecated": false,
+ "description": "Updates a summit log.",
+ "operationId": "updateSummitLog",
+ "tags": [
+ "summit-log"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Summit Log Id",
+ "required": true,
+ "example": "6vcudpc4wgc0ckk",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "date": {
+ "type": "string",
+ "description": "Date of the summit log",
+ "format": "date"
+ },
+ "text": {
+ "type": "string",
+ "description": "Description of the summit log"
+ },
+ "distance": {
+ "type": "number",
+ "minimum": 0,
+ "description": "Distance in meters"
+ },
+ "elevation_gain": {
+ "type": "number",
+ "minimum": 0,
+ "description": "Elevation gain in vertical meters"
+ },
+ "elevation_loss": {
+ "type": "number",
+ "minimum": 0,
+ "description": "Elevation loss in vertical meters"
+ },
+ "duration": {
+ "type": "number",
+ "minimum": 0,
+ "description": "Duration in seconds"
+ }
+ }
+ },
+ "example": "{\n \"date\": \"2025-12-12\",\n \"text\": \"Updated by wanderer API\",\n \"distance\": 32,\n \"elevation_gain\": 45,\n \"elevation_loss\": 21,\n \"duration\": 29,\n}"
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "number"
+ },
+ "duration": {
+ "type": "number"
+ },
+ "elevation_gain": {
+ "type": "number"
+ },
+ "elevation_loss": {
+ "type": "number"
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "text": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "gpx",
+ "id",
+ "photos",
+ "text",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "dd2l9a4vxpy2ni8",
+ "collectionName": "summit_logs",
+ "created": "2025-01-03 09:56:37.620Z",
+ "date": "2025-01-02 00:00:00.000Z",
+ "distance": 36983010.25256769,
+ "duration": 68163654.92949024,
+ "elevation_gain": 44389248.880456366,
+ "elevation_loss": 6494274.720874871,
+ "gpx": "",
+ "id": "58iuq9j30qbbwmq",
+ "photos": [],
+ "text": "et magna veniam anim cillum",
+ "updated": "2025-01-03 10:11:22.553Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "delete": {
+ "summary": "delete",
+ "deprecated": false,
+ "description": "Deletes a summit log.",
+ "operationId": "deleteSummitLog",
+ "tags": [
+ "summit-log"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Summit Log Id",
+ "required": true,
+ "example": "4yql7587j64qdo5",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "acknowledged": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "acknowledged"
+ ]
+ },
+ "example": {
+ "acknowledged": true
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/summit-log/{id}/file": {
+ "post": {
+ "summary": "file",
+ "deprecated": false,
+ "description": "Uploads or removes photos, uploads GPS data file for a summit log.",
+ "operationId": "fileSummitLog",
+ "tags": [
+ "summit-log"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Summit Log Id",
+ "required": true,
+ "example": "4yql7587j64qdo5",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "photos": {
+ "format": "binary",
+ "type": "string",
+ "description": "List of image files to add. Allowed file types: PNG, JPG, WEBP, SVG",
+ "example": [
+ ""
+ ]
+ },
+ "photos-": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "List of file names to delete.",
+ "example": ""
+ },
+ "gpx": {
+ "type": "string",
+ "format": "binary",
+ "minLength": 0,
+ "maxLength": 1,
+ "description": "File containing GPS track data. Allowed file types: GPX, JSON, FIT, KML",
+ "example": "file:///Users/christianbeutel/Downloads/2021-10-24_536064034_Essen-Mitte.nach.Bochum-Hauptbahnhof.gpx"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "number"
+ },
+ "duration": {
+ "type": "number"
+ },
+ "elevation_gain": {
+ "type": "number"
+ },
+ "elevation_loss": {
+ "type": "number"
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "text": {
+ "type": "string"
+ },
+ "updated": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "author",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "gpx",
+ "id",
+ "photos",
+ "text",
+ "updated"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "collectionId": "dd2l9a4vxpy2ni8",
+ "collectionName": "summit_logs",
+ "created": "2025-01-03 09:56:37.620Z",
+ "date": "2025-01-02 00:00:00.000Z",
+ "distance": 36983010.25256769,
+ "duration": 68163654.92949024,
+ "elevation_gain": 44389248.880456366,
+ "elevation_loss": 6494274.720874871,
+ "gpx": "2021_11_14_564807964_dusseldorf_angermund_nach_n4R1NcyDsY.Neuss-Hamm.gpx",
+ "id": "58iuq9j30qbbwmq",
+ "photos": [
+ "23xxesym0e9w18z2904frnpgy7_CTPOstkHAC.jpg"
+ ],
+ "text": "et magna veniam anim cillum",
+ "updated": "2025-01-03 10:22:09.893Z"
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/trail": {
+ "get": {
+ "summary": "list",
+ "deprecated": false,
+ "description": "Lists all trails.",
+ "operationId": "listTrails",
+ "tags": [
+ "trail"
+ ],
+ "parameters": [
+ {
+ "name": "page",
+ "in": "query",
+ "description": "Page number starting at 1",
+ "required": false,
+ "example": 1,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "perPage",
+ "in": "query",
+ "description": "Items per page",
+ "required": false,
+ "example": 5,
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "sort",
+ "in": "query",
+ "description": "Sort string (-/+)",
+ "required": false,
+ "example": "-created",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "filter",
+ "in": "query",
+ "description": "Filter string (https://pocketbase.io/docs/api-rules-and-filters/#filters-syntax)",
+ "required": false,
+ "example": "name=\"MyTrail\"",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "author",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "my-key",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "page": {
+ "type": "integer"
+ },
+ "perPage": {
+ "type": "integer"
+ },
+ "totalItems": {
+ "type": "integer"
+ },
+ "totalPages": {
+ "type": "integer"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "difficulty": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "number"
+ },
+ "duration": {
+ "type": "integer"
+ },
+ "elevation_gain": {
+ "type": "number"
+ },
+ "elevation_loss": {
+ "type": "integer"
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "location": {
+ "type": "string"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "summit_logs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "thumbnail": {
+ "type": "integer"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "waypoints": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "author",
+ "category",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "description",
+ "difficulty",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "gpx",
+ "id",
+ "lat",
+ "location",
+ "lon",
+ "name",
+ "photos",
+ "public",
+ "summit_logs",
+ "thumbnail",
+ "updated",
+ "waypoints",
+ "expand"
+ ]
+ }
+ }
+ },
+ "required": [
+ "page",
+ "perPage",
+ "totalItems",
+ "totalPages",
+ "items"
+ ]
+ },
+ "examples": {
+ "1": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 53,
+ "totalPages": 11,
+ "items": [
+ {
+ "author": "3mugf953w4a9fg5",
+ "category": "x5y2ikswxzoznek",
+ "collectionId": "e864strfxo14pm4",
+ "collectionName": "trails",
+ "created": "2024-10-06 09:33:11.404Z",
+ "date": "2024-10-06 00:00:00.000Z",
+ "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n\nLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n\nLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n\nLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n\nLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
+ "difficulty": "easy",
+ "distance": 7504.162098327643,
+ "duration": 0,
+ "elevation_gain": 840.19189453125,
+ "elevation_loss": 0,
+ "gpx": "breitenstein_3_DvymxgjEm5.gpx",
+ "id": "074jf18neqwfbsr",
+ "lat": 47.71215663291514,
+ "location": "",
+ "lon": 11.964081572368741,
+ "name": "Breitenstein",
+ "photos": [],
+ "public": false,
+ "summit_logs": [],
+ "thumbnail": 0,
+ "updated": "2024-11-05 21:54:20.799Z",
+ "waypoints": [
+ "43570e9537dd83a",
+ "2efed4a4b90e8b3",
+ "d1ae45c1f4e6353",
+ "69de69fdb3b47b5",
+ "162d22a68a1a98b",
+ "04328b07923294e"
+ ],
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "category": "x5y2ikswxzoznek",
+ "collectionId": "e864strfxo14pm4",
+ "collectionName": "trails",
+ "created": "2024-09-14 14:18:27.538Z",
+ "date": "2024-09-14 00:00:00.000Z",
+ "description": "",
+ "difficulty": "easy",
+ "distance": 18487.660615835353,
+ "duration": 0,
+ "elevation_gain": 209.55000000000015,
+ "elevation_loss": 0,
+ "gpx": "blob_BaoYdHnfYw.gpx",
+ "id": "14y4qxqbqh0n10m",
+ "lat": 48.311547246,
+ "location": "",
+ "lon": 0.993056622,
+ "name": "Thiron-Gardais - Nogent-le-Rotrou",
+ "photos": [],
+ "public": true,
+ "summit_logs": [],
+ "thumbnail": 0,
+ "updated": "2024-12-08 21:26:17.269Z",
+ "waypoints": [],
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "znhd3hgrxl85c9f",
+ "category": "x5y2ikswxzoznek",
+ "collectionId": "e864strfxo14pm4",
+ "collectionName": "trails",
+ "created": "2024-11-15 18:50:36.223Z",
+ "date": "2024-11-15 00:00:00.000Z",
+ "description": "",
+ "difficulty": "easy",
+ "distance": 283396.31855792465,
+ "duration": 0,
+ "elevation_gain": 0,
+ "elevation_loss": 0,
+ "gpx": "2024_10_22_04_28_2024_10_22_21_29_UUGET8zBuk.gpx",
+ "id": "267r63tmbyezpck",
+ "lat": 41.754053,
+ "location": "",
+ "lon": -2.484733,
+ "name": "Gassi",
+ "photos": [],
+ "public": true,
+ "summit_logs": [
+ "e980ffa422f1603"
+ ],
+ "thumbnail": 0,
+ "updated": "2024-11-16 12:49:33.814Z",
+ "waypoints": [],
+ "expand": {
+ "author": {
+ "avatar": "screenshot_2024_06_30_at_22_55_34_jpeg_grafik_1024_1024_pixel_skaliert_89_GnBqL3uYqZ.png",
+ "bio": "",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-30 21:02:11.693Z",
+ "id": "znhd3hgrxl85c9f",
+ "private": false,
+ "username": "John"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "category": "x5y2ikswxzoznek",
+ "collectionId": "e864strfxo14pm4",
+ "collectionName": "trails",
+ "created": "2024-09-14 14:18:26.946Z",
+ "date": "2024-09-14 00:00:00.000Z",
+ "description": "",
+ "difficulty": "easy",
+ "distance": 10942.463179990422,
+ "duration": 0,
+ "elevation_gain": 66.64999999999999,
+ "elevation_loss": 0,
+ "gpx": "blob_ZjF1DuT8Rl.gpx",
+ "id": "2o9c3pxfvrzclud",
+ "lat": 48.626390603,
+ "location": "",
+ "lon": -0.960178937,
+ "name": "Mortain - St-Hilaire-du-Harcouët",
+ "photos": [],
+ "public": true,
+ "summit_logs": [],
+ "thumbnail": 0,
+ "updated": "2024-12-08 21:26:17.888Z",
+ "waypoints": [],
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "category": "x5y2ikswxzoznek",
+ "collectionId": "e864strfxo14pm4",
+ "collectionName": "trails",
+ "created": "2024-09-14 14:18:27.604Z",
+ "date": "2024-09-14 00:00:00.000Z",
+ "description": "",
+ "difficulty": "easy",
+ "distance": 23920.21858179372,
+ "duration": 0,
+ "elevation_gain": 238.07999999999996,
+ "elevation_loss": 0,
+ "gpx": "blob_oyW3EXsfqS.gpx",
+ "id": "2y8o7bwmor4yltt",
+ "lat": 48.8029381,
+ "location": "",
+ "lon": 2.1264017,
+ "name": "Versailles - St-Rémy-lès-Chevreuse",
+ "photos": [],
+ "public": true,
+ "summit_logs": [],
+ "thumbnail": 0,
+ "updated": "2024-12-08 21:26:16.840Z",
+ "waypoints": [],
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "3": {
+ "summary": "Success",
+ "value": {
+ "page": 1,
+ "perPage": 5,
+ "totalItems": 4,
+ "totalPages": 1,
+ "items": [
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2025-01-02 22:29:19.092Z",
+ "description": "This list was updated by the wanderer API",
+ "id": "4yql7587j64qdo5",
+ "name": "Updated API List",
+ "public": false,
+ "trails": [],
+ "updated": "2025-01-02 22:39:36.944Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "640px_mont_saint_michel_vu_du_ciel_MvWoudBkPE.jpg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-09-09 22:10:07.972Z",
+ "description": "La Véloscénie is a 450-kilometre (280 mi) cycle route that takes you on an adventure from Paris to Mont-Saint-Michel on the Channel coast. From the capital to the beaches, passing through numerous hamlets and stunning towns such as Chartres, this journey westwards has many surprises in store.\r\n\r\nWe suggest you complete this journey in seven stages. This is a challenging pace, but should still leave you time to discover the many attractions en route. Cathedrals, castles, lakes, stunning landscapes and historic villages will show you that you don't have to wait for Mont-Saint-Michel to be amazed.\r\n\r\nThe itinerary alternates between little-used secondary roads, greenways and trails. This trip is best ridden on a bike that can handle rougher trails, like a touring, hybrid or gravel bike.\r\n\r\nParis is easy to reach from anywhere in France, but the choice is more limited if you want to leave from Mont-Saint-Michel. The nearest railway station is in Pontorson, 10 kilometres (6 mi) from Mont-Saint-Michel. From Pontorson, direct trains to Paris leave every evening, around 6pm on weekdays and at weekends, only between June and the end of September. Bikes can be taken on board free of charge by prior arrangement. Apart from this seasonal service, there are other ways of returning to Paris, with at least one train change required. For more information: veloscenic.com/reaching-the-veloscenic-cycle-route\r\n\r\nAlthough the route is accessible all year round, some accommodation and tourist attractions are likely to close in the low season, so it’s best to ride in spring or summer. While some stages end in big cities, others end in more rural areas and you’ll need to book your accommodation in advance. It’s not necessary to book restaurants along the route, but it is best to plan stops for refreshments, as not all the villages you pass through have restaurants or shops.",
+ "id": "bdv9iukn4d2lf2i",
+ "name": "From Paris to Mont-Saint-Michel — La Véloscénie",
+ "public": false,
+ "trails": [
+ "jou2tcf0y8jj9m3",
+ "ilyvsa4xr52lxlr",
+ "2y8o7bwmor4yltt",
+ "gmh81mczhjp834l",
+ "6hpvcyosmqr8uk8",
+ "iql9fifaxnb5u6m",
+ "y9hjysn5xhbmi86",
+ "fehuzqkfi49hkwn",
+ "fmin7pbj8urtxx0",
+ "14y4qxqbqh0n10m",
+ "6fv6krwusycttbl",
+ "66jj108gizquc2r",
+ "wbuwzu8tp48hljg",
+ "x3lo6ru4ly753w6",
+ "h91u3vl8n5ekune",
+ "bzodytd0vd2e56g",
+ "oy1auygew9fvha0",
+ "6atd6i73bzle0ar",
+ "iz2ohx9hbn8irrc",
+ "2o9c3pxfvrzclud",
+ "btn09xkl7ab0n9k",
+ "ek2cb00tw4v4fav"
+ ],
+ "updated": "2024-12-27 00:55:25.917Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "dscn0010_xN987yGxE0.jpg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-12-30 17:41:00.152Z",
+ "description": "Hallo",
+ "id": "dci7qk44birm2bn",
+ "name": "Liste mit Oachkatzerl",
+ "public": true,
+ "trails": [
+ "ovo0m6pxxjupfp9",
+ "yesm2tqc6jok8jq",
+ "z94vgei3jdc37k4"
+ ],
+ "updated": "2024-12-30 18:58:44.269Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ },
+ {
+ "author": "3mugf953w4a9fg5",
+ "avatar": "caret_right_solid_iUtggzDoh7.svg",
+ "collectionId": "r6gu2ajyidy1x69",
+ "collectionName": "lists",
+ "created": "2024-12-13 12:46:49.620Z",
+ "description": "",
+ "id": "m59tuo2yyretv7z",
+ "name": "Flomp's List 2",
+ "public": false,
+ "trails": [
+ "ovo0m6pxxjupfp9"
+ ],
+ "updated": "2024-12-27 00:55:21.456Z",
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid sort/expand/filter": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Something went wrong while processing your request.",
+ "detail": {
+ "code": 400,
+ "message": "Something went wrong while processing your request.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ },
+ "put": {
+ "summary": "create",
+ "deprecated": false,
+ "description": "Creates a trail.",
+ "operationId": "createTrail",
+ "tags": [
+ "trail"
+ ],
+ "parameters": [
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request id. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the trail"
+ },
+ "public": {
+ "type": "boolean",
+ "description": "Visible for everyone"
+ },
+ "category": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15,
+ "description": "Category Id"
+ },
+ "date": {
+ "type": "string",
+ "format": "date",
+ "description": "Date of the trail"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of the trail"
+ },
+ "difficulty": {
+ "type": "string",
+ "enum": [
+ "easy",
+ "moderate",
+ "hard"
+ ],
+ "description": "Difficulty of the trail"
+ },
+ "distance": {
+ "type": "number",
+ "description": "Distance in meters",
+ "minimum": 0
+ },
+ "duration": {
+ "type": "number",
+ "description": "Duration in seconds",
+ "minimum": 0
+ },
+ "elevation_gain": {
+ "type": "number",
+ "description": "Elevation gain in vertical meters",
+ "minimum": 0
+ },
+ "elevation_loss": {
+ "type": "number",
+ "description": "Elevation loss in vertical meters",
+ "minimum": 0
+ },
+ "lat": {
+ "type": "number",
+ "description": "Latitude of the starting point",
+ "minimum": -90,
+ "maximum": 90
+ },
+ "location": {
+ "type": "string",
+ "description": "Nearest city/village"
+ },
+ "lon": {
+ "type": "number",
+ "description": "Longitude of the starting point",
+ "minimum": -180,
+ "maximum": 180
+ },
+ "thumbnail": {
+ "type": "integer",
+ "description": "Index of the photo that should be used as the thumbnail.",
+ "minimum": 0
+ },
+ "author": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15,
+ "description": "User Id"
+ }
+ },
+ "required": [
+ "name",
+ "public",
+ "author"
+ ]
+ },
+ "example": {
+ "name": "at error minus",
+ "public": false,
+ "category": "l3q348pprel6opd",
+ "date": "2025-01-03T00:36:48.554Z",
+ "description": "Minima architecto maiores maiores architecto. Nobis aliquid magni magni ipsum. Itaque maxime mollitia. Laboriosam placeat ipsa omnis magni atque non.",
+ "difficulty": "moderate",
+ "distance": 46585640.67167308,
+ "duration": 8687485.195364153,
+ "elevation_gain": 4089694.238652264,
+ "elevation_loss": 12108588.345680581,
+ "lat": 86.60827022966254,
+ "location": "sunt",
+ "lon": 112.96378311445648,
+ "thumbnail": 0,
+ "author": "3mugf953w4a9fg5"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "difficulty": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "number"
+ },
+ "duration": {
+ "type": "number"
+ },
+ "elevation_gain": {
+ "type": "number"
+ },
+ "elevation_loss": {
+ "type": "number"
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "location": {
+ "type": "string"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "summit_logs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "thumbnail": {
+ "type": "integer"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "waypoints": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "author",
+ "category",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "description",
+ "difficulty",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "gpx",
+ "id",
+ "lat",
+ "location",
+ "lon",
+ "name",
+ "photos",
+ "public",
+ "summit_logs",
+ "thumbnail",
+ "updated",
+ "waypoints"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "category": "l3q348pprel6opd",
+ "collectionId": "e864strfxo14pm4",
+ "collectionName": "trails",
+ "created": "2025-01-03 11:36:58.976Z",
+ "date": "2025-01-03 00:36:48.554Z",
+ "description": "Minima architecto maiores maiores architecto. Nobis aliquid magni magni ipsum. Itaque maxime mollitia. Laboriosam placeat ipsa omnis magni atque non.",
+ "difficulty": "moderate",
+ "distance": 46585640.67167308,
+ "duration": 8687485.195364153,
+ "elevation_gain": 4089694.238652264,
+ "elevation_loss": 12108588.345680581,
+ "gpx": "",
+ "id": "d9ba280yjycrk0k",
+ "lat": 86.60827022966254,
+ "location": "sunt",
+ "lon": 112.96378311445648,
+ "name": "at error minus",
+ "photos": [],
+ "public": false,
+ "summit_logs": [],
+ "thumbnail": 0,
+ "updated": "2025-01-03 11:36:58.976Z",
+ "waypoints": []
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "Failed to create record.",
+ "detail": {
+ "code": 400,
+ "message": "Failed to create record.",
+ "data": {
+ "author": {
+ "code": "validation_missing_rel_records",
+ "message": "Failed to find all relation records with the provided ids."
+ }
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "x-400:Invalid Params": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "validation": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "path"
+ ]
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "invalid_string",
+ "validation": "date",
+ "message": "Invalid date",
+ "path": [
+ "date"
+ ]
+ },
+ {
+ "code": "custom",
+ "message": "invalid-date",
+ "path": [
+ "date"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/trail/{id}": {
+ "get": {
+ "summary": "show",
+ "deprecated": false,
+ "description": "Shows a single trail.",
+ "operationId": "showTrail",
+ "tags": [
+ "trail"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Trail Id",
+ "required": true,
+ "example": "95bb1d77c8dfa98",
+ "schema": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "difficulty": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "number"
+ },
+ "duration": {
+ "type": "integer"
+ },
+ "elevation_gain": {
+ "type": "integer"
+ },
+ "elevation_loss": {
+ "type": "integer"
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "location": {
+ "type": "string"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "summit_logs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "thumbnail": {
+ "type": "integer"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "waypoints": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "expand": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "object",
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "private": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "avatar",
+ "bio",
+ "collectionId",
+ "collectionName",
+ "created",
+ "id",
+ "private",
+ "username"
+ ]
+ }
+ },
+ "required": [
+ "author"
+ ]
+ }
+ },
+ "required": [
+ "author",
+ "category",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "description",
+ "difficulty",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "gpx",
+ "id",
+ "lat",
+ "location",
+ "lon",
+ "name",
+ "photos",
+ "public",
+ "summit_logs",
+ "thumbnail",
+ "updated",
+ "waypoints",
+ "expand"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "category": "pbwx1lg2nmcih0w",
+ "collectionId": "e864strfxo14pm4",
+ "collectionName": "trails",
+ "created": "2024-12-30 18:57:35.453Z",
+ "date": "2024-12-30",
+ "description": "",
+ "difficulty": "moderate",
+ "distance": 5631.307320599051,
+ "duration": 0,
+ "elevation_gain": 76,
+ "elevation_loss": 76,
+ "gpx": "blob_0E0x721wan.gpx",
+ "id": "z94vgei3jdc37k4",
+ "lat": 47.385232,
+ "location": "",
+ "lon": 9.655863,
+ "name": "Die Pottsau",
+ "photos": [
+ "23xxesym0e9w18z2904frnpgy7_2SQmCCI6DV.jpg",
+ "caret_right_solid_9154Rrvk6B.svg"
+ ],
+ "public": false,
+ "summit_logs": [
+ "95bb1d77c8dfa98"
+ ],
+ "thumbnail": 1,
+ "updated": "2024-12-30 18:59:56.924Z",
+ "waypoints": [
+ "7f6d2a8c9d50136",
+ "60c2d435a5b66ed"
+ ],
+ "expand": {
+ "author": {
+ "avatar": "pexels_photo_2230444_WILu8cRHVb.jpg",
+ "bio": "ex aliqua velit deserunt ea exercitation do. Velit ullamco elit culpa eiusmod officia irure aute Lorem in ullamco labore ex. Officia ea qui in exercitation amet. Consequat laboris id duis enim Lorem dolore fugiat excepteur sunt. Sint consectetur duis tempor deserunt non. Ex amet sunt eu commodo.\n\nMollit labore cupidatat qui enim consectetur irure. Ea et reprehenderit ipsum adipisicing duis proident tempor esse excepteur dolor dolore anim consectetur aliqua. Laborum culpa eiusmod id ea consectetur do sit reprehenderit consequat voluptate mollit commodo. Ullamco aute ea minim enim et cupidatat ipsum cillum fugiat. Proident consectetur commodo Lorem do incididunt labore pariatur esse ea officia adipisicing. Do et sint culpa proident enim irure aliqua dolore magna. Laborum Lorem sunt amet occaecat occaecat mollit consectetur laborum ut.",
+ "collectionId": "xku110v5a5xbufa",
+ "collectionName": "users_anonymous",
+ "created": "2024-06-29 19:23:47.731Z",
+ "id": "3mugf953w4a9fg5",
+ "private": false,
+ "username": "Flomp"
+ }
+ }
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": []
+ },
+ "post": {
+ "summary": "update",
+ "deprecated": false,
+ "description": "",
+ "operationId": "updateTrail",
+ "tags": [
+ "trail"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Trail Id",
+ "required": true,
+ "example": "",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/json",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the trail"
+ },
+ "category": {
+ "type": "string",
+ "minLength": 15,
+ "maxLength": 15,
+ "description": "Category Id"
+ },
+ "date": {
+ "type": "string",
+ "format": "date",
+ "description": "Date of the trail"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of the trail"
+ },
+ "difficulty": {
+ "type": "string",
+ "enum": [
+ "easy",
+ "moderate",
+ "hard"
+ ],
+ "description": "Difficulty of the trail"
+ },
+ "distance": {
+ "type": "number",
+ "description": "Distance in meters",
+ "minimum": 0
+ },
+ "duration": {
+ "type": "number",
+ "description": "Duration in seconds",
+ "minimum": 0
+ },
+ "elevation_gain": {
+ "type": "number",
+ "description": "Elevation gain in vertical meters",
+ "minimum": 0
+ },
+ "elevation_loss": {
+ "type": "number",
+ "description": "Elevation loss in vertical meters",
+ "minimum": 0
+ },
+ "lat": {
+ "type": "number",
+ "description": "Latitude of the starting point",
+ "minimum": -90,
+ "maximum": 90
+ },
+ "location": {
+ "type": "string",
+ "description": "Nearest city/village"
+ },
+ "lon": {
+ "type": "number",
+ "description": "Longitude of the starting point",
+ "minimum": -180,
+ "maximum": 180
+ },
+ "public": {
+ "type": "boolean",
+ "description": "Visible for everyone"
+ },
+ "thumbnail": {
+ "type": "integer",
+ "description": "Index of the photo that should be used as the thumbnail.",
+ "minimum": 0
+ }
+ }
+ },
+ "example": {
+ "name": "inventore est laboriosam",
+ "category": "7sqwezntokmbvdr",
+ "date": "2025-01-03T07:14:55.803Z",
+ "description": "At dolor deleniti architecto nulla nemo in perspiciatis. Iste iusto ex quidem sed modi. Ipsam unde doloribus aut. Molestias ducimus molestias soluta.",
+ "difficulty": "easy",
+ "distance": 71499916.19683264,
+ "duration": 87771408.86514412,
+ "elevation_gain": 67291819.86293587,
+ "elevation_loss": 76718134.08675973,
+ "lat": 85.23610854378416,
+ "location": "ex laborum",
+ "lon": -48.60959423486602,
+ "public": true,
+ "thumbnail": 0
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "difficulty": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "number"
+ },
+ "duration": {
+ "type": "number"
+ },
+ "elevation_gain": {
+ "type": "number"
+ },
+ "elevation_loss": {
+ "type": "number"
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "location": {
+ "type": "string"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "summit_logs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "thumbnail": {
+ "type": "integer"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "waypoints": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "author",
+ "category",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "description",
+ "difficulty",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "gpx",
+ "id",
+ "lat",
+ "location",
+ "lon",
+ "name",
+ "photos",
+ "public",
+ "summit_logs",
+ "thumbnail",
+ "updated",
+ "waypoints"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "category": "7sqwezntokmbvdr",
+ "collectionId": "e864strfxo14pm4",
+ "collectionName": "trails",
+ "created": "2025-01-03 11:42:07.848Z",
+ "date": "2025-01-03 07:14:55.803Z",
+ "description": "At dolor deleniti architecto nulla nemo in perspiciatis. Iste iusto ex quidem sed modi. Ipsam unde doloribus aut. Molestias ducimus molestias soluta.",
+ "difficulty": "easy",
+ "distance": 71499916.19683264,
+ "duration": 87771408.86514412,
+ "elevation_gain": 67291819.86293587,
+ "elevation_loss": 76718134.08675973,
+ "gpx": "2021_11_14_564807964_dusseldorf_angermund_nach_ZpNsRB5SEW.Neuss-Hamm.gpx",
+ "id": "hfdmpa1n1ulyr64",
+ "lat": 85.23610854378416,
+ "location": "ex laborum",
+ "lon": -48.60959423486602,
+ "name": "inventore est laboriosam",
+ "photos": [],
+ "public": true,
+ "summit_logs": [
+ "3pagejfjt1cz4vr"
+ ],
+ "thumbnail": 0,
+ "updated": "2025-01-03 11:48:41.963Z",
+ "waypoints": []
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ },
+ "delete": {
+ "summary": "delete",
+ "deprecated": false,
+ "description": "Deletes a summit log.",
+ "operationId": "deleteTrail",
+ "tags": [
+ "trail"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Summit Log Id",
+ "required": true,
+ "example": "4yql7587j64qdo5",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "expand",
+ "in": "query",
+ "description": "Expand a foreign key column (https://pocketbase.io/docs/working-with-relations/#expanding-relations).",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "requestKey",
+ "in": "query",
+ "description": "Unique request key. Prevents auto cancel when sending multiple requests.",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "acknowledged": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "acknowledged"
+ ]
+ },
+ "example": {
+ "acknowledged": true
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/trail/upload": {
+ "put": {
+ "summary": "upload",
+ "deprecated": false,
+ "description": "Automatically creates a trail from the uploaded file. Tries to infer as much information as possible from the file's metadata.",
+ "operationId": "uploadTrail",
+ "tags": [
+ "trail"
+ ],
+ "parameters": [
+ {
+ "name": "Content-Type",
+ "in": "header",
+ "description": "",
+ "required": true,
+ "example": "application/gpx+xml",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "file": {
+ "format": "binary",
+ "type": "string",
+ "description": "File containing GPS track data. Allowed file types: GPX, JSON, FIT, KML",
+ "example": "file:///Users/christianbeutel/Downloads/4_champex_to_le_chable.gpx"
+ },
+ "name": {
+ "description": "File name",
+ "example": "",
+ "type": "string"
+ }
+ },
+ "required": [
+ "file"
+ ]
+ },
+ "example": "/Users/christianbeutel/Downloads/2021-10-24_536064034_Essen-Mitte.nach.Bochum-Hauptbahnhof.gpx"
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "difficulty": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "number"
+ },
+ "duration": {
+ "type": "number"
+ },
+ "elevation_gain": {
+ "type": "number"
+ },
+ "elevation_loss": {
+ "type": "number"
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "location": {
+ "type": "string"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "summit_logs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "thumbnail": {
+ "type": "integer"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "waypoints": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "author",
+ "category",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "description",
+ "difficulty",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "gpx",
+ "id",
+ "lat",
+ "location",
+ "lon",
+ "name",
+ "photos",
+ "public",
+ "summit_logs",
+ "thumbnail",
+ "updated",
+ "waypoints"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "category": "",
+ "collectionId": "e864strfxo14pm4",
+ "collectionName": "trails",
+ "created": "2025-01-03 11:42:07.848Z",
+ "date": "2021-11-14 00:00:00.000Z",
+ "description": "",
+ "difficulty": "easy",
+ "distance": 24077.68400534589,
+ "duration": 297.01666666666665,
+ "elevation_gain": 40.10210099999998,
+ "elevation_loss": 45.42742099999999,
+ "gpx": "2021_11_14_564807964_dusseldorf_angermund_nach_ZpNsRB5SEW.Neuss-Hamm.gpx",
+ "id": "hfdmpa1n1ulyr64",
+ "lat": 51.33429,
+ "location": "",
+ "lon": 6.768533,
+ "name": "Düsseldorf-Angermund nach Neuss-Hamm",
+ "photos": [],
+ "public": false,
+ "summit_logs": [
+ "3pagejfjt1cz4vr"
+ ],
+ "thumbnail": 0,
+ "updated": "2025-01-03 11:42:07.962Z",
+ "waypoints": []
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "status": {
+ "type": "integer"
+ },
+ "response": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "message"
+ ]
+ },
+ "isAbort": {
+ "type": "boolean"
+ },
+ "originalError": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "integer"
+ },
+ "response": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "status",
+ "response"
+ ]
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "url",
+ "status",
+ "response",
+ "isAbort",
+ "originalError",
+ "name"
+ ]
+ },
+ "example": {
+ "url": "",
+ "status": 400,
+ "response": {
+ "message": "Invalid file"
+ },
+ "isAbort": false,
+ "originalError": {
+ "status": 400,
+ "response": {
+ "message": "Invalid file"
+ }
+ },
+ "name": "ClientResponseError 400"
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ },
+ "/trail/{id}/file": {
+ "post": {
+ "summary": "file",
+ "deprecated": false,
+ "description": "Uploads or removes photos, uploads GPS data file for a trail.",
+ "operationId": "fileTrail",
+ "tags": [
+ "trail"
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Trail Id",
+ "required": true,
+ "example": "4yql7587j64qdo5",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "photos": {
+ "format": "binary",
+ "type": "string",
+ "description": "List of image files to add. Allowed file types: PNG, JPG, WEBP, SVG",
+ "example": [
+ ""
+ ]
+ },
+ "photos-": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "List of file names to delete.",
+ "example": ""
+ },
+ "gpx": {
+ "type": "string",
+ "format": "binary",
+ "minLength": 0,
+ "maxLength": 1,
+ "description": "File containing GPS track data. Allowed file types: GPX, JSON, FIT, KML",
+ "example": "file:///Users/christianbeutel/Downloads/2021-10-24_536064034_Essen-Mitte.nach.Bochum-Hauptbahnhof.gpx"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "collectionId": {
+ "type": "string"
+ },
+ "collectionName": {
+ "type": "string"
+ },
+ "created": {
+ "type": "string"
+ },
+ "date": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "difficulty": {
+ "type": "string"
+ },
+ "distance": {
+ "type": "number"
+ },
+ "duration": {
+ "type": "number"
+ },
+ "elevation_gain": {
+ "type": "number"
+ },
+ "elevation_loss": {
+ "type": "number"
+ },
+ "gpx": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "location": {
+ "type": "string"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "photos": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "summit_logs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "thumbnail": {
+ "type": "integer"
+ },
+ "updated": {
+ "type": "string"
+ },
+ "waypoints": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "author",
+ "category",
+ "collectionId",
+ "collectionName",
+ "created",
+ "date",
+ "description",
+ "difficulty",
+ "distance",
+ "duration",
+ "elevation_gain",
+ "elevation_loss",
+ "gpx",
+ "id",
+ "lat",
+ "location",
+ "lon",
+ "name",
+ "photos",
+ "public",
+ "summit_logs",
+ "thumbnail",
+ "updated",
+ "waypoints"
+ ]
+ },
+ "example": {
+ "author": "3mugf953w4a9fg5",
+ "category": "7sqwezntokmbvdr",
+ "collectionId": "e864strfxo14pm4",
+ "collectionName": "trails",
+ "created": "2025-01-03 11:42:07.848Z",
+ "date": "2025-01-03 07:14:55.803Z",
+ "description": "At dolor deleniti architecto nulla nemo in perspiciatis. Iste iusto ex quidem sed modi. Ipsam unde doloribus aut. Molestias ducimus molestias soluta.",
+ "difficulty": "easy",
+ "distance": 71499916.19683264,
+ "duration": 87771408.86514412,
+ "elevation_gain": 67291819.86293587,
+ "elevation_loss": 76718134.08675973,
+ "gpx": "4_champex_to_le_chable_h8sE0CwAes.gpx",
+ "id": "hfdmpa1n1ulyr64",
+ "lat": 85.23610854378416,
+ "location": "ex laborum",
+ "lon": -48.60959423486602,
+ "name": "inventore est laboriosam",
+ "photos": [
+ "23xxesym0e9w18z2904frnpgy7_0h84aa22yv.jpg",
+ "23xxesym0e9w18z2904frnpgy7_7JhLWsRrsm.jpg"
+ ],
+ "public": true,
+ "summit_logs": [
+ "3pagejfjt1cz4vr"
+ ],
+ "thumbnail": 0,
+ "updated": "2025-01-03 12:08:43.037Z",
+ "waypoints": []
+ }
+ }
+ },
+ "headers": {}
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "minimum": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "inclusive": {
+ "type": "boolean"
+ },
+ "exact": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "path": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "message",
+ "details"
+ ]
+ },
+ "example": {
+ "message": "invalid_params",
+ "details": [
+ {
+ "code": "too_small",
+ "minimum": 15,
+ "type": "string",
+ "inclusive": true,
+ "exact": true,
+ "message": "String must contain exactly 15 character(s)",
+ "path": [
+ "id"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "headers": {}
+ },
+ "404": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "code",
+ "message",
+ "data"
+ ]
+ }
+ },
+ "required": [
+ "message",
+ "detail"
+ ]
+ },
+ "example": {
+ "message": "The requested resource wasn't found.",
+ "detail": {
+ "code": 404,
+ "message": "The requested resource wasn't found.",
+ "data": {}
+ }
+ }
+ }
+ },
+ "headers": {}
+ }
+ },
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+ }
+ }
+ },
+ "components": {
+ "schemas": {},
+ "securitySchemes": {
+ "apikey-header-pb_auth": {
+ "type": "apiKey",
+ "in": "header",
+ "name": "pb_auth"
+ }
+ }
+ },
+ "servers": [],
+ "security": [
+ {
+ "apikey-header-pb_auth": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/web/package-lock.json b/web/package-lock.json
index 41d302d1..498b2d75 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -1,23 +1,34 @@
{
"name": "wanderer",
- "version": "0.16.5",
+ "version": "0.17.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "wanderer",
- "version": "0.16.5",
+ "version": "0.17.0",
"dependencies": {
"@felte/validator-zod": "^1.0.18",
"@fortawesome/fontawesome-free": "^6.5.1",
"@sveltejs/adapter-node": "^4.0.1",
"@threlte/core": "^8.0.0-next.41",
"@threlte/extras": "^9.0.0-next.55",
+ "@tiptap/core": "^2.14.0",
+ "@tiptap/extension-heading": "^2.14.0",
+ "@tiptap/extension-link": "^2.14.0",
+ "@tiptap/extension-mention": "^2.14.0",
+ "@tiptap/extension-placeholder": "^2.14.0",
+ "@tiptap/extension-underline": "^2.14.0",
+ "@tiptap/pm": "^2.14.0",
+ "@tiptap/starter-kit": "^2.14.0",
+ "@tiptap/suggestion": "^2.14.0",
"@turf/destination": "^7.1.0",
"@turf/distance": "^7.1.0",
"@types/chart.js": "^2.9.41",
"@types/three": "^0.161.2",
"@types/xmldom": "^0.1.34",
+ "activitypub-types": "^1.1.0",
+ "canvas-confetti": "^1.9.3",
"canvg": "^4.0.1",
"chart.js": "^4.4.6",
"chartjs-plugin-crosshair": "^2.0.0",
@@ -27,7 +38,6 @@
"heic2any": "^0.0.4",
"instead": "^1.0.3",
"isomorphic-xml2js": "^0.1.3",
- "js-confetti": "^0.12.0",
"jspdf": "^2.5.1",
"jszip": "^3.10.1",
"maplibre-gl": "^4.7.1",
@@ -48,31 +58,21 @@
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/kit": "^2.5.27",
"@sveltejs/vite-plugin-svelte": "^4.0.0",
+ "@tailwindcss/typography": "^0.5.15",
+ "@tailwindcss/vite": "^4.0.0",
+ "@types/canvas-confetti": "^1.9.0",
"@types/node": "^20.11.25",
"autoprefixer": "^10.4.17",
"postcss": "^8.4.33",
"svelte": "^5.0.0",
"svelte-check": "^4.0.0",
- "tailwindcss": "^3.4.1",
+ "tailwindcss": "^4.0.0",
"tslib": "^2.4.1",
"typescript": "^5.5.0",
"vite": "^5.4.4",
"vitest": "^1.2.0"
}
},
- "node_modules/@alloc/quick-lru": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
- "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
@@ -562,107 +562,17 @@
"node": ">=6"
}
},
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "node_modules/@isaacs/fs-minipass": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
+ "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
"dev": true,
"license": "ISC",
"dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ "minipass": "^7.0.4"
},
"engines": {
- "node": ">=12"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@isaacs/cliui/node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "node": ">=18.0.0"
}
},
"node_modules/@jest/schemas": {
@@ -815,55 +725,6 @@
"integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==",
"license": "ISC"
},
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
"node_modules/@playwright/test": {
"version": "1.49.1",
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.1.tgz",
@@ -886,6 +747,12 @@
"integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==",
"license": "MIT"
},
+ "node_modules/@remirror/core-constants": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz",
+ "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==",
+ "license": "MIT"
+ },
"node_modules/@rollup/plugin-commonjs": {
"version": "25.0.8",
"resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz",
@@ -1336,6 +1203,299 @@
"tslib": "^2.4.0"
}
},
+ "node_modules/@tailwindcss/node": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.8.tgz",
+ "integrity": "sha512-OWwBsbC9BFAJelmnNcrKuf+bka2ZxCE2A4Ft53Tkg4uoiE67r/PMEYwCsourC26E+kmxfwE0hVzMdxqeW+xu7Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.3.0",
+ "enhanced-resolve": "^5.18.1",
+ "jiti": "^2.4.2",
+ "lightningcss": "1.30.1",
+ "magic-string": "^0.30.17",
+ "source-map-js": "^1.2.1",
+ "tailwindcss": "4.1.8"
+ }
+ },
+ "node_modules/@tailwindcss/oxide": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.8.tgz",
+ "integrity": "sha512-d7qvv9PsM5N3VNKhwVUhpK6r4h9wtLkJ6lz9ZY9aeZgrUWk1Z8VPyqyDT9MZlem7GTGseRQHkeB1j3tC7W1P+A==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "detect-libc": "^2.0.4",
+ "tar": "^7.4.3"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "optionalDependencies": {
+ "@tailwindcss/oxide-android-arm64": "4.1.8",
+ "@tailwindcss/oxide-darwin-arm64": "4.1.8",
+ "@tailwindcss/oxide-darwin-x64": "4.1.8",
+ "@tailwindcss/oxide-freebsd-x64": "4.1.8",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.8",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.1.8",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.1.8",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.1.8",
+ "@tailwindcss/oxide-linux-x64-musl": "4.1.8",
+ "@tailwindcss/oxide-wasm32-wasi": "4.1.8",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.1.8",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.1.8"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-android-arm64": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.8.tgz",
+ "integrity": "sha512-Fbz7qni62uKYceWYvUjRqhGfZKwhZDQhlrJKGtnZfuNtHFqa8wmr+Wn74CTWERiW2hn3mN5gTpOoxWKk0jRxjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.8.tgz",
+ "integrity": "sha512-RdRvedGsT0vwVVDztvyXhKpsU2ark/BjgG0huo4+2BluxdXo8NDgzl77qh0T1nUxmM11eXwR8jA39ibvSTbi7A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-x64": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.8.tgz",
+ "integrity": "sha512-t6PgxjEMLp5Ovf7uMb2OFmb3kqzVTPPakWpBIFzppk4JE4ix0yEtbtSjPbU8+PZETpaYMtXvss2Sdkx8Vs4XRw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.8.tgz",
+ "integrity": "sha512-g8C8eGEyhHTqwPStSwZNSrOlyx0bhK/V/+zX0Y+n7DoRUzyS8eMbVshVOLJTDDC+Qn9IJnilYbIKzpB9n4aBsg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.8.tgz",
+ "integrity": "sha512-Jmzr3FA4S2tHhaC6yCjac3rGf7hG9R6Gf2z9i9JFcuyy0u79HfQsh/thifbYTF2ic82KJovKKkIB6Z9TdNhCXQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.8.tgz",
+ "integrity": "sha512-qq7jXtO1+UEtCmCeBBIRDrPFIVI4ilEQ97qgBGdwXAARrUqSn/L9fUrkb1XP/mvVtoVeR2bt/0L77xx53bPZ/Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.8.tgz",
+ "integrity": "sha512-O6b8QesPbJCRshsNApsOIpzKt3ztG35gfX9tEf4arD7mwNinsoCKxkj8TgEE0YRjmjtO3r9FlJnT/ENd9EVefQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.8.tgz",
+ "integrity": "sha512-32iEXX/pXwikshNOGnERAFwFSfiltmijMIAbUhnNyjFr3tmWmMJWQKU2vNcFX0DACSXJ3ZWcSkzNbaKTdngH6g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.8.tgz",
+ "integrity": "sha512-s+VSSD+TfZeMEsCaFaHTaY5YNj3Dri8rST09gMvYQKwPphacRG7wbuQ5ZJMIJXN/puxPcg/nU+ucvWguPpvBDg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-wasm32-wasi": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.8.tgz",
+ "integrity": "sha512-CXBPVFkpDjM67sS1psWohZ6g/2/cd+cq56vPxK4JeawelxwK4YECgl9Y9TjkE2qfF+9/s1tHHJqrC4SS6cVvSg==",
+ "bundleDependencies": [
+ "@napi-rs/wasm-runtime",
+ "@emnapi/core",
+ "@emnapi/runtime",
+ "@tybys/wasm-util",
+ "@emnapi/wasi-threads",
+ "tslib"
+ ],
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.4.3",
+ "@emnapi/runtime": "^1.4.3",
+ "@emnapi/wasi-threads": "^1.0.2",
+ "@napi-rs/wasm-runtime": "^0.2.10",
+ "@tybys/wasm-util": "^0.9.0",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.8.tgz",
+ "integrity": "sha512-7GmYk1n28teDHUjPlIx4Z6Z4hHEgvP5ZW2QS9ygnDAdI/myh3HTHjDqtSqgu1BpRoI4OiLx+fThAyA1JePoENA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.8.tgz",
+ "integrity": "sha512-fou+U20j+Jl0EHwK92spoWISON2OBnCazIc038Xj2TdweYV33ZRkS9nwqiUi2d/Wba5xg5UoHfvynnb/UB49cQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/typography": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz",
+ "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "postcss-selector-parser": "6.0.10"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
+ }
+ },
+ "node_modules/@tailwindcss/vite": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.8.tgz",
+ "integrity": "sha512-CQ+I8yxNV5/6uGaJjiuymgw0kEQiNKRinYbZXPdx1fk5WgiyReG0VaUx/Xq6aVNSUNJFzxm6o8FNKS5aMaim5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tailwindcss/node": "4.1.8",
+ "@tailwindcss/oxide": "4.1.8",
+ "tailwindcss": "4.1.8"
+ },
+ "peerDependencies": {
+ "vite": "^5.2.0 || ^6"
+ }
+ },
"node_modules/@threlte/core": {
"version": "8.0.0-next.41",
"resolved": "https://registry.npmjs.org/@threlte/core/-/core-8.0.0-next.41.tgz",
@@ -1439,6 +1599,407 @@
"integrity": "sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==",
"license": "MIT"
},
+ "node_modules/@tiptap/core": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.14.0.tgz",
+ "integrity": "sha512-MBSMzGYRFlwYCocvx3dU7zpCBSDQ0qWByNtStaEzuBUgzCJ6wn2DP/xG0cMcLmE3Ia0VLM4nwbLOAAvBXOtylA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/pm": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-blockquote": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.14.0.tgz",
+ "integrity": "sha512-AwqPP0jLYNioKxakiVw0vlfH/ceGFbV+SGoqBbPSGFPRdSbHhxHDNBlTtiThmT3N2PiVwXAD9xislJV+WY4GUA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-bold": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.14.0.tgz",
+ "integrity": "sha512-8DWwelH55H8KtLECSIv0wh8x/F/6lpagV/pMvT+Azujad0oqK+1iAPKU/kLgjXbFSkisrpV6KSwQts5neCtfRQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-bullet-list": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.14.0.tgz",
+ "integrity": "sha512-SWnL4bP8Mm/mWN42AMQNoqYE0V6LgSBTVsHwwAki2wIUQdr9HyoAnohvHy3IME56NMwoyZyo+Mzl45wOqUxziA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-code": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.14.0.tgz",
+ "integrity": "sha512-kyo02mnzqgwXayMcyRA/fHQgb+nMmQQpIt1irZwjtEoFZshA7NnY/6b5SJmRcxQ4/X4r2Y2Ha2sWmOcEkLmt4A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-code-block": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.14.0.tgz",
+ "integrity": "sha512-LRYYZeh8U2XgfTsJ4houB9s9cVRt7PRfVa4MaCeOYKfowVOKQh67yV5oom8Azk9XrMPkPxDmMmdPAEPxeVYFvw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0",
+ "@tiptap/pm": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-document": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.14.0.tgz",
+ "integrity": "sha512-qwEgpPIJ3AgXdEtRTr88hODbXRdt14VAwLj27PTSqexB5V7Ra1Jy7iQDhqRwBCoUomVywBsWYxkSuDisSRG+9w==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-dropcursor": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.14.0.tgz",
+ "integrity": "sha512-FIh5cdPuoPKvZ0GqSKhzMZGixm05ac3hSgqhMNCBZmXX459qBUI9CvDl/uzSnY9koBDeLVV3HYMthWQQLSXl9A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0",
+ "@tiptap/pm": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-gapcursor": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.14.0.tgz",
+ "integrity": "sha512-as+SqC39FRshw4Fm1XVlrdSXveiusf5xiC4nuefLmXsUxO7Yx67x8jS0/VQbxWTLHZ6R1YEW8prLtnxGmVLCAQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0",
+ "@tiptap/pm": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-hard-break": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.14.0.tgz",
+ "integrity": "sha512-A8c8n8881iBq3AusNqibh6Hloybr+FgYdg4Lg4jNxbbEaL0WhyLFge1bWlGVpbHXFqdv5YldMUAu6Rop3FhNvw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-heading": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.14.0.tgz",
+ "integrity": "sha512-vM//6G3Ox3mxPv9eilhrDqylELCc8kEP1aQ4xUuOw7vCidjNtGggOa1ERnnpV2dCa2A9E8y4FHtN4Xh29stXQg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-history": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.14.0.tgz",
+ "integrity": "sha512-/qnOHQFCEPfkb3caykqd+sqzEC2gx30EQB/mM7+5kIG7CQy7XXaGjFAEaqzE1xJ783Q2E7GVk4JxWM+3NhYSLw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0",
+ "@tiptap/pm": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-horizontal-rule": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.14.0.tgz",
+ "integrity": "sha512-OrKWgHOhmJtVHjPYaEJetNLiNEvrI85lTrGxzeQa+a8ACb93h4svyHe9J+LHs5pKkXDQFcpYEXJntu0LVLLiDw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0",
+ "@tiptap/pm": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-italic": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.14.0.tgz",
+ "integrity": "sha512-yEw2S+smoVR8DMYQMAWckVW2Sstf7z5+GBZ8zm8NMGhMKb1JFCPZUv5KTTIPnq7ZrKuuZHvjN9+Ef1dRYD8T2A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-link": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.14.0.tgz",
+ "integrity": "sha512-fsqW7eRD2xoD6xy7eFrNPAdIuZ3eicA4jKC45Vcft/Xky0DJoIehlVBLxsPbfmv3f27EBrtPkg5+msLXkLyzJA==",
+ "license": "MIT",
+ "dependencies": {
+ "linkifyjs": "^4.2.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0",
+ "@tiptap/pm": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-list-item": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.14.0.tgz",
+ "integrity": "sha512-t1jXDPEd82sC6vZVE/12/CB52uuiydCIcRfwdh21xNgBMckToKO9S0K6XEp4ROtrKQdlIH2JDVPfpUBvVrYN8Q==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-mention": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-mention/-/extension-mention-2.14.0.tgz",
+ "integrity": "sha512-mmEv5rBOn9b90hcp0iQg/YWxJPgthfBD6Rp8FRbYauB7laiBUa7rhT5iuY9nj3UFUy8009lEZjc1gvtkC9B9ug==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0",
+ "@tiptap/pm": "^2.7.0",
+ "@tiptap/suggestion": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-ordered-list": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.14.0.tgz",
+ "integrity": "sha512-QUZcyuW9AKvSfpFHcGmbyRCqxcpY0VNf0xipEtogxbA+JDDw3ZSPqU1dUgz9wk00RahPTwNDdY5aVjdQ5N4N9Q==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-paragraph": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.14.0.tgz",
+ "integrity": "sha512-bsQesVpgvDS2e+wr2fp59QO7rWRp2FqcJvBafwXS3Br9U5Mx3eFYryx4wC7cUnhlhUwX5pmaoA7zISgV9dZDgg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-placeholder": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.14.0.tgz",
+ "integrity": "sha512-xzfjHvuukbch4i5O/5uyS2K2QgNEaMKi6e6GExTTgVwnFjKfJmgTqee33tt5JCqSItBvtSZlU3SX/vpiaIof+w==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0",
+ "@tiptap/pm": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-strike": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.14.0.tgz",
+ "integrity": "sha512-rD5d/IL3XPfBOrHRHxt+b+0X1jbIbWONGiad/3sX0ZYQD3PandtCWboH40r/J5tFksebuY12dVYyYQKgLpDBOQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-text": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.14.0.tgz",
+ "integrity": "sha512-rHny566nGZHq61zRLwQ9BPG55W/O+eDKwUJl+LhrLiVWwzpvAl9QQYixtoxJKOY48VK41PKwxe3bgDYgNs/Fhg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-text-style": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-2.14.0.tgz",
+ "integrity": "sha512-dl0oi2i0rjLpBqTf4wGy6SLidvPpjxLcmX727pwJlCklkFJVDf8wSFeD4ddxJXiD2Rwef0D/lkcwXSY73CoDcA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/extension-underline": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.14.0.tgz",
+ "integrity": "sha512-rlBasbwElFikaL5qPyp3OeoEBH2p9Dve0K6liqIWF4i9cECH2Bm53y2S0enVEe01hmgQEWmoYK+fq67rxr3XsQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0"
+ }
+ },
+ "node_modules/@tiptap/pm": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.14.0.tgz",
+ "integrity": "sha512-cnsfaIlvTFCDtLP/A2Fd3LmpttgY0O/tuTM2fC71vetONz83wUTYT+aD9uvxdX0GkSocoh840b0TsEazbBxhpA==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-changeset": "^2.3.0",
+ "prosemirror-collab": "^1.3.1",
+ "prosemirror-commands": "^1.6.2",
+ "prosemirror-dropcursor": "^1.8.1",
+ "prosemirror-gapcursor": "^1.3.2",
+ "prosemirror-history": "^1.4.1",
+ "prosemirror-inputrules": "^1.4.0",
+ "prosemirror-keymap": "^1.2.2",
+ "prosemirror-markdown": "^1.13.1",
+ "prosemirror-menu": "^1.2.4",
+ "prosemirror-model": "^1.23.0",
+ "prosemirror-schema-basic": "^1.2.3",
+ "prosemirror-schema-list": "^1.4.1",
+ "prosemirror-state": "^1.4.3",
+ "prosemirror-tables": "^1.6.4",
+ "prosemirror-trailing-node": "^3.0.0",
+ "prosemirror-transform": "^1.10.2",
+ "prosemirror-view": "^1.37.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ }
+ },
+ "node_modules/@tiptap/starter-kit": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.14.0.tgz",
+ "integrity": "sha512-Z1bKAfHl14quRI3McmdU+bs675jp6/iexEQTI9M9oHa6l3McFF38g9N3xRpPPX02MX83DghsUPupndUW/yJvEQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@tiptap/core": "^2.14.0",
+ "@tiptap/extension-blockquote": "^2.14.0",
+ "@tiptap/extension-bold": "^2.14.0",
+ "@tiptap/extension-bullet-list": "^2.14.0",
+ "@tiptap/extension-code": "^2.14.0",
+ "@tiptap/extension-code-block": "^2.14.0",
+ "@tiptap/extension-document": "^2.14.0",
+ "@tiptap/extension-dropcursor": "^2.14.0",
+ "@tiptap/extension-gapcursor": "^2.14.0",
+ "@tiptap/extension-hard-break": "^2.14.0",
+ "@tiptap/extension-heading": "^2.14.0",
+ "@tiptap/extension-history": "^2.14.0",
+ "@tiptap/extension-horizontal-rule": "^2.14.0",
+ "@tiptap/extension-italic": "^2.14.0",
+ "@tiptap/extension-list-item": "^2.14.0",
+ "@tiptap/extension-ordered-list": "^2.14.0",
+ "@tiptap/extension-paragraph": "^2.14.0",
+ "@tiptap/extension-strike": "^2.14.0",
+ "@tiptap/extension-text": "^2.14.0",
+ "@tiptap/extension-text-style": "^2.14.0",
+ "@tiptap/pm": "^2.14.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ }
+ },
+ "node_modules/@tiptap/suggestion": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-2.14.0.tgz",
+ "integrity": "sha512-AXzEw0KYIyg5id8gz5geIffnBtkZqan5MWe29rGo3gXTfKH+Ik8tWbZdnlMVheycsUCllrymDRei4zw9DqVqkQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^2.7.0",
+ "@tiptap/pm": "^2.7.0"
+ }
+ },
"node_modules/@turf/destination": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@turf/destination/-/destination-7.2.0.tgz",
@@ -1496,6 +2057,13 @@
"url": "https://opencollective.com/turf"
}
},
+ "node_modules/@types/canvas-confetti": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@types/canvas-confetti/-/canvas-confetti-1.9.0.tgz",
+ "integrity": "sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/chart.js": {
"version": "2.9.41",
"resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.41.tgz",
@@ -1538,6 +2106,12 @@
"integrity": "sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==",
"license": "MIT"
},
+ "node_modules/@types/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
+ "license": "MIT"
+ },
"node_modules/@types/mapbox__point-geometry": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz",
@@ -1555,6 +2129,22 @@
"@types/pbf": "*"
}
},
+ "node_modules/@types/markdown-it": {
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
+ "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/linkify-it": "^5",
+ "@types/mdurl": "^2"
+ }
+ },
+ "node_modules/@types/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
+ "license": "MIT"
+ },
"node_modules/@types/node": {
"version": "20.17.14",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.14.tgz",
@@ -1748,6 +2338,12 @@
"node": ">=0.4.0"
}
},
+ "node_modules/activitypub-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/activitypub-types/-/activitypub-types-1.1.0.tgz",
+ "integrity": "sha512-06XrXpzW0Y7kS9ZS61qtV12s0oTCdcuWBO2/cPjPzGqlSBYqDvP8oiTIkSIrrynIrox5S5+/t8atDbi0Wo1xKA==",
+ "license": "MIT"
+ },
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -1770,46 +2366,11 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/anymatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/arg": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
- "dev": true,
- "license": "MIT"
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "license": "Python-2.0"
},
"node_modules/aria-query": {
"version": "5.3.2",
@@ -1965,19 +2526,6 @@
"require-from-string": "^2.0.2"
}
},
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -1987,19 +2535,6 @@
"balanced-match": "^1.0.0"
}
},
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/brotli": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
@@ -2120,16 +2655,6 @@
"node": ">=6"
}
},
- "node_modules/camelcase-css": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/camera-controls": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/camera-controls/-/camera-controls-2.9.0.tgz",
@@ -2160,6 +2685,16 @@
],
"license": "CC-BY-4.0"
},
+ "node_modules/canvas-confetti": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/canvas-confetti/-/canvas-confetti-1.9.3.tgz",
+ "integrity": "sha512-rFfTURMvmVEX1gyXFgn5QMn81bYk70qa0HLzcIOSVEyl57n6o9ItHeBtUSWdvKAPY0xlvBHno4/v3QPrT83q9g==",
+ "license": "ISC",
+ "funding": {
+ "type": "donate",
+ "url": "https://www.paypal.me/kirilvatev"
+ }
+ },
"node_modules/canvg": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/canvg/-/canvg-4.0.2.tgz",
@@ -2258,6 +2793,16 @@
"url": "https://paulmillr.com/funding/"
}
},
+ "node_modules/chownr": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
+ "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/cli-color": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz",
@@ -2321,16 +2866,6 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"license": "MIT"
},
- "node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
@@ -2371,6 +2906,12 @@
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"license": "MIT"
},
+ "node_modules/crelt": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
+ "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
+ "license": "MIT"
+ },
"node_modules/cross-fetch": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz",
@@ -2595,6 +3136,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/detect-libc": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
+ "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
+ "devOptional": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/devalue": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz",
@@ -2607,13 +3158,6 @@
"integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==",
"license": "MIT"
},
- "node_modules/didyoumean": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
- "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
- "dev": true,
- "license": "Apache-2.0"
- },
"node_modules/diet-sprite": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/diet-sprite/-/diet-sprite-0.0.1.tgz",
@@ -2636,13 +3180,6 @@
"integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==",
"license": "MIT"
},
- "node_modules/dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/dompurify": {
"version": "2.5.8",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.8.tgz",
@@ -2670,13 +3207,6 @@
"integrity": "sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==",
"license": "ISC"
},
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/electron-to-chromium": {
"version": "1.5.84",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.84.tgz",
@@ -2690,6 +3220,32 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"license": "MIT"
},
+ "node_modules/enhanced-resolve": {
+ "version": "5.18.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
+ "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
"node_modules/es-define-property": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
@@ -2840,6 +3396,18 @@
"node": ">=6"
}
},
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/esm-env": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
@@ -2932,46 +3500,6 @@
"type": "^2.7.2"
}
},
- "node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fastq": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz",
- "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
"node_modules/fdir": {
"version": "6.4.3",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
@@ -3008,19 +3536,6 @@
"integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==",
"license": "MIT"
},
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
@@ -3060,23 +3575,6 @@
"is-callable": "^1.1.3"
}
},
- "node_modules/foreground-child": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
- "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/fraction.js": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
@@ -3229,19 +3727,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
"node_modules/global-prefix": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz",
@@ -3280,6 +3765,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/hammerjs": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz",
@@ -3527,19 +4019,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/is-boolean-object": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz",
@@ -3599,16 +4078,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@@ -3618,19 +4087,6 @@
"node": ">=8"
}
},
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-map": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -3649,16 +4105,6 @@
"integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
"license": "MIT"
},
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
"node_modules/is-number-object": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
@@ -3834,30 +4280,14 @@
"xml2js": "^0.4.19"
}
},
- "node_modules/jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
"node_modules/jiti": {
- "version": "1.21.7",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
- "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
+ "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
"dev": true,
"license": "MIT",
"bin": {
- "jiti": "bin/jiti.js"
+ "jiti": "lib/jiti-cli.mjs"
}
},
"node_modules/jpeg-exif": {
@@ -3866,12 +4296,6 @@
"integrity": "sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ==",
"license": "MIT"
},
- "node_modules/js-confetti": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/js-confetti/-/js-confetti-0.12.0.tgz",
- "integrity": "sha512-1R0Akxn3Zn82pMqW65N1V2NwKkZJ75bvBN/VAb36Ya0YHwbaSiAJZVRr/19HBxH/O8x2x01UFAbYI18VqlDN6g==",
- "license": "MIT"
- },
"node_modules/js-tokens": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
@@ -3981,17 +4405,233 @@
"immediate": "~3.0.5"
}
},
- "node_modules/lilconfig": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
- "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
- "dev": true,
- "license": "MIT",
+ "node_modules/lightningcss": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz",
+ "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==",
+ "devOptional": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
"engines": {
- "node": ">=14"
+ "node": ">= 12.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/antonk52"
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-darwin-arm64": "1.30.1",
+ "lightningcss-darwin-x64": "1.30.1",
+ "lightningcss-freebsd-x64": "1.30.1",
+ "lightningcss-linux-arm-gnueabihf": "1.30.1",
+ "lightningcss-linux-arm64-gnu": "1.30.1",
+ "lightningcss-linux-arm64-musl": "1.30.1",
+ "lightningcss-linux-x64-gnu": "1.30.1",
+ "lightningcss-linux-x64-musl": "1.30.1",
+ "lightningcss-win32-arm64-msvc": "1.30.1",
+ "lightningcss-win32-x64-msvc": "1.30.1"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz",
+ "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz",
+ "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz",
+ "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz",
+ "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz",
+ "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz",
+ "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz",
+ "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz",
+ "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz",
+ "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz",
+ "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
"node_modules/linebreak": {
@@ -4013,11 +4653,19 @@
"node": ">= 0.4"
}
},
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true,
+ "node_modules/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
+ "license": "MIT",
+ "dependencies": {
+ "uc.micro": "^2.0.0"
+ }
+ },
+ "node_modules/linkifyjs": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.1.tgz",
+ "integrity": "sha512-DRSlB9DKVW04c4SUdGvKK5FR6be45lTU9M76JnngqPeeGDqPwYc0zdUErtsNVMtxPXgUWV4HbXbnC4sNyBxkYg==",
"license": "MIT"
},
"node_modules/local-pkg": {
@@ -4055,6 +4703,27 @@
"node": ">=8"
}
},
+ "node_modules/lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/loupe": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
@@ -4065,13 +4734,6 @@
"get-func-name": "^2.0.1"
}
},
- "node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/lru-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
@@ -4141,6 +4803,23 @@
"url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1"
}
},
+ "node_modules/markdown-it": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
+ "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1",
+ "entities": "^4.4.0",
+ "linkify-it": "^5.0.0",
+ "mdurl": "^2.0.0",
+ "punycode.js": "^2.3.1",
+ "uc.micro": "^2.1.0"
+ },
+ "bin": {
+ "markdown-it": "bin/markdown-it.mjs"
+ }
+ },
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
@@ -4150,6 +4829,12 @@
"node": ">= 0.4"
}
},
+ "node_modules/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
+ "license": "MIT"
+ },
"node_modules/meilisearch": {
"version": "0.37.0",
"resolved": "https://registry.npmjs.org/meilisearch/-/meilisearch-0.37.0.tgz",
@@ -4185,49 +4870,12 @@
"dev": true,
"license": "MIT"
},
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/meshoptimizer": {
"version": "0.18.1",
"resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz",
"integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==",
"license": "MIT"
},
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/micromatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/mimic-fn": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
@@ -4272,12 +4920,41 @@
"node": ">=16 || 14 >=14.17"
}
},
+ "node_modules/minizlib": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
+ "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
"node_modules/mitt": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
"license": "MIT"
},
+ "node_modules/mkdirp": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
+ "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "dist/cjs/src/bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/mlly": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz",
@@ -4337,18 +5014,6 @@
"integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==",
"license": "MIT"
},
- "node_modules/mz": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
- "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "any-promise": "^1.0.0",
- "object-assign": "^4.0.1",
- "thenify-all": "^1.0.0"
- }
- },
"node_modules/nanoid": {
"version": "3.3.8",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
@@ -4409,16 +5074,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/normalize-range": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
@@ -4464,26 +5119,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-hash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
- "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/object-inspect": {
"version": "1.13.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
@@ -4566,6 +5201,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/orderedmap": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz",
+ "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==",
+ "license": "MIT"
+ },
"node_modules/p-limit": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz",
@@ -4618,13 +5259,6 @@
"node": ">=6"
}
},
- "node_modules/package-json-from-dist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
- "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
- "dev": true,
- "license": "BlueOak-1.0.0"
- },
"node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
@@ -4656,23 +5290,6 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"license": "MIT"
},
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/pathe": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
@@ -4749,26 +5366,6 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
- "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/pkg-types": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz",
@@ -4877,110 +5474,10 @@
"node": "^10 || ^12 || >=14"
}
},
- "node_modules/postcss-import": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
- "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "postcss-value-parser": "^4.0.0",
- "read-cache": "^1.0.0",
- "resolve": "^1.1.7"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "postcss": "^8.0.0"
- }
- },
- "node_modules/postcss-js": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
- "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "camelcase-css": "^2.0.1"
- },
- "engines": {
- "node": "^12 || ^14 || >= 16"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": "^8.4.21"
- }
- },
- "node_modules/postcss-load-config": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
- "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "lilconfig": "^3.0.0",
- "yaml": "^2.3.4"
- },
- "engines": {
- "node": ">= 14"
- },
- "peerDependencies": {
- "postcss": ">=8.0.9",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "postcss": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
- "node_modules/postcss-nested": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
- "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "postcss-selector-parser": "^6.1.1"
- },
- "engines": {
- "node": ">=12.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.14"
- }
- },
"node_modules/postcss-selector-parser": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
- "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5025,12 +5522,216 @@
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"license": "MIT"
},
+ "node_modules/prosemirror-changeset": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz",
+ "integrity": "sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-transform": "^1.0.0"
+ }
+ },
+ "node_modules/prosemirror-collab": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz",
+ "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-state": "^1.0.0"
+ }
+ },
+ "node_modules/prosemirror-commands": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz",
+ "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-model": "^1.0.0",
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-transform": "^1.10.2"
+ }
+ },
+ "node_modules/prosemirror-dropcursor": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz",
+ "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-transform": "^1.1.0",
+ "prosemirror-view": "^1.1.0"
+ }
+ },
+ "node_modules/prosemirror-gapcursor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz",
+ "integrity": "sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-keymap": "^1.0.0",
+ "prosemirror-model": "^1.0.0",
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-view": "^1.0.0"
+ }
+ },
+ "node_modules/prosemirror-history": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz",
+ "integrity": "sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-state": "^1.2.2",
+ "prosemirror-transform": "^1.0.0",
+ "prosemirror-view": "^1.31.0",
+ "rope-sequence": "^1.3.0"
+ }
+ },
+ "node_modules/prosemirror-inputrules": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.0.tgz",
+ "integrity": "sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-transform": "^1.0.0"
+ }
+ },
+ "node_modules/prosemirror-keymap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz",
+ "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-state": "^1.0.0",
+ "w3c-keyname": "^2.2.0"
+ }
+ },
+ "node_modules/prosemirror-markdown": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.2.tgz",
+ "integrity": "sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/markdown-it": "^14.0.0",
+ "markdown-it": "^14.0.0",
+ "prosemirror-model": "^1.25.0"
+ }
+ },
+ "node_modules/prosemirror-menu": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.5.tgz",
+ "integrity": "sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==",
+ "license": "MIT",
+ "dependencies": {
+ "crelt": "^1.0.0",
+ "prosemirror-commands": "^1.0.0",
+ "prosemirror-history": "^1.0.0",
+ "prosemirror-state": "^1.0.0"
+ }
+ },
+ "node_modules/prosemirror-model": {
+ "version": "1.25.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.1.tgz",
+ "integrity": "sha512-AUvbm7qqmpZa5d9fPKMvH1Q5bqYQvAZWOGRvxsB6iFLyycvC9MwNemNVjHVrWgjaoxAfY8XVg7DbvQ/qxvI9Eg==",
+ "license": "MIT",
+ "dependencies": {
+ "orderedmap": "^2.0.0"
+ }
+ },
+ "node_modules/prosemirror-schema-basic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz",
+ "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-model": "^1.25.0"
+ }
+ },
+ "node_modules/prosemirror-schema-list": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz",
+ "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-model": "^1.0.0",
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-transform": "^1.7.3"
+ }
+ },
+ "node_modules/prosemirror-state": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz",
+ "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-model": "^1.0.0",
+ "prosemirror-transform": "^1.0.0",
+ "prosemirror-view": "^1.27.0"
+ }
+ },
+ "node_modules/prosemirror-tables": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.7.1.tgz",
+ "integrity": "sha512-eRQ97Bf+i9Eby99QbyAiyov43iOKgWa7QCGly+lrDt7efZ1v8NWolhXiB43hSDGIXT1UXgbs4KJN3a06FGpr1Q==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-keymap": "^1.2.2",
+ "prosemirror-model": "^1.25.0",
+ "prosemirror-state": "^1.4.3",
+ "prosemirror-transform": "^1.10.3",
+ "prosemirror-view": "^1.39.1"
+ }
+ },
+ "node_modules/prosemirror-trailing-node": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz",
+ "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@remirror/core-constants": "3.0.0",
+ "escape-string-regexp": "^4.0.0"
+ },
+ "peerDependencies": {
+ "prosemirror-model": "^1.22.1",
+ "prosemirror-state": "^1.4.2",
+ "prosemirror-view": "^1.33.8"
+ }
+ },
+ "node_modules/prosemirror-transform": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.4.tgz",
+ "integrity": "sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-model": "^1.21.0"
+ }
+ },
+ "node_modules/prosemirror-view": {
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.40.0.tgz",
+ "integrity": "sha512-2G3svX0Cr1sJjkD/DYWSe3cfV5VPVTBOxI9XQEGWJDFEpsZb/gh4MV29ctv+OJx2RFX4BLt09i+6zaGM/ldkCw==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-model": "^1.20.0",
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-transform": "^1.1.0"
+ }
+ },
"node_modules/protocol-buffers-schema": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz",
"integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==",
"license": "MIT"
},
+ "node_modules/punycode.js": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
+ "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/qrcode": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.4.tgz",
@@ -5048,27 +5749,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
"node_modules/quickselect": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz",
@@ -5091,16 +5771,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/read-cache": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pify": "^2.3.0"
- }
- },
"node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
@@ -5221,17 +5891,6 @@
"integrity": "sha512-e0dOpjm5DseomnXx2M5lpdZ5zoHqF1+bqdMJUohoYVVQa7cBdnk7fdmeI6byNWP/kiME72EeTiSypTCVnpLiDg==",
"license": "MIT"
},
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
"node_modules/rgbcolor": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz",
@@ -5279,29 +5938,11 @@
"fsevents": "~2.3.2"
}
},
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
+ "node_modules/rope-sequence": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz",
+ "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==",
+ "license": "MIT"
},
"node_modules/rw": {
"version": "1.3.3",
@@ -5597,22 +6238,6 @@
"node": ">=8"
}
},
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -5625,20 +6250,6 @@
"node": ">=8"
}
},
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/strip-final-newline": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
@@ -5665,66 +6276,6 @@
"url": "https://github.com/sponsors/antfu"
}
},
- "node_modules/sucrase": {
- "version": "3.35.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
- "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.2",
- "commander": "^4.0.0",
- "glob": "^10.3.10",
- "lines-and-columns": "^1.1.6",
- "mz": "^2.7.0",
- "pirates": "^4.0.1",
- "ts-interface-checker": "^0.1.9"
- },
- "bin": {
- "sucrase": "bin/sucrase",
- "sucrase-node": "bin/sucrase-node"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/sucrase/node_modules/glob": {
- "version": "10.4.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/sucrase/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/supercluster": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz",
@@ -5838,105 +6389,38 @@
}
},
"node_modules/tailwindcss": {
- "version": "3.4.17",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
- "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.8.tgz",
+ "integrity": "sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tapable": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
+ "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "@alloc/quick-lru": "^5.2.0",
- "arg": "^5.0.2",
- "chokidar": "^3.6.0",
- "didyoumean": "^1.2.2",
- "dlv": "^1.1.3",
- "fast-glob": "^3.3.2",
- "glob-parent": "^6.0.2",
- "is-glob": "^4.0.3",
- "jiti": "^1.21.6",
- "lilconfig": "^3.1.3",
- "micromatch": "^4.0.8",
- "normalize-path": "^3.0.0",
- "object-hash": "^3.0.0",
- "picocolors": "^1.1.1",
- "postcss": "^8.4.47",
- "postcss-import": "^15.1.0",
- "postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.2",
- "postcss-nested": "^6.2.0",
- "postcss-selector-parser": "^6.1.2",
- "resolve": "^1.22.8",
- "sucrase": "^3.35.0"
- },
- "bin": {
- "tailwind": "lib/cli.js",
- "tailwindcss": "lib/cli.js"
- },
"engines": {
- "node": ">=14.0.0"
+ "node": ">=6"
}
},
- "node_modules/tailwindcss/node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "node_modules/tar": {
+ "version": "7.4.3",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz",
+ "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==",
"dev": true,
"license": "ISC",
"dependencies": {
- "is-glob": "^4.0.1"
+ "@isaacs/fs-minipass": "^4.0.0",
+ "chownr": "^3.0.0",
+ "minipass": "^7.1.2",
+ "minizlib": "^3.0.1",
+ "mkdirp": "^3.0.1",
+ "yallist": "^5.0.0"
},
"engines": {
- "node": ">= 6"
- }
- },
- "node_modules/tailwindcss/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/tailwindcss/node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
+ "node": ">=18"
}
},
"node_modules/text-segmentation": {
@@ -5949,29 +6433,6 @@
"utrie": "^1.0.2"
}
},
- "node_modules/thenify": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
- "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "any-promise": "^1.0.0"
- }
- },
- "node_modules/thenify-all": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
- "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "thenify": ">= 3.1.0 < 4"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/three": {
"version": "0.161.0",
"resolved": "https://registry.npmjs.org/three/-/three-0.161.0.tgz",
@@ -6070,19 +6531,6 @@
"node": ">=14.0.0"
}
},
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
"node_modules/totalist": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
@@ -6128,13 +6576,6 @@
"integrity": "sha512-BxNk0w6+d9NYd7El/3RzlzH/F2vovJI1FX9Zb+D7fArVM1EsUXj6+wVwJSrfucy6/HYhfbZPu/lD6Miiw9Byiw==",
"license": "MIT"
},
- "node_modules/ts-interface-checker": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
- "dev": true,
- "license": "Apache-2.0"
- },
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -6192,6 +6633,12 @@
"node": ">=14.17"
}
},
+ "node_modules/uc.micro": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
+ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
+ "license": "MIT"
+ },
"node_modules/ufo": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz",
@@ -6875,6 +7322,12 @@
"pbf": "^3.2.1"
}
},
+ "node_modules/w3c-keyname": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
+ "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
+ "license": "MIT"
+ },
"node_modules/webgl-sdf-generator": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/webgl-sdf-generator/-/webgl-sdf-generator-1.1.1.tgz",
@@ -7006,41 +7459,6 @@
"node": ">=8"
}
},
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/wrap-ansi/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -7099,17 +7517,14 @@
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
"license": "ISC"
},
- "node_modules/yaml": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
- "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
+ "node_modules/yallist": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
+ "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
"dev": true,
- "license": "ISC",
- "bin": {
- "yaml": "bin.mjs"
- },
+ "license": "BlueOak-1.0.0",
"engines": {
- "node": ">= 14"
+ "node": ">=18"
}
},
"node_modules/yargs": {
diff --git a/web/package.json b/web/package.json
index 6a60a5c4..d8bd278f 100644
--- a/web/package.json
+++ b/web/package.json
@@ -1,6 +1,6 @@
{
"name": "wanderer",
- "version": "0.16.5",
+ "version": "0.17.0",
"private": true,
"scripts": {
"dev": "vite dev",
@@ -17,12 +17,15 @@
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/kit": "^2.5.27",
"@sveltejs/vite-plugin-svelte": "^4.0.0",
+ "@tailwindcss/typography": "^0.5.15",
+ "@tailwindcss/vite": "^4.0.0",
+ "@types/canvas-confetti": "^1.9.0",
"@types/node": "^20.11.25",
"autoprefixer": "^10.4.17",
"postcss": "^8.4.33",
"svelte": "^5.0.0",
"svelte-check": "^4.0.0",
- "tailwindcss": "^3.4.1",
+ "tailwindcss": "^4.0.0",
"tslib": "^2.4.1",
"typescript": "^5.5.0",
"vite": "^5.4.4",
@@ -35,11 +38,22 @@
"@sveltejs/adapter-node": "^4.0.1",
"@threlte/core": "^8.0.0-next.41",
"@threlte/extras": "^9.0.0-next.55",
+ "@tiptap/core": "^2.14.0",
+ "@tiptap/extension-heading": "^2.14.0",
+ "@tiptap/extension-link": "^2.14.0",
+ "@tiptap/extension-mention": "^2.14.0",
+ "@tiptap/extension-placeholder": "^2.14.0",
+ "@tiptap/extension-underline": "^2.14.0",
+ "@tiptap/pm": "^2.14.0",
+ "@tiptap/starter-kit": "^2.14.0",
+ "@tiptap/suggestion": "^2.14.0",
"@turf/destination": "^7.1.0",
"@turf/distance": "^7.1.0",
"@types/chart.js": "^2.9.41",
"@types/three": "^0.161.2",
"@types/xmldom": "^0.1.34",
+ "activitypub-types": "^1.1.0",
+ "canvas-confetti": "^1.9.3",
"canvg": "^4.0.1",
"chart.js": "^4.4.6",
"chartjs-plugin-crosshair": "^2.0.0",
@@ -49,7 +63,6 @@
"heic2any": "^0.0.4",
"instead": "^1.0.3",
"isomorphic-xml2js": "^0.1.3",
- "js-confetti": "^0.12.0",
"jspdf": "^2.5.1",
"jszip": "^3.10.1",
"maplibre-gl": "^4.7.1",
diff --git a/web/postcss.config.js b/web/postcss.config.js
index 2e7af2b7..b6dc0349 100644
--- a/web/postcss.config.js
+++ b/web/postcss.config.js
@@ -1,6 +1,5 @@
export default {
plugins: {
- tailwindcss: {},
autoprefixer: {},
},
}
diff --git a/web/src/css/app.css b/web/src/css/app.css
index ab1e68f8..1dc90180 100644
--- a/web/src/css/app.css
+++ b/web/src/css/app.css
@@ -1,6 +1,49 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
+@import "@fortawesome/fontawesome-free/css/all.min.css";
+
+@layer theme, base, components, utilities;
+
+@import "tailwindcss/theme.css" layer(theme);
+@import "tailwindcss/preflight.css" layer(base);
+@import "tailwindcss/utilities.css";
+@plugin '@tailwindcss/typography';
+
+@custom-variant dark (&:where(.dark, .dark *));
+
+@theme {
+ --color-primary: rgba(var(--primary));
+ --color-background: rgba(var(--background));
+ --color-background-inverse: rgba(var(--background-inverse));
+ --color-content: rgba(var(--content));
+ --color-content-inverse: rgba(var(--content-inverse));
+
+ --color-primary: rgba(var(--primary));
+ --color-primary-hover: rgba(var(--primary-hover));
+ --color-secondary-hover: rgba(var(--secondary-hover));
+ --color-input-background: rgba(var(--input-background));
+ --color-input-background-error: rgba(var(--input-background-error));
+ --color-input-border: rgba(var(--input-border));
+ --color-input-border-focus: rgba(var(--input-border-focus));
+ --color-input-ring: rgba(var(--input-ring));
+ --color-menu-background: rgba(var(--menu-background));
+ --color-menu-item-background-hover: rgba(var(--menu-item-background-hover));
+ --color-menu-item-background-focus: rgba(var(--menu-item-background-focus));
+ --color-footer-background: rgba(var(--footer-background));
+ --color-separator: rgba(var(--separator));
+
+ --font-sans: "IBMPlexSans"
+}
+
+@layer base {
+
+ button:not(:disabled),
+ [role="button"]:not(:disabled) {
+ cursor: pointer;
+ }
+
+ dialog {
+ margin: auto;
+ }
+}
@font-face {
font-family: "IBMPlexSans";
diff --git a/web/src/css/components.css b/web/src/css/components.css
index 004fee6f..b8e5568a 100644
--- a/web/src/css/components.css
+++ b/web/src/css/components.css
@@ -1,6 +1,5 @@
-@import 'tailwindcss/utilities';
-@import 'tailwindcss/base';
-@import 'tailwindcss/components';
+@import 'tailwindcss';
+@reference "./app.css";
.btn-primary {
@apply min-h-10 text-white rounded-lg px-4 py-2 bg-primary font-semibold transition-all hover:bg-primary-hover focus:ring-4 ring-input-ring
@@ -125,4 +124,9 @@
100% {
transform: rotate(360deg);
}
+}
+
+.mention {
+ @apply bg-blue-100 dark:bg-slate-700 rounded-md;
+ padding: 0.1rem 0.3rem;
}
\ No newline at end of file
diff --git a/web/src/css/theme.css b/web/src/css/theme.css
index 728efb66..9aa6853f 100644
--- a/web/src/css/theme.css
+++ b/web/src/css/theme.css
@@ -15,7 +15,6 @@
--input-border: 209, 213, 219;
--input-border-focus: 36, 39, 52;
--input-ring: 148, 163, 184;
- --input-ring-inverse: 108, 115, 150;
--menu-background: 255, 255, 255;
--menu-item-background-hover: 243, 244, 246;
@@ -31,28 +30,29 @@
.dark {
--primary: 36, 39, 52;
- --primary-hover: 44, 48, 64;
- --secondary-hover: 36, 39, 52;
+ --primary-hover: 55, 60, 80;
+ --secondary-hover: 55, 65, 81;
+ --secondary-hover-inverse: 243, 244, 246;
- --background: 7, 10, 36;
+ --background: 18, 20, 28;
--background-inverse: 255, 255, 255;
--content: 255, 255, 255;
--content-inverse: 0, 0, 0;
- --input-background: 36, 39, 52;
- --input-background-error: 69, 10, 10;
- --input-border: 43, 46, 61;
- --input-border-focus: 108, 115, 150;
- --input-ring: 108, 115, 150;
+ --input-background: 38, 40, 49;
+ --input-background-error: 76, 17, 17;
+ --input-border: 50, 54, 64;
+ --input-border-focus: 148, 163, 184;
+ --input-ring: 148, 163, 184;
- --menu-background: 33, 36, 54;
- --menu-item-background-hover: 43, 46, 69;
- --menu-item-background-focus: 25, 26, 41;
+ --menu-background: 30, 32, 40;
+ --menu-item-background-hover: 55, 65, 81;
+ --menu-item-background-focus: 75, 85, 99;
- --footer-background: 26, 29, 51;
+ --footer-background: 24, 26, 36;
- --separator: 43, 46, 61;
+ --separator: 55, 65, 81;
background: rgba(var(--background));
color: rgba(var(--content));
diff --git a/web/src/hooks.server.ts b/web/src/hooks.server.ts
index 42b93bae..512c0db8 100644
--- a/web/src/hooks.server.ts
+++ b/web/src/hooks.server.ts
@@ -8,6 +8,7 @@ import { json, redirect, text, type Handle } from '@sveltejs/kit'
import { sequence } from '@sveltejs/kit/hooks'
import { MeiliSearch } from 'meilisearch'
import { locale } from 'svelte-i18n'
+import type { Actor } from '$lib/models/activitypub/actor'
function csrf(allowedPaths: string[]): Handle {
@@ -49,6 +50,8 @@ function isFormContentType(request: Request) {
const auth: Handle = async ({ event, resolve }) => {
+ process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
+
const pb = new PocketBase(envPub.PUBLIC_POCKETBASE_URL)
// load the store data from the request cookie string
pb.authStore.loadFromCookie(event.request.headers.get('cookie') || '')
@@ -77,9 +80,11 @@ const auth: Handle = async ({ event, resolve }) => {
let meiliApiKey: string = "";
let settings: Settings | undefined;
+ let actor: Actor | undefined;
if (pb.authStore.record) {
meiliApiKey = pb.authStore.record.token
settings = await pb.collection('settings').getFirstListItem(`user="${pb.authStore.record.id}"`, { requestKey: null })
+ actor = await pb.collection("activitypub_actors").getFirstListItem(`user='${pb.authStore.record.id}'`)
} else {
const response = await pb.send("/public/search/token", { method: "GET", fetch: event.fetch });
meiliApiKey = response.token;
@@ -89,6 +94,9 @@ const auth: Handle = async ({ event, resolve }) => {
event.locals.ms = ms
event.locals.pb = pb
event.locals.user = pb.authStore.record
+ if (event.locals.user) {
+ event.locals.user.actor = actor?.id
+ }
event.locals.settings = settings
const lang = settings?.language ?? event.request.headers.get('accept-language')?.split(',')[0]
diff --git a/web/src/lib/components/actor_search.svelte b/web/src/lib/components/actor_search.svelte
new file mode 100644
index 00000000..cb7a0d64
--- /dev/null
+++ b/web/src/lib/components/actor_search.svelte
@@ -0,0 +1,77 @@
+
+
+ updateActors(q)}
+ onclick={(item) => onClick(item)}
+ placeholder={`${$_("username")}...`}
+ items={searchItems}
+ {clearAfterSelect}
+ {label}
+ bind:value
+>
+ {#snippet prepend({ item })}
+
+ {/snippet}
+
diff --git a/web/src/lib/components/base/calendar.svelte b/web/src/lib/components/base/calendar.svelte
index a69c7b71..3af2120d 100644
--- a/web/src/lib/components/base/calendar.svelte
+++ b/web/src/lib/components/base/calendar.svelte
@@ -113,10 +113,7 @@
}
function colorKey(a: typeof currentMonthArray, i: number) {
- return $_(
- a[i]?.log?.expand?.trails_via_summit_logs?.at(0)?.expand?.category
- ?.name ?? "",
- );
+ return $_(a[i]?.log?.expand?.trail?.expand?.category?.name ?? "");
}
function handleDateClick(date?: Date) {
@@ -170,7 +167,10 @@
-
diff --git a/web/src/lib/components/base/modal.svelte b/web/src/lib/components/base/modal.svelte
index 8b6e42ff..020bba93 100644
--- a/web/src/lib/components/base/modal.svelte
+++ b/web/src/lib/components/base/modal.svelte
@@ -42,7 +42,7 @@
{id}
tabindex="-1"
aria-hidden="true"
- class="w-full {size} max-h-full rounded-xl text-content"
+ class="{size} max-h-full rounded-xl text-content"
>
@@ -73,8 +73,9 @@
-
diff --git a/web/src/lib/components/base/search.svelte b/web/src/lib/components/base/search.svelte
index 1911a272..9bd1ad4c 100644
--- a/web/src/lib/components/base/search.svelte
+++ b/web/src/lib/components/base/search.svelte
@@ -8,9 +8,10 @@
+
+
diff --git a/web/src/lib/components/base/select.svelte b/web/src/lib/components/base/select.svelte
index 8feb4f33..a45cf08e 100644
--- a/web/src/lib/components/base/select.svelte
+++ b/web/src/lib/components/base/select.svelte
@@ -37,7 +37,7 @@
{/if}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {#each { length: 5 } as _, index}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/each}
+
+
diff --git a/web/src/lib/components/base/slider.svelte b/web/src/lib/components/base/slider.svelte
index c565925b..2c219222 100644
--- a/web/src/lib/components/base/slider.svelte
+++ b/web/src/lib/components/base/slider.svelte
@@ -44,13 +44,16 @@
});
export function set(value: number) {
- sliderContainer.noUiSlider.set(value)
+ sliderContainer.noUiSlider.set(value);
}
-
diff --git a/web/src/lib/components/summit_log/summit_log_table_row.svelte b/web/src/lib/components/summit_log/summit_log_table_row.svelte
index a97cd20e..b44eb589 100644
--- a/web/src/lib/components/summit_log/summit_log_table_row.svelte
+++ b/web/src/lib/components/summit_log/summit_log_table_row.svelte
@@ -5,38 +5,59 @@
import {
formatDistance,
formatElevation,
+ formatHTMLAsText,
formatTimeHHMM,
} from "$lib/util/format_util";
import { _ } from "svelte-i18n";
import PhotoGallery from "../photo_gallery.svelte";
+ import Dropdown, { type DropdownItem } from "../base/dropdown.svelte";
interface Props {
log: SummitLog;
+ handle: string;
showCategory?: boolean;
showTrail?: boolean;
showRoute?: boolean;
showAuthor?: boolean;
showDescription?: boolean;
showPhotos?: boolean;
+ showMenu?: boolean;
ontext?: (summitLog: SummitLog) => void;
onopen?: (summitLog: SummitLog) => void;
+ ondelete?: (summitLog: SummitLog) => void;
+ onedit?: (summitLog: SummitLog) => void;
}
let {
log,
+ handle,
showCategory = false,
showTrail = false,
showRoute = false,
showAuthor = false,
showDescription = false,
showPhotos = false,
+ showMenu = false,
onopen,
ontext,
+ ondelete,
+ onedit,
}: Props = $props();
let gallery: PhotoGallery;
let imgSrc: string[] = $state([]);
+
+ let dropdownItems: DropdownItem[] = [
+ {
+ text: $_("edit"),
+ value: "edit",
+ },
+ {
+ text: $_("delete"),
+ value: "delete",
+ },
+ ];
$effect(() => {
if (log.photos?.length) {
imgSrc = log.photos
@@ -65,6 +86,14 @@
showDescription,
].reduce((b, v) => (v ? b + 1 : b), 7);
}
+
+ function handleDropdownClick(item: DropdownItem): void {
+ if (item.value == "edit") {
+ onedit?.(log);
+ } else if (item.value == "delete") {
+ ondelete?.(log);
+ }
+ }
@@ -130,10 +159,7 @@
{#if showCategory}
- {$_(
- log.expand?.trails_via_summit_logs?.at(0)?.expand?.category
- ?.name ?? "-",
- )}
+ {$_(log.expand?.trail?.expand?.category?.name ?? "-")}
{/if}
{#if showTrail}
@@ -141,8 +167,7 @@
@@ -154,7 +179,7 @@
>
{/if}
@@ -164,43 +189,54 @@
- {#if !log.expand.author.private}
-
-
-
- {:else}
+
- {/if}
+
{/if}
- {#if showRoute && log.gpx}
+ {#if showRoute}
-
-
+ {#if log.gpx}
+
+
+ {/if}
+
+ {/if}
+ {#if showMenu}
+
+
+ {#snippet children({ toggleMenu: openDropdown })}
+
+
+
+ {/snippet}
+
{/if}
diff --git a/web/src/lib/components/trail/like_button.svelte b/web/src/lib/components/trail/like_button.svelte
new file mode 100644
index 00000000..7eda5b49
--- /dev/null
+++ b/web/src/lib/components/trail/like_button.svelte
@@ -0,0 +1,112 @@
+
+
+
+
+ {likeCount}
+
+
+
diff --git a/web/src/lib/components/trail/map_with_elevation_maplibre.svelte b/web/src/lib/components/trail/map_with_elevation_maplibre.svelte
index 1c5271ed..2708afa3 100644
--- a/web/src/lib/components/trail/map_with_elevation_maplibre.svelte
+++ b/web/src/lib/components/trail/map_with_elevation_maplibre.svelte
@@ -13,12 +13,10 @@
createPopupFromTrail,
FontawesomeMarker,
} from "$lib/util/maplibre_util";
- import { polylineToGeoJSON } from "$lib/util/polyline_util";
import type { ElevationProfileControl } from "$lib/vendor/maplibre-elevation-profile/elevationprofile-control";
import { FullscreenControl } from "$lib/vendor/maplibre-fullscreen/fullscreen-control";
import MaplibreGraticule from "$lib/vendor/maplibre-graticule/maplibre-graticule";
import { StyleSwitcherControl } from "$lib/vendor/maplibre-style-switcher/style-switcher-control";
- import { T } from "@threlte/core";
import type { Feature, FeatureCollection, GeoJSON } from "geojson";
import * as M from "maplibre-gl";
import "maplibre-gl/dist/maplibre-gl.css";
@@ -1135,6 +1133,17 @@
});
function handleKeydown(e: KeyboardEvent) {
+ const target = e.target as HTMLElement;
+
+ const isInputField =
+ target.tagName === "INPUT" ||
+ target.tagName === "TEXTAREA" ||
+ target.isContentEditable;
+
+ if (isInputField) {
+ return;
+ }
+
if (e.key == "m") {
if (trails.length === 1) {
removeCaretLayer();
@@ -1144,6 +1153,17 @@
}
function handleKeyup(e: KeyboardEvent) {
+ const target = e.target as HTMLElement;
+
+ const isInputField =
+ target.tagName === "INPUT" ||
+ target.tagName === "TEXTAREA" ||
+ target.isContentEditable;
+
+ if (isInputField) {
+ return;
+ }
+
if (e.key == "m") {
if (trails.length === 1) {
addTrailLayer(trails[0], trails[0].id!, 0, data[0]);
@@ -1160,7 +1180,10 @@
-