From 657cada9169c3670a62eb6f872272d9ab8140460 Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Sat, 9 Nov 2024 12:33:16 +1300 Subject: [PATCH 1/8] Chore: Add swagger examples & API code restructure --- server/apiv1/api.go | 676 ---------------------- server/apiv1/{webui.go => application.go} | 49 +- server/apiv1/info.go | 31 - server/apiv1/message.go | 252 ++++++++ server/apiv1/messages.go | 388 +++++++++++++ server/apiv1/other.go | 238 ++++++++ server/apiv1/release.go | 37 +- server/apiv1/send.go | 35 +- server/apiv1/structs.go | 39 -- server/apiv1/swagger.go | 188 +----- server/apiv1/tags.go | 98 +++- server/apiv1/testing.go | 159 +++++ server/apiv1/thumbnails.go | 40 +- server/handlers/messages.go | 142 ----- server/server.go | 4 +- server/ui/api/v1/swagger.json | 447 +++++++------- 16 files changed, 1479 insertions(+), 1344 deletions(-) rename server/apiv1/{webui.go => application.go} (66%) delete mode 100644 server/apiv1/info.go create mode 100644 server/apiv1/message.go create mode 100644 server/apiv1/messages.go create mode 100644 server/apiv1/other.go create mode 100644 server/apiv1/testing.go diff --git a/server/apiv1/api.go b/server/apiv1/api.go index bdcbebb0f8..e51c54cbec 100644 --- a/server/apiv1/api.go +++ b/server/apiv1/api.go @@ -2,692 +2,16 @@ package apiv1 import ( - "bytes" "encoding/json" "fmt" "net/http" - "net/mail" "strconv" - "strings" "github.com/araddon/dateparse" "github.com/axllent/mailpit/config" - "github.com/axllent/mailpit/internal/htmlcheck" - "github.com/axllent/mailpit/internal/linkcheck" "github.com/axllent/mailpit/internal/logger" - "github.com/axllent/mailpit/internal/spamassassin" - "github.com/axllent/mailpit/internal/storage" - "github.com/gorilla/mux" - "github.com/jhillyerd/enmime" ) -// GetMessages returns a paginated list of messages as JSON -func GetMessages(w http.ResponseWriter, r *http.Request) { - // swagger:route GET /api/v1/messages messages GetMessages - // - // # List messages - // - // Returns messages from the mailbox ordered from newest to oldest. - // - // Produces: - // - application/json - // - // Schemes: http, https - // - // Parameters: - // + name: start - // in: query - // description: Pagination offset - // required: false - // type: integer - // default: 0 - // + name: limit - // in: query - // description: Limit results - // required: false - // type: integer - // default: 50 - // - // Responses: - // 200: MessagesSummaryResponse - // default: ErrorResponse - start, beforeTS, limit := getStartLimit(r) - - messages, err := storage.List(start, beforeTS, limit) - if err != nil { - httpError(w, err.Error()) - return - } - - stats := storage.StatsGet() - - var res MessagesSummary - - res.Start = start - res.Messages = messages - res.Count = float64(len(messages)) // legacy - now undocumented in API specs - res.Total = stats.Total - res.Unread = stats.Unread - res.Tags = stats.Tags - res.MessagesCount = stats.Total - - w.Header().Add("Content-Type", "application/json") - if err := json.NewEncoder(w).Encode(res); err != nil { - httpError(w, err.Error()) - } -} - -// Search returns the latest messages as JSON -func Search(w http.ResponseWriter, r *http.Request) { - // swagger:route GET /api/v1/search messages MessagesSummary - // - // # Search messages - // - // Returns messages matching [a search](https://mailpit.axllent.org/docs/usage/search-filters/), sorted by received date (descending). - // - // Produces: - // - application/json - // - // Schemes: http, https - // - // Parameters: - // + name: query - // in: query - // description: Search query - // required: true - // type: string - // + name: start - // in: query - // description: Pagination offset - // required: false - // type: integer - // default: 0 - // + name: limit - // in: query - // description: Limit results - // required: false - // type: integer - // default: 50 - // + name: tz - // in: query - // description: [Timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) used specifically for `before:` & `after:` searches (eg: "Pacific/Auckland"). - // required: false - // type: string - // - // Responses: - // 200: MessagesSummaryResponse - // default: ErrorResponse - search := strings.TrimSpace(r.URL.Query().Get("query")) - if search == "" { - httpError(w, "Error: no search query") - return - } - - start, beforeTS, limit := getStartLimit(r) - - messages, results, err := storage.Search(search, r.URL.Query().Get("tz"), start, beforeTS, limit) - if err != nil { - httpError(w, err.Error()) - return - } - - stats := storage.StatsGet() - - var res MessagesSummary - - res.Start = start - res.Messages = messages - res.Count = float64(len(messages)) // legacy - now undocumented in API specs - res.Total = stats.Total // total messages in mailbox - res.MessagesCount = float64(results) - res.Unread = stats.Unread - res.Tags = stats.Tags - - w.Header().Add("Content-Type", "application/json") - if err := json.NewEncoder(w).Encode(res); err != nil { - httpError(w, err.Error()) - } -} - -// DeleteSearch will delete all messages matching a search -func DeleteSearch(w http.ResponseWriter, r *http.Request) { - // swagger:route DELETE /api/v1/search messages DeleteSearch - // - // # Delete messages by search - // - // Delete all messages matching [a search](https://mailpit.axllent.org/docs/usage/search-filters/). - // - // Produces: - // - application/json - // - // Schemes: http, https - // - // Parameters: - // + name: query - // in: query - // description: Search query - // required: true - // type: string - // + name: tz - // in: query - // description: [Timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) used specifically for `before:` & `after:` searches (eg: "Pacific/Auckland"). - // required: false - // type: string - // - // Responses: - // 200: OKResponse - // default: ErrorResponse - search := strings.TrimSpace(r.URL.Query().Get("query")) - if search == "" { - httpError(w, "Error: no search query") - return - } - - if err := storage.DeleteSearch(search, r.URL.Query().Get("tz")); err != nil { - httpError(w, err.Error()) - return - } - - w.Header().Add("Content-Type", "text/plain") - _, _ = w.Write([]byte("ok")) -} - -// GetMessage (method: GET) returns the Message as JSON -func GetMessage(w http.ResponseWriter, r *http.Request) { - // swagger:route GET /api/v1/message/{ID} message Message - // - // # Get message summary - // - // Returns the summary of a message, marking the message as read. - // - // The ID can be set to `latest` to return the latest message. - // - // Produces: - // - application/json - // - // Schemes: http, https - // - // Parameters: - // + name: ID - // in: path - // description: Message database ID or "latest" - // required: true - // type: string - // - // Responses: - // 200: Message - // default: ErrorResponse - - vars := mux.Vars(r) - - id := vars["id"] - - if id == "latest" { - var err error - id, err = storage.LatestID(r) - if err != nil { - w.WriteHeader(404) - fmt.Fprint(w, err.Error()) - return - } - } - - msg, err := storage.GetMessage(id) - if err != nil { - fourOFour(w) - return - } - - w.Header().Add("Content-Type", "application/json") - if err := json.NewEncoder(w).Encode(msg); err != nil { - httpError(w, err.Error()) - } -} - -// DownloadAttachment (method: GET) returns the attachment data -func DownloadAttachment(w http.ResponseWriter, r *http.Request) { - // swagger:route GET /api/v1/message/{ID}/part/{PartID} message Attachment - // - // # Get message attachment - // - // This will return the attachment part using the appropriate Content-Type. - // - // Produces: - // - application/* - // - image/* - // - text/* - // - // Schemes: http, https - // - // Parameters: - // + name: ID - // in: path - // description: Message database ID - // required: true - // type: string - // + name: PartID - // in: path - // description: Attachment part ID - // required: true - // type: string - // - // Responses: - // 200: BinaryResponse - // default: ErrorResponse - - vars := mux.Vars(r) - - id := vars["id"] - partID := vars["partID"] - - a, err := storage.GetAttachmentPart(id, partID) - if err != nil { - fourOFour(w) - return - } - fileName := a.FileName - if fileName == "" { - fileName = a.ContentID - } - - w.Header().Add("Content-Type", a.ContentType) - w.Header().Set("Content-Disposition", "filename=\""+fileName+"\"") - _, _ = w.Write(a.Content) -} - -// GetHeaders (method: GET) returns the message headers as JSON -func GetHeaders(w http.ResponseWriter, r *http.Request) { - // swagger:route GET /api/v1/message/{ID}/headers message Headers - // - // # Get message headers - // - // Returns the message headers as an array. - // - // The ID can be set to `latest` to return the latest message headers. - // - // Produces: - // - application/json - // - // Schemes: http, https - // - // Parameters: - // + name: ID - // in: path - // description: Message database ID or "latest" - // required: true - // type: string - // - // Responses: - // 200: MessageHeaders - // default: ErrorResponse - - vars := mux.Vars(r) - - id := vars["id"] - - if id == "latest" { - var err error - id, err = storage.LatestID(r) - if err != nil { - w.WriteHeader(404) - fmt.Fprint(w, err.Error()) - return - } - } - - data, err := storage.GetMessageRaw(id) - if err != nil { - fourOFour(w) - return - } - - reader := bytes.NewReader(data) - m, err := mail.ReadMessage(reader) - if err != nil { - httpError(w, err.Error()) - return - } - - w.Header().Add("Content-Type", "application/json") - if err := json.NewEncoder(w).Encode(m.Header); err != nil { - httpError(w, err.Error()) - } -} - -// DownloadRaw (method: GET) returns the full email source as plain text -func DownloadRaw(w http.ResponseWriter, r *http.Request) { - // swagger:route GET /api/v1/message/{ID}/raw message Raw - // - // # Get message source - // - // Returns the full email source as plain text. - // - // The ID can be set to `latest` to return the latest message source. - // - // Produces: - // - text/plain - // - // Schemes: http, https - // - // Parameters: - // + name: ID - // in: path - // description: Message database ID or "latest" - // required: true - // type: string - // - // Responses: - // 200: TextResponse - // default: ErrorResponse - - vars := mux.Vars(r) - - id := vars["id"] - dl := r.FormValue("dl") - - if id == "latest" { - var err error - id, err = storage.LatestID(r) - if err != nil { - w.WriteHeader(404) - fmt.Fprint(w, err.Error()) - return - } - } - - data, err := storage.GetMessageRaw(id) - if err != nil { - fourOFour(w) - return - } - - w.Header().Set("Content-Type", "text/plain; charset=utf-8") - if dl == "1" { - w.Header().Set("Content-Disposition", "attachment; filename=\""+id+".eml\"") - } - _, _ = w.Write(data) -} - -// DeleteMessages (method: DELETE) deletes all messages matching IDS. -func DeleteMessages(w http.ResponseWriter, r *http.Request) { - // swagger:route DELETE /api/v1/messages messages DeleteMessages - // - // # Delete messages - // - // Delete individual or all messages. If no IDs are provided then all messages are deleted. - // - // Consumes: - // - application/json - // - // Produces: - // - text/plain - // - // Schemes: http, https - // - // Responses: - // 200: OKResponse - // default: ErrorResponse - - decoder := json.NewDecoder(r.Body) - var data struct { - IDs []string - } - err := decoder.Decode(&data) - if err != nil || len(data.IDs) == 0 { - if err := storage.DeleteAllMessages(); err != nil { - httpError(w, err.Error()) - return - } - } else { - if err := storage.DeleteMessages(data.IDs); err != nil { - httpError(w, err.Error()) - return - } - } - - w.Header().Add("Content-Type", "text/plain") - _, _ = w.Write([]byte("ok")) -} - -// SetReadStatus (method: PUT) will update the status to Read/Unread for all provided IDs -// If no IDs are provided then all messages are updated. -func SetReadStatus(w http.ResponseWriter, r *http.Request) { - // swagger:route PUT /api/v1/messages messages SetReadStatus - // - // # Set read status - // - // If no IDs are provided then all messages are updated. - // - // Consumes: - // - application/json - // - // Produces: - // - text/plain - // - // Schemes: http, https - // - // Responses: - // 200: OKResponse - // default: ErrorResponse - - decoder := json.NewDecoder(r.Body) - - var data struct { - Read bool - IDs []string - } - - err := decoder.Decode(&data) - if err != nil { - httpError(w, err.Error()) - return - } - - ids := data.IDs - - if len(ids) == 0 { - if data.Read { - err := storage.MarkAllRead() - if err != nil { - httpError(w, err.Error()) - return - } - } else { - err := storage.MarkAllUnread() - if err != nil { - httpError(w, err.Error()) - return - } - } - } else { - if data.Read { - for _, id := range ids { - if err := storage.MarkRead(id); err != nil { - httpError(w, err.Error()) - return - } - } - } else { - for _, id := range ids { - if err := storage.MarkUnread(id); err != nil { - httpError(w, err.Error()) - return - } - } - } - } - - w.Header().Add("Content-Type", "text/plain") - _, _ = w.Write([]byte("ok")) -} - -// HTMLCheck returns a summary of the HTML client support -func HTMLCheck(w http.ResponseWriter, r *http.Request) { - // swagger:route GET /api/v1/message/{ID}/html-check Other HTMLCheck - // - // # HTML check - // - // Returns the summary of the message HTML checker. - // - // Produces: - // - application/json - // - // Schemes: http, https - // - // Responses: - // 200: HTMLCheckResponse - // default: ErrorResponse - - vars := mux.Vars(r) - id := vars["id"] - - if id == "latest" { - var err error - id, err = storage.LatestID(r) - if err != nil { - w.WriteHeader(404) - fmt.Fprint(w, err.Error()) - return - } - } - - raw, err := storage.GetMessageRaw(id) - if err != nil { - fourOFour(w) - return - } - - e := bytes.NewReader(raw) - - parser := enmime.NewParser(enmime.DisableCharacterDetection(true)) - - msg, err := parser.ReadEnvelope(e) - if err != nil { - httpError(w, err.Error()) - return - } - - if msg.HTML == "" { - httpError(w, "message does not contain HTML") - return - } - - checks, err := htmlcheck.RunTests(msg.HTML) - if err != nil { - httpError(w, err.Error()) - return - } - - w.Header().Add("Content-Type", "application/json") - if err := json.NewEncoder(w).Encode(checks); err != nil { - httpError(w, err.Error()) - } -} - -// LinkCheck returns a summary of links in the email -func LinkCheck(w http.ResponseWriter, r *http.Request) { - // swagger:route GET /api/v1/message/{ID}/link-check Other LinkCheck - // - // # Link check - // - // Returns the summary of the message Link checker. - // - // Produces: - // - application/json - // - // Schemes: http, https - // - // Responses: - // 200: LinkCheckResponse - // default: ErrorResponse - - if config.DemoMode { - httpError(w, "this functionality has been disabled for demonstration purposes") - return - } - - vars := mux.Vars(r) - id := vars["id"] - - if id == "latest" { - var err error - id, err = storage.LatestID(r) - if err != nil { - w.WriteHeader(404) - fmt.Fprint(w, err.Error()) - return - } - } - - msg, err := storage.GetMessage(id) - if err != nil { - fourOFour(w) - return - } - - f := r.URL.Query().Get("follow") - followRedirects := f == "true" || f == "1" - - summary, err := linkcheck.RunTests(msg, followRedirects) - if err != nil { - httpError(w, err.Error()) - return - } - - w.Header().Add("Content-Type", "application/json") - if err := json.NewEncoder(w).Encode(summary); err != nil { - httpError(w, err.Error()) - } -} - -// SpamAssassinCheck returns a summary of SpamAssassin results (if enabled) -func SpamAssassinCheck(w http.ResponseWriter, r *http.Request) { - // swagger:route GET /api/v1/message/{ID}/sa-check Other SpamAssassinCheck - // - // # SpamAssassin check - // - // Returns the SpamAssassin summary (if enabled) of the message. - // - // Produces: - // - application/json - // - // Schemes: http, https - // - // Responses: - // 200: SpamAssassinResponse - // default: ErrorResponse - - vars := mux.Vars(r) - id := vars["id"] - - if id == "latest" { - var err error - id, err = storage.LatestID(r) - if err != nil { - w.WriteHeader(404) - fmt.Fprint(w, err.Error()) - return - } - } - - msg, err := storage.GetMessageRaw(id) - if err != nil { - fourOFour(w) - return - } - - summary, err := spamassassin.Check(msg) - if err != nil { - httpError(w, err.Error()) - return - } - - w.Header().Add("Content-Type", "application/json") - if err := json.NewEncoder(w).Encode(summary); err != nil { - httpError(w, err.Error()) - } -} - // FourOFour returns a basic 404 message func fourOFour(w http.ResponseWriter) { w.Header().Set("Referrer-Policy", "no-referrer") diff --git a/server/apiv1/webui.go b/server/apiv1/application.go similarity index 66% rename from server/apiv1/webui.go rename to server/apiv1/application.go index e506f59d58..35178ae4e7 100644 --- a/server/apiv1/webui.go +++ b/server/apiv1/application.go @@ -6,8 +6,41 @@ import ( "net/http" "github.com/axllent/mailpit/config" + "github.com/axllent/mailpit/internal/stats" ) +// Application information +// swagger:response AppInfoResponse +type appInfoResponse struct { + // Application information + // + // in: body + Body stats.AppInformation +} + +// AppInfo returns some basic details about the running app, and latest release. +func AppInfo(w http.ResponseWriter, _ *http.Request) { + // swagger:route GET /api/v1/info application AppInformation + // + // # Get application information + // + // Returns basic runtime information, message totals and latest release version. + // + // Produces: + // - application/json + // + // Schemes: http, https + // + // Responses: + // 200: AppInfoResponse + // 400: ErrorResponse + + w.Header().Add("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(stats.Load()); err != nil { + httpError(w, err.Error()) + } +} + // Response includes global web UI settings // // swagger:model WebUIConfiguration @@ -38,6 +71,15 @@ type webUIConfiguration struct { DuplicatesIgnored bool } +// Web UI configuration response +// swagger:response WebUIConfigurationResponse +type webUIConfigurationResponse struct { + // Web UI configuration settings + // + // in: body + Body webUIConfiguration +} + // WebUIConfig returns configuration settings for the web UI. func WebUIConfig(w http.ResponseWriter, _ *http.Request) { // swagger:route GET /api/v1/webui application WebUIConfiguration @@ -48,13 +90,14 @@ func WebUIConfig(w http.ResponseWriter, _ *http.Request) { // Intended for web UI only! // // Produces: - // - application/json + // - application/json // // Schemes: http, https // // Responses: - // 200: WebUIConfigurationResponse - // default: ErrorResponse + // 200: WebUIConfigurationResponse + // 400: ErrorResponse + conf := webUIConfiguration{} conf.Label = config.Label diff --git a/server/apiv1/info.go b/server/apiv1/info.go deleted file mode 100644 index 579feeb285..0000000000 --- a/server/apiv1/info.go +++ /dev/null @@ -1,31 +0,0 @@ -package apiv1 - -import ( - "encoding/json" - "net/http" - - "github.com/axllent/mailpit/internal/stats" -) - -// AppInfo returns some basic details about the running app, and latest release. -func AppInfo(w http.ResponseWriter, _ *http.Request) { - // swagger:route GET /api/v1/info application AppInformation - // - // # Get application information - // - // Returns basic runtime information, message totals and latest release version. - // - // Produces: - // - application/json - // - // Schemes: http, https - // - // Responses: - // 200: InfoResponse - // default: ErrorResponse - - w.Header().Add("Content-Type", "application/json") - if err := json.NewEncoder(w).Encode(stats.Load()); err != nil { - httpError(w, err.Error()) - } -} diff --git a/server/apiv1/message.go b/server/apiv1/message.go new file mode 100644 index 0000000000..a8737c4028 --- /dev/null +++ b/server/apiv1/message.go @@ -0,0 +1,252 @@ +package apiv1 + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" + "net/mail" + + "github.com/axllent/mailpit/internal/storage" + "github.com/gorilla/mux" +) + +// swagger:parameters GetMessageParams +type getMessageParams struct { + // Message database ID or "latest" + // + // in: path + // required: true + // example: 4oRBnPtCXgAqZniRhzLNmS + ID string +} + +// GetMessage (method: GET) returns the Message as JSON +func GetMessage(w http.ResponseWriter, r *http.Request) { + // swagger:route GET /api/v1/message/{ID} message GetMessageParams + // + // # Get message summary + // + // Returns the summary of a message, marking the message as read. + // + // The ID can be set to `latest` to return the latest message. + // + // Produces: + // - application/json + // + // Schemes: http, https + // + // Responses: + // 200: Message + // 400: ErrorResponse + // 404: NotFoundResponse + + vars := mux.Vars(r) + + id := vars["id"] + + if id == "latest" { + var err error + id, err = storage.LatestID(r) + if err != nil { + w.WriteHeader(404) + fmt.Fprint(w, err.Error()) + return + } + } + + msg, err := storage.GetMessage(id) + if err != nil { + fourOFour(w) + return + } + + w.Header().Add("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(msg); err != nil { + httpError(w, err.Error()) + } +} + +// swagger:parameters GetHeadersParams +type getHeadersParams struct { + // Message database ID or "latest" + // + // in: path + // required: true + // example: 4oRBnPtCXgAqZniRhzLNmS + ID string +} + +// Message headers +// swagger:model MessageHeadersResponse +type messageHeaders map[string][]string + +// GetHeaders (method: GET) returns the message headers as JSON +func GetHeaders(w http.ResponseWriter, r *http.Request) { + // swagger:route GET /api/v1/message/{ID}/headers message GetHeadersParams + // + // # Get message headers + // + // Returns the message headers as an array. Note that header keys are returned alphabetically. + // + // The ID can be set to `latest` to return the latest message headers. + // + // Produces: + // - application/json + // + // Schemes: http, https + // + // Responses: + // 200: MessageHeadersResponse + // 400: ErrorResponse + // 404: NotFoundResponse + + vars := mux.Vars(r) + + id := vars["id"] + + if id == "latest" { + var err error + id, err = storage.LatestID(r) + if err != nil { + w.WriteHeader(404) + fmt.Fprint(w, err.Error()) + return + } + } + + data, err := storage.GetMessageRaw(id) + if err != nil { + fourOFour(w) + return + } + + reader := bytes.NewReader(data) + m, err := mail.ReadMessage(reader) + if err != nil { + httpError(w, err.Error()) + return + } + + w.Header().Add("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(m.Header); err != nil { + httpError(w, err.Error()) + } +} + +// swagger:parameters AttachmentParams +type attachmentParams struct { + // Message database ID or "latest" + // + // in: path + // required: true + // example: 4oRBnPtCXgAqZniRhzLNmS + ID string + + // Attachment part ID + // + // in: path + // required: true + // example: 2 + PartID string +} + +// DownloadAttachment (method: GET) returns the attachment data +func DownloadAttachment(w http.ResponseWriter, r *http.Request) { + // swagger:route GET /api/v1/message/{ID}/part/{PartID} message AttachmentParams + // + // # Get message attachment + // + // This will return the attachment part using the appropriate Content-Type. + // + // The ID can be set to `latest` to reference the latest message. + // + // Produces: + // - application/* + // - image/* + // - text/* + // + // Schemes: http, https + // + // Responses: + // 200: BinaryResponse + // 400: ErrorResponse + // 404: NotFoundResponse + + vars := mux.Vars(r) + + id := vars["id"] + partID := vars["partID"] + + a, err := storage.GetAttachmentPart(id, partID) + if err != nil { + fourOFour(w) + return + } + fileName := a.FileName + if fileName == "" { + fileName = a.ContentID + } + + w.Header().Add("Content-Type", a.ContentType) + w.Header().Set("Content-Disposition", "filename=\""+fileName+"\"") + _, _ = w.Write(a.Content) +} + +// swagger:parameters DownloadRawParams +type downloadRawParams struct { + // Message database ID or "latest" + // + // in: path + // required: true + // example: 4oRBnPtCXgAqZniRhzLNmS + ID string +} + +// DownloadRaw (method: GET) returns the full email source as plain text +func DownloadRaw(w http.ResponseWriter, r *http.Request) { + // swagger:route GET /api/v1/message/{ID}/raw message DownloadRawParams + // + // # Get message source + // + // Returns the full email source as plain text. + // + // The ID can be set to `latest` to return the latest message source. + // + // Produces: + // - text/plain + // + // Schemes: http, https + // + // Responses: + // 200: TextResponse + // 400: ErrorResponse + // 404: NotFoundResponse + + vars := mux.Vars(r) + + id := vars["id"] + dl := r.FormValue("dl") + + if id == "latest" { + var err error + id, err = storage.LatestID(r) + if err != nil { + w.WriteHeader(404) + fmt.Fprint(w, err.Error()) + return + } + } + + data, err := storage.GetMessageRaw(id) + if err != nil { + fourOFour(w) + return + } + + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + if dl == "1" { + w.Header().Set("Content-Disposition", "attachment; filename=\""+id+".eml\"") + } + _, _ = w.Write(data) +} diff --git a/server/apiv1/messages.go b/server/apiv1/messages.go new file mode 100644 index 0000000000..a837cbd6c5 --- /dev/null +++ b/server/apiv1/messages.go @@ -0,0 +1,388 @@ +package apiv1 + +import ( + "encoding/json" + "net/http" + "strings" + + "github.com/axllent/mailpit/internal/storage" +) + +// swagger:parameters GetMessagesParams +type getMessagesParams struct { + // Pagination offset + // + // in: query + // name: start + // required: false + // default: 0 + // type: integer + // example: 100 + Start int `json:"start"` + + // Limit number of results + // + // in: query + // name: limit + // required: false + // default: 50 + // type: integer + // example: 50 + Limit int `json:"limit"` +} + +// Summary of messages +// swagger:response MessagesSummaryResponse +type messagesSummaryResponse struct { + // The messages summary + // in: body + Body MessagesSummary +} + +// MessagesSummary is a summary of a list of messages +type MessagesSummary struct { + // Total number of messages in mailbox + Total float64 `json:"total"` + + // Total number of unread messages in mailbox + Unread float64 `json:"unread"` + + // Legacy - now undocumented in API specs but left for backwards compatibility. + // Removed from API documentation 2023-07-12 + // swagger:ignore + Count float64 `json:"count"` + + // Total number of messages matching current query + MessagesCount float64 `json:"messages_count"` + + // Pagination offset + Start int `json:"start"` + + // All current tags + Tags []string `json:"tags"` + + // Messages summary + // in: body + Messages []storage.MessageSummary `json:"messages"` +} + +// GetMessages returns a paginated list of messages as JSON +func GetMessages(w http.ResponseWriter, r *http.Request) { + // swagger:route GET /api/v1/messages messages GetMessagesParams + // + // # List messages + // + // Returns messages from the mailbox ordered from newest to oldest. + // + // Produces: + // - application/json + // + // Schemes: http, https + // + // Responses: + // 200: MessagesSummaryResponse + // 400: ErrorResponse + + start, beforeTS, limit := getStartLimit(r) + + messages, err := storage.List(start, beforeTS, limit) + if err != nil { + httpError(w, err.Error()) + return + } + + stats := storage.StatsGet() + + var res MessagesSummary + + res.Start = start + res.Messages = messages + res.Count = float64(len(messages)) // legacy - now undocumented in API specs + res.Total = stats.Total + res.Unread = stats.Unread + res.Tags = stats.Tags + res.MessagesCount = stats.Total + + w.Header().Add("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(res); err != nil { + httpError(w, err.Error()) + } +} + +// swagger:parameters SetReadStatusParams +type setReadStatusParams struct { + // in: body + Body struct { + // Read status + // + // required: false + // default: false + // example: true + Read bool + + // Array of message database IDs + // + // required: false + // example: ["4oRBnPtCXgAqZniRhzLNmS", "hXayS6wnCgNnt6aFTvmOF6"] + IDs []string + } +} + +// SetReadStatus (method: PUT) will update the status to Read/Unread for all provided IDs +// If no IDs are provided then all messages are updated. +func SetReadStatus(w http.ResponseWriter, r *http.Request) { + // swagger:route PUT /api/v1/messages messages SetReadStatusParams + // + // # Set read status + // + // If no IDs are provided then all messages are updated. + // + // Consumes: + // - application/json + // + // Produces: + // - text/plain + // + // Schemes: http, https + // + // Responses: + // 200: OKResponse + // 400: ErrorResponse + + decoder := json.NewDecoder(r.Body) + + var data struct { + Read bool + IDs []string + } + + err := decoder.Decode(&data) + if err != nil { + httpError(w, err.Error()) + return + } + + ids := data.IDs + + if len(ids) == 0 { + if data.Read { + err := storage.MarkAllRead() + if err != nil { + httpError(w, err.Error()) + return + } + } else { + err := storage.MarkAllUnread() + if err != nil { + httpError(w, err.Error()) + return + } + } + } else { + if data.Read { + for _, id := range ids { + if err := storage.MarkRead(id); err != nil { + httpError(w, err.Error()) + return + } + } + } else { + for _, id := range ids { + if err := storage.MarkUnread(id); err != nil { + httpError(w, err.Error()) + return + } + } + } + } + + w.Header().Add("Content-Type", "text/plain") + _, _ = w.Write([]byte("ok")) +} + +// swagger:parameters DeleteMessagesParams +type deleteMessagesParams struct { + // Delete request + // in: body + Body struct { + // Array of message database IDs + // + // required: false + // example: ["4oRBnPtCXgAqZniRhzLNmS", "hXayS6wnCgNnt6aFTvmOF6"] + IDs []string + } +} + +// DeleteMessages (method: DELETE) deletes all messages matching IDS. +func DeleteMessages(w http.ResponseWriter, r *http.Request) { + // swagger:route DELETE /api/v1/messages messages DeleteMessagesParams + // + // # Delete messages + // + // Delete individual or all messages. If no IDs are provided then all messages are deleted. + // + // Consumes: + // - application/json + // + // Produces: + // - text/plain + // + // Schemes: http, https + // + // Responses: + // 200: OKResponse + // 400: ErrorResponse + + decoder := json.NewDecoder(r.Body) + var data struct { + IDs []string + } + err := decoder.Decode(&data) + if err != nil || len(data.IDs) == 0 { + if err := storage.DeleteAllMessages(); err != nil { + httpError(w, err.Error()) + return + } + } else { + if err := storage.DeleteMessages(data.IDs); err != nil { + httpError(w, err.Error()) + return + } + } + + w.Header().Add("Content-Type", "text/plain") + _, _ = w.Write([]byte("ok")) +} + +// swagger:parameters SearchParams +type searchParams struct { + // Search query + // + // in: query + // required: true + // type: string + // example: search words + Query string `json:"query"` + + // Pagination offset + // + // in: query + // required: false + // type integer + // example: 100 + Start string `json:"start"` + + // Limit results + // + // in: query + // required: false + // type integer + // example: 50 + Limit string `json:"limit"` + + // [Timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) used only for `before:` & `after:` searches (eg: "Pacific/Auckland"). + // + // in: query + // required: false + // type string + TZ string `json:"tz"` +} + +// Search returns the latest messages as JSON +func Search(w http.ResponseWriter, r *http.Request) { + // swagger:route GET /api/v1/search messages SearchParams + // + // # Search messages + // + // Returns messages matching [a search](https://mailpit.axllent.org/docs/usage/search-filters/), sorted by received date (descending). + // + // Produces: + // - application/json + // + // Schemes: http, https + // + // Responses: + // 200: MessagesSummaryResponse + // 400: ErrorResponse + + search := strings.TrimSpace(r.URL.Query().Get("query")) + if search == "" { + httpError(w, "Error: no search query") + return + } + + start, beforeTS, limit := getStartLimit(r) + + messages, results, err := storage.Search(search, r.URL.Query().Get("tz"), start, beforeTS, limit) + if err != nil { + httpError(w, err.Error()) + return + } + + stats := storage.StatsGet() + + var res MessagesSummary + + res.Start = start + res.Messages = messages + res.Count = float64(len(messages)) // legacy - now undocumented in API specs + res.Total = stats.Total // total messages in mailbox + res.MessagesCount = float64(results) + res.Unread = stats.Unread + res.Tags = stats.Tags + + w.Header().Add("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(res); err != nil { + httpError(w, err.Error()) + } +} + +// swagger:parameters DeleteSearchParams +type deleteSearchParams struct { + // Search query + // + // in: query + // required: true + // type: string + // example: search words + Query string `json:"query"` + + // [Timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) used only for `before:` & `after:` searches (eg: "Pacific/Auckland"). + // + // in: query + // required: false + // type string + TZ string `json:"tz"` +} + +// DeleteSearch will delete all messages matching a search +func DeleteSearch(w http.ResponseWriter, r *http.Request) { + // swagger:route DELETE /api/v1/search messages DeleteSearchParams + // + // # Delete messages by search + // + // Delete all messages matching [a search](https://mailpit.axllent.org/docs/usage/search-filters/). + // + // Produces: + // - application/json + // + // Schemes: http, https + // + // Responses: + // 200: OKResponse + // 400: ErrorResponse + + search := strings.TrimSpace(r.URL.Query().Get("query")) + if search == "" { + httpError(w, "Error: no search query") + return + } + + if err := storage.DeleteSearch(search, r.URL.Query().Get("tz")); err != nil { + httpError(w, err.Error()) + return + } + + w.Header().Add("Content-Type", "text/plain") + _, _ = w.Write([]byte("ok")) +} diff --git a/server/apiv1/other.go b/server/apiv1/other.go new file mode 100644 index 0000000000..e8e24a0f87 --- /dev/null +++ b/server/apiv1/other.go @@ -0,0 +1,238 @@ +package apiv1 + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" + + "github.com/axllent/mailpit/config" + "github.com/axllent/mailpit/internal/htmlcheck" + "github.com/axllent/mailpit/internal/linkcheck" + "github.com/axllent/mailpit/internal/spamassassin" + "github.com/axllent/mailpit/internal/storage" + "github.com/gorilla/mux" + "github.com/jhillyerd/enmime" +) + +// swagger:parameters HTMLCheckParams +type htmlCheckParams struct { + // Message database ID or "latest" + // + // in: path + // description: Message database ID or "latest" + // required: true + // example: 4oRBnPtCXgAqZniRhzLNmS + ID string +} + +// HTMLCheckResponse summary response +type HTMLCheckResponse = htmlcheck.Response + +// HTMLCheck returns a summary of the HTML client support +func HTMLCheck(w http.ResponseWriter, r *http.Request) { + // swagger:route GET /api/v1/message/{ID}/html-check Other HTMLCheckParams + // + // # HTML check + // + // Returns the summary of the message HTML checker. + // + // The ID can be set to `latest` to return the latest message. + // + // Produces: + // - application/json + // + // Schemes: http, https + // + // Responses: + // 200: HTMLCheckResponse + // 400: ErrorResponse + // 404: NotFoundResponse + + vars := mux.Vars(r) + id := vars["id"] + + if id == "latest" { + var err error + id, err = storage.LatestID(r) + if err != nil { + fourOFour(w) + return + } + } + + raw, err := storage.GetMessageRaw(id) + if err != nil { + fourOFour(w) + return + } + + e := bytes.NewReader(raw) + + parser := enmime.NewParser(enmime.DisableCharacterDetection(true)) + + msg, err := parser.ReadEnvelope(e) + if err != nil { + httpError(w, err.Error()) + return + } + + if msg.HTML == "" { + httpError(w, "message does not contain HTML") + return + } + + checks, err := htmlcheck.RunTests(msg.HTML) + if err != nil { + httpError(w, err.Error()) + return + } + + w.Header().Add("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(checks); err != nil { + httpError(w, err.Error()) + } +} + +// swagger:parameters LinkCheckParams +type linkCheckParams struct { + // Message database ID or "latest" + // + // in: path + // required: true + // example: 4oRBnPtCXgAqZniRhzLNmS + ID string + + // Follow redirects + // + // in: query + // required: false + // default: false + // example: false + Follow string `json:"follow"` +} + +// LinkCheckResponse summary response +type LinkCheckResponse = linkcheck.Response + +// LinkCheck returns a summary of links in the email +func LinkCheck(w http.ResponseWriter, r *http.Request) { + // swagger:route GET /api/v1/message/{ID}/link-check Other LinkCheckParams + // + // # Link check + // + // Returns the summary of the message Link checker. + // + // The ID can be set to `latest` to return the latest message. + // + // Produces: + // - application/json + // + // Schemes: http, https + // + // Responses: + // 200: LinkCheckResponse + // 400: ErrorResponse + // 404: NotFoundResponse + + if config.DemoMode { + httpError(w, "this functionality has been disabled for demonstration purposes") + return + } + + vars := mux.Vars(r) + id := vars["id"] + + if id == "latest" { + var err error + id, err = storage.LatestID(r) + if err != nil { + fourOFour(w) + return + } + } + + msg, err := storage.GetMessage(id) + if err != nil { + fourOFour(w) + return + } + + f := r.URL.Query().Get("follow") + followRedirects := f == "true" || f == "1" + + summary, err := linkcheck.RunTests(msg, followRedirects) + if err != nil { + httpError(w, err.Error()) + return + } + + w.Header().Add("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(summary); err != nil { + httpError(w, err.Error()) + } +} + +// swagger:parameters SpamAssassinCheckParams +type spamAssassinCheckParams struct { + // Message database ID or "latest" + // + // in: path + // required: true + // example: 4oRBnPtCXgAqZniRhzLNmS + ID string +} + +// SpamAssassinResponse summary response +type SpamAssassinResponse = spamassassin.Result + +// SpamAssassinCheck returns a summary of SpamAssassin results (if enabled) +func SpamAssassinCheck(w http.ResponseWriter, r *http.Request) { + // swagger:route GET /api/v1/message/{ID}/sa-check Other SpamAssassinCheckParams + // + // # SpamAssassin check + // + // Returns the SpamAssassin summary (if enabled) of the message. + // + // The ID can be set to `latest` to return the latest message. + // + // Produces: + // - application/json + // + // Schemes: http, https + // + // Responses: + // 200: SpamAssassinResponse + // 400: ErrorResponse + // 404: NotFoundResponse + + vars := mux.Vars(r) + id := vars["id"] + + if id == "latest" { + var err error + id, err = storage.LatestID(r) + if err != nil { + w.WriteHeader(404) + fmt.Fprint(w, err.Error()) + return + } + } + + msg, err := storage.GetMessageRaw(id) + if err != nil { + fourOFour(w) + return + } + + summary, err := spamassassin.Check(msg) + if err != nil { + httpError(w, err.Error()) + return + } + + w.Header().Add("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(summary); err != nil { + httpError(w, err.Error()) + } +} diff --git a/server/apiv1/release.go b/server/apiv1/release.go index e11f505271..b0e76b8f80 100644 --- a/server/apiv1/release.go +++ b/server/apiv1/release.go @@ -17,25 +17,48 @@ import ( "github.com/lithammer/shortuuid/v4" ) +// swagger:parameters ReleaseMessageParams +type releaseMessageParams struct { + // Message database ID + // + // in: path + // description: Message database ID + // required: true + // example: 4oRBnPtCXgAqZniRhzLNmS + ID string + + // in: body + Body struct { + // Array of email addresses to relay the message to + // + // required: true + // example: ["user1@example.com", "user2@example.com"] + To []string + } +} + // ReleaseMessage (method: POST) will release a message via a pre-configured external SMTP server. func ReleaseMessage(w http.ResponseWriter, r *http.Request) { - // swagger:route POST /api/v1/message/{ID}/release message ReleaseMessage + // swagger:route POST /api/v1/message/{ID}/release message ReleaseMessageParams // // # Release message // // Release a message via a pre-configured external SMTP server. This is only enabled if message relaying has been configured. // + // The ID can be set to `latest` to reference the latest message. + // // Consumes: - // - application/json + // - application/json // // Produces: - // - text/plain + // - text/plain // // Schemes: http, https // // Responses: - // 200: OKResponse - // default: ErrorResponse + // 200: OKResponse + // 400: ErrorResponse + // 404: NotFoundResponse if config.DemoMode { httpError(w, "this functionality has been disabled for demonstration purposes") @@ -54,7 +77,9 @@ func ReleaseMessage(w http.ResponseWriter, r *http.Request) { decoder := json.NewDecoder(r.Body) - data := releaseMessageRequestBody{} + var data struct { + To []string + } if err := decoder.Decode(&data); err != nil { httpError(w, err.Error()) diff --git a/server/apiv1/send.go b/server/apiv1/send.go index b4e21b3385..55ec8746bf 100644 --- a/server/apiv1/send.go +++ b/server/apiv1/send.go @@ -17,7 +17,7 @@ import ( "github.com/jhillyerd/enmime" ) -// swagger:parameters SendMessage +// swagger:parameters SendMessageParams type sendMessageParams struct { // in: body Body *SendRequest @@ -108,13 +108,6 @@ type SendRequest struct { Headers map[string]string } -// SendMessageConfirmation struct -type SendMessageConfirmation struct { - // Database ID - // example: iAfZVVe2UQFNSG5BAjgYwa - ID string -} - // JSONErrorMessage struct type JSONErrorMessage struct { // Error message @@ -122,25 +115,41 @@ type JSONErrorMessage struct { Error string } +// Confirmation message for HTTP send API +// swagger:response sendMessageResponse +type sendMessageResponse struct { + // Response for sending messages via the HTTP API + // + // in: body + Body SendMessageConfirmation +} + +// SendMessageConfirmation struct +type SendMessageConfirmation struct { + // Database ID + // example: iAfZVVe2UQfNSG5BAjgYwa + ID string +} + // SendMessageHandler handles HTTP requests to send a new message func SendMessageHandler(w http.ResponseWriter, r *http.Request) { - // swagger:route POST /api/v1/send message SendMessage + // swagger:route POST /api/v1/send message SendMessageParams // // # Send a message // // Send a message via the HTTP API. // // Consumes: - // - application/json + // - application/json // // Produces: - // - application/json + // - application/json // // Schemes: http, https // // Responses: - // 200: sendMessageResponse - // default: jsonErrorResponse + // 200: sendMessageResponse + // 400: jsonErrorResponse if config.DemoMode { httpJSONError(w, "this functionality has been disabled for demonstration purposes") diff --git a/server/apiv1/structs.go b/server/apiv1/structs.go index 7055afcc0b..2130784cd5 100644 --- a/server/apiv1/structs.go +++ b/server/apiv1/structs.go @@ -1,39 +1,9 @@ package apiv1 import ( - "github.com/axllent/mailpit/internal/htmlcheck" - "github.com/axllent/mailpit/internal/linkcheck" - "github.com/axllent/mailpit/internal/spamassassin" "github.com/axllent/mailpit/internal/storage" ) -// MessagesSummary is a summary of a list of messages -type MessagesSummary struct { - // Total number of messages in mailbox - Total float64 `json:"total"` - - // Total number of unread messages in mailbox - Unread float64 `json:"unread"` - - // Legacy - now undocumented in API specs but left for backwards compatibility. - // Removed from API documentation 2023-07-12 - // swagger:ignore - Count float64 `json:"count"` - - // Total number of messages matching current query - MessagesCount float64 `json:"messages_count"` - - // Pagination offset - Start int `json:"start"` - - // All current tags - Tags []string `json:"tags"` - - // Messages summary - // in: body - Messages []storage.MessageSummary `json:"messages"` -} - // The following structs & aliases are provided for easy import // and understanding of the JSON structure. @@ -45,12 +15,3 @@ type Message = storage.Message // Attachment summary type Attachment = storage.Attachment - -// HTMLCheckResponse summary -type HTMLCheckResponse = htmlcheck.Response - -// LinkCheckResponse summary -type LinkCheckResponse = linkcheck.Response - -// SpamAssassinResponse summary -type SpamAssassinResponse = spamassassin.Result diff --git a/server/apiv1/swagger.go b/server/apiv1/swagger.go index d9977965c2..b043db255b 100644 --- a/server/apiv1/swagger.go +++ b/server/apiv1/swagger.go @@ -1,177 +1,8 @@ package apiv1 -import "github.com/axllent/mailpit/internal/stats" - // These structs are for the purpose of defining swagger HTTP parameters & responses -// Application information -// swagger:response InfoResponse -type infoResponse struct { - // Application information - // - // in: body - Body stats.AppInformation -} - -// Web UI configuration -// swagger:response WebUIConfigurationResponse -type webUIConfigurationResponse struct { - // Web UI configuration settings - // - // in: body - Body webUIConfiguration -} - -// Message summary -// swagger:response MessagesSummaryResponse -type messagesSummaryResponse struct { - // The message summary - // in: body - Body MessagesSummary -} - -// Message headers -// swagger:model MessageHeaders -type messageHeaders map[string][]string - -// swagger:parameters DeleteMessages -type deleteMessagesParams struct { - // in: body - Body *deleteMessagesRequestBody -} - -// Delete request -// swagger:model DeleteRequest -type deleteMessagesRequestBody struct { - // Array of message database IDs - // - // required: false - // example: ["5dec4247-812e-4b77-9101-e25ad406e9ea", "8ac66bbc-2d9a-4c41-ad99-00aa75fa674e"] - IDs []string -} - -// swagger:parameters SetReadStatus -type setReadStatusParams struct { - // in: body - Body *setReadStatusRequestBody -} - -// Set read status request -// swagger:model setReadStatusRequestBody -type setReadStatusRequestBody struct { - // Read status - // - // required: false - // default: false - // example: true - Read bool - - // Array of message database IDs - // - // required: false - // example: ["5dec4247-812e-4b77-9101-e25ad406e9ea", "8ac66bbc-2d9a-4c41-ad99-00aa75fa674e"] - IDs []string -} - -// swagger:parameters SetTags -type setTagsParams struct { - // in: body - Body *setTagsRequestBody -} - -// Set tags request -// swagger:model setTagsRequestBody -type setTagsRequestBody struct { - // Array of tag names to set - // - // required: true - // example: ["Tag 1", "Tag 2"] - Tags []string - - // Array of message database IDs - // - // required: true - // example: ["5dec4247-812e-4b77-9101-e25ad406e9ea", "8ac66bbc-2d9a-4c41-ad99-00aa75fa674e"] - IDs []string -} - -// swagger:parameters RenameTag -type renameTagParams struct { - // in: body - Body *renameTagRequestBody -} - -// Rename tag request -// swagger:model renameTagRequestBody -type renameTagRequestBody struct { - // New name - // - // required: true - // example: New name - Name string -} - -// swagger:parameters ReleaseMessage -type releaseMessageParams struct { - // Message database ID - // - // in: path - // description: Message database ID - // required: true - ID string - - // in: body - Body *releaseMessageRequestBody -} - -// Release request -// swagger:model releaseMessageRequestBody -type releaseMessageRequestBody struct { - // Array of email addresses to relay the message to - // required: true - // example: ["user1@example.com", "user2@example.com"] - To []string -} - -// swagger:parameters HTMLCheck -type htmlCheckParams struct { - // Message database ID or "latest" - // - // in: path - // description: Message database ID or "latest" - // required: true - ID string -} - -// swagger:parameters LinkCheck -type linkCheckParams struct { - // Message database ID or "latest" - // - // in: path - // description: Message database ID or "latest" - // required: true - ID string - - // Follow redirects - // - // in: query - // description: Follow redirects - // required: false - // default: false - Follow string `json:"follow"` -} - -// swagger:parameters SpamAssassinCheck -type spamAssassinCheckParams struct { - // Message database ID or "latest" - // - // in: path - // description: Message database ID or "latest" - // required: true - ID string -} - -// Binary data response inherits the attachment's content type. +// Binary data response which inherits the attachment's content type. // swagger:response BinaryResponse type binaryResponse string @@ -183,11 +14,15 @@ type textResponse string // swagger:response HTMLResponse type htmlResponse string -// HTTP error response will return with a >= 400 response code +// Server error will return with a 400 status code +// with the error message in the body // swagger:response ErrorResponse -// example: invalid request type errorResponse string +// Not found error will return a 404 status code +// swagger:response NotFoundResponse +type notFoundResponse string + // Plain text "ok" response // swagger:response OKResponse type okResponse string @@ -196,15 +31,6 @@ type okResponse string // swagger:response ArrayResponse type arrayResponse []string -// Confirmation message for HTTP send API -// swagger:response sendMessageResponse -type sendMessageResponse struct { - // Response for sending messages via the HTTP API - // - // in: body - Body SendMessageConfirmation -} - // JSON error response // swagger:response jsonErrorResponse type jsonErrorResponse struct { diff --git a/server/apiv1/tags.go b/server/apiv1/tags.go index f9e154b135..8ba4c9e2ea 100644 --- a/server/apiv1/tags.go +++ b/server/apiv1/tags.go @@ -18,13 +18,13 @@ func GetAllTags(w http.ResponseWriter, _ *http.Request) { // Returns a JSON array of all unique message tags. // // Produces: - // - application/json + // - application/json // // Schemes: http, https // // Responses: - // 200: ArrayResponse - // default: ErrorResponse + // 200: ArrayResponse + // 400: ErrorResponse w.Header().Add("Content-Type", "application/json") if err := json.NewEncoder(w).Encode(storage.GetAllTags()); err != nil { @@ -32,25 +32,43 @@ func GetAllTags(w http.ResponseWriter, _ *http.Request) { } } +// swagger:parameters SetTagsParams +type setTagsParams struct { + // in: body + Body struct { + // Array of tag names to set + // + // required: true + // example: ["Tag 1", "Tag 2"] + Tags []string + + // Array of message database IDs + // + // required: true + // example: ["4oRBnPtCXgAqZniRhzLNmS", "hXayS6wnCgNnt6aFTvmOF6"] + IDs []string + } +} + // SetMessageTags (method: PUT) will set the tags for all provided IDs func SetMessageTags(w http.ResponseWriter, r *http.Request) { - // swagger:route PUT /api/v1/tags tags SetTags + // swagger:route PUT /api/v1/tags tags SetTagsParams // // # Set message tags // // This will overwrite any existing tags for selected message database IDs. To remove all tags from a message, pass an empty tags array. // // Consumes: - // - application/json + // - application/json // // Produces: - // - text/plain + // - text/plain // // Schemes: http, https // // Responses: - // 200: OKResponse - // default: ErrorResponse + // 200: OKResponse + // 400: ErrorResponse decoder := json.NewDecoder(r.Body) @@ -80,29 +98,42 @@ func SetMessageTags(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte("ok")) } +// swagger:parameters RenameTagParams +type renameTagParams struct { + // The url-encoded tag name to rename + // + // in: path + // required: true + // type: string + // example: Old name + Tag string + + // in: body + Body struct { + // New name + // + // required: true + // example: New name + Name string + } +} + // RenameTag (method: PUT) used to rename a tag func RenameTag(w http.ResponseWriter, r *http.Request) { - // swagger:route PUT /api/v1/tags/{tag} tags RenameTag + // swagger:route PUT /api/v1/tags/{Tag} tags RenameTagParams // // # Rename a tag // - // Renames a tag. + // Renames an existing tag. // // Produces: - // - text/plain + // - text/plain // // Schemes: http, https // - // Parameters: - // + name: tag - // in: path - // description: The url-encoded tag name to rename - // required: true - // type: string - // // Responses: - // 200: OKResponse - // default: ErrorResponse + // 200: OKResponse + // 400: ErrorResponse vars := mux.Vars(r) @@ -131,29 +162,32 @@ func RenameTag(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte("ok")) } +// swagger:parameters DeleteTagParams +type deleteTagParams struct { + // The url-encoded tag name to delete + // + // in: path + // required: true + // example: My tag + Tag string +} + // DeleteTag (method: DELETE) used to delete a tag func DeleteTag(w http.ResponseWriter, r *http.Request) { - // swagger:route DELETE /api/v1/tags/{tag} tags DeleteTag + // swagger:route DELETE /api/v1/tags/{Tag} tags DeleteTagParams // // # Delete a tag // - // Deletes a tag. This will not delete any messages with this tag. + // Deletes a tag. This will not delete any messages with the tag, but will remove the tag from any messages containing the tag. // // Produces: - // - text/plain + // - text/plain // // Schemes: http, https // - // Parameters: - // + name: tag - // in: path - // description: The url-encoded tag name to delete - // required: true - // type: string - // // Responses: - // 200: OKResponse - // default: ErrorResponse + // 200: OKResponse + // 400: ErrorResponse vars := mux.Vars(r) diff --git a/server/apiv1/testing.go b/server/apiv1/testing.go new file mode 100644 index 0000000000..987bf072f9 --- /dev/null +++ b/server/apiv1/testing.go @@ -0,0 +1,159 @@ +package apiv1 + +import ( + "fmt" + "net/http" + "regexp" + "strings" + + "github.com/axllent/mailpit/config" + "github.com/axllent/mailpit/internal/storage" + "github.com/gorilla/mux" +) + +// swagger:parameters GetMessageHTMLParams +type getMessageHTMLParams struct { + // Message database ID or "latest" + // + // in: path + // required: true + // example: 4oRBnPtCXgAqZniRhzLNmS + ID string +} + +// GetMessageHTML (method: GET) returns a rendered version of a message's HTML part +func GetMessageHTML(w http.ResponseWriter, r *http.Request) { + // swagger:route GET /view/{ID}.html testing GetMessageHTMLParams + // + // # Render message HTML part + // + // Renders just the message's HTML part which can be used for UI integration testing. + // Attached inline images are modified to link to the API provided they exist. + // Note that is the message does not contain a HTML part then an 404 error is returned. + // + // The ID can be set to `latest` to return the latest message. + // + // Produces: + // - text/html + // + // Schemes: http, https + // + // Responses: + // 200: HTMLResponse + // 400: ErrorResponse + // 404: NotFoundResponse + + vars := mux.Vars(r) + + id := vars["id"] + + if id == "latest" { + var err error + id, err = storage.LatestID(r) + if err != nil { + w.WriteHeader(404) + fmt.Fprint(w, err.Error()) + return + } + } + + msg, err := storage.GetMessage(id) + if err != nil { + w.WriteHeader(404) + fmt.Fprint(w, "Message not found") + return + } + if msg.HTML == "" { + w.WriteHeader(404) + fmt.Fprint(w, "This message does not contain a HTML part") + return + } + + html := linkInlineImages(msg) + w.Header().Add("Content-Type", "text/html; charset=utf-8") + _, _ = w.Write([]byte(html)) +} + +// swagger:parameters GetMessageTextParams +type getMessageTextParams struct { + // Message database ID or "latest" + // + // in: path + // required: true + // example: 4oRBnPtCXgAqZniRhzLNmS + ID string +} + +// GetMessageText (method: GET) returns a message's text part +func GetMessageText(w http.ResponseWriter, r *http.Request) { + // swagger:route GET /view/{ID}.txt testing GetMessageTextParams + // + // # Render message text part + // + // Renders just the message's text part which can be used for UI integration testing. + // + // The ID can be set to `latest` to return the latest message. + // + // Produces: + // - text/plain + // + // Schemes: http, https + // + // Responses: + // 200: TextResponse + // 400: ErrorResponse + // 404: NotFoundResponse + + vars := mux.Vars(r) + + id := vars["id"] + + if id == "latest" { + var err error + id, err = storage.LatestID(r) + if err != nil { + w.WriteHeader(404) + fmt.Fprint(w, err.Error()) + return + } + } + + msg, err := storage.GetMessage(id) + if err != nil { + w.WriteHeader(404) + fmt.Fprint(w, "Message not found") + return + } + + w.Header().Add("Content-Type", "text/plain; charset=utf-8") + _, _ = w.Write([]byte(msg.Text)) +} + +// This will rewrite all inline image paths to API URLs +func linkInlineImages(msg *storage.Message) string { + html := msg.HTML + + for _, a := range msg.Inline { + if a.ContentID != "" { + re := regexp.MustCompile(`(?i)(=["\']?)(cid:` + regexp.QuoteMeta(a.ContentID) + `)(["|\'|\\s|\\/|>|;])`) + u := config.Webroot + "api/v1/message/" + msg.ID + "/part/" + a.PartID + matches := re.FindAllStringSubmatch(html, -1) + for _, m := range matches { + html = strings.ReplaceAll(html, m[0], m[1]+u+m[3]) + } + } + } + + for _, a := range msg.Attachments { + if a.ContentID != "" { + re := regexp.MustCompile(`(?i)(=["\']?)(cid:` + regexp.QuoteMeta(a.ContentID) + `)(["|\'|\\s|\\/|>|;])`) + u := config.Webroot + "api/v1/message/" + msg.ID + "/part/" + a.PartID + matches := re.FindAllStringSubmatch(html, -1) + for _, m := range matches { + html = strings.ReplaceAll(html, m[0], m[1]+u+m[3]) + } + } + } + + return html +} diff --git a/server/apiv1/thumbnails.go b/server/apiv1/thumbnails.go index 3d76fc8f14..ea5526ed04 100644 --- a/server/apiv1/thumbnails.go +++ b/server/apiv1/thumbnails.go @@ -22,35 +22,43 @@ var ( thumbHeight = 120 ) +// swagger:parameters ThumbnailParams +type thumbnailParams struct { + // Message database ID or "latest" + // + // in: path + // required: true + // example: 4oRBnPtCXgAqZniRhzLNmS + ID string + + // Attachment part ID + // + // in: path + // required: true + // example: 2 + PartID string +} + // Thumbnail returns a thumbnail image for an attachment (images only) func Thumbnail(w http.ResponseWriter, r *http.Request) { - // swagger:route GET /api/v1/message/{ID}/part/{PartID}/thumb message Thumbnail + // swagger:route GET /api/v1/message/{ID}/part/{PartID}/thumb message ThumbnailParams // // # Get an attachment image thumbnail // // This will return a cropped 180x120 JPEG thumbnail of an image attachment. // If the image is smaller than 180x120 then the image is padded. If the attachment is not an image then a blank image is returned. // + // The ID can be set to `latest` to return the latest message. + // // Produces: - // - image/jpeg + // - image/jpeg // // Schemes: http, https // - // Parameters: - // + name: ID - // in: path - // description: Database ID - // required: true - // type: string - // + name: PartID - // in: path - // description: Attachment part ID - // required: true - // type: string - // // Responses: - // 200: BinaryResponse - // default: ErrorResponse + // 200: BinaryResponse + // 400: ErrorResponse + vars := mux.Vars(r) id := vars["id"] diff --git a/server/handlers/messages.go b/server/handlers/messages.go index 70de82d078..20766047ec 100644 --- a/server/handlers/messages.go +++ b/server/handlers/messages.go @@ -1,15 +1,12 @@ package handlers import ( - "fmt" "net/http" "net/url" - "regexp" "strings" "github.com/axllent/mailpit/config" "github.com/axllent/mailpit/internal/storage" - "github.com/gorilla/mux" ) // RedirectToLatestMessage (method: GET) redirects the web UI to the latest message @@ -44,142 +41,3 @@ func RedirectToLatestMessage(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, uri, 302) } - -// GetMessageHTML (method: GET) returns a rendered version of a message's HTML part -func GetMessageHTML(w http.ResponseWriter, r *http.Request) { - // swagger:route GET /view/{ID}.html testing GetMessageHTML - // - // # Render message HTML part - // - // Renders just the message's HTML part which can be used for UI integration testing. - // Attached inline images are modified to link to the API provided they exist. - // Note that is the message does not contain a HTML part then an 404 error is returned. - // - // The ID can be set to `latest` to return the latest message. - // - // Produces: - // - text/html - // - // Schemes: http, https - // - // Parameters: - // + name: ID - // in: path - // description: Database ID or latest - // required: true - // type: string - // - // Responses: - // 200: HTMLResponse - // default: ErrorResponse - - vars := mux.Vars(r) - - id := vars["id"] - - if id == "latest" { - var err error - id, err = storage.LatestID(r) - if err != nil { - w.WriteHeader(404) - fmt.Fprint(w, err.Error()) - return - } - } - - msg, err := storage.GetMessage(id) - if err != nil { - w.WriteHeader(404) - fmt.Fprint(w, "Message not found") - return - } - if msg.HTML == "" { - w.WriteHeader(404) - fmt.Fprint(w, "This message does not contain a HTML part") - return - } - - html := linkInlineImages(msg) - w.Header().Add("Content-Type", "text/html; charset=utf-8") - _, _ = w.Write([]byte(html)) -} - -// GetMessageText (method: GET) returns a message's text part -func GetMessageText(w http.ResponseWriter, r *http.Request) { - // swagger:route GET /view/{ID}.txt testing GetMessageText - // - // # Render message text part - // - // Renders just the message's text part which can be used for UI integration testing. - // - // The ID can be set to `latest` to return the latest message. - // - // Produces: - // - text/plain - // - // Schemes: http, https - // - // Parameters: - // + name: ID - // in: path - // description: Database ID or latest - // required: true - // type: string - // - // Responses: - // 200: TextResponse - // default: ErrorResponse - - vars := mux.Vars(r) - - id := vars["id"] - - if id == "latest" { - var err error - id, err = storage.LatestID(r) - if err != nil { - w.WriteHeader(404) - fmt.Fprint(w, err.Error()) - return - } - } - - msg, err := storage.GetMessage(id) - if err != nil { - w.WriteHeader(404) - fmt.Fprint(w, "Message not found") - return - } - - w.Header().Add("Content-Type", "text/plain; charset=utf-8") - _, _ = w.Write([]byte(msg.Text)) -} - -// This will rewrite all inline image paths to API URLs -func linkInlineImages(msg *storage.Message) string { - html := msg.HTML - - for _, a := range msg.Inline { - if a.ContentID != "" { - re := regexp.MustCompile(`(?i)(=["\']?)(cid:` + regexp.QuoteMeta(a.ContentID) + `)(["|\'|\\s|\\/|>|;])`) - u := config.Webroot + "api/v1/message/" + msg.ID + "/part/" + a.PartID - matches := re.FindAllStringSubmatch(html, -1) - for _, m := range matches { - html = strings.ReplaceAll(html, m[0], m[1]+u+m[3]) - } - } - } - - for _, a := range msg.Attachments { - if a.ContentID != "" { - re := regexp.MustCompile(`(?i)(=["\']?)(cid:` + regexp.QuoteMeta(a.ContentID) + `)(["|\'|\\s|\\/|>|;])`) - u := config.Webroot + "api/v1/message/" + msg.ID + "/part/" + a.PartID - matches := re.FindAllStringSubmatch(html, -1) - for _, m := range matches { - html = strings.ReplaceAll(html, m[0], m[1]+u+m[3]) - } - } - } - - return html -} diff --git a/server/server.go b/server/server.go index 51043f08bf..c942b29612 100644 --- a/server/server.go +++ b/server/server.go @@ -81,8 +81,8 @@ func Listen() { r.HandleFunc(config.Webroot+"view/latest", middleWareFunc(handlers.RedirectToLatestMessage)).Methods("GET") // frontend testing - r.HandleFunc(config.Webroot+"view/{id}.html", middleWareFunc(handlers.GetMessageHTML)).Methods("GET") - r.HandleFunc(config.Webroot+"view/{id}.txt", middleWareFunc(handlers.GetMessageText)).Methods("GET") + r.HandleFunc(config.Webroot+"view/{id}.html", middleWareFunc(apiv1.GetMessageHTML)).Methods("GET") + r.HandleFunc(config.Webroot+"view/{id}.txt", middleWareFunc(apiv1.GetMessageText)).Methods("GET") // web UI via virtual index.html r.PathPrefix(config.Webroot + "view/").Handler(middleWareFunc(index)).Methods("GET") diff --git a/server/ui/api/v1/swagger.json b/server/ui/api/v1/swagger.json index 9be9d5acbb..f27f275253 100644 --- a/server/ui/api/v1/swagger.json +++ b/server/ui/api/v1/swagger.json @@ -40,9 +40,9 @@ "operationId": "AppInformation", "responses": { "200": { - "$ref": "#/responses/InfoResponse" + "$ref": "#/responses/AppInfoResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" } } @@ -62,10 +62,11 @@ "message" ], "summary": "Get message summary", - "operationId": "Message", + "operationId": "GetMessageParams", "parameters": [ { "type": "string", + "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -79,15 +80,18 @@ "$ref": "#/definitions/Message" } }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" + }, + "404": { + "$ref": "#/responses/NotFoundResponse" } } } }, "/api/v1/message/{ID}/headers": { "get": { - "description": "Returns the message headers as an array.\n\nThe ID can be set to `latest` to return the latest message headers.", + "description": "Returns the message headers as an array. Note that header keys are returned alphabetically.\n\nThe ID can be set to `latest` to return the latest message headers.", "produces": [ "application/json" ], @@ -99,10 +103,11 @@ "message" ], "summary": "Get message headers", - "operationId": "Headers", + "operationId": "GetHeadersParams", "parameters": [ { "type": "string", + "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -111,20 +116,23 @@ ], "responses": { "200": { - "description": "MessageHeaders", + "description": "MessageHeadersResponse", "schema": { - "$ref": "#/definitions/MessageHeaders" + "$ref": "#/definitions/MessageHeadersResponse" } }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" + }, + "404": { + "$ref": "#/responses/NotFoundResponse" } } } }, "/api/v1/message/{ID}/html-check": { "get": { - "description": "Returns the summary of the message HTML checker.", + "description": "Returns the summary of the message HTML checker.\n\nThe ID can be set to `latest` to return the latest message.", "produces": [ "application/json" ], @@ -136,10 +144,11 @@ "Other" ], "summary": "HTML check", - "operationId": "HTMLCheck", + "operationId": "HTMLCheckParams", "parameters": [ { "type": "string", + "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -153,15 +162,18 @@ "$ref": "#/definitions/HTMLCheckResponse" } }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" + }, + "404": { + "$ref": "#/responses/NotFoundResponse" } } } }, "/api/v1/message/{ID}/link-check": { "get": { - "description": "Returns the summary of the message Link checker.", + "description": "Returns the summary of the message Link checker.\n\nThe ID can be set to `latest` to return the latest message.", "produces": [ "application/json" ], @@ -173,10 +185,11 @@ "Other" ], "summary": "Link check", - "operationId": "LinkCheck", + "operationId": "LinkCheckParams", "parameters": [ { "type": "string", + "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -185,6 +198,7 @@ { "type": "string", "default": "false", + "example": "false", "x-go-name": "Follow", "description": "Follow redirects", "name": "follow", @@ -198,15 +212,18 @@ "$ref": "#/definitions/LinkCheckResponse" } }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" + }, + "404": { + "$ref": "#/responses/NotFoundResponse" } } } }, "/api/v1/message/{ID}/part/{PartID}": { "get": { - "description": "This will return the attachment part using the appropriate Content-Type.", + "description": "This will return the attachment part using the appropriate Content-Type.\n\nThe ID can be set to `latest` to reference the latest message.", "produces": [ "application/*", "image/*", @@ -220,17 +237,19 @@ "message" ], "summary": "Get message attachment", - "operationId": "Attachment", + "operationId": "AttachmentParams", "parameters": [ { "type": "string", - "description": "Message database ID", + "example": "4oRBnPtCXgAqZniRhzLNmS", + "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", "required": true }, { "type": "string", + "example": "2", "description": "Attachment part ID", "name": "PartID", "in": "path", @@ -241,15 +260,18 @@ "200": { "$ref": "#/responses/BinaryResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" + }, + "404": { + "$ref": "#/responses/NotFoundResponse" } } } }, "/api/v1/message/{ID}/part/{PartID}/thumb": { "get": { - "description": "This will return a cropped 180x120 JPEG thumbnail of an image attachment.\nIf the image is smaller than 180x120 then the image is padded. If the attachment is not an image then a blank image is returned.", + "description": "This will return a cropped 180x120 JPEG thumbnail of an image attachment.\nIf the image is smaller than 180x120 then the image is padded. If the attachment is not an image then a blank image is returned.\n\nThe ID can be set to `latest` to return the latest message.", "produces": [ "image/jpeg" ], @@ -261,17 +283,19 @@ "message" ], "summary": "Get an attachment image thumbnail", - "operationId": "Thumbnail", + "operationId": "ThumbnailParams", "parameters": [ { "type": "string", - "description": "Database ID", + "example": "4oRBnPtCXgAqZniRhzLNmS", + "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", "required": true }, { "type": "string", + "example": "2", "description": "Attachment part ID", "name": "PartID", "in": "path", @@ -282,7 +306,7 @@ "200": { "$ref": "#/responses/BinaryResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" } } @@ -302,10 +326,11 @@ "message" ], "summary": "Get message source", - "operationId": "Raw", + "operationId": "DownloadRawParams", "parameters": [ { "type": "string", + "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -316,15 +341,18 @@ "200": { "$ref": "#/responses/TextResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" + }, + "404": { + "$ref": "#/responses/NotFoundResponse" } } } }, "/api/v1/message/{ID}/release": { "post": { - "description": "Release a message via a pre-configured external SMTP server. This is only enabled if message relaying has been configured.", + "description": "Release a message via a pre-configured external SMTP server. This is only enabled if message relaying has been configured.\n\nThe ID can be set to `latest` to reference the latest message.", "consumes": [ "application/json" ], @@ -339,10 +367,11 @@ "message" ], "summary": "Release message", - "operationId": "ReleaseMessage", + "operationId": "ReleaseMessageParams", "parameters": [ { "type": "string", + "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID", "name": "ID", "in": "path", @@ -352,7 +381,23 @@ "name": "Body", "in": "body", "schema": { - "$ref": "#/definitions/releaseMessageRequestBody" + "type": "object", + "required": [ + "To" + ], + "properties": { + "To": { + "description": "Array of email addresses to relay the message to", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "user1@example.com", + "user2@example.com" + ] + } + } } } ], @@ -360,15 +405,18 @@ "200": { "$ref": "#/responses/OKResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" + }, + "404": { + "$ref": "#/responses/NotFoundResponse" } } } }, "/api/v1/message/{ID}/sa-check": { "get": { - "description": "Returns the SpamAssassin summary (if enabled) of the message.", + "description": "Returns the SpamAssassin summary (if enabled) of the message.\n\nThe ID can be set to `latest` to return the latest message.", "produces": [ "application/json" ], @@ -380,10 +428,11 @@ "Other" ], "summary": "SpamAssassin check", - "operationId": "SpamAssassinCheck", + "operationId": "SpamAssassinCheckParams", "parameters": [ { "type": "string", + "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -397,8 +446,11 @@ "$ref": "#/definitions/SpamAssassinResponse" } }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" + }, + "404": { + "$ref": "#/responses/NotFoundResponse" } } } @@ -417,19 +469,25 @@ "messages" ], "summary": "List messages", - "operationId": "GetMessages", + "operationId": "GetMessagesParams", "parameters": [ { "type": "integer", + "format": "int64", "default": 0, + "example": 100, + "x-go-name": "Start", "description": "Pagination offset", "name": "start", "in": "query" }, { "type": "integer", + "format": "int64", "default": 50, - "description": "Limit results", + "example": 50, + "x-go-name": "Limit", + "description": "Limit number of results", "name": "limit", "in": "query" } @@ -438,7 +496,7 @@ "200": { "$ref": "#/responses/MessagesSummaryResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" } } @@ -459,13 +517,32 @@ "messages" ], "summary": "Set read status", - "operationId": "SetReadStatus", + "operationId": "SetReadStatusParams", "parameters": [ { "name": "Body", "in": "body", "schema": { - "$ref": "#/definitions/setReadStatusRequestBody" + "type": "object", + "properties": { + "IDs": { + "description": "Array of message database IDs", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "4oRBnPtCXgAqZniRhzLNmS", + "hXayS6wnCgNnt6aFTvmOF6" + ] + }, + "Read": { + "description": "Read status", + "type": "boolean", + "default": false, + "example": true + } + } } } ], @@ -473,7 +550,7 @@ "200": { "$ref": "#/responses/OKResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" } } @@ -494,13 +571,27 @@ "messages" ], "summary": "Delete messages", - "operationId": "DeleteMessages", + "operationId": "DeleteMessagesParams", "parameters": [ { + "description": "Delete request", "name": "Body", "in": "body", "schema": { - "$ref": "#/definitions/DeleteRequest" + "type": "object", + "properties": { + "IDs": { + "description": "Array of message database IDs", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "4oRBnPtCXgAqZniRhzLNmS", + "hXayS6wnCgNnt6aFTvmOF6" + ] + } + } } } ], @@ -508,7 +599,7 @@ "200": { "$ref": "#/responses/OKResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" } } @@ -528,32 +619,37 @@ "messages" ], "summary": "Search messages", - "operationId": "MessagesSummary", + "operationId": "SearchParams", "parameters": [ { "type": "string", + "example": "search words", + "x-go-name": "Query", "description": "Search query", "name": "query", "in": "query", "required": true }, { - "type": "integer", - "default": 0, + "type": "string", + "example": "100", + "x-go-name": "Start", "description": "Pagination offset", "name": "start", "in": "query" }, { - "type": "integer", - "default": 50, + "type": "string", + "example": "50", + "x-go-name": "Limit", "description": "Limit results", "name": "limit", "in": "query" }, { "type": "string", - "description": "[Timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) used specifically for `before:` \u0026 `after:` searches (eg: \"Pacific/Auckland\").", + "x-go-name": "TZ", + "description": "[Timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) used only for `before:` \u0026 `after:` searches (eg: \"Pacific/Auckland\").", "name": "tz", "in": "query" } @@ -562,7 +658,7 @@ "200": { "$ref": "#/responses/MessagesSummaryResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" } } @@ -580,10 +676,12 @@ "messages" ], "summary": "Delete messages by search", - "operationId": "DeleteSearch", + "operationId": "DeleteSearchParams", "parameters": [ { "type": "string", + "example": "search words", + "x-go-name": "Query", "description": "Search query", "name": "query", "in": "query", @@ -591,7 +689,8 @@ }, { "type": "string", - "description": "[Timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) used specifically for `before:` \u0026 `after:` searches (eg: \"Pacific/Auckland\").", + "x-go-name": "TZ", + "description": "[Timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) used only for `before:` \u0026 `after:` searches (eg: \"Pacific/Auckland\").", "name": "tz", "in": "query" } @@ -600,7 +699,7 @@ "200": { "$ref": "#/responses/OKResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" } } @@ -623,7 +722,7 @@ "message" ], "summary": "Send a message", - "operationId": "SendMessage", + "operationId": "SendMessageParams", "parameters": [ { "name": "Body", @@ -637,7 +736,7 @@ "200": { "$ref": "#/responses/sendMessageResponse" }, - "default": { + "400": { "$ref": "#/responses/jsonErrorResponse" } } @@ -662,7 +761,7 @@ "200": { "$ref": "#/responses/ArrayResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" } } @@ -683,13 +782,41 @@ "tags" ], "summary": "Set message tags", - "operationId": "SetTags", + "operationId": "SetTagsParams", "parameters": [ { "name": "Body", "in": "body", "schema": { - "$ref": "#/definitions/setTagsRequestBody" + "type": "object", + "required": [ + "Tags", + "IDs" + ], + "properties": { + "IDs": { + "description": "Array of message database IDs", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "4oRBnPtCXgAqZniRhzLNmS", + "hXayS6wnCgNnt6aFTvmOF6" + ] + }, + "Tags": { + "description": "Array of tag names to set", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "Tag 1", + "Tag 2" + ] + } + } } } ], @@ -697,15 +824,15 @@ "200": { "$ref": "#/responses/OKResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" } } } }, - "/api/v1/tags/{tag}": { + "/api/v1/tags/{Tag}": { "put": { - "description": "Renames a tag.", + "description": "Renames an existing tag.", "produces": [ "text/plain" ], @@ -717,34 +844,45 @@ "tags" ], "summary": "Rename a tag", - "operationId": "RenameTag", + "operationId": "RenameTagParams", "parameters": [ - { - "name": "Body", - "in": "body", - "schema": { - "$ref": "#/definitions/renameTagRequestBody" - } - }, { "type": "string", + "example": "Old name", "description": "The url-encoded tag name to rename", - "name": "tag", + "name": "Tag", "in": "path", "required": true + }, + { + "name": "Body", + "in": "body", + "schema": { + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "New name", + "type": "string", + "example": "New name" + } + } + } } ], "responses": { "200": { "$ref": "#/responses/OKResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" } } }, "delete": { - "description": "Deletes a tag. This will not delete any messages with this tag.", + "description": "Deletes a tag. This will not delete any messages with the tag, but will remove the tag from any messages containing the tag.", "produces": [ "text/plain" ], @@ -756,12 +894,13 @@ "tags" ], "summary": "Delete a tag", - "operationId": "DeleteTag", + "operationId": "DeleteTagParams", "parameters": [ { "type": "string", + "example": "My tag", "description": "The url-encoded tag name to delete", - "name": "tag", + "name": "Tag", "in": "path", "required": true } @@ -770,7 +909,7 @@ "200": { "$ref": "#/responses/OKResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" } } @@ -795,7 +934,7 @@ "200": { "$ref": "#/responses/WebUIConfigurationResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" } } @@ -815,11 +954,12 @@ "testing" ], "summary": "Render message HTML part", - "operationId": "GetMessageHTML", + "operationId": "GetMessageHTMLParams", "parameters": [ { "type": "string", - "description": "Database ID or latest", + "example": "4oRBnPtCXgAqZniRhzLNmS", + "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", "required": true @@ -829,8 +969,11 @@ "200": { "$ref": "#/responses/HTMLResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" + }, + "404": { + "$ref": "#/responses/NotFoundResponse" } } } @@ -849,11 +992,12 @@ "testing" ], "summary": "Render message text part", - "operationId": "GetMessageText", + "operationId": "GetMessageTextParams", "parameters": [ { "type": "string", - "description": "Database ID or latest", + "example": "4oRBnPtCXgAqZniRhzLNmS", + "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", "required": true @@ -863,8 +1007,11 @@ "200": { "$ref": "#/responses/TextResponse" }, - "default": { + "400": { "$ref": "#/responses/ErrorResponse" + }, + "404": { + "$ref": "#/responses/NotFoundResponse" } } } @@ -996,25 +1143,6 @@ }, "x-go-package": "github.com/axllent/mailpit/internal/storage" }, - "DeleteRequest": { - "description": "Delete request", - "type": "object", - "properties": { - "IDs": { - "description": "Array of message database IDs", - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "5dec4247-812e-4b77-9101-e25ad406e9ea", - "8ac66bbc-2d9a-4c41-ad99-00aa75fa674e" - ] - } - }, - "x-go-name": "deleteMessagesRequestBody", - "x-go-package": "github.com/axllent/mailpit/server/apiv1" - }, "HTMLCheckResponse": { "description": "Response represents the HTML check response struct", "type": "object", @@ -1337,7 +1465,7 @@ }, "x-go-package": "github.com/axllent/mailpit/internal/storage" }, - "MessageHeaders": { + "MessageHeadersResponse": { "description": "Message headers", "type": "object", "additionalProperties": { @@ -1503,7 +1631,7 @@ "ID": { "description": "Database ID", "type": "string", - "example": "iAfZVVe2UQFNSG5BAjgYwa" + "example": "iAfZVVe2UQfNSG5BAjgYwa" } }, "x-go-package": "github.com/axllent/mailpit/server/apiv1" @@ -1745,102 +1873,15 @@ }, "x-go-name": "webUIConfiguration", "x-go-package": "github.com/axllent/mailpit/server/apiv1" - }, - "releaseMessageRequestBody": { - "description": "Release request", - "type": "object", - "required": [ - "To" - ], - "properties": { - "To": { - "description": "Array of email addresses to relay the message to", - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "user1@example.com", - "user2@example.com" - ] - } - }, - "x-go-package": "github.com/axllent/mailpit/server/apiv1" - }, - "renameTagRequestBody": { - "description": "Rename tag request", - "type": "object", - "required": [ - "Name" - ], - "properties": { - "Name": { - "description": "New name", - "type": "string", - "example": "New name" - } - }, - "x-go-package": "github.com/axllent/mailpit/server/apiv1" - }, - "setReadStatusRequestBody": { - "description": "Set read status request", - "type": "object", - "properties": { - "IDs": { - "description": "Array of message database IDs", - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "5dec4247-812e-4b77-9101-e25ad406e9ea", - "8ac66bbc-2d9a-4c41-ad99-00aa75fa674e" - ] - }, - "Read": { - "description": "Read status", - "type": "boolean", - "default": false, - "example": true - } - }, - "x-go-package": "github.com/axllent/mailpit/server/apiv1" - }, - "setTagsRequestBody": { - "description": "Set tags request", - "type": "object", - "required": [ - "Tags", - "IDs" - ], - "properties": { - "IDs": { - "description": "Array of message database IDs", - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "5dec4247-812e-4b77-9101-e25ad406e9ea", - "8ac66bbc-2d9a-4c41-ad99-00aa75fa674e" - ] - }, - "Tags": { - "description": "Array of tag names to set", - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "Tag 1", - "Tag 2" - ] - } - }, - "x-go-package": "github.com/axllent/mailpit/server/apiv1" } }, "responses": { + "AppInfoResponse": { + "description": "Application information", + "schema": { + "$ref": "#/definitions/AppInformation" + } + }, "ArrayResponse": { "description": "Plain JSON array response", "schema": { @@ -1851,13 +1892,13 @@ } }, "BinaryResponse": { - "description": "Binary data response inherits the attachment's content type.", + "description": "Binary data response which inherits the attachment's content type.", "schema": { "type": "string" } }, "ErrorResponse": { - "description": "HTTP error response will return with a \u003e= 400 response code", + "description": "Server error will return with a 400 status code\nwith the error message in the body", "schema": { "type": "string" } @@ -1868,16 +1909,16 @@ "type": "string" } }, - "InfoResponse": { - "description": "Application information", + "MessagesSummaryResponse": { + "description": "Summary of messages", "schema": { - "$ref": "#/definitions/AppInformation" + "$ref": "#/definitions/MessagesSummary" } }, - "MessagesSummaryResponse": { - "description": "Message summary", + "NotFoundResponse": { + "description": "Not found error will return a 404 status code", "schema": { - "$ref": "#/definitions/MessagesSummary" + "type": "string" } }, "OKResponse": { @@ -1893,7 +1934,7 @@ } }, "WebUIConfigurationResponse": { - "description": "Web UI configuration", + "description": "Web UI configuration response", "schema": { "$ref": "#/definitions/WebUIConfiguration" } From a7fac05209ee0be6b7ec466fc91d02c99424e86c Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Sat, 9 Nov 2024 16:51:23 +1300 Subject: [PATCH 2/8] Remove swagger parameter examples (invalid format) --- server/apiv1/message.go | 5 ----- server/apiv1/messages.go | 6 ------ server/apiv1/other.go | 4 ---- server/apiv1/release.go | 1 - server/apiv1/tags.go | 2 -- server/apiv1/testing.go | 2 -- server/apiv1/thumbnails.go | 2 -- server/ui/api/v1/swagger.json | 22 ---------------------- 8 files changed, 44 deletions(-) diff --git a/server/apiv1/message.go b/server/apiv1/message.go index a8737c4028..36e3e7f020 100644 --- a/server/apiv1/message.go +++ b/server/apiv1/message.go @@ -17,7 +17,6 @@ type getMessageParams struct { // // in: path // required: true - // example: 4oRBnPtCXgAqZniRhzLNmS ID string } @@ -73,7 +72,6 @@ type getHeadersParams struct { // // in: path // required: true - // example: 4oRBnPtCXgAqZniRhzLNmS ID string } @@ -140,14 +138,12 @@ type attachmentParams struct { // // in: path // required: true - // example: 4oRBnPtCXgAqZniRhzLNmS ID string // Attachment part ID // // in: path // required: true - // example: 2 PartID string } @@ -199,7 +195,6 @@ type downloadRawParams struct { // // in: path // required: true - // example: 4oRBnPtCXgAqZniRhzLNmS ID string } diff --git a/server/apiv1/messages.go b/server/apiv1/messages.go index a837cbd6c5..ff071a1340 100644 --- a/server/apiv1/messages.go +++ b/server/apiv1/messages.go @@ -17,7 +17,6 @@ type getMessagesParams struct { // required: false // default: 0 // type: integer - // example: 100 Start int `json:"start"` // Limit number of results @@ -27,7 +26,6 @@ type getMessagesParams struct { // required: false // default: 50 // type: integer - // example: 50 Limit int `json:"limit"` } @@ -261,7 +259,6 @@ type searchParams struct { // in: query // required: true // type: string - // example: search words Query string `json:"query"` // Pagination offset @@ -269,7 +266,6 @@ type searchParams struct { // in: query // required: false // type integer - // example: 100 Start string `json:"start"` // Limit results @@ -277,7 +273,6 @@ type searchParams struct { // in: query // required: false // type integer - // example: 50 Limit string `json:"limit"` // [Timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) used only for `before:` & `after:` searches (eg: "Pacific/Auckland"). @@ -344,7 +339,6 @@ type deleteSearchParams struct { // in: query // required: true // type: string - // example: search words Query string `json:"query"` // [Timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) used only for `before:` & `after:` searches (eg: "Pacific/Auckland"). diff --git a/server/apiv1/other.go b/server/apiv1/other.go index e8e24a0f87..2ca13bf4b3 100644 --- a/server/apiv1/other.go +++ b/server/apiv1/other.go @@ -22,7 +22,6 @@ type htmlCheckParams struct { // in: path // description: Message database ID or "latest" // required: true - // example: 4oRBnPtCXgAqZniRhzLNmS ID string } @@ -100,7 +99,6 @@ type linkCheckParams struct { // // in: path // required: true - // example: 4oRBnPtCXgAqZniRhzLNmS ID string // Follow redirects @@ -108,7 +106,6 @@ type linkCheckParams struct { // in: query // required: false // default: false - // example: false Follow string `json:"follow"` } @@ -179,7 +176,6 @@ type spamAssassinCheckParams struct { // // in: path // required: true - // example: 4oRBnPtCXgAqZniRhzLNmS ID string } diff --git a/server/apiv1/release.go b/server/apiv1/release.go index b0e76b8f80..c125ede62a 100644 --- a/server/apiv1/release.go +++ b/server/apiv1/release.go @@ -24,7 +24,6 @@ type releaseMessageParams struct { // in: path // description: Message database ID // required: true - // example: 4oRBnPtCXgAqZniRhzLNmS ID string // in: body diff --git a/server/apiv1/tags.go b/server/apiv1/tags.go index 8ba4c9e2ea..cd58c64425 100644 --- a/server/apiv1/tags.go +++ b/server/apiv1/tags.go @@ -105,7 +105,6 @@ type renameTagParams struct { // in: path // required: true // type: string - // example: Old name Tag string // in: body @@ -168,7 +167,6 @@ type deleteTagParams struct { // // in: path // required: true - // example: My tag Tag string } diff --git a/server/apiv1/testing.go b/server/apiv1/testing.go index 987bf072f9..7c005d5f9e 100644 --- a/server/apiv1/testing.go +++ b/server/apiv1/testing.go @@ -17,7 +17,6 @@ type getMessageHTMLParams struct { // // in: path // required: true - // example: 4oRBnPtCXgAqZniRhzLNmS ID string } @@ -80,7 +79,6 @@ type getMessageTextParams struct { // // in: path // required: true - // example: 4oRBnPtCXgAqZniRhzLNmS ID string } diff --git a/server/apiv1/thumbnails.go b/server/apiv1/thumbnails.go index ea5526ed04..24f3b8f27b 100644 --- a/server/apiv1/thumbnails.go +++ b/server/apiv1/thumbnails.go @@ -28,14 +28,12 @@ type thumbnailParams struct { // // in: path // required: true - // example: 4oRBnPtCXgAqZniRhzLNmS ID string // Attachment part ID // // in: path // required: true - // example: 2 PartID string } diff --git a/server/ui/api/v1/swagger.json b/server/ui/api/v1/swagger.json index f27f275253..d8444c3ab9 100644 --- a/server/ui/api/v1/swagger.json +++ b/server/ui/api/v1/swagger.json @@ -66,7 +66,6 @@ "parameters": [ { "type": "string", - "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -107,7 +106,6 @@ "parameters": [ { "type": "string", - "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -148,7 +146,6 @@ "parameters": [ { "type": "string", - "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -189,7 +186,6 @@ "parameters": [ { "type": "string", - "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -198,7 +194,6 @@ { "type": "string", "default": "false", - "example": "false", "x-go-name": "Follow", "description": "Follow redirects", "name": "follow", @@ -241,7 +236,6 @@ "parameters": [ { "type": "string", - "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -249,7 +243,6 @@ }, { "type": "string", - "example": "2", "description": "Attachment part ID", "name": "PartID", "in": "path", @@ -287,7 +280,6 @@ "parameters": [ { "type": "string", - "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -295,7 +287,6 @@ }, { "type": "string", - "example": "2", "description": "Attachment part ID", "name": "PartID", "in": "path", @@ -330,7 +321,6 @@ "parameters": [ { "type": "string", - "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -371,7 +361,6 @@ "parameters": [ { "type": "string", - "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID", "name": "ID", "in": "path", @@ -432,7 +421,6 @@ "parameters": [ { "type": "string", - "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -475,7 +463,6 @@ "type": "integer", "format": "int64", "default": 0, - "example": 100, "x-go-name": "Start", "description": "Pagination offset", "name": "start", @@ -485,7 +472,6 @@ "type": "integer", "format": "int64", "default": 50, - "example": 50, "x-go-name": "Limit", "description": "Limit number of results", "name": "limit", @@ -623,7 +609,6 @@ "parameters": [ { "type": "string", - "example": "search words", "x-go-name": "Query", "description": "Search query", "name": "query", @@ -632,7 +617,6 @@ }, { "type": "string", - "example": "100", "x-go-name": "Start", "description": "Pagination offset", "name": "start", @@ -640,7 +624,6 @@ }, { "type": "string", - "example": "50", "x-go-name": "Limit", "description": "Limit results", "name": "limit", @@ -680,7 +663,6 @@ "parameters": [ { "type": "string", - "example": "search words", "x-go-name": "Query", "description": "Search query", "name": "query", @@ -848,7 +830,6 @@ "parameters": [ { "type": "string", - "example": "Old name", "description": "The url-encoded tag name to rename", "name": "Tag", "in": "path", @@ -898,7 +879,6 @@ "parameters": [ { "type": "string", - "example": "My tag", "description": "The url-encoded tag name to delete", "name": "Tag", "in": "path", @@ -958,7 +938,6 @@ "parameters": [ { "type": "string", - "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", @@ -996,7 +975,6 @@ "parameters": [ { "type": "string", - "example": "4oRBnPtCXgAqZniRhzLNmS", "description": "Message database ID or \"latest\"", "name": "ID", "in": "path", From bc7d7f901d77f1d8e857b7a0a4c7783f3452713d Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Sun, 10 Nov 2024 07:57:45 +1300 Subject: [PATCH 3/8] Chore: Upgrade Alpine packages on Docker build --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index c104609444..604e4581a5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ COPY . /app WORKDIR /app -RUN apk add --no-cache git npm && \ +RUN apk upgrade && apk add git npm && \ npm install && npm run package && \ CGO_ENABLED=0 go build -ldflags "-s -w -X github.com/axllent/mailpit/config.Version=${VERSION}" -o /mailpit @@ -21,7 +21,7 @@ LABEL org.opencontainers.image.title="Mailpit" \ COPY --from=builder /mailpit /mailpit -RUN apk add --no-cache tzdata +RUN apk upgrade --no-cache && apk add --no-cache tzdata EXPOSE 1025/tcp 1110/tcp 8025/tcp From 0b11ce26abb435aafaa51638501f3521adea8556 Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Sat, 16 Nov 2024 14:54:43 +1300 Subject: [PATCH 4/8] Chore: Update node dependencies --- package-lock.json | 1640 ++++++++++++++++++++++++++++++--------------- 1 file changed, 1104 insertions(+), 536 deletions(-) diff --git a/package-lock.json b/package-lock.json index 14aba9aa99..118f628ac2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,32 +39,36 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/@apitools/openapi-parser/-/openapi-parser-0.0.33.tgz", "integrity": "sha512-on8oZKkRPrPUvJmmQGpLtlcthNrREH5OjDUK2ZczKuFPOx8Tkn9mzyPc7DTQ7O0JQolaZIwymFmBaajglI6LHA==", + "license": "MIT", "dependencies": { "swagger-client": "^3.29.3" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", - "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", + "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==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", - "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.8" + "@babel/types": "^7.26.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -74,9 +78,10 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.6.tgz", - "integrity": "sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz", + "integrity": "sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==", + "license": "MIT", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -86,23 +91,24 @@ } }, "node_modules/@babel/types": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", - "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@bufbuild/protobuf": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", - "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.2.2.tgz", + "integrity": "sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A==", "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)", "peer": true }, "node_modules/@esbuild/aix-ppc64": { @@ -113,6 +119,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -129,6 +136,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -145,6 +153,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -161,6 +170,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -177,6 +187,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -193,6 +204,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -209,6 +221,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -225,6 +238,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -241,6 +255,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -257,6 +272,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -273,6 +289,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -289,6 +306,7 @@ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -305,6 +323,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -321,6 +340,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -337,6 +357,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -353,6 +374,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -369,6 +391,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -385,6 +408,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -401,6 +425,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -417,6 +442,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -433,6 +459,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -449,6 +476,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -465,6 +493,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -481,6 +510,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -492,37 +522,359 @@ "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/@lit-labs/ssr-dom-shim": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz", - "integrity": "sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==" + "integrity": "sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==", + "license": "BSD-3-Clause" }, "node_modules/@lit/reactive-element": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "license": "BSD-3-Clause", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.2.0" } }, + "node_modules/@parcel/watcher": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz", + "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.0", + "@parcel/watcher-darwin-arm64": "2.5.0", + "@parcel/watcher-darwin-x64": "2.5.0", + "@parcel/watcher-freebsd-x64": "2.5.0", + "@parcel/watcher-linux-arm-glibc": "2.5.0", + "@parcel/watcher-linux-arm-musl": "2.5.0", + "@parcel/watcher-linux-arm64-glibc": "2.5.0", + "@parcel/watcher-linux-arm64-musl": "2.5.0", + "@parcel/watcher-linux-x64-glibc": "2.5.0", + "@parcel/watcher-linux-x64-musl": "2.5.0", + "@parcel/watcher-win32-arm64": "2.5.0", + "@parcel/watcher-win32-ia32": "2.5.0", + "@parcel/watcher-win32-x64": "2.5.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz", + "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz", + "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz", + "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz", + "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz", + "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz", + "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz", + "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz", + "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz", + "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz", + "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz", + "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz", + "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz", + "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, + "node_modules/@scarf/scarf": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", + "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", + "hasInstallScript": true, + "license": "Apache-2.0" + }, "node_modules/@swagger-api/apidom-ast": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.0-alpha.9.tgz", - "integrity": "sha512-SAOQrFSFwgDiI4QSIPDwAIJEb4Za+8bu45sNojgV3RMtCz+n4Agw66iqGsDib5YSI/Cg1h4AKFovT3iWdfGWfw==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.0-alpha.10.tgz", + "integrity": "sha512-f4Y9t1oBlnsvMoLPCykzn5LRrmARiaPzorocQkMFTkYUPb7RKA4zCuWi67hH4iDVsVvkPutgew19XyJiI3OF9Q==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", + "@swagger-api/apidom-error": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -530,13 +882,14 @@ } }, "node_modules/@swagger-api/apidom-core": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.0-alpha.9.tgz", - "integrity": "sha512-vGl8BWRf6ODl39fxElcIOjRE2QG5AJhn8tTNMqjjHB/2WppNBuxOVStYZeVJoWfK03OPK8v4Fp/TAcaP9+R7DQ==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.0-alpha.10.tgz", + "integrity": "sha512-4uXIN8cLigD1SZUDhmrEwW+1zbrB6bbD9Hlpo/BF74t/Nh4ZoEOUXv1oR/8QXB9AsIkdO65FdDHyaPzyGbjMiQ==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", + "@swagger-api/apidom-ast": "^1.0.0-alpha.10", + "@swagger-api/apidom-error": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "minim": "~0.23.8", "ramda": "~0.30.0", @@ -546,36 +899,39 @@ } }, "node_modules/@swagger-api/apidom-error": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.0-alpha.9.tgz", - "integrity": "sha512-FU/2sFSgsICB9HYFELJ79caRpXXzlAV41QTHsAM46WfRehbzZUQpOBQm4jRi3qJGSa/Jk+mQ7Vt8HLRFMpJFfg==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.0-alpha.10.tgz", + "integrity": "sha512-ydHNOKTdp9jaeW2yBvdZazXNCVFPbzC2Dy3dtDWU3MwUtSryoefT9OUQFWL7NxzChFRneNhBEcVl4NRocitXeA==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7" } }, "node_modules/@swagger-api/apidom-json-pointer": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.0-alpha.9.tgz", - "integrity": "sha512-/W8Ktbgbs29zdhed6KHTFk0qmuIRbvEFi8wu2MHGQ5UT4i99Bdu2OyUiayhnpejWztfQxDgL08pjrQPEwgY8Yg==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.0-alpha.10.tgz", + "integrity": "sha512-Xo0v4Jxp0ZiAm+OOL2PSLyjiw5OAkCMxI0nN9+vOw1/mfXcC+tdb30QQ9WNtF7O9LExjznfFID/NnDEYqBRDwA==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-error": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-ns-api-design-systems": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.0-alpha.9.tgz", - "integrity": "sha512-aduC2vbwGgn6ia9IkKpqBYBaKyIDGM/80M3oU3DFgaYIIwynzuwVpN1TkBOLIFy3mAzkWoYKUS0jdZJhMy/6Ug==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.0-alpha.10.tgz", + "integrity": "sha512-0i4KKNboHi7F8Nra2WNHDl9aOndyTcfKiBfdzSw3j+H5wYAHldeKg7zppqj5rVfwZL9pB5r7eFYZlowwGtmlLg==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-error": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -583,14 +939,15 @@ } }, "node_modules/@swagger-api/apidom-ns-asyncapi-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-hZjxXJgMt517ADnAauWJh01k7WNRwkbWT5p6b7AXF2H3tl549A2hhLnIg3BBSE3GwB3Nv25GyrI3aA/1dFVC8A==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.0-alpha.10.tgz", + "integrity": "sha512-d1LLJ/9LQaT/4jJudFhy3xhpjdTA3pVwBBUqXGPgW2Fp21auTYJMBM9J91wvVUXMUQiVg95DohkCb6TNUYzqLw==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -598,13 +955,14 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-4": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.0-alpha.9.tgz", - "integrity": "sha512-OfX4UBb08C0xD5+F80dQAM2yt5lXxcURWkVEeCwxz7i23BB3nNEbnZXNV91Qo9eaJflPh8dO9iiHQxvfw5IgSg==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.0-alpha.10.tgz", + "integrity": "sha512-sNj4pAmxEfFYIqRcP9A7/gjNMaa7nu1pWT6gTMXtYROyo4XrChc3wit8F76WJEFIiEPLrPs2SrnnA5GIHM7EnA==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^1.0.0-alpha.9", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", + "@swagger-api/apidom-ast": "^1.0.0-alpha.10", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -612,15 +970,16 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-6": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.0-alpha.9.tgz", - "integrity": "sha512-qzUVRSSrnlYGMhK6w57o/RboNvy1FO0iFgEnTk56dD4wN49JRNuFqKI18IgXc1W2r9tTTG70nG1khe4cPE8TNg==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.0-alpha.10.tgz", + "integrity": "sha512-Okwi0ikBSIBhQwMvsoe1+8Ff55cwwp9hu88N/sTDBxI7lyX0xCGAlSrJ9tx4Z/uOn5X+IL9HCRuNlbFt4Bvi2w==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-error": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -628,15 +987,16 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-7": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.0-alpha.9.tgz", - "integrity": "sha512-Zml8Z8VCckdFjvTogaec1dabd85hg1+xZDseWcCuD0tYkaTY/sZ8zzI0dz6/4HsKCb58qjiWSa0w60N8Syr6WQ==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.0-alpha.10.tgz", + "integrity": "sha512-Y5p+iA1k8HR5d5cS1jtoADPKJLVg5czaHrs39UcMoMPhINqgqKGd2sYKtX7DnglcLARXe06pv0Qs9ERwCd5ayQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-error": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -644,15 +1004,16 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-WUZxt7Gs7P4EQsGtoD6cKAjf0uDJhkUxsIW9Bb4EAgO6tdp7LlXhbJ0fJ2QycCLY717SfJbvGLfhuSfTYo4Iow==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.0-alpha.10.tgz", + "integrity": "sha512-hVhpXIG5CXSqeLo7+d5VwN8b9X0BM8yMZCEIxVAu5050GlcHC3CeJVpy+2DEBkbvR9tzc2HfPGMpWyQpgnimhQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-error": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -660,14 +1021,15 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-3-0": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.0-alpha.9.tgz", - "integrity": "sha512-7ra5uoZGrfCn1LabfJLueChPcYXyg24//LCYBtjTstyueqd5Vp7JCPeP5NnJSAaqVAP47r8ygceBPoxNp9k1EQ==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.0-alpha.10.tgz", + "integrity": "sha512-zF2tPojJBGmQ/GuX+QJ0BhBWmnC+ET8Zah9utKpYWFFjqG/Wl6YzWpyrEflXpfGFzDFgoo+R+/3QvzScbPssqg==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-error": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -675,15 +1037,16 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-3-1": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.0-alpha.9.tgz", - "integrity": "sha512-nQOwNQgf0C8EVjf2loAAl4ifRuVOdcqycvXUdcTpsUfHN3fbndR8IKpb26mQNmnACmqgmX+LkbMdW9b+K6089g==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.0-alpha.10.tgz", + "integrity": "sha512-/7o+/Z2LelLcOdDSeY8O467Tjmr4yp0c8T4l13+zoQlaJFCzoeJqUUzP/dyqLPxqSeSMOez7uXnYpii6F8uYcA==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^1.0.0-alpha.9", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-json-pointer": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.9", + "@swagger-api/apidom-ast": "^1.0.0-alpha.10", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-json-pointer": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -691,14 +1054,15 @@ } }, "node_modules/@swagger-api/apidom-ns-workflows-1": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-workflows-1/-/apidom-ns-workflows-1-1.0.0-alpha.9.tgz", - "integrity": "sha512-yKo0p8OkQmDib93Kt1yqWmI7JsD6D9qUHxr/SCuAmNNWny1hxm7cZGoKJwJlGd0uAg84j4vmzWOlG3AsJbnT8g==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-workflows-1/-/apidom-ns-workflows-1-1.0.0-alpha.10.tgz", + "integrity": "sha512-tem8H3DHvQNxUqbiLmepccjAyFffS41Z90ibugsw17xzCNIIr6kDwlhiSSGkl52C+IBqoUlE6kdV0afPr2WuUA==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -706,75 +1070,80 @@ } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.0-alpha.9.tgz", - "integrity": "sha512-xfVMR4HrTzXU0HB4TtxwkNbUIa/cQrPa0BWutJZ0fMYMAtUox2s8GsFYnJfZP52XfpSHFM1VPclivorZqET14g==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.0-alpha.10.tgz", + "integrity": "sha512-8yuL2w3G4zdBxyITLHKSFRwpgl8Rp4/bCR2GTznYKr5wYuN9RVSKAp2sGtuWHnynnpspodswu3AI1BVCLKBj1A==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-alpha.10", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.0-alpha.9.tgz", - "integrity": "sha512-lJZkrhZ8qRTtc5fSLKefCv8j7Xzo8UBfMjpqTJhmETAtU8YfVV2i2znjgxJpm0QwV6FVQqGfK1+ASZQWPLiVcA==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.0-alpha.10.tgz", + "integrity": "sha512-I+/tRdC6CK0GfjZgOaTfpjtehkFW7i1A1ixFOPtrwKA8v3oZ2eUW7dIjDMMC0yTt67j7enHlGTw6o2rZZGnjpA==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-alpha.10", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-65nmKdPzw4C1bmtYn+3zoxXCI6Gnobr0StI9XE0YWiK+lpso7RH3Cgyl1yPZ0DBRVGzP+Fn9FVzmDNulEfR95w==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.0-alpha.10.tgz", + "integrity": "sha512-FX4buMibcnz0rsQKMBUrZM8cS1/s0pi3TV9HAsKPQY1mKssyeUEE/nlp6DBbYM6kNCEdq2ALvnPtZVwEJpxS3A==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-alpha.10", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-RLI4FpVB3vB6mIuT77yrsv5V2LMZ80dW9XpV+Fmbd4Jkdj+ysAFwT38cI4AsUMOxixpTDIXY1oWD7AjvylHhQQ==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.0-alpha.10.tgz", + "integrity": "sha512-JsPYRsaKCecY8UN2AHuHm6X0WgWfys6ypH8UPYic1n3XUfNPkTSOaUY87Vi04wJmy8pQ1F0wHeESY//Zb37aIA==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-alpha.10", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-json": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.0-alpha.9.tgz", - "integrity": "sha512-aOewp8/3zobf/O+5Jx8y7+bX3BPRfRlHIv15qp4YVTsLs6gLISWSzTO9JpWe9cR+AfhpsAalFq4t1LwIkmLk4A==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.0-alpha.10.tgz", + "integrity": "sha512-CTSgLG33GgC3POxLBCzlXyBBUz+EFGe62VICH012RIYDXHDmcr4dPmfHyj85LVJxLh7regQ+SGL4NwqQSxTY3A==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^1.0.0-alpha.9", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", + "@swagger-api/apidom-ast": "^1.0.0-alpha.10", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-error": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -784,135 +1153,144 @@ } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-zgtsAfkplCFusX2P/saqdn10J8P3kQizCXxHLvxd2j0EhMJk2wfu4HYN5Pej/7/qf/OR1QZxqtacwebd4RfpXA==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.0-alpha.10.tgz", + "integrity": "sha512-YtPu2BansaTpW6MrIRJgZpa9V+MLl/DFqC2tHbGSO+u73PdWndONRgqzAAc5pBWR+u1RNgULrCK6sX7uPiFLVg==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-2": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-openapi-2": "^1.0.0-alpha.10", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.0-alpha.9.tgz", - "integrity": "sha512-iPuHf0cAZSUhSv8mB0FnVgatTc26cVYohgqz2cvjoGofdqoh5KKIfxOkWlIhm+qGuBp71CfZUrPYPRsd0dHgeg==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.0-alpha.10.tgz", + "integrity": "sha512-zzZdK+xhj+sVh4z3vZrxdBrDitraD1szJPc3sUC0pukuCz3P7R/u+//6+GLE9UVjUakdbQI2cyKyUOIZX51+/g==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.10", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.0-alpha.9.tgz", - "integrity": "sha512-jwkfO7tzZyyrAgok+O9fKFOv1q/5njMb9DBc3D/ZF3ZLTcnEw8uj4V2HkjKxUweH5k8ip/gc8ueKmO/i7p2fng==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.0-alpha.10.tgz", + "integrity": "sha512-i7HaRnU2kDtvDqM5Yv1sbYZghCeRhiVQEyaIIp59Zhc5SwLS3dSoD/kh0TeuKpaY5Lg0ISIM3SLRDcdaYUsGww==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.10", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-jEIDpjbjwFKXQXS/RHJeA4tthsguLoz+nJPYS3AOLfuSiby5QXsKTxgqHXxG/YJqF1xJbZL+5KcF8UyiDePumw==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.0-alpha.10.tgz", + "integrity": "sha512-QbqCTAvthqhZmFZKf9HBYnVt4kV7konYnauylVFIaE5KAzmZkcb30FtkAwmZfnyW3AURMzZcLfOgJRGHOjYSqA==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-2": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-openapi-2": "^1.0.0-alpha.10", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.0-alpha.9.tgz", - "integrity": "sha512-ieJL8dfIF8fmP3uJRNh/duJa3cCIIv6MzUe6o4uPT/oTDroy4qIATvnq9Dq/gtAv6rcPRpA9VhyghJ1DmjKsZQ==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.0-alpha.10.tgz", + "integrity": "sha512-ajVOqs8lNta7uXkFtU5k1zDJTjwV6Ki3uS+JwBvjuMHsF/i/WIZOmgI4g1Z3yQ1c0QI4dHJskq4WDyp2qW64aw==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.10", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.0-alpha.9.tgz", - "integrity": "sha512-EatIH7PZQSNDsRn9ompc62MYzboY7wAkjfYz+2FzBaSA8Vl5/+740qGQj22tu/xhwW4K72aV2NNL1m47QVF7hA==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.0-alpha.10.tgz", + "integrity": "sha512-ljYmbBFWjIcfN+MJr7JFh6NA/fgyu5gXDI6KUrg/sbWTKdUYP4iNLJPw8VLPBXHnExevjZCt1Ni74mmL4ZfyBg==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.10", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-workflows-json-1": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-json-1/-/apidom-parser-adapter-workflows-json-1-1.0.0-alpha.9.tgz", - "integrity": "sha512-LylC2cQdAmvR7bXqwMwBt6FHTMVGinwIdI8pjl4EbPT9hCVm1rdED53caTYM4gCm+CJGRw20r4gb9vn3+N6RrA==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-json-1/-/apidom-parser-adapter-workflows-json-1-1.0.0-alpha.10.tgz", + "integrity": "sha512-vd0H5IYX96AIhOLcU9SJnXDD6OV61i00JDDfJcFnf1K2NCB0D0Otk2V2z9LXqe51s3pZ7d/Dz0biDjYMsMKVww==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-workflows-1": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-workflows-1": "^1.0.0-alpha.10", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-workflows-yaml-1": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-yaml-1/-/apidom-parser-adapter-workflows-yaml-1-1.0.0-alpha.9.tgz", - "integrity": "sha512-TlA4+1ca33D7fWxO5jKBytSCv86IGI4Lze4JfrawWUXZ5efhi4LiNmW5TrGlZUyvL7yJtZcA4tn3betlj6jVwA==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-yaml-1/-/apidom-parser-adapter-workflows-yaml-1-1.0.0-alpha.10.tgz", + "integrity": "sha512-lH0AiPetMLRDy38gcB6TmQnaKv6p1ePimnT4xqcVSHEnc/FsjMbyOE3x6DUENau2eeWFduAhofE9zvliW6iJaQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-workflows-1": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-ns-workflows-1": "^1.0.0-alpha.10", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-jSIHEB7lbh+MP3BhYIXFkeivDR01kugXN70e5FskW7oet2TIARsVEPheWKQFSP1U8bUZA4bsp9h9gOQ9xEeErw==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.0-alpha.10.tgz", + "integrity": "sha512-mW/W/Q8w4RCw41Y9vggPbsFg+gj0FxKdecVYzZ8TmgyM9oVN6/KZFegUYKlg1HDRAfjceKehE06aLLS5GXEJCA==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^1.0.0-alpha.9", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", + "@swagger-api/apidom-ast": "^1.0.0-alpha.10", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", + "@swagger-api/apidom-error": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -922,14 +1300,15 @@ } }, "node_modules/@swagger-api/apidom-reference": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.0-alpha.9.tgz", - "integrity": "sha512-KQ6wB5KplqdSsjxdA8BaQulj5zlF5VBCd5KP3RN/9vvixgsD/gyrVY59nisdzmPTqiL6yjhk612eQ96MgG8KiA==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.0-alpha.10.tgz", + "integrity": "sha512-aFG6EHC1NOa0IhawTiE8A8TffzmW0PSO5d+lpzvcJ0w7KbrYG6SFQF2L6lZppqGaIGWbmV0Mq3LDU9mgSVEqqQ==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-alpha.10", "@types/ramda": "~0.30.0", - "axios": "^1.4.0", + "axios": "^1.7.4", "minimatch": "^7.4.3", "process": "^0.11.10", "ramda": "~0.30.0", @@ -964,6 +1343,7 @@ "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.10.tgz", "integrity": "sha512-F2X+cd6551tep0MvVZ6nM8v7XgGN/twpdNDjqS1TUM7YFNEtQYWk+dKAnH+T1gr6QgCoGMPl487xw/9hXooa2g==", "dev": true, + "license": "MIT", "dependencies": { "@popperjs/core": "^2.9.2" } @@ -972,149 +1352,153 @@ "version": "0.30.2", "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.30.2.tgz", "integrity": "sha512-PyzHvjCalm2BRYjAU6nIB3TprYwMNOUY/7P/N8bSzp9W/yM2YrtGtAnnVtaCNSeOZ8DzKyFDvaqQs7LnWwwmBA==", + "license": "MIT", "dependencies": { "types-ramda": "^0.30.1" } }, "node_modules/@types/tinycon": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@types/tinycon/-/tinycon-0.6.5.tgz", - "integrity": "sha512-RrZzmMXr1P+7NJKQsiTxAxbt87lNMgX6luT0q5Ni96wpvRunOYXUWVStumTnt6ew6oEDkPHQE6o04jUMBTb4Sg==", - "dev": true + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@types/tinycon/-/tinycon-0.6.6.tgz", + "integrity": "sha512-Q8geSfJZUKF9Y4d5LJ/++FkrzTUZ01RqaRkk5Y+e2M+FVWho6Qq0BlxOCWLSb+qs8zHGeLmq6ei8B5gcOIIKeQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" }, "node_modules/@vue/compiler-core": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz", - "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", "dependencies": { "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.12", + "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz", - "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz", - "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", "dependencies": { "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.12", - "@vue/compiler-dom": "3.5.12", - "@vue/compiler-ssr": "3.5.12", - "@vue/shared": "3.5.12", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", - "postcss": "^8.4.47", + "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz", - "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/devtools-api": { "version": "6.6.4", "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" }, "node_modules/@vue/reactivity": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.12.tgz", - "integrity": "sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", "dependencies": { - "@vue/shared": "3.5.12" + "@vue/shared": "3.5.13" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.12.tgz", - "integrity": "sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.12.tgz", - "integrity": "sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==", - "dependencies": { - "@vue/reactivity": "3.5.12", - "@vue/runtime-core": "3.5.12", - "@vue/shared": "3.5.12", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.12.tgz", - "integrity": "sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" }, "peerDependencies": { - "vue": "3.5.12" + "vue": "3.5.13" } }, "node_modules/@vue/shared": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz", - "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==" - }, - "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, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT" }, "node_modules/apg-lite": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/apg-lite/-/apg-lite-1.0.4.tgz", - "integrity": "sha512-B32zCN3IdHIc99Vy7V9BaYTUzLeRA8YXYY1aQD1/5I2aqIrO0coi4t6hJPqMisidlBxhyME8UexkHt31SlR6Og==" + "integrity": "sha512-B32zCN3IdHIc99Vy7V9BaYTUzLeRA8YXYY1aQD1/5I2aqIrO0coi4t6hJPqMisidlBxhyME8UexkHt31SlR6Og==", + "license": "BSD-2-Clause" }, "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/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" }, "node_modules/axios": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -1124,12 +1508,14 @@ "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==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/base64-arraybuffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -1151,24 +1537,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] - }, - "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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + ], + "license": "MIT" }, "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", "optional": true, "dependencies": { "buffer": "^5.5.0", @@ -1194,6 +1570,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "optional": true, "dependencies": { "base64-js": "^1.3.1", @@ -1214,6 +1591,7 @@ "url": "https://opencollective.com/bootstrap" } ], + "license": "MIT", "peerDependencies": { "@popperjs/core": "^2.11.8" } @@ -1231,17 +1609,20 @@ "type": "opencollective", "url": "https://opencollective.com/bootstrap" } - ] + ], + "license": "MIT" }, "node_modules/bootstrap5-tags": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/bootstrap5-tags/-/bootstrap5-tags-1.7.5.tgz", - "integrity": "sha512-EqCpdjD/UdZVYdlgcWfQKU68x7AtUs3lSnl9/u1xW2kVc193nqE4QOyJ5fAvc4i4t365LerRG87kptMpsD1PlQ==" + "integrity": "sha512-EqCpdjD/UdZVYdlgcWfQKU68x7AtUs3lSnl9/u1xW2kVc193nqE4QOyJ5fAvc4i4t365LerRG87kptMpsD1PlQ==", + "license": "MIT" }, "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==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -1251,6 +1632,8 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -1276,6 +1659,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -1286,47 +1670,51 @@ "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", "dev": true, + "license": "MIT/X11", "peer": true }, "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", "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" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 14.16.0" }, "funding": { "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" } }, "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC", "optional": true }, "node_modules/color-hash": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/color-hash/-/color-hash-2.0.2.tgz", - "integrity": "sha512-6exeENAqBTuIR1wIo36mR8xVVBv6l1hSLd7Qmvf6158Ld1L15/dbahR9VUOiX7GmGJBCnQyS0EY+I8x+wa7egg==" + "integrity": "sha512-6exeENAqBTuIR1wIo36mR8xVVBv6l1hSLd7Qmvf6158Ld1L15/dbahR9VUOiX7GmGJBCnQyS0EY+I8x+wa7egg==", + "license": "MIT" + }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -1338,21 +1726,24 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/core-js-pure": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", - "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.39.0.tgz", + "integrity": "sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==", "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -1361,17 +1752,20 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" }, "node_modules/dayjs": { "version": "1.11.13", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" }, "node_modules/decompress-response": { "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", "optional": true, "dependencies": { "mimic-response": "^3.1.0" @@ -1387,6 +1781,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", "optional": true, "engines": { "node": ">=4.0.0" @@ -1396,6 +1791,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1404,28 +1800,36 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "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": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, "node_modules/dompurify": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz", - "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.0.tgz", + "integrity": "sha512-AMdOzK44oFWqHEi0wpOqix/fUNY707OmoeFDnbi3Q5I8uOpy21ufUA5cDJPr0bosxrflOVD/H2DMSvuGKJGfmQ==", + "license": "(MPL-2.0 OR Apache-2.0)" }, "node_modules/drange": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -1434,6 +1838,7 @@ "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", "optional": true, "dependencies": { "once": "^1.4.0" @@ -1443,6 +1848,7 @@ "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" }, @@ -1456,6 +1862,7 @@ "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -1494,6 +1901,7 @@ "resolved": "https://registry.npmjs.org/esbuild-plugin-vue-next/-/esbuild-plugin-vue-next-0.1.4.tgz", "integrity": "sha512-n4DF5xY/GJ9DdRM4+MvV14Rrr+7xGhtv9/0xIxfzN6qSIMdXfZ6g4PVX735NYC7vGRr9KyZGRWST5jCyHQ6n5g==", "dev": true, + "license": "MIT", "dependencies": { "convert-source-map": "^1.8.0", "hash-sum": "^2.0.0" @@ -1507,6 +1915,7 @@ "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-3.3.1.tgz", "integrity": "sha512-SnO1ls+d52n6j8gRRpjexXI8MsHEaumS0IdDHaYM29Y6gakzZYMls6i9ql9+AWMSQk/eryndmUpXEgT34QrX1A==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.22.8", "safe-identifier": "^0.4.2", @@ -1520,12 +1929,14 @@ "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/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)", "optional": true, "engines": { "node": ">=6" @@ -1534,13 +1945,16 @@ "node_modules/fast-json-patch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", - "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", + "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", + "optional": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1549,15 +1963,16 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -1568,9 +1983,10 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -1584,27 +2000,15 @@ "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==", + "license": "MIT", "optional": true }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "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==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1613,25 +2017,15 @@ "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==", + "license": "MIT", "optional": true }, - "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, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "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==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -1641,13 +2035,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -1658,7 +2054,8 @@ "node_modules/ical.js": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ical.js/-/ical.js-2.1.0.tgz", - "integrity": "sha512-BOVfrH55xQ6kpS3muGvIXIg2l7p+eoe12/oS7R5yrO3TL/j/bLsR0PR+tYQESFbyTbvGgPHn9zQ6tI4FWyuSaQ==" + "integrity": "sha512-BOVfrH55xQ6kpS3muGvIXIg2l7p+eoe12/oS7R5yrO3TL/j/bLsR0PR+tYQESFbyTbvGgPHn9zQ6tI4FWyuSaQ==", + "license": "MPL-2.0" }, "node_modules/ieee754": { "version": "1.2.1", @@ -1677,43 +2074,36 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/immutable": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", - "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", - "dev": true + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.2.tgz", + "integrity": "sha512-1NU7hWZDkV7hJ4PJ9dur9gTNQ4ePNPN4k9/0YhwjzykTi/+3Q5pF93YU5QoVj8BuOnhLgaY8gs0U2pj4kSYVcw==", + "dev": true, + "license": "MIT" }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC", "optional": true }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC", "optional": true }, - "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, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -1729,6 +2119,8 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", + "optional": true, "engines": { "node": ">=0.10.0" } @@ -1738,6 +2130,8 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -1750,6 +2144,8 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", + "optional": true, "engines": { "node": ">=0.12.0" } @@ -1758,6 +2154,7 @@ "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" }, @@ -1769,6 +2166,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/lit/-/lit-3.2.1.tgz", "integrity": "sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==", + "license": "BSD-3-Clause", "dependencies": { "@lit/reactive-element": "^2.0.4", "lit-element": "^4.1.0", @@ -1779,6 +2177,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", + "license": "BSD-3-Clause", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.2.0", "@lit/reactive-element": "^2.0.4", @@ -1789,6 +2188,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "license": "BSD-3-Clause", "dependencies": { "@types/trusted-types": "^2.0.2" } @@ -1796,12 +2196,14 @@ "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/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } @@ -1810,6 +2212,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "license": "MIT", "bin": { "marked": "bin/marked.js" }, @@ -1817,10 +2220,26 @@ "node": ">= 12" } }, + "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", + "optional": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "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==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1829,6 +2248,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -1840,6 +2260,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", "optional": true, "engines": { "node": ">=10" @@ -1852,6 +2273,7 @@ "version": "0.23.8", "resolved": "https://registry.npmjs.org/minim/-/minim-0.23.8.tgz", "integrity": "sha512-bjdr2xW1dBCMsMGGsUeqM4eFI60m94+szhxWys+B1ztIt6gWSfeGBdSVCIawezeHYLYn0j6zrsXdQS/JllBzww==", + "license": "MIT", "dependencies": { "lodash": "^4.15.0" }, @@ -1863,6 +2285,7 @@ "version": "7.4.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1877,6 +2300,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1885,23 +2309,27 @@ "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==" + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" }, "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==", + "license": "MIT", "optional": true }, "node_modules/modern-screenshot": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/modern-screenshot/-/modern-screenshot-4.5.1.tgz", - "integrity": "sha512-fEt7Oa4CfSOMnqfjoAbQ6Ubmqw2XbHn/kPBccbv84Yh1S4h0CwWLYzylSm1FuxYu/OkQ8oOqB7lfmdKXlaYmiw==" + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/modern-screenshot/-/modern-screenshot-4.5.4.tgz", + "integrity": "sha512-4O9hT31e2XqAga5tIuNe8YemB8SnjHYClD1lHu0DqgiZ4Mld6Hf4t3Oz+3RnxQm+95cMatFsmJRI1IIMub13ww==", + "license": "MIT" }, "node_modules/nan": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", - "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", + "license": "MIT", "optional": true }, "node_modules/nanoid": { @@ -1914,6 +2342,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -1925,20 +2354,23 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "license": "MIT", "optional": true }, "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" } }, "node_modules/node-abi": { - "version": "3.68.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.68.0.tgz", - "integrity": "sha512-7vbj10trelExNjFSBm5kTvZXXa7pZyKWx9RCKIyqe6I9Ev3IzGpQoqBP3a+cOdxY+pWj6VkP28n/2wWysBHD/A==", + "version": "3.71.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz", + "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==", + "license": "MIT", "optional": true, "dependencies": { "semver": "^7.3.5" @@ -1950,7 +2382,16 @@ "node_modules/node-abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true }, "node_modules/node-domexception": { "version": "1.0.0", @@ -1966,6 +2407,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } @@ -1974,6 +2416,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch-commonjs/-/node-fetch-commonjs-3.3.2.tgz", "integrity": "sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==", + "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -1986,19 +2429,11 @@ "url": "https://opencollective.com/node-fetch" } }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/once": { "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", "optional": true, "dependencies": { "wrappy": "1" @@ -2008,6 +2443,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/openapi-path-templating/-/openapi-path-templating-1.6.0.tgz", "integrity": "sha512-1atBNwOUrZXthTvlvvX8k8ovFEF3iA8mDidYMkdOtvVdndBhTrspbwGXNOzEUaJhm9iUl4Tf5uQaeTLAJvwPig==", + "license": "Apache-2.0", "dependencies": { "apg-lite": "^1.0.3" }, @@ -2019,6 +2455,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/openapi-server-url-templating/-/openapi-server-url-templating-1.1.0.tgz", "integrity": "sha512-dtyTFKx2xVcO0W8JKaluXIHC9l/MLjHeflBaWjiWNMCHp/TBs9dEjQDbj/VFlHR4omFOKjjmqm1pW1aCAhmPBg==", + "license": "Apache-2.0", "dependencies": { "apg-lite": "^1.0.3" }, @@ -2030,18 +2467,22 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "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", + "optional": true, "engines": { "node": ">=8.6" }, @@ -2050,9 +2491,9 @@ } }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "funding": [ { "type": "opencollective", @@ -2067,9 +2508,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.1.0", + "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, "engines": { @@ -2080,6 +2522,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "license": "MIT", "optional": true, "dependencies": { "detect-libc": "^2.0.0", @@ -2102,10 +2545,21 @@ "node": ">=10" } }, + "node_modules/prebuild-install/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==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, "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==", + "license": "MIT", "engines": { "node": ">=6" } @@ -2114,6 +2568,7 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -2121,12 +2576,14 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/pump": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", "optional": true, "dependencies": { "end-of-stream": "^1.1.0", @@ -2137,6 +2594,7 @@ "version": "0.30.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.30.1.tgz", "integrity": "sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/ramda" @@ -2146,6 +2604,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ramda-adjunct/-/ramda-adjunct-5.1.0.tgz", "integrity": "sha512-8qCpl2vZBXEJyNbi4zqcgdfHtcdsWjOGbiNSEnEBrM6Y0OKOT8UxJbIVGm1TIcjaSu2MxaWcgtsNlKlCk7o7qg==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.3" }, @@ -2161,6 +2620,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", + "license": "MIT", "dependencies": { "drange": "^1.0.2", "ret": "^0.2.0" @@ -2173,6 +2633,7 @@ "version": "9.3.8", "resolved": "https://registry.npmjs.org/rapidoc/-/rapidoc-9.3.8.tgz", "integrity": "sha512-eCYEbr1Xr8OJZvVCw8SXl9zBCRoLJbhNGuG5IZTHq/RWAOq/O4MafUCuFEyZHsrhLrlUcGZMa64pyhpib8fQKQ==", + "license": "MIT", "dependencies": { "@apitools/openapi-parser": "0.0.33", "base64-arraybuffer": "^1.0.2", @@ -2191,6 +2652,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)", "optional": true, "dependencies": { "deep-extend": "^0.6.0", @@ -2206,6 +2668,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "optional": true, "dependencies": { "inherits": "^2.0.3", @@ -2217,26 +2680,30 @@ } }, "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, + "license": "MIT", "engines": { - "node": ">=8.10.0" + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "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==" + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", "engines": { "node": ">=0.10" } @@ -2246,6 +2713,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -2262,6 +2730,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "license": "MIT", "engines": { "node": ">=4" } @@ -2271,6 +2740,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, + "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.1.0" @@ -2294,22 +2764,25 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "optional": true }, "node_modules/safe-identifier": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sass": { - "version": "1.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.81.0.tgz", + "integrity": "sha512-Q4fOxRfhmv3sqCLoGfvrC9pRV8btc0UtqL9mN6Yrv6Qi9ScL55CVH1vlPP863ISLEEMNLLuu9P+enCeGHlnzhA==", "dev": true, + "license": "MIT", "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", + "chokidar": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -2317,233 +2790,246 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, "node_modules/sass-embedded": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.77.5.tgz", - "integrity": "sha512-JQI8aprHDRSNK5exXsbusswTENQPJxW1QWUcLdwuyESoJClT1zo8e+4cmaV5OAU4abcRC6Av4/RmLocPdjcR3A==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.81.0.tgz", + "integrity": "sha512-uZQ2Faxb1oWBHpeSSzjxnhClbMb3QadN0ql0ZFNuqWOLUxwaVhrMlMhPq6TDPbbfDUjihuwrMCuy695Bgna5RA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@bufbuild/protobuf": "^1.0.0", + "@bufbuild/protobuf": "^2.0.0", "buffer-builder": "^0.2.0", - "immutable": "^4.0.0", + "colorjs.io": "^0.5.0", + "immutable": "^5.0.2", "rxjs": "^7.4.0", "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", "varint": "^6.0.0" }, + "bin": { + "sass": "dist/bin/sass.js" + }, "engines": { "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.77.5", - "sass-embedded-android-arm64": "1.77.5", - "sass-embedded-android-ia32": "1.77.5", - "sass-embedded-android-x64": "1.77.5", - "sass-embedded-darwin-arm64": "1.77.5", - "sass-embedded-darwin-x64": "1.77.5", - "sass-embedded-linux-arm": "1.77.5", - "sass-embedded-linux-arm64": "1.77.5", - "sass-embedded-linux-ia32": "1.77.5", - "sass-embedded-linux-musl-arm": "1.77.5", - "sass-embedded-linux-musl-arm64": "1.77.5", - "sass-embedded-linux-musl-ia32": "1.77.5", - "sass-embedded-linux-musl-x64": "1.77.5", - "sass-embedded-linux-x64": "1.77.5", - "sass-embedded-win32-arm64": "1.77.5", - "sass-embedded-win32-ia32": "1.77.5", - "sass-embedded-win32-x64": "1.77.5" + "sass-embedded-android-arm": "1.81.0", + "sass-embedded-android-arm64": "1.81.0", + "sass-embedded-android-ia32": "1.81.0", + "sass-embedded-android-riscv64": "1.81.0", + "sass-embedded-android-x64": "1.81.0", + "sass-embedded-darwin-arm64": "1.81.0", + "sass-embedded-darwin-x64": "1.81.0", + "sass-embedded-linux-arm": "1.81.0", + "sass-embedded-linux-arm64": "1.81.0", + "sass-embedded-linux-ia32": "1.81.0", + "sass-embedded-linux-musl-arm": "1.81.0", + "sass-embedded-linux-musl-arm64": "1.81.0", + "sass-embedded-linux-musl-ia32": "1.81.0", + "sass-embedded-linux-musl-riscv64": "1.81.0", + "sass-embedded-linux-musl-x64": "1.81.0", + "sass-embedded-linux-riscv64": "1.81.0", + "sass-embedded-linux-x64": "1.81.0", + "sass-embedded-win32-arm64": "1.81.0", + "sass-embedded-win32-ia32": "1.81.0", + "sass-embedded-win32-x64": "1.81.0" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.77.5.tgz", - "integrity": "sha512-/DfNYoykqwMFduecqa8n0NH+cS6oLdCPFjwhe92efsOOt5WDYEOlolnhoOENZxqdzvSV+8axL+mHQ1Ypl4MLtg==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.81.0.tgz", + "integrity": "sha512-NWEmIuaIEsGFNsIRa+5JpIpPJyZ32H15E85CNZqEIhhwWlk9UNw7vlOCmTH8MtabtnACwC/2NG8VyNa3nxKzUQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.77.5.tgz", - "integrity": "sha512-t4yIhK5OUpg1coZxFpDo3BhI2YVj21JxEd5SVI6FfcWD2ESroQWsC4cbq3ejw5aun8R1Kx6xH1EKxO8bSMvn1g==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.81.0.tgz", + "integrity": "sha512-I36P77/PKAHx6sqOmexO2iEY5kpsmQ1VxcgITZSOxPMQhdB6m4t3bTabfDuWQQmCrqqiNFtLQHeytB65bUqwiw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-android-ia32": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.77.5.tgz", - "integrity": "sha512-92dWhEbR0Z2kpjbpfOx4LM9wlNBSnDsRtwpkMUK8udQIE7uF3E4/Fsf/88IJk0MrRkk4iwrsxxiCb1bz2tWnHQ==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.81.0.tgz", + "integrity": "sha512-k8V1usXw30w1GVxvrteG1RzgYJzYQ9PfL2aeOqGdroBN7zYTD9VGJXTGcxA4IeeRxmRd7szVW2mKXXS472fh8g==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.81.0.tgz", + "integrity": "sha512-RXlanyLXEpN/DEehXgLuKPsqT//GYlsGFxKXgRiCc8hIPAueFLQXKJmLWlL3BEtHgmFdbsStIu4aZCcb1hOFlQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-android-x64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.77.5.tgz", - "integrity": "sha512-lFnXz9lRnjRLJ8Y28ONJViID3rDq4p6LJ/9ByPk2ZnSpx5ouUjsu4AfrXKJ0jgHWBaDvSKSxq2fPpt5aMQAEZA==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.81.0.tgz", + "integrity": "sha512-RQG0FxGQ1DERNyUDED8+BDVaLIjI+BNg8lVcyqlLZUrWY6NhzjwYEeiN/DNZmMmHtqDucAPNDcsdVUNQqsBy2A==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.77.5.tgz", - "integrity": "sha512-J3yP6w+xqPrGQE0+sO4Gam6kBDJL5ivgkFNxR0fVlvKeN5qVFYhymp/xGRRMxBrKjohEQtBGP431EzrtvUMFow==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.81.0.tgz", + "integrity": "sha512-gLKbsfII9Ppua76N41ODFnKGutla9qv0OGAas8gxe0jYBeAQFi/1iKQYdNtQtKi4mA9n5TQTqz+HHCKszZCoyA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.77.5.tgz", - "integrity": "sha512-A9fh5tg4s0FidMTG31Vs8TzYZ3Mam/I/tfqvN0g512OhBajp/p2DJvBY+0Br2r+TNH1yGUXf2ZfULuTBFj5u8w==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.81.0.tgz", + "integrity": "sha512-7uMOlT9hD2KUJCbTN2XcfghDxt/rc50ujjfSjSHjX1SYj7mGplkINUXvVbbvvaV2wt6t9vkGkCo5qNbeBhfwBg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.77.5.tgz", - "integrity": "sha512-O7gbOWJloxITBZNkpwChFltxofsnDUf+3pz7+q2ETQKvZQ3kUfFENAF37slo0bsHJ7IEpwJK3ZJlnhZvIgfhgw==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.81.0.tgz", + "integrity": "sha512-REqR9qM4RchCE3cKqzRy9Q4zigIV82SbSpCi/O4O3oK3pg2I1z7vkb3TiJsivusG/li7aqKZGmYOtAXjruGQDA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.77.5.tgz", - "integrity": "sha512-LoN804X7QsyvT/h8UGcgBMfV1SdT4JRRNV+slBICxoXPKBLXbZm9KyLRCBQcMLLdlXSZdOfZilxUN1Bd2az6OA==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.81.0.tgz", + "integrity": "sha512-jy4bvhdUmqbyw1jv1f3Uxl+MF8EU/Y/GDx4w6XPJm4Ds+mwH/TwnyAwsxxoBhWfnBnW8q2ADy039DlS5p+9csQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-linux-ia32": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.77.5.tgz", - "integrity": "sha512-KHNJymlEmjyJbhGfB34zowohjgMvv/qKVsDX5hPlar+qMh+cxJwfgPln1Zl9bfe9qLObmEV2zFA1rpVBWy4xGQ==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.81.0.tgz", + "integrity": "sha512-ga/Jk4q5Bn1aC+iHJteDZuLSKnmBUiS3dEg1fnl/Z7GaHIChceKDJOw0zNaILRXI0qT2E1at9MwzoRaRA5Nn/g==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.77.5.tgz", - "integrity": "sha512-TLhJzd1TJ0oX1oULobkWLMDLeErD27WbhdZqxtFvIqzyO+1TZPMwojhRX4YNWmHdmmYhIuXTR9foWxwL3Xjgsg==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.81.0.tgz", + "integrity": "sha512-oWVUvQ4d5Kx1Md75YXZl5z1WBjc+uOhfRRqzkJ3nWc8tjszxJN+y/5EOJavhsNI3/2yoTt6eMXRTqDD9b0tWSQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2554,13 +3040,14 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.77.5.tgz", - "integrity": "sha512-ZWl8K8rCL4/phm3IPWDADwjnYAiohoaKg7BKjGo+36zv8P0ocoA0A3j4xx7/kjUJWagOmmoTyYxoOu+lo1NaKw==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.81.0.tgz", + "integrity": "sha512-hpntWf5kjkoxncA1Vh8vhsUOquZ8AROZKx0rQh7ZjSRs4JrYZASz1cfevPKaEM3wIim/nYa6TJqm0VqWsrERlA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2571,13 +3058,32 @@ } }, "node_modules/sass-embedded-linux-musl-ia32": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.77.5.tgz", - "integrity": "sha512-83zNSgsIIc+tYQFKepFIlvAvAHnbWSpZ824MjqXJLeCbfzcMO8SZ/q6OA0Zd2SIrf79lCWI4OfPHqp1PI6M7HQ==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.81.0.tgz", + "integrity": "sha512-UEXUYkBuqTSwg5JNWiNlfMZ1Jx6SJkaEdx+fsL3Tk099L8cKSoJWH2EPz4ZJjNbyIMymrSdVfymheTeZ8u24xA==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.81.0.tgz", + "integrity": "sha512-1D7OznytbIhx2XDHWi1nuQ8d/uCVR7FGGzELgaU//T8A9DapVTUgPKvB70AF1k4GzChR9IXU/WvFZs2hDTbaJg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2588,13 +3094,32 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.77.5.tgz", - "integrity": "sha512-/SW9ggXZJilbRbKvRHAxEuQM6Yr9piEpvK7/aDevFL2XFvBW9x+dTzpH5jPVEmM0qWdJisS1r5mEv8AXUUdQZg==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.81.0.tgz", + "integrity": "sha512-ia6VCTeVDQtBSMktXRFza1AZCt8/6aUoujot6Ugf4KmdytQqPJIHxkHaGftm5xwi9WdrMGYS7zgolToPijR11A==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.81.0.tgz", + "integrity": "sha512-KbxSsqu4tT1XbhZfJV/5NfW0VtJIGlD58RjqJqJBi8Rnjrx29/upBsuwoDWtsPV/LhoGwwU1XkSa9Q1ifCz4fQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2605,81 +3130,73 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.77.5.tgz", - "integrity": "sha512-3EmYeY+K8nMwIy1El9C+mPuONMQyXSCD6Yyztn3G7moPdZTqXrTL7kTJIl+SRq1tCcnOMMGXnBRE7Kpou1wd+w==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.81.0.tgz", + "integrity": "sha512-AMDeVY2T9WAnSFkuQcsOn5c29GRs/TuqnCiblKeXfxCSKym5uKdBl/N7GnTV6OjzoxiJBbkYKdVIaS5By7Gj4g==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.77.5.tgz", - "integrity": "sha512-dwVFOqkyfCRQgQB8CByH+MG93fp7IsfFaPDDCQVzVFAT00+HXk/dWFPMnv65XDDndGwsUE1KlZnjg8iOBDlRdw==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.81.0.tgz", + "integrity": "sha512-YOmBRYnygwWUmCoH14QbMRHjcvCJufeJBAp0m61tOJXIQh64ziwV4mjdqjS/Rx3zhTT4T+nulDUw4d3kLiMncA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "peer": true, - "bin": { - "sass": "dart-sass/sass.bat" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-win32-ia32": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.77.5.tgz", - "integrity": "sha512-1ij/K5d2sHPJkytWiPJLoUOVHJOB6cSWXq7jmedeuGooWnBmqnWycmGkhBAEK/t6t1XgzMPsiJMGiHKh7fnBuA==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.81.0.tgz", + "integrity": "sha512-HFfr/C+uLJGGTENdnssuNTmXI/xnIasUuEHEKqI+2J0FHCWT5cpz3PGAOHymPyJcZVYGUG/7gIxIx/d7t0LFYw==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "peer": true, - "bin": { - "sass": "dart-sass/sass.bat" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.77.5.tgz", - "integrity": "sha512-Pn6j0jDGeEAhuuVY0CaZaBa7yNkqimEsbUDYYuQ9xh+XdGvZ86SZf6HXHUVIyQUjHORLwQ5f0XoKYYzKfC0y9w==", + "version": "1.81.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.81.0.tgz", + "integrity": "sha512-wxj52jDcIAwWcXb7ShZ7vQYKcVUkJ+04YM9l46jDY+qwHzliGuorAUyujLyKTE9heGD3gShJ3wPPC1lXzq6v9A==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "peer": true, - "bin": { - "sass": "dart-sass/sass.bat" - }, "engines": { "node": ">=14.0.0" } @@ -2688,6 +3205,7 @@ "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "optional": true, "bin": { "semver": "bin/semver.js" @@ -2700,6 +3218,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-5.2.0.tgz", "integrity": "sha512-cMGfwNyfDZ/nzJ2k2M+ClthBIh//GlZl1JEf47Uoa9XR11bz8Pa2T2wQO4bVrRdH48LrIDWJahQziKo3MjhsWg==", + "license": "Apache-2.0", "bin": { "short-unique-id": "bin/short-unique-id", "suid": "bin/short-unique-id" @@ -2723,6 +3242,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "optional": true }, "node_modules/simple-get": { @@ -2743,6 +3263,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "optional": true, "dependencies": { "decompress-response": "^6.0.0", @@ -2754,6 +3275,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" } @@ -2762,6 +3284,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", "optional": true, "dependencies": { "safe-buffer": "~5.2.0" @@ -2771,6 +3294,7 @@ "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", "optional": true, "engines": { "node": ">=0.10.0" @@ -2781,6 +3305,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -2797,6 +3322,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2805,11 +3331,13 @@ } }, "node_modules/swagger-client": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.29.4.tgz", - "integrity": "sha512-Me8tdPyRAQbnwNBCZ0BpG0vyci9e+FW6YV3+c6/x8SwPmLpslpFNXoT4PtVApf1CVSvV7Sc7Bfb4DPgpEqBdHw==", + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.31.0.tgz", + "integrity": "sha512-hVYift5XB8nOgNJVl6cbNtVTVPT2Fdx2wCOcIvuAFcyq0Mwe6+70ezoZ5WfiaIAzzwWfq72jyaLeg8TViGNSmw==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.22.15", + "@scarf/scarf": "=1.4.0", "@swagger-api/apidom-core": ">=1.0.0-alpha.9 <1.0.0-beta.0", "@swagger-api/apidom-error": ">=1.0.0-alpha.9 <1.0.0-beta.0", "@swagger-api/apidom-json-pointer": ">=1.0.0-alpha.9 <1.0.0-beta.0", @@ -2828,10 +3356,36 @@ "ramda-adjunct": "^5.0.0" } }, + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", + "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.0.0" + } + }, "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==", + "license": "MIT", "optional": true, "dependencies": { "chownr": "^1.1.1", @@ -2844,6 +3398,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", "optional": true, "dependencies": { "bl": "^4.0.3", @@ -2859,21 +3414,16 @@ "node_modules/timezones-list": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/timezones-list/-/timezones-list-3.0.3.tgz", - "integrity": "sha512-C+Vdvvj2c1xB6pu81pOX8geo6mrk/QsudFVlTVQET7QQwu8WAIyhDNeCrK5grU7EMzmbKLWqz7uU6dN8fvQvPQ==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } + "integrity": "sha512-C+Vdvvj2c1xB6pu81pOX8geo6mrk/QsudFVlTVQET7QQwu8WAIyhDNeCrK5grU7EMzmbKLWqz7uU6dN8fvQvPQ==", + "license": "MIT" }, "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", + "optional": true, "dependencies": { "is-number": "^7.0.0" }, @@ -2886,6 +3436,7 @@ "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.20.4.tgz", "integrity": "sha512-rjfR5dc4knG3jnJNN/giJ9WOoN1zL/kZyrS0ILh+eqq8RNcIbiXA63JsMEgluug0aNvfQvK4BfCErN1vIzvKog==", "hasInstallScript": true, + "license": "MIT", "optional": true, "dependencies": { "nan": "^2.17.0", @@ -2897,6 +3448,7 @@ "resolved": "https://registry.npmjs.org/tree-sitter-json/-/tree-sitter-json-0.20.2.tgz", "integrity": "sha512-eUxrowp4F1QEGk/i7Sa+Xl8Crlfp7J0AXxX1QdJEQKQYMWhgMbCIgyQvpO3Q0P9oyTrNQxRLlRipDS44a8EtRw==", "hasInstallScript": true, + "license": "MIT", "optional": true, "dependencies": { "nan": "^2.18.0" @@ -2907,6 +3459,7 @@ "resolved": "https://registry.npmjs.org/tree-sitter-yaml/-/tree-sitter-yaml-0.5.0.tgz", "integrity": "sha512-POJ4ZNXXSWIG/W4Rjuyg36MkUD4d769YRUGKRqN+sVaj/VCo6Dh6Pkssn1Rtewd5kybx+jT1BWMyWN0CijXnMA==", "hasInstallScript": true, + "license": "MIT", "optional": true, "dependencies": { "nan": "^2.14.0" @@ -2915,24 +3468,28 @@ "node_modules/ts-mixer": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", - "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==", + "license": "MIT" }, "node_modules/ts-toolbelt": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", - "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==" + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "license": "Apache-2.0" }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, + "license": "0BSD", "peer": true }, "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", "optional": true, "dependencies": { "safe-buffer": "^5.0.1" @@ -2945,6 +3502,7 @@ "version": "0.30.1", "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.30.1.tgz", "integrity": "sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==", + "license": "MIT", "dependencies": { "ts-toolbelt": "^9.6.0" } @@ -2952,12 +3510,14 @@ "node_modules/unraw": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unraw/-/unraw-3.0.0.tgz", - "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==" + "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==", + "license": "MIT" }, "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==", + "license": "MIT", "optional": true }, "node_modules/varint": { @@ -2965,18 +3525,20 @@ "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/vue": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.12.tgz", - "integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.12", - "@vue/compiler-sfc": "3.5.12", - "@vue/runtime-dom": "3.5.12", - "@vue/server-renderer": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" @@ -2991,6 +3553,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/vue-css-donut-chart/-/vue-css-donut-chart-2.1.0.tgz", "integrity": "sha512-Xs71IJ5DbRMaVaei7cGV0xeihRHEnTAarKZIczNtlQKH4Llj+ikvBdtCZFV1stt6NNmRN6G8oLsOrEVHNYMm/w==", + "license": "MIT", "peerDependencies": { "vue": "^3" } @@ -2999,6 +3562,7 @@ "version": "4.4.5", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.5.tgz", "integrity": "sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==", + "license": "MIT", "dependencies": { "@vue/devtools-api": "^6.6.4" }, @@ -3013,6 +3577,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", "engines": { "node": ">= 8" } @@ -3021,18 +3586,21 @@ "version": "0.20.3", "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.20.3.tgz", "integrity": "sha512-zKGJW9r23y3BcJusbgvnOH2OYAW40MXAOi9bi3Gcc7T4Gms9WWgXF8m6adsJWpGJEhgOzCrfiz1IzKowJWrtYw==", + "license": "MIT", "optional": true }, "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==", + "license": "ISC", "optional": true }, "node_modules/xml-but-prettier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml-but-prettier/-/xml-but-prettier-1.0.1.tgz", "integrity": "sha512-C2CJaadHrZTqESlH03WOyw0oZTtoy2uEg6dSDF6YRg+9GnYNub53RRemLpnvtbHDFelxMx4LajiFsYeR6XJHgQ==", + "license": "MIT", "dependencies": { "repeat-string": "^1.5.2" } From c4e0e651a3b3ef83e9eae0a57cd61dc24ee37a91 Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Sat, 16 Nov 2024 14:55:35 +1300 Subject: [PATCH 5/8] Chore: Mute Dart Sass deprecation notices --- esbuild.config.mjs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/esbuild.config.mjs b/esbuild.config.mjs index ab6db64e6e..6b6d90c52a 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -20,7 +20,13 @@ const ctx = await esbuild.context( '__VUE_PROD_HYDRATION_MISMATCH_DETAILS__': 'false', }, outdir: "server/ui/dist/", - plugins: [pluginVue(), sassPlugin()], + plugins: [ + pluginVue(), + sassPlugin({ + silenceDeprecations: ['import'], + quietDeps: true, + }) + ], loader: { ".svg": "file", ".woff": "file", From 1afd138cc5959fe18f6140f46ec6814b494a59b2 Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Sat, 16 Nov 2024 15:21:45 +1300 Subject: [PATCH 6/8] Chore: Minor UI tweaks --- server/ui-src/components/AboutMailpit.vue | 4 +- server/ui-src/components/message/Message.vue | 220 +++++++++---------- server/ui-src/views/MailboxView.vue | 2 +- server/ui-src/views/MessageView.vue | 2 +- server/ui-src/views/SearchView.vue | 2 +- 5 files changed, 113 insertions(+), 117 deletions(-) diff --git a/server/ui-src/components/AboutMailpit.vue b/server/ui-src/components/AboutMailpit.vue index 08077094cc..d22950c0de 100644 --- a/server/ui-src/components/AboutMailpit.vue +++ b/server/ui-src/components/AboutMailpit.vue @@ -57,7 +57,7 @@ export default {