From 6c46cf9be11eb71cacf335d6c03e1e19724394e9 Mon Sep 17 00:00:00 2001 From: Gabriel Adrian Samfira Date: Tue, 7 Oct 2025 17:07:40 +0000 Subject: [PATCH] Add API, CLI and web UI integration for objects This change adds the API endpoints, the CLI commands and the web UI elements needed to manage objects in GARMs internal storage. This storage system is meant to be used to distribute the garm-agent and as a single source of truth for provider binaries, when we will add the ability for GARM to scale out. Potentially, we can also use this in air gapped systems to distribute the runner binaries for forges that don't have their own internal storage system (like GHES). Signed-off-by: Gabriel Adrian Samfira --- apiserver/controllers/file_object.go | 338 +++++++ apiserver/routers/routers.go | 22 + apiserver/swagger-models.yaml | 28 + apiserver/swagger.yaml | 121 +++ client/garm_api_client.go | 5 + .../objects/delete_file_object_parameters.go | 151 +++ .../objects/delete_file_object_responses.go | 106 ++ client/objects/get_file_object_parameters.go | 151 +++ client/objects/get_file_object_responses.go | 179 ++++ .../objects/list_file_objects_parameters.go | 232 +++++ client/objects/list_file_objects_responses.go | 179 ++++ client/objects/objects_client.go | 222 +++++ .../objects/update_file_object_parameters.go | 173 ++++ .../objects/update_file_object_responses.go | 179 ++++ cmd/garm-cli/cmd/file_object.go | 585 +++++++++++ cmd/garm-cli/cmd/root.go | 16 + cmd/garm-cli/cmd/util.go | 27 + cmd/garm/main.go | 9 +- database/common/mocks/Store.go | 398 ++++++++ database/common/store.go | 2 +- database/sql/file_store.go | 84 +- database/sql/file_store_test.go | 218 ++++- database/sql/github_test.go | 12 +- database/sql/instances_test.go | 4 +- database/sql/models.go | 4 +- database/sql/organizations_test.go | 4 +- params/params.go | 18 +- params/requests.go | 14 +- runner/object_store.go | 102 ++ runner/object_store_test.go | 353 +++++++ .../_app/immutable/assets/0.BIzx0g6N.css | 1 - .../_app/immutable/assets/0.BSyLSYks.css | 1 + .../immutable/assets/_layout.BIzx0g6N.css | 1 - .../immutable/assets/_layout.BSyLSYks.css | 1 + .../assets/_app/immutable/chunks/30NlHgQ_.js | 1 + .../chunks/{d1ceLqrJ.js => B3d8BqkX.js} | 2 +- .../assets/_app/immutable/chunks/BC4TpgBU.js | 4 + .../chunks/{DKJ_c8yL.js => BE9PkXKz.js} | 2 +- .../assets/_app/immutable/chunks/BZ2rxtTc.js | 7 - .../assets/_app/immutable/chunks/BZ_AecKg.js | 1 - .../assets/_app/immutable/chunks/BehbwORU.js | 1 + .../assets/_app/immutable/chunks/BlJ06z1t.js | 1 + .../assets/_app/immutable/chunks/BsX_CrDw.js | 1 + .../assets/_app/immutable/chunks/C1GM4Goa.js | 1 - .../chunks/{Bz3T1MM4.js => CE0C-N9m.js} | 2 +- .../assets/_app/immutable/chunks/CHjY0Kaf.js | 1 - .../assets/_app/immutable/chunks/CKaB5fL4.js | 1 - .../chunks/{mwBQAfJV.js => CMD3IPWU.js} | 2 +- .../chunks/{BaeBx81k.js => CQIRreSz.js} | 2 +- .../chunks/{CGAsTaG2.js => CRDKDqj5.js} | 2 +- .../chunks/{Byy0srta.js => CRtXxCw0.js} | 2 +- .../assets/_app/immutable/chunks/CTcPpzia.js | 4 - .../assets/_app/immutable/chunks/CuYqFPEA.js | 1 - .../chunks/{CWdSRFlF.js => Cv3bKZ1_.js} | 2 +- .../chunks/{DUI-G4vy.js => CwLZz6xi.js} | 2 +- .../chunks/{DZ5U-N28.js => D44hH3AJ.js} | 2 +- .../assets/_app/immutable/chunks/DGZKesLN.js | 1 + .../assets/_app/immutable/chunks/DSfKzFV1.js | 7 + .../assets/_app/immutable/chunks/Dh8uHEF5.js | 1 - .../chunks/{C-CyTC2O.js => DoxpoDLH.js} | 2 +- .../chunks/{J4QHiesY.js => DsCgpFQt.js} | 2 +- .../chunks/{1biM6o9g.js => Dt70yZzL.js} | 2 +- .../chunks/{DQE8oq0R.js => Dt7jKcR8.js} | 2 +- .../assets/_app/immutable/chunks/Dyp1NLoF.js | 1 + .../chunks/{DSRJryIz.js => DzXPCUia.js} | 2 +- .../assets/_app/immutable/chunks/HMJxCnAR.js | 3 - .../chunks/{BWuIa3ut.js => KogAzbD4.js} | 2 +- .../assets/_app/immutable/chunks/Ok63PiOl.js | 1 - .../assets/_app/immutable/chunks/RtJp4Ifn.js | 1 + .../assets/_app/immutable/chunks/aK-A9Gop.js | 1 + .../chunks/{Hb0uuDRx.js => covROD4j.js} | 2 +- .../chunks/{Cpl8oLXd.js => fxFZ0i0Q.js} | 2 +- .../assets/_app/immutable/chunks/kW9-6GPQ.js | 3 + .../assets/_app/immutable/chunks/l9U2NoST.js | 1 + .../chunks/{DGVAzkoE.js => z19xmJI9.js} | 2 +- .../_app/immutable/entry/app.BGzeJotz.js | 2 + .../_app/immutable/entry/app.G6LK5zv-.js | 2 - .../_app/immutable/entry/start.C5WiwcG-.js | 1 + .../_app/immutable/entry/start.CDo6YuQR.js | 1 - .../nodes/{0.DEPK4pU9.js => 0.DbHLqcwc.js} | 12 +- .../nodes/{1.D8aO3kxo.js => 1.HzNKBJ2O.js} | 2 +- .../nodes/{10.BaCSALCh.js => 10.BXBZr9ef.js} | 2 +- .../_app/immutable/nodes/11.B9eGfscp.js | 7 + .../_app/immutable/nodes/11.BJZYIyBS.js | 1 - .../_app/immutable/nodes/12.DEH2x_tr.js | 1 + .../_app/immutable/nodes/13.NurrRkua.js | 1 + .../nodes/{12.COfe1f2G.js => 14.BzcZF8IN.js} | 2 +- .../nodes/{13.I_oWpCo4.js => 15.B9OmKcrm.js} | 2 +- .../nodes/{14.Bwt3ck_f.js => 16.D2pagW-N.js} | 2 +- .../nodes/{15.9KeO9SOD.js => 17.D6aJ6Eno.js} | 2 +- .../nodes/{16.Drkhu5n3.js => 18.wCxl2r5C.js} | 2 +- .../nodes/{17.BRdX9TGm.js => 19.DSHKyTOS.js} | 2 +- .../nodes/{2.DePCP1xr.js => 2.BmBet37R.js} | 2 +- .../_app/immutable/nodes/20.CiUKuwkk.js | 2 - .../nodes/{18.C2-Tcxvs.js => 20.CrgpXSxy.js} | 2 +- .../nodes/{19.WienvNXs.js => 21.Dlw8TYKW.js} | 2 +- .../_app/immutable/nodes/22.HPy9RpzE.js | 2 + .../nodes/{21.C8nsoPMT.js => 23.BG2rtdAg.js} | 2 +- .../assets/_app/immutable/nodes/3.DmBkFzct.js | 7 - .../assets/_app/immutable/nodes/3.HdI83u8i.js | 7 + .../nodes/{4.CjsS-n1C.js => 4.C1LoDGY5.js} | 2 +- .../assets/_app/immutable/nodes/5.C8ox5cnK.js | 1 + .../assets/_app/immutable/nodes/5.COovtNXp.js | 1 - .../nodes/{6.DKl0DvPr.js => 6.DspM8-Gd.js} | 2 +- .../nodes/{7.B3JTpaoM.js => 7.BcY4hrG1.js} | 2 +- .../nodes/{8.BKBJGVMe.js => 8.DgZlDX0m.js} | 2 +- .../assets/_app/immutable/nodes/9.CWuD2pQA.js | 1 + .../assets/_app/immutable/nodes/9.DexPXc_f.js | 1 - webapp/assets/_app/version.json | 2 +- webapp/assets/index.html | 14 +- webapp/src/lib/api/client.ts | 16 +- webapp/src/lib/api/generated-client.ts | 29 + .../api/generated/.openapi-generator/FILES | 6 + webapp/src/lib/api/generated/api.ts | 612 +++++++++++- webapp/src/lib/components/ActionButton.svelte | 13 +- .../lib/components/BackendPagination.svelte | 129 +++ .../lib/components/BackendSearchBar.svelte | 56 ++ webapp/src/lib/components/DataTable.svelte | 37 +- webapp/src/lib/components/Navigation.svelte | 79 +- webapp/src/lib/components/PageHeader.svelte | 6 +- webapp/src/lib/components/SearchBar.svelte | 1 + .../lib/components/cells/ActionsCell.svelte | 17 +- .../lib/components/cells/EntityCell.svelte | 34 +- .../lib/components/cells/GenericCell.svelte | 19 +- .../src/lib/components/cells/TagsCell.svelte | 44 + webapp/src/lib/components/cells/index.ts | 1 + webapp/src/lib/stores/websocket.ts | 27 +- webapp/src/lib/utils/format.ts | 29 + webapp/src/routes/objects/+page.svelte | 912 ++++++++++++++++++ webapp/src/routes/objects/[id]/+page.svelte | 429 ++++++++ .../routes/objects/[id]/+page.svelte.backup | 277 ++++++ .../objects/[id]/page.integration.test.ts | 283 ++++++ .../routes/objects/[id]/page.render.test.ts | 200 ++++ .../routes/objects/page.integration.test.ts | 352 +++++++ webapp/src/routes/objects/page.render.test.ts | 172 ++++ webapp/src/test/factories.ts | 16 +- webapp/swagger.yaml | 260 ++++- workers/websocket/events/params.go | 2 +- 138 files changed, 7911 insertions(+), 267 deletions(-) create mode 100644 apiserver/controllers/file_object.go create mode 100644 client/objects/delete_file_object_parameters.go create mode 100644 client/objects/delete_file_object_responses.go create mode 100644 client/objects/get_file_object_parameters.go create mode 100644 client/objects/get_file_object_responses.go create mode 100644 client/objects/list_file_objects_parameters.go create mode 100644 client/objects/list_file_objects_responses.go create mode 100644 client/objects/objects_client.go create mode 100644 client/objects/update_file_object_parameters.go create mode 100644 client/objects/update_file_object_responses.go create mode 100644 cmd/garm-cli/cmd/file_object.go create mode 100644 runner/object_store.go create mode 100644 runner/object_store_test.go delete mode 100644 webapp/assets/_app/immutable/assets/0.BIzx0g6N.css create mode 100644 webapp/assets/_app/immutable/assets/0.BSyLSYks.css delete mode 100644 webapp/assets/_app/immutable/assets/_layout.BIzx0g6N.css create mode 100644 webapp/assets/_app/immutable/assets/_layout.BSyLSYks.css create mode 100644 webapp/assets/_app/immutable/chunks/30NlHgQ_.js rename webapp/assets/_app/immutable/chunks/{d1ceLqrJ.js => B3d8BqkX.js} (89%) create mode 100644 webapp/assets/_app/immutable/chunks/BC4TpgBU.js rename webapp/assets/_app/immutable/chunks/{DKJ_c8yL.js => BE9PkXKz.js} (98%) delete mode 100644 webapp/assets/_app/immutable/chunks/BZ2rxtTc.js delete mode 100644 webapp/assets/_app/immutable/chunks/BZ_AecKg.js create mode 100644 webapp/assets/_app/immutable/chunks/BehbwORU.js create mode 100644 webapp/assets/_app/immutable/chunks/BlJ06z1t.js create mode 100644 webapp/assets/_app/immutable/chunks/BsX_CrDw.js delete mode 100644 webapp/assets/_app/immutable/chunks/C1GM4Goa.js rename webapp/assets/_app/immutable/chunks/{Bz3T1MM4.js => CE0C-N9m.js} (83%) delete mode 100644 webapp/assets/_app/immutable/chunks/CHjY0Kaf.js delete mode 100644 webapp/assets/_app/immutable/chunks/CKaB5fL4.js rename webapp/assets/_app/immutable/chunks/{mwBQAfJV.js => CMD3IPWU.js} (99%) rename webapp/assets/_app/immutable/chunks/{BaeBx81k.js => CQIRreSz.js} (92%) rename webapp/assets/_app/immutable/chunks/{CGAsTaG2.js => CRDKDqj5.js} (93%) rename webapp/assets/_app/immutable/chunks/{Byy0srta.js => CRtXxCw0.js} (99%) delete mode 100644 webapp/assets/_app/immutable/chunks/CTcPpzia.js delete mode 100644 webapp/assets/_app/immutable/chunks/CuYqFPEA.js rename webapp/assets/_app/immutable/chunks/{CWdSRFlF.js => Cv3bKZ1_.js} (98%) rename webapp/assets/_app/immutable/chunks/{DUI-G4vy.js => CwLZz6xi.js} (93%) rename webapp/assets/_app/immutable/chunks/{DZ5U-N28.js => D44hH3AJ.js} (98%) create mode 100644 webapp/assets/_app/immutable/chunks/DGZKesLN.js create mode 100644 webapp/assets/_app/immutable/chunks/DSfKzFV1.js delete mode 100644 webapp/assets/_app/immutable/chunks/Dh8uHEF5.js rename webapp/assets/_app/immutable/chunks/{C-CyTC2O.js => DoxpoDLH.js} (95%) rename webapp/assets/_app/immutable/chunks/{J4QHiesY.js => DsCgpFQt.js} (97%) rename webapp/assets/_app/immutable/chunks/{1biM6o9g.js => Dt70yZzL.js} (97%) rename webapp/assets/_app/immutable/chunks/{DQE8oq0R.js => Dt7jKcR8.js} (71%) create mode 100644 webapp/assets/_app/immutable/chunks/Dyp1NLoF.js rename webapp/assets/_app/immutable/chunks/{DSRJryIz.js => DzXPCUia.js} (84%) delete mode 100644 webapp/assets/_app/immutable/chunks/HMJxCnAR.js rename webapp/assets/_app/immutable/chunks/{BWuIa3ut.js => KogAzbD4.js} (98%) delete mode 100644 webapp/assets/_app/immutable/chunks/Ok63PiOl.js create mode 100644 webapp/assets/_app/immutable/chunks/RtJp4Ifn.js create mode 100644 webapp/assets/_app/immutable/chunks/aK-A9Gop.js rename webapp/assets/_app/immutable/chunks/{Hb0uuDRx.js => covROD4j.js} (79%) rename webapp/assets/_app/immutable/chunks/{Cpl8oLXd.js => fxFZ0i0Q.js} (98%) create mode 100644 webapp/assets/_app/immutable/chunks/kW9-6GPQ.js create mode 100644 webapp/assets/_app/immutable/chunks/l9U2NoST.js rename webapp/assets/_app/immutable/chunks/{DGVAzkoE.js => z19xmJI9.js} (93%) create mode 100644 webapp/assets/_app/immutable/entry/app.BGzeJotz.js delete mode 100644 webapp/assets/_app/immutable/entry/app.G6LK5zv-.js create mode 100644 webapp/assets/_app/immutable/entry/start.C5WiwcG-.js delete mode 100644 webapp/assets/_app/immutable/entry/start.CDo6YuQR.js rename webapp/assets/_app/immutable/nodes/{0.DEPK4pU9.js => 0.DbHLqcwc.js} (72%) rename webapp/assets/_app/immutable/nodes/{1.D8aO3kxo.js => 1.HzNKBJ2O.js} (84%) rename webapp/assets/_app/immutable/nodes/{10.BaCSALCh.js => 10.BXBZr9ef.js} (94%) create mode 100644 webapp/assets/_app/immutable/nodes/11.B9eGfscp.js delete mode 100644 webapp/assets/_app/immutable/nodes/11.BJZYIyBS.js create mode 100644 webapp/assets/_app/immutable/nodes/12.DEH2x_tr.js create mode 100644 webapp/assets/_app/immutable/nodes/13.NurrRkua.js rename webapp/assets/_app/immutable/nodes/{12.COfe1f2G.js => 14.BzcZF8IN.js} (93%) rename webapp/assets/_app/immutable/nodes/{13.I_oWpCo4.js => 15.B9OmKcrm.js} (88%) rename webapp/assets/_app/immutable/nodes/{14.Bwt3ck_f.js => 16.D2pagW-N.js} (97%) rename webapp/assets/_app/immutable/nodes/{15.9KeO9SOD.js => 17.D6aJ6Eno.js} (95%) rename webapp/assets/_app/immutable/nodes/{16.Drkhu5n3.js => 18.wCxl2r5C.js} (93%) rename webapp/assets/_app/immutable/nodes/{17.BRdX9TGm.js => 19.DSHKyTOS.js} (97%) rename webapp/assets/_app/immutable/nodes/{2.DePCP1xr.js => 2.BmBet37R.js} (99%) delete mode 100644 webapp/assets/_app/immutable/nodes/20.CiUKuwkk.js rename webapp/assets/_app/immutable/nodes/{18.C2-Tcxvs.js => 20.CrgpXSxy.js} (96%) rename webapp/assets/_app/immutable/nodes/{19.WienvNXs.js => 21.Dlw8TYKW.js} (92%) create mode 100644 webapp/assets/_app/immutable/nodes/22.HPy9RpzE.js rename webapp/assets/_app/immutable/nodes/{21.C8nsoPMT.js => 23.BG2rtdAg.js} (97%) delete mode 100644 webapp/assets/_app/immutable/nodes/3.DmBkFzct.js create mode 100644 webapp/assets/_app/immutable/nodes/3.HdI83u8i.js rename webapp/assets/_app/immutable/nodes/{4.CjsS-n1C.js => 4.C1LoDGY5.js} (98%) create mode 100644 webapp/assets/_app/immutable/nodes/5.C8ox5cnK.js delete mode 100644 webapp/assets/_app/immutable/nodes/5.COovtNXp.js rename webapp/assets/_app/immutable/nodes/{6.DKl0DvPr.js => 6.DspM8-Gd.js} (94%) rename webapp/assets/_app/immutable/nodes/{7.B3JTpaoM.js => 7.BcY4hrG1.js} (98%) rename webapp/assets/_app/immutable/nodes/{8.BKBJGVMe.js => 8.DgZlDX0m.js} (93%) create mode 100644 webapp/assets/_app/immutable/nodes/9.CWuD2pQA.js delete mode 100644 webapp/assets/_app/immutable/nodes/9.DexPXc_f.js create mode 100644 webapp/src/lib/components/BackendPagination.svelte create mode 100644 webapp/src/lib/components/BackendSearchBar.svelte create mode 100644 webapp/src/lib/components/cells/TagsCell.svelte create mode 100644 webapp/src/lib/utils/format.ts create mode 100644 webapp/src/routes/objects/+page.svelte create mode 100644 webapp/src/routes/objects/[id]/+page.svelte create mode 100644 webapp/src/routes/objects/[id]/+page.svelte.backup create mode 100644 webapp/src/routes/objects/[id]/page.integration.test.ts create mode 100644 webapp/src/routes/objects/[id]/page.render.test.ts create mode 100644 webapp/src/routes/objects/page.integration.test.ts create mode 100644 webapp/src/routes/objects/page.render.test.ts diff --git a/apiserver/controllers/file_object.go b/apiserver/controllers/file_object.go new file mode 100644 index 00000000..562966ec --- /dev/null +++ b/apiserver/controllers/file_object.go @@ -0,0 +1,338 @@ +// Copyright 2025 Cloudbase Solutions SRL +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +package controllers + +import ( + "encoding/json" + "fmt" + "io" + "log/slog" + "math" + "net/http" + "strconv" + "strings" + + "github.com/gorilla/mux" + + gErrors "github.com/cloudbase/garm-provider-common/errors" + "github.com/cloudbase/garm/params" +) + +// swagger:route GET /objects objects ListFileObjects +// +// List file objects. +// +// Parameters: +// + name: tags +// description: List of tags to filter by. +// type: array +// items: +// type: string +// in: query +// required: false +// + name: page +// description: The page at which to list. +// type: integer +// in: query +// required: false +// + name: pageSize +// description: Number of items per page. +// type: integer +// in: query +// required: false +// +// Responses: +// 200: FileObjectPaginatedResponse +// 400: APIErrorResponse +func (a *APIController) ListFileObjects(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + var pageLocation int64 + var pageSize int64 = 25 + tags := r.URL.Query().Get("tags") + pageArg := r.URL.Query().Get("page") + pageSizeArg := r.URL.Query().Get("pageSize") + + if pageArg != "" { + pageInt, err := strconv.ParseInt(pageArg, 10, 64) + if err == nil && pageInt >= 0 { + pageLocation = pageInt + } + } + if pageSizeArg != "" { + pageSizeInt, err := strconv.ParseInt(pageSizeArg, 10, 64) + if err == nil && pageSizeInt >= 0 { + pageSize = pageSizeInt + } + } + parsedTags := parseTagsArg(tags) + files, err := a.r.ListFileObjects(ctx, uint64(pageLocation), uint64(pageSize), parsedTags) + if err != nil { + handleError(ctx, w, err) + return + } + + w.Header().Set("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(files); err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to encode response") + } +} + +// swagger:route DELETE /objects/{objectID} objects DeleteFileObject +// +// Delete a file object. +// +// Parameters: +// + name: objectID +// description: The ID of the file object. +// type: string +// in: path +// required: true +// +// Responses: +// default: APIErrorResponse +func (a *APIController) DeleteFileObject(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + + vars := mux.Vars(r) + objectID, err := getObjectIDFromVars(vars) + if err != nil { + slog.ErrorContext(ctx, "failed to get object ID", "error", err) + handleError(ctx, w, gErrors.NewBadRequestError("invalid objectID: %s", err)) + return + } + + if err := a.r.DeleteFileObject(ctx, objectID); err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to delete file object") + handleError(ctx, w, err) + return + } + w.WriteHeader(http.StatusNoContent) +} + +// swagger:route GET /objects/{objectID} objects GetFileObject +// +// Get a file object. +// +// Parameters: +// + name: objectID +// description: The ID of the file object. +// type: string +// in: path +// required: true +// +// Responses: +// 200: FileObject +// 400: APIErrorResponse +func (a *APIController) GetFileObject(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + + vars := mux.Vars(r) + objectID, err := getObjectIDFromVars(vars) + if err != nil { + slog.ErrorContext(ctx, "failed to get object ID", "error", err) + handleError(ctx, w, gErrors.NewBadRequestError("invalid objectID: %s", err)) + return + } + + file, err := a.r.GetFileObject(ctx, objectID) + if err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to get file object") + handleError(ctx, w, err) + return + } + w.Header().Set("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(file); err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to encode response") + } +} + +// swagger:route PUT /objects/{objectID} objects UpdateFileObject +// +// Update a file object. +// +// Parameters: +// + name: objectID +// description: The ID of the file object. +// type: string +// in: path +// required: true +// + name: Body +// description: Parameters used when updating a file object. +// type: UpdateFileObjectParams +// in: body +// required: true +// +// Responses: +// 200: FileObject +// 400: APIErrorResponse +func (a *APIController) UpdateFileObject(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + + vars := mux.Vars(r) + objectID, err := getObjectIDFromVars(vars) + if err != nil { + slog.ErrorContext(ctx, "failed to get object ID", "error", err) + handleError(ctx, w, gErrors.NewBadRequestError("invalid objectID: %s", err)) + return + } + + var param params.UpdateFileObjectParams + if err := json.NewDecoder(r.Body).Decode(¶m); err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to decode request") + handleError(ctx, w, gErrors.ErrBadRequest) + return + } + + if len(param.Tags) > 0 { + for idx, val := range param.Tags { + param.Tags[idx] = strings.ToLower(strings.TrimSpace(val)) + } + } + + file, err := a.r.UpdateFileObject(ctx, objectID, param) + if err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to get file object") + handleError(ctx, w, err) + return + } + w.Header().Set("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(file); err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to encode response") + } +} + +func (a *APIController) CreateFileObject(w http.ResponseWriter, r *http.Request) { + defer r.Body.Close() + + ctx := r.Context() + fileName := r.Header.Get("X-File-Name") + if fileName == "" { + handleError(ctx, w, gErrors.NewBadRequestError("missing X-File-Name header")) + return + } + description := r.Header.Get("X-File-Description") + contentLengthStr := r.Header.Get("Content-Length") + if contentLengthStr == "" { + handleError(ctx, w, gErrors.NewBadRequestError("missing Content-Length header in request")) + return + } + + tags := r.Header.Get("X-Tags") + parsedTags := parseTagsArg(tags) + + fileSize, err := strconv.ParseInt(contentLengthStr, 10, 64) + if err != nil { + handleError(ctx, w, gErrors.NewBadRequestError("invalid Content-Length")) + return + } + + param := params.CreateFileObjectParams{ + Name: fileName, + Size: fileSize, + Tags: parsedTags, + } + if len(description) > 0 { + param.Description = description + } + + fileObj, err := a.r.CreateFileObject(ctx, param, r.Body) + if err != nil { + slog.ErrorContext(ctx, "failed to create blob", "error", err) + handleError(ctx, w, err) + return + } + w.Header().Set("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(fileObj); err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to encode response") + } +} + +func (a *APIController) DownloadFileObject(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + + vars := mux.Vars(r) + objectID, err := getObjectIDFromVars(vars) + if err != nil { + slog.ErrorContext(ctx, "failed to get object ID", "error", err) + handleError(ctx, w, gErrors.NewBadRequestError("invalid objectID: %s", err)) + return + } + + objectDetails, err := a.r.GetFileObject(ctx, objectID) + if err != nil { + handleError(ctx, w, err) + return + } + + objectHandle, err := a.r.GetFileObjectReader(ctx, objectID) + if err != nil { + handleError(ctx, w, err) + return + } + defer objectHandle.Close() + w.Header().Set("Content-Type", objectDetails.FileType) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%q", objectDetails.Name)) + w.Header().Set("Content-Length", strconv.FormatInt(objectDetails.Size, 10)) + + if r.Method == http.MethodHead { + return + } + + copied, err := io.Copy(w, objectHandle) + if err != nil { + slog.ErrorContext(ctx, "failed to stream data", "error", err) + } + if copied < objectDetails.Size { + slog.WarnContext(ctx, "some data was not streamed", "object_id", objectDetails.ID, "object_size", objectDetails.Size, "streamed_bytes", copied) + } +} + +func parseTagsArg(tags string) []string { + var parsedTags []string + foundTag := make(map[string]struct{}) + if tags != "" { + tagList := strings.SplitSeq(tags, ",") + for val := range tagList { + if val == "" { + continue + } + low := strings.ToLower(strings.TrimSpace(val)) + if _, ok := foundTag[low]; ok { + continue + } + parsedTags = append(parsedTags, low) + foundTag[low] = struct{}{} + } + } + return parsedTags +} + +func parseAsUint(val string) (uint, error) { + parsedObjID, err := strconv.ParseUint(val, 10, 64) + if err != nil { + return 0, fmt.Errorf("invalid object ID; must be a number") + } + if parsedObjID > math.MaxUint { + return 0, fmt.Errorf("the object ID is too large") + } + return uint(parsedObjID), nil +} + +func getObjectIDFromVars(vars map[string]string) (uint, error) { + objectID, ok := vars["objectID"] + if !ok { + return 0, fmt.Errorf("no objectID specified") + } + return parseAsUint(objectID) +} diff --git a/apiserver/routers/routers.go b/apiserver/routers/routers.go index b3fdf850..cd03a080 100644 --- a/apiserver/routers/routers.go +++ b/apiserver/routers/routers.go @@ -216,6 +216,28 @@ func NewAPIRouter(han *controllers.APIController, authMiddleware, initMiddleware apiRouter.Handle("/metrics-token/", http.HandlerFunc(han.MetricsTokenHandler)).Methods("GET", "OPTIONS") apiRouter.Handle("/metrics-token", http.HandlerFunc(han.MetricsTokenHandler)).Methods("GET", "OPTIONS") + ///////////// + // Objects // + ///////////// + // List objects + apiRouter.Handle("/objects/", http.HandlerFunc(han.ListFileObjects)).Methods("GET", "OPTIONS") + apiRouter.Handle("/objects", http.HandlerFunc(han.ListFileObjects)).Methods("GET", "OPTIONS") + // Create object + apiRouter.Handle("/objects/", http.HandlerFunc(han.CreateFileObject)).Methods("POST", "OPTIONS") + apiRouter.Handle("/objects", http.HandlerFunc(han.CreateFileObject)).Methods("POST", "OPTIONS") + // Delete object + apiRouter.Handle("/objects/{objectID}/", http.HandlerFunc(han.DeleteFileObject)).Methods("DELETE", "OPTIONS") + apiRouter.Handle("/objects/{objectID}", http.HandlerFunc(han.DeleteFileObject)).Methods("DELETE", "OPTIONS") + // Download object + apiRouter.Handle("/objects/{objectID}/download/", http.HandlerFunc(han.DownloadFileObject)).Methods("GET", "OPTIONS", "HEAD") + apiRouter.Handle("/objects/{objectID}/download", http.HandlerFunc(han.DownloadFileObject)).Methods("GET", "OPTIONS", "HEAD") + // Get object + apiRouter.Handle("/objects/{objectID}/", http.HandlerFunc(han.GetFileObject)).Methods("GET", "OPTIONS") + apiRouter.Handle("/objects/{objectID}", http.HandlerFunc(han.GetFileObject)).Methods("GET", "OPTIONS") + // Update object + apiRouter.Handle("/objects/{objectID}/", http.HandlerFunc(han.UpdateFileObject)).Methods("PUT", "OPTIONS") + apiRouter.Handle("/objects/{objectID}", http.HandlerFunc(han.UpdateFileObject)).Methods("PUT", "OPTIONS") + ////////// // Jobs // ////////// diff --git a/apiserver/swagger-models.yaml b/apiserver/swagger-models.yaml index e3b4b76f..ba012289 100644 --- a/apiserver/swagger-models.yaml +++ b/apiserver/swagger-models.yaml @@ -364,6 +364,34 @@ definitions: import: package: github.com/cloudbase/garm/params alias: garm_params + FileObjectPaginatedResponse: + type: object + x-go-type: + type: FileObjectPaginatedResponse + import: + package: github.com/cloudbase/garm/params + alias: garm_params + FileObject: + type: object + x-go-type: + type: FileObject + import: + package: github.com/cloudbase/garm/params + alias: garm_params + UpdateFileObjectParams: + type: object + x-go-type: + type: UpdateFileObjectParams + import: + package: github.com/cloudbase/garm/params + alias: garm_params + CreateFileObjectParams: + type: object + x-go-type: + type: CreateFileObjectParams + import: + package: github.com/cloudbase/garm/params + alias: garm_params Templates: type: array x-go-type: diff --git a/apiserver/swagger.yaml b/apiserver/swagger.yaml index a2e317c9..ed127234 100644 --- a/apiserver/swagger.yaml +++ b/apiserver/swagger.yaml @@ -23,6 +23,13 @@ definitions: alias: garm_params package: github.com/cloudbase/garm/params type: CreateEnterpriseParams + CreateFileObjectParams: + type: object + x-go-type: + import: + alias: garm_params + package: github.com/cloudbase/garm/params + type: CreateFileObjectParams CreateGiteaCredentialsParams: type: object x-go-type: @@ -118,6 +125,20 @@ definitions: alias: garm_params package: github.com/cloudbase/garm/params type: Enterprises + FileObject: + type: object + x-go-type: + import: + alias: garm_params + package: github.com/cloudbase/garm/params + type: FileObject + FileObjectPaginatedResponse: + type: object + x-go-type: + import: + alias: garm_params + package: github.com/cloudbase/garm/params + type: FileObjectPaginatedResponse ForgeCredentials: type: object x-go-type: @@ -318,6 +339,13 @@ definitions: alias: garm_params package: github.com/cloudbase/garm/params type: UpdateEntityParams + UpdateFileObjectParams: + type: object + x-go-type: + import: + alias: garm_params + package: github.com/cloudbase/garm/params + type: UpdateFileObjectParams UpdateGiteaCredentialsParams: type: object x-go-type: @@ -1290,6 +1318,99 @@ paths: summary: Returns a JWT token that can be used to access the metrics endpoint. tags: - metrics-token + /objects: + get: + operationId: ListFileObjects + parameters: + - description: List of tags to filter by. + in: query + name: tags + type: string + - description: The page at which to list. + in: query + name: page + type: integer + - description: Number of items per page. + in: query + name: pageSize + type: integer + responses: + "200": + description: FileObjectPaginatedResponse + schema: + $ref: '#/definitions/FileObjectPaginatedResponse' + "400": + description: APIErrorResponse + schema: + $ref: '#/definitions/APIErrorResponse' + summary: List file objects. + tags: + - objects + /objects/{objectID}: + delete: + operationId: DeleteFileObject + parameters: + - description: The ID of the file object. + in: path + name: objectID + required: true + type: string + responses: + default: + description: APIErrorResponse + schema: + $ref: '#/definitions/APIErrorResponse' + summary: Delete a file object. + tags: + - objects + get: + operationId: GetFileObject + parameters: + - description: The ID of the file object. + in: path + name: objectID + required: true + type: string + responses: + "200": + description: FileObject + schema: + $ref: '#/definitions/FileObject' + "400": + description: APIErrorResponse + schema: + $ref: '#/definitions/APIErrorResponse' + summary: Get a file object. + tags: + - objects + put: + operationId: UpdateFileObject + parameters: + - description: The ID of the file object. + in: path + name: objectID + required: true + type: string + - description: Parameters used when updating a file object. + in: body + name: Body + required: true + schema: + $ref: '#/definitions/UpdateFileObjectParams' + description: Parameters used when updating a file object. + type: object + responses: + "200": + description: FileObject + schema: + $ref: '#/definitions/FileObject' + "400": + description: APIErrorResponse + schema: + $ref: '#/definitions/APIErrorResponse' + summary: Update a file object. + tags: + - objects /organizations: get: operationId: ListOrgs diff --git a/client/garm_api_client.go b/client/garm_api_client.go index f6f833b7..983ad0f0 100644 --- a/client/garm_api_client.go +++ b/client/garm_api_client.go @@ -20,6 +20,7 @@ import ( "github.com/cloudbase/garm/client/jobs" "github.com/cloudbase/garm/client/login" "github.com/cloudbase/garm/client/metrics_token" + "github.com/cloudbase/garm/client/objects" "github.com/cloudbase/garm/client/organizations" "github.com/cloudbase/garm/client/pools" "github.com/cloudbase/garm/client/providers" @@ -80,6 +81,7 @@ func New(transport runtime.ClientTransport, formats strfmt.Registry) *GarmAPI { cli.Jobs = jobs.New(transport, formats) cli.Login = login.New(transport, formats) cli.MetricsToken = metrics_token.New(transport, formats) + cli.Objects = objects.New(transport, formats) cli.Organizations = organizations.New(transport, formats) cli.Pools = pools.New(transport, formats) cli.Providers = providers.New(transport, formats) @@ -150,6 +152,8 @@ type GarmAPI struct { MetricsToken metrics_token.ClientService + Objects objects.ClientService + Organizations organizations.ClientService Pools pools.ClientService @@ -178,6 +182,7 @@ func (c *GarmAPI) SetTransport(transport runtime.ClientTransport) { c.Jobs.SetTransport(transport) c.Login.SetTransport(transport) c.MetricsToken.SetTransport(transport) + c.Objects.SetTransport(transport) c.Organizations.SetTransport(transport) c.Pools.SetTransport(transport) c.Providers.SetTransport(transport) diff --git a/client/objects/delete_file_object_parameters.go b/client/objects/delete_file_object_parameters.go new file mode 100644 index 00000000..54a7c795 --- /dev/null +++ b/client/objects/delete_file_object_parameters.go @@ -0,0 +1,151 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package objects + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// NewDeleteFileObjectParams creates a new DeleteFileObjectParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewDeleteFileObjectParams() *DeleteFileObjectParams { + return &DeleteFileObjectParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewDeleteFileObjectParamsWithTimeout creates a new DeleteFileObjectParams object +// with the ability to set a timeout on a request. +func NewDeleteFileObjectParamsWithTimeout(timeout time.Duration) *DeleteFileObjectParams { + return &DeleteFileObjectParams{ + timeout: timeout, + } +} + +// NewDeleteFileObjectParamsWithContext creates a new DeleteFileObjectParams object +// with the ability to set a context for a request. +func NewDeleteFileObjectParamsWithContext(ctx context.Context) *DeleteFileObjectParams { + return &DeleteFileObjectParams{ + Context: ctx, + } +} + +// NewDeleteFileObjectParamsWithHTTPClient creates a new DeleteFileObjectParams object +// with the ability to set a custom HTTPClient for a request. +func NewDeleteFileObjectParamsWithHTTPClient(client *http.Client) *DeleteFileObjectParams { + return &DeleteFileObjectParams{ + HTTPClient: client, + } +} + +/* +DeleteFileObjectParams contains all the parameters to send to the API endpoint + + for the delete file object operation. + + Typically these are written to a http.Request. +*/ +type DeleteFileObjectParams struct { + + /* ObjectID. + + The ID of the file object. + */ + ObjectID string + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the delete file object params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *DeleteFileObjectParams) WithDefaults() *DeleteFileObjectParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the delete file object params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *DeleteFileObjectParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the delete file object params +func (o *DeleteFileObjectParams) WithTimeout(timeout time.Duration) *DeleteFileObjectParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the delete file object params +func (o *DeleteFileObjectParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the delete file object params +func (o *DeleteFileObjectParams) WithContext(ctx context.Context) *DeleteFileObjectParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the delete file object params +func (o *DeleteFileObjectParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the delete file object params +func (o *DeleteFileObjectParams) WithHTTPClient(client *http.Client) *DeleteFileObjectParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the delete file object params +func (o *DeleteFileObjectParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithObjectID adds the objectID to the delete file object params +func (o *DeleteFileObjectParams) WithObjectID(objectID string) *DeleteFileObjectParams { + o.SetObjectID(objectID) + return o +} + +// SetObjectID adds the objectId to the delete file object params +func (o *DeleteFileObjectParams) SetObjectID(objectID string) { + o.ObjectID = objectID +} + +// WriteToRequest writes these params to a swagger request +func (o *DeleteFileObjectParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + + // path param objectID + if err := r.SetPathParam("objectID", o.ObjectID); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/client/objects/delete_file_object_responses.go b/client/objects/delete_file_object_responses.go new file mode 100644 index 00000000..fd462de3 --- /dev/null +++ b/client/objects/delete_file_object_responses.go @@ -0,0 +1,106 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package objects + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "encoding/json" + "fmt" + "io" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + + apiserver_params "github.com/cloudbase/garm/apiserver/params" +) + +// DeleteFileObjectReader is a Reader for the DeleteFileObject structure. +type DeleteFileObjectReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *DeleteFileObjectReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + result := NewDeleteFileObjectDefault(response.Code()) + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + if response.Code()/100 == 2 { + return result, nil + } + return nil, result +} + +// NewDeleteFileObjectDefault creates a DeleteFileObjectDefault with default headers values +func NewDeleteFileObjectDefault(code int) *DeleteFileObjectDefault { + return &DeleteFileObjectDefault{ + _statusCode: code, + } +} + +/* +DeleteFileObjectDefault describes a response with status code -1, with default header values. + +APIErrorResponse +*/ +type DeleteFileObjectDefault struct { + _statusCode int + + Payload apiserver_params.APIErrorResponse +} + +// IsSuccess returns true when this delete file object default response has a 2xx status code +func (o *DeleteFileObjectDefault) IsSuccess() bool { + return o._statusCode/100 == 2 +} + +// IsRedirect returns true when this delete file object default response has a 3xx status code +func (o *DeleteFileObjectDefault) IsRedirect() bool { + return o._statusCode/100 == 3 +} + +// IsClientError returns true when this delete file object default response has a 4xx status code +func (o *DeleteFileObjectDefault) IsClientError() bool { + return o._statusCode/100 == 4 +} + +// IsServerError returns true when this delete file object default response has a 5xx status code +func (o *DeleteFileObjectDefault) IsServerError() bool { + return o._statusCode/100 == 5 +} + +// IsCode returns true when this delete file object default response a status code equal to that given +func (o *DeleteFileObjectDefault) IsCode(code int) bool { + return o._statusCode == code +} + +// Code gets the status code for the delete file object default response +func (o *DeleteFileObjectDefault) Code() int { + return o._statusCode +} + +func (o *DeleteFileObjectDefault) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[DELETE /objects/{objectID}][%d] DeleteFileObject default %s", o._statusCode, payload) +} + +func (o *DeleteFileObjectDefault) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[DELETE /objects/{objectID}][%d] DeleteFileObject default %s", o._statusCode, payload) +} + +func (o *DeleteFileObjectDefault) GetPayload() apiserver_params.APIErrorResponse { + return o.Payload +} + +func (o *DeleteFileObjectDefault) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + // response payload + if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/client/objects/get_file_object_parameters.go b/client/objects/get_file_object_parameters.go new file mode 100644 index 00000000..cd04c788 --- /dev/null +++ b/client/objects/get_file_object_parameters.go @@ -0,0 +1,151 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package objects + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// NewGetFileObjectParams creates a new GetFileObjectParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewGetFileObjectParams() *GetFileObjectParams { + return &GetFileObjectParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewGetFileObjectParamsWithTimeout creates a new GetFileObjectParams object +// with the ability to set a timeout on a request. +func NewGetFileObjectParamsWithTimeout(timeout time.Duration) *GetFileObjectParams { + return &GetFileObjectParams{ + timeout: timeout, + } +} + +// NewGetFileObjectParamsWithContext creates a new GetFileObjectParams object +// with the ability to set a context for a request. +func NewGetFileObjectParamsWithContext(ctx context.Context) *GetFileObjectParams { + return &GetFileObjectParams{ + Context: ctx, + } +} + +// NewGetFileObjectParamsWithHTTPClient creates a new GetFileObjectParams object +// with the ability to set a custom HTTPClient for a request. +func NewGetFileObjectParamsWithHTTPClient(client *http.Client) *GetFileObjectParams { + return &GetFileObjectParams{ + HTTPClient: client, + } +} + +/* +GetFileObjectParams contains all the parameters to send to the API endpoint + + for the get file object operation. + + Typically these are written to a http.Request. +*/ +type GetFileObjectParams struct { + + /* ObjectID. + + The ID of the file object. + */ + ObjectID string + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the get file object params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *GetFileObjectParams) WithDefaults() *GetFileObjectParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the get file object params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *GetFileObjectParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the get file object params +func (o *GetFileObjectParams) WithTimeout(timeout time.Duration) *GetFileObjectParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the get file object params +func (o *GetFileObjectParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the get file object params +func (o *GetFileObjectParams) WithContext(ctx context.Context) *GetFileObjectParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the get file object params +func (o *GetFileObjectParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the get file object params +func (o *GetFileObjectParams) WithHTTPClient(client *http.Client) *GetFileObjectParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the get file object params +func (o *GetFileObjectParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithObjectID adds the objectID to the get file object params +func (o *GetFileObjectParams) WithObjectID(objectID string) *GetFileObjectParams { + o.SetObjectID(objectID) + return o +} + +// SetObjectID adds the objectId to the get file object params +func (o *GetFileObjectParams) SetObjectID(objectID string) { + o.ObjectID = objectID +} + +// WriteToRequest writes these params to a swagger request +func (o *GetFileObjectParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + + // path param objectID + if err := r.SetPathParam("objectID", o.ObjectID); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/client/objects/get_file_object_responses.go b/client/objects/get_file_object_responses.go new file mode 100644 index 00000000..c98bfd93 --- /dev/null +++ b/client/objects/get_file_object_responses.go @@ -0,0 +1,179 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package objects + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "encoding/json" + "fmt" + "io" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + + apiserver_params "github.com/cloudbase/garm/apiserver/params" + garm_params "github.com/cloudbase/garm/params" +) + +// GetFileObjectReader is a Reader for the GetFileObject structure. +type GetFileObjectReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *GetFileObjectReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewGetFileObjectOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + case 400: + result := NewGetFileObjectBadRequest() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + default: + return nil, runtime.NewAPIError("[GET /objects/{objectID}] GetFileObject", response, response.Code()) + } +} + +// NewGetFileObjectOK creates a GetFileObjectOK with default headers values +func NewGetFileObjectOK() *GetFileObjectOK { + return &GetFileObjectOK{} +} + +/* +GetFileObjectOK describes a response with status code 200, with default header values. + +FileObject +*/ +type GetFileObjectOK struct { + Payload garm_params.FileObject +} + +// IsSuccess returns true when this get file object o k response has a 2xx status code +func (o *GetFileObjectOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this get file object o k response has a 3xx status code +func (o *GetFileObjectOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this get file object o k response has a 4xx status code +func (o *GetFileObjectOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this get file object o k response has a 5xx status code +func (o *GetFileObjectOK) IsServerError() bool { + return false +} + +// IsCode returns true when this get file object o k response a status code equal to that given +func (o *GetFileObjectOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the get file object o k response +func (o *GetFileObjectOK) Code() int { + return 200 +} + +func (o *GetFileObjectOK) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /objects/{objectID}][%d] getFileObjectOK %s", 200, payload) +} + +func (o *GetFileObjectOK) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /objects/{objectID}][%d] getFileObjectOK %s", 200, payload) +} + +func (o *GetFileObjectOK) GetPayload() garm_params.FileObject { + return o.Payload +} + +func (o *GetFileObjectOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + // response payload + if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewGetFileObjectBadRequest creates a GetFileObjectBadRequest with default headers values +func NewGetFileObjectBadRequest() *GetFileObjectBadRequest { + return &GetFileObjectBadRequest{} +} + +/* +GetFileObjectBadRequest describes a response with status code 400, with default header values. + +APIErrorResponse +*/ +type GetFileObjectBadRequest struct { + Payload apiserver_params.APIErrorResponse +} + +// IsSuccess returns true when this get file object bad request response has a 2xx status code +func (o *GetFileObjectBadRequest) IsSuccess() bool { + return false +} + +// IsRedirect returns true when this get file object bad request response has a 3xx status code +func (o *GetFileObjectBadRequest) IsRedirect() bool { + return false +} + +// IsClientError returns true when this get file object bad request response has a 4xx status code +func (o *GetFileObjectBadRequest) IsClientError() bool { + return true +} + +// IsServerError returns true when this get file object bad request response has a 5xx status code +func (o *GetFileObjectBadRequest) IsServerError() bool { + return false +} + +// IsCode returns true when this get file object bad request response a status code equal to that given +func (o *GetFileObjectBadRequest) IsCode(code int) bool { + return code == 400 +} + +// Code gets the status code for the get file object bad request response +func (o *GetFileObjectBadRequest) Code() int { + return 400 +} + +func (o *GetFileObjectBadRequest) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /objects/{objectID}][%d] getFileObjectBadRequest %s", 400, payload) +} + +func (o *GetFileObjectBadRequest) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /objects/{objectID}][%d] getFileObjectBadRequest %s", 400, payload) +} + +func (o *GetFileObjectBadRequest) GetPayload() apiserver_params.APIErrorResponse { + return o.Payload +} + +func (o *GetFileObjectBadRequest) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + // response payload + if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/client/objects/list_file_objects_parameters.go b/client/objects/list_file_objects_parameters.go new file mode 100644 index 00000000..2d238a7e --- /dev/null +++ b/client/objects/list_file_objects_parameters.go @@ -0,0 +1,232 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package objects + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// NewListFileObjectsParams creates a new ListFileObjectsParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewListFileObjectsParams() *ListFileObjectsParams { + return &ListFileObjectsParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewListFileObjectsParamsWithTimeout creates a new ListFileObjectsParams object +// with the ability to set a timeout on a request. +func NewListFileObjectsParamsWithTimeout(timeout time.Duration) *ListFileObjectsParams { + return &ListFileObjectsParams{ + timeout: timeout, + } +} + +// NewListFileObjectsParamsWithContext creates a new ListFileObjectsParams object +// with the ability to set a context for a request. +func NewListFileObjectsParamsWithContext(ctx context.Context) *ListFileObjectsParams { + return &ListFileObjectsParams{ + Context: ctx, + } +} + +// NewListFileObjectsParamsWithHTTPClient creates a new ListFileObjectsParams object +// with the ability to set a custom HTTPClient for a request. +func NewListFileObjectsParamsWithHTTPClient(client *http.Client) *ListFileObjectsParams { + return &ListFileObjectsParams{ + HTTPClient: client, + } +} + +/* +ListFileObjectsParams contains all the parameters to send to the API endpoint + + for the list file objects operation. + + Typically these are written to a http.Request. +*/ +type ListFileObjectsParams struct { + + /* Page. + + The page at which to list. + */ + Page *int64 + + /* PageSize. + + Number of items per page. + */ + PageSize *int64 + + /* Tags. + + List of tags to filter by. + */ + Tags *string + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the list file objects params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *ListFileObjectsParams) WithDefaults() *ListFileObjectsParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the list file objects params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *ListFileObjectsParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the list file objects params +func (o *ListFileObjectsParams) WithTimeout(timeout time.Duration) *ListFileObjectsParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the list file objects params +func (o *ListFileObjectsParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the list file objects params +func (o *ListFileObjectsParams) WithContext(ctx context.Context) *ListFileObjectsParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the list file objects params +func (o *ListFileObjectsParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the list file objects params +func (o *ListFileObjectsParams) WithHTTPClient(client *http.Client) *ListFileObjectsParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the list file objects params +func (o *ListFileObjectsParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithPage adds the page to the list file objects params +func (o *ListFileObjectsParams) WithPage(page *int64) *ListFileObjectsParams { + o.SetPage(page) + return o +} + +// SetPage adds the page to the list file objects params +func (o *ListFileObjectsParams) SetPage(page *int64) { + o.Page = page +} + +// WithPageSize adds the pageSize to the list file objects params +func (o *ListFileObjectsParams) WithPageSize(pageSize *int64) *ListFileObjectsParams { + o.SetPageSize(pageSize) + return o +} + +// SetPageSize adds the pageSize to the list file objects params +func (o *ListFileObjectsParams) SetPageSize(pageSize *int64) { + o.PageSize = pageSize +} + +// WithTags adds the tags to the list file objects params +func (o *ListFileObjectsParams) WithTags(tags *string) *ListFileObjectsParams { + o.SetTags(tags) + return o +} + +// SetTags adds the tags to the list file objects params +func (o *ListFileObjectsParams) SetTags(tags *string) { + o.Tags = tags +} + +// WriteToRequest writes these params to a swagger request +func (o *ListFileObjectsParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + + if o.Page != nil { + + // query param page + var qrPage int64 + + if o.Page != nil { + qrPage = *o.Page + } + qPage := swag.FormatInt64(qrPage) + if qPage != "" { + + if err := r.SetQueryParam("page", qPage); err != nil { + return err + } + } + } + + if o.PageSize != nil { + + // query param pageSize + var qrPageSize int64 + + if o.PageSize != nil { + qrPageSize = *o.PageSize + } + qPageSize := swag.FormatInt64(qrPageSize) + if qPageSize != "" { + + if err := r.SetQueryParam("pageSize", qPageSize); err != nil { + return err + } + } + } + + if o.Tags != nil { + + // query param tags + var qrTags string + + if o.Tags != nil { + qrTags = *o.Tags + } + qTags := qrTags + if qTags != "" { + + if err := r.SetQueryParam("tags", qTags); err != nil { + return err + } + } + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/client/objects/list_file_objects_responses.go b/client/objects/list_file_objects_responses.go new file mode 100644 index 00000000..59e31142 --- /dev/null +++ b/client/objects/list_file_objects_responses.go @@ -0,0 +1,179 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package objects + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "encoding/json" + "fmt" + "io" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + + apiserver_params "github.com/cloudbase/garm/apiserver/params" + garm_params "github.com/cloudbase/garm/params" +) + +// ListFileObjectsReader is a Reader for the ListFileObjects structure. +type ListFileObjectsReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *ListFileObjectsReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewListFileObjectsOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + case 400: + result := NewListFileObjectsBadRequest() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + default: + return nil, runtime.NewAPIError("[GET /objects] ListFileObjects", response, response.Code()) + } +} + +// NewListFileObjectsOK creates a ListFileObjectsOK with default headers values +func NewListFileObjectsOK() *ListFileObjectsOK { + return &ListFileObjectsOK{} +} + +/* +ListFileObjectsOK describes a response with status code 200, with default header values. + +FileObjectPaginatedResponse +*/ +type ListFileObjectsOK struct { + Payload garm_params.FileObjectPaginatedResponse +} + +// IsSuccess returns true when this list file objects o k response has a 2xx status code +func (o *ListFileObjectsOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this list file objects o k response has a 3xx status code +func (o *ListFileObjectsOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this list file objects o k response has a 4xx status code +func (o *ListFileObjectsOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this list file objects o k response has a 5xx status code +func (o *ListFileObjectsOK) IsServerError() bool { + return false +} + +// IsCode returns true when this list file objects o k response a status code equal to that given +func (o *ListFileObjectsOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the list file objects o k response +func (o *ListFileObjectsOK) Code() int { + return 200 +} + +func (o *ListFileObjectsOK) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /objects][%d] listFileObjectsOK %s", 200, payload) +} + +func (o *ListFileObjectsOK) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /objects][%d] listFileObjectsOK %s", 200, payload) +} + +func (o *ListFileObjectsOK) GetPayload() garm_params.FileObjectPaginatedResponse { + return o.Payload +} + +func (o *ListFileObjectsOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + // response payload + if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewListFileObjectsBadRequest creates a ListFileObjectsBadRequest with default headers values +func NewListFileObjectsBadRequest() *ListFileObjectsBadRequest { + return &ListFileObjectsBadRequest{} +} + +/* +ListFileObjectsBadRequest describes a response with status code 400, with default header values. + +APIErrorResponse +*/ +type ListFileObjectsBadRequest struct { + Payload apiserver_params.APIErrorResponse +} + +// IsSuccess returns true when this list file objects bad request response has a 2xx status code +func (o *ListFileObjectsBadRequest) IsSuccess() bool { + return false +} + +// IsRedirect returns true when this list file objects bad request response has a 3xx status code +func (o *ListFileObjectsBadRequest) IsRedirect() bool { + return false +} + +// IsClientError returns true when this list file objects bad request response has a 4xx status code +func (o *ListFileObjectsBadRequest) IsClientError() bool { + return true +} + +// IsServerError returns true when this list file objects bad request response has a 5xx status code +func (o *ListFileObjectsBadRequest) IsServerError() bool { + return false +} + +// IsCode returns true when this list file objects bad request response a status code equal to that given +func (o *ListFileObjectsBadRequest) IsCode(code int) bool { + return code == 400 +} + +// Code gets the status code for the list file objects bad request response +func (o *ListFileObjectsBadRequest) Code() int { + return 400 +} + +func (o *ListFileObjectsBadRequest) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /objects][%d] listFileObjectsBadRequest %s", 400, payload) +} + +func (o *ListFileObjectsBadRequest) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /objects][%d] listFileObjectsBadRequest %s", 400, payload) +} + +func (o *ListFileObjectsBadRequest) GetPayload() apiserver_params.APIErrorResponse { + return o.Payload +} + +func (o *ListFileObjectsBadRequest) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + // response payload + if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/client/objects/objects_client.go b/client/objects/objects_client.go new file mode 100644 index 00000000..36bc6149 --- /dev/null +++ b/client/objects/objects_client.go @@ -0,0 +1,222 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package objects + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "fmt" + + "github.com/go-openapi/runtime" + httptransport "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// New creates a new objects API client. +func New(transport runtime.ClientTransport, formats strfmt.Registry) ClientService { + return &Client{transport: transport, formats: formats} +} + +// New creates a new objects API client with basic auth credentials. +// It takes the following parameters: +// - host: http host (github.com). +// - basePath: any base path for the API client ("/v1", "/v3"). +// - scheme: http scheme ("http", "https"). +// - user: user for basic authentication header. +// - password: password for basic authentication header. +func NewClientWithBasicAuth(host, basePath, scheme, user, password string) ClientService { + transport := httptransport.New(host, basePath, []string{scheme}) + transport.DefaultAuthentication = httptransport.BasicAuth(user, password) + return &Client{transport: transport, formats: strfmt.Default} +} + +// New creates a new objects API client with a bearer token for authentication. +// It takes the following parameters: +// - host: http host (github.com). +// - basePath: any base path for the API client ("/v1", "/v3"). +// - scheme: http scheme ("http", "https"). +// - bearerToken: bearer token for Bearer authentication header. +func NewClientWithBearerToken(host, basePath, scheme, bearerToken string) ClientService { + transport := httptransport.New(host, basePath, []string{scheme}) + transport.DefaultAuthentication = httptransport.BearerToken(bearerToken) + return &Client{transport: transport, formats: strfmt.Default} +} + +/* +Client for objects API +*/ +type Client struct { + transport runtime.ClientTransport + formats strfmt.Registry +} + +// ClientOption may be used to customize the behavior of Client methods. +type ClientOption func(*runtime.ClientOperation) + +// ClientService is the interface for Client methods +type ClientService interface { + DeleteFileObject(params *DeleteFileObjectParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) error + + GetFileObject(params *GetFileObjectParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetFileObjectOK, error) + + ListFileObjects(params *ListFileObjectsParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*ListFileObjectsOK, error) + + UpdateFileObject(params *UpdateFileObjectParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*UpdateFileObjectOK, error) + + SetTransport(transport runtime.ClientTransport) +} + +/* +DeleteFileObject deletes a file object +*/ +func (a *Client) DeleteFileObject(params *DeleteFileObjectParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) error { + // TODO: Validate the params before sending + if params == nil { + params = NewDeleteFileObjectParams() + } + op := &runtime.ClientOperation{ + ID: "DeleteFileObject", + Method: "DELETE", + PathPattern: "/objects/{objectID}", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http"}, + Params: params, + Reader: &DeleteFileObjectReader{formats: a.formats}, + AuthInfo: authInfo, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + _, err := a.transport.Submit(op) + if err != nil { + return err + } + return nil +} + +/* +GetFileObject gets a file object +*/ +func (a *Client) GetFileObject(params *GetFileObjectParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetFileObjectOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewGetFileObjectParams() + } + op := &runtime.ClientOperation{ + ID: "GetFileObject", + Method: "GET", + PathPattern: "/objects/{objectID}", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http"}, + Params: params, + Reader: &GetFileObjectReader{formats: a.formats}, + AuthInfo: authInfo, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*GetFileObjectOK) + if ok { + return success, nil + } + // unexpected success response + // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue + msg := fmt.Sprintf("unexpected success response for GetFileObject: API contract not enforced by server. Client expected to get an error, but got: %T", result) + panic(msg) +} + +/* +ListFileObjects lists file objects +*/ +func (a *Client) ListFileObjects(params *ListFileObjectsParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*ListFileObjectsOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewListFileObjectsParams() + } + op := &runtime.ClientOperation{ + ID: "ListFileObjects", + Method: "GET", + PathPattern: "/objects", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http"}, + Params: params, + Reader: &ListFileObjectsReader{formats: a.formats}, + AuthInfo: authInfo, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*ListFileObjectsOK) + if ok { + return success, nil + } + // unexpected success response + // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue + msg := fmt.Sprintf("unexpected success response for ListFileObjects: API contract not enforced by server. Client expected to get an error, but got: %T", result) + panic(msg) +} + +/* +UpdateFileObject updates a file object +*/ +func (a *Client) UpdateFileObject(params *UpdateFileObjectParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*UpdateFileObjectOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewUpdateFileObjectParams() + } + op := &runtime.ClientOperation{ + ID: "UpdateFileObject", + Method: "PUT", + PathPattern: "/objects/{objectID}", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http"}, + Params: params, + Reader: &UpdateFileObjectReader{formats: a.formats}, + AuthInfo: authInfo, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*UpdateFileObjectOK) + if ok { + return success, nil + } + // unexpected success response + // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue + msg := fmt.Sprintf("unexpected success response for UpdateFileObject: API contract not enforced by server. Client expected to get an error, but got: %T", result) + panic(msg) +} + +// SetTransport changes the transport on the client +func (a *Client) SetTransport(transport runtime.ClientTransport) { + a.transport = transport +} diff --git a/client/objects/update_file_object_parameters.go b/client/objects/update_file_object_parameters.go new file mode 100644 index 00000000..a727dbe8 --- /dev/null +++ b/client/objects/update_file_object_parameters.go @@ -0,0 +1,173 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package objects + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" + + garm_params "github.com/cloudbase/garm/params" +) + +// NewUpdateFileObjectParams creates a new UpdateFileObjectParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewUpdateFileObjectParams() *UpdateFileObjectParams { + return &UpdateFileObjectParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewUpdateFileObjectParamsWithTimeout creates a new UpdateFileObjectParams object +// with the ability to set a timeout on a request. +func NewUpdateFileObjectParamsWithTimeout(timeout time.Duration) *UpdateFileObjectParams { + return &UpdateFileObjectParams{ + timeout: timeout, + } +} + +// NewUpdateFileObjectParamsWithContext creates a new UpdateFileObjectParams object +// with the ability to set a context for a request. +func NewUpdateFileObjectParamsWithContext(ctx context.Context) *UpdateFileObjectParams { + return &UpdateFileObjectParams{ + Context: ctx, + } +} + +// NewUpdateFileObjectParamsWithHTTPClient creates a new UpdateFileObjectParams object +// with the ability to set a custom HTTPClient for a request. +func NewUpdateFileObjectParamsWithHTTPClient(client *http.Client) *UpdateFileObjectParams { + return &UpdateFileObjectParams{ + HTTPClient: client, + } +} + +/* +UpdateFileObjectParams contains all the parameters to send to the API endpoint + + for the update file object operation. + + Typically these are written to a http.Request. +*/ +type UpdateFileObjectParams struct { + + /* Body. + + Parameters used when updating a file object. + */ + Body garm_params.UpdateFileObjectParams + + /* ObjectID. + + The ID of the file object. + */ + ObjectID string + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the update file object params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *UpdateFileObjectParams) WithDefaults() *UpdateFileObjectParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the update file object params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *UpdateFileObjectParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the update file object params +func (o *UpdateFileObjectParams) WithTimeout(timeout time.Duration) *UpdateFileObjectParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the update file object params +func (o *UpdateFileObjectParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the update file object params +func (o *UpdateFileObjectParams) WithContext(ctx context.Context) *UpdateFileObjectParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the update file object params +func (o *UpdateFileObjectParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the update file object params +func (o *UpdateFileObjectParams) WithHTTPClient(client *http.Client) *UpdateFileObjectParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the update file object params +func (o *UpdateFileObjectParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithBody adds the body to the update file object params +func (o *UpdateFileObjectParams) WithBody(body garm_params.UpdateFileObjectParams) *UpdateFileObjectParams { + o.SetBody(body) + return o +} + +// SetBody adds the body to the update file object params +func (o *UpdateFileObjectParams) SetBody(body garm_params.UpdateFileObjectParams) { + o.Body = body +} + +// WithObjectID adds the objectID to the update file object params +func (o *UpdateFileObjectParams) WithObjectID(objectID string) *UpdateFileObjectParams { + o.SetObjectID(objectID) + return o +} + +// SetObjectID adds the objectId to the update file object params +func (o *UpdateFileObjectParams) SetObjectID(objectID string) { + o.ObjectID = objectID +} + +// WriteToRequest writes these params to a swagger request +func (o *UpdateFileObjectParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + if err := r.SetBodyParam(o.Body); err != nil { + return err + } + + // path param objectID + if err := r.SetPathParam("objectID", o.ObjectID); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/client/objects/update_file_object_responses.go b/client/objects/update_file_object_responses.go new file mode 100644 index 00000000..a515d9a9 --- /dev/null +++ b/client/objects/update_file_object_responses.go @@ -0,0 +1,179 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package objects + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "encoding/json" + "fmt" + "io" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + + apiserver_params "github.com/cloudbase/garm/apiserver/params" + garm_params "github.com/cloudbase/garm/params" +) + +// UpdateFileObjectReader is a Reader for the UpdateFileObject structure. +type UpdateFileObjectReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *UpdateFileObjectReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewUpdateFileObjectOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + case 400: + result := NewUpdateFileObjectBadRequest() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + default: + return nil, runtime.NewAPIError("[PUT /objects/{objectID}] UpdateFileObject", response, response.Code()) + } +} + +// NewUpdateFileObjectOK creates a UpdateFileObjectOK with default headers values +func NewUpdateFileObjectOK() *UpdateFileObjectOK { + return &UpdateFileObjectOK{} +} + +/* +UpdateFileObjectOK describes a response with status code 200, with default header values. + +FileObject +*/ +type UpdateFileObjectOK struct { + Payload garm_params.FileObject +} + +// IsSuccess returns true when this update file object o k response has a 2xx status code +func (o *UpdateFileObjectOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this update file object o k response has a 3xx status code +func (o *UpdateFileObjectOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this update file object o k response has a 4xx status code +func (o *UpdateFileObjectOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this update file object o k response has a 5xx status code +func (o *UpdateFileObjectOK) IsServerError() bool { + return false +} + +// IsCode returns true when this update file object o k response a status code equal to that given +func (o *UpdateFileObjectOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the update file object o k response +func (o *UpdateFileObjectOK) Code() int { + return 200 +} + +func (o *UpdateFileObjectOK) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[PUT /objects/{objectID}][%d] updateFileObjectOK %s", 200, payload) +} + +func (o *UpdateFileObjectOK) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[PUT /objects/{objectID}][%d] updateFileObjectOK %s", 200, payload) +} + +func (o *UpdateFileObjectOK) GetPayload() garm_params.FileObject { + return o.Payload +} + +func (o *UpdateFileObjectOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + // response payload + if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewUpdateFileObjectBadRequest creates a UpdateFileObjectBadRequest with default headers values +func NewUpdateFileObjectBadRequest() *UpdateFileObjectBadRequest { + return &UpdateFileObjectBadRequest{} +} + +/* +UpdateFileObjectBadRequest describes a response with status code 400, with default header values. + +APIErrorResponse +*/ +type UpdateFileObjectBadRequest struct { + Payload apiserver_params.APIErrorResponse +} + +// IsSuccess returns true when this update file object bad request response has a 2xx status code +func (o *UpdateFileObjectBadRequest) IsSuccess() bool { + return false +} + +// IsRedirect returns true when this update file object bad request response has a 3xx status code +func (o *UpdateFileObjectBadRequest) IsRedirect() bool { + return false +} + +// IsClientError returns true when this update file object bad request response has a 4xx status code +func (o *UpdateFileObjectBadRequest) IsClientError() bool { + return true +} + +// IsServerError returns true when this update file object bad request response has a 5xx status code +func (o *UpdateFileObjectBadRequest) IsServerError() bool { + return false +} + +// IsCode returns true when this update file object bad request response a status code equal to that given +func (o *UpdateFileObjectBadRequest) IsCode(code int) bool { + return code == 400 +} + +// Code gets the status code for the update file object bad request response +func (o *UpdateFileObjectBadRequest) Code() int { + return 400 +} + +func (o *UpdateFileObjectBadRequest) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[PUT /objects/{objectID}][%d] updateFileObjectBadRequest %s", 400, payload) +} + +func (o *UpdateFileObjectBadRequest) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[PUT /objects/{objectID}][%d] updateFileObjectBadRequest %s", 400, payload) +} + +func (o *UpdateFileObjectBadRequest) GetPayload() apiserver_params.APIErrorResponse { + return o.Payload +} + +func (o *UpdateFileObjectBadRequest) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + // response payload + if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/cmd/garm-cli/cmd/file_object.go b/cmd/garm-cli/cmd/file_object.go new file mode 100644 index 00000000..8c8f1631 --- /dev/null +++ b/cmd/garm-cli/cmd/file_object.go @@ -0,0 +1,585 @@ +// Copyright 2025 Cloudbase Solutions SRL +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +package cmd + +import ( + "encoding/json" + "fmt" + "io" + "mime" + "net/http" + "net/http/httputil" + "os" + "strings" + "sync" + + "github.com/jedib0t/go-pretty/v6/table" + "github.com/jedib0t/go-pretty/v6/text" + "github.com/spf13/cobra" + + apiClientObject "github.com/cloudbase/garm/client/objects" + "github.com/cloudbase/garm/cmd/garm-cli/common" + "github.com/cloudbase/garm/params" +) + +var ( + filePath string + fileName string + fileObjTags string + fileObjDescription string + fileObjPage int64 + fileObjPageSize int64 + outObjectPath string + forceOverwrite bool + quietMode bool +) + +// progressReader wraps an io.Reader and reports progress +type progressReader struct { + reader io.Reader + total int64 + current int64 + lastPrinted int + mu sync.Mutex +} + +func newProgressReader(r io.Reader, total int64) *progressReader { + return &progressReader{ + reader: r, + total: total, + } +} + +func (pr *progressReader) Read(p []byte) (int, error) { + n, err := pr.reader.Read(p) + pr.mu.Lock() + pr.current += int64(n) + pr.mu.Unlock() + pr.printProgress() + return n, err +} + +func (pr *progressReader) printProgress() { + pr.mu.Lock() + defer pr.mu.Unlock() + + if pr.total == 0 { + return + } + + percent := int(float64(pr.current) / float64(pr.total) * 100) + + // Only print every 5% or at 100% + if percent != pr.lastPrinted && (percent%5 == 0 || percent == 100) { + mb := float64(pr.current) / 1024 / 1024 + totalMB := float64(pr.total) / 1024 / 1024 + fmt.Printf("\rUploading: %d%% (%.2f MB / %.2f MB)", percent, mb, totalMB) + if percent == 100 { + fmt.Println() // New line at completion + } + pr.lastPrinted = percent + } +} + +// giteaCredentialsCmd represents the gitea credentials command +var fileObjectCmd = &cobra.Command{ + Use: "object", + Short: "Manage simple object storage", + Long: `Manage simple object storage. + +This command allows you to use GARM as a simple, private internal-use object storage +system streamed to and from the database using blob I/O. The primary goal of this is +to allow users to store provider binaries, agent binaries runner tools and any other +type of files needed for a functional GARM deployment. + +It is not meant to be used to serve files outside of the needs of GARM.`, + Run: nil, +} + +var fileObjListCmd = &cobra.Command{ + Use: "list", + Aliases: []string{"ls"}, + Short: "List file objects", + RunE: func(_ *cobra.Command, _ []string) error { + if needsInit { + return errNeedsInitError + } + + listReq := apiClientObject.NewListFileObjectsParams() + listReq.Tags = &fileObjTags + listReq.Page = &fileObjPage + listReq.PageSize = &fileObjPageSize + response, err := apiCli.Objects.ListFileObjects(listReq, authToken) + if err != nil { + return err + } + formatFileObjsList(response.Payload) + return nil + }, +} + +var fileObjDeleteCmd = &cobra.Command{ + Use: "remove", + Aliases: []string{"delete", "del", "rm"}, + Short: "List file objects", + Args: cobra.ExactArgs(1), + RunE: func(_ *cobra.Command, args []string) error { + objID := args[0] + + delReq := apiClientObject.NewDeleteFileObjectParams().WithObjectID(objID) + err := apiCli.Objects.DeleteFileObject(delReq, authToken) + if err != nil { + return err + } + + return nil + }, +} + +var fileObjShowCmd = &cobra.Command{ + Use: "show", + Short: "Show a file object", + Args: cobra.ExactArgs(1), + RunE: func(_ *cobra.Command, args []string) error { + objID := args[0] + + getReq := apiClientObject.NewGetFileObjectParams().WithObjectID(objID) + resp, err := apiCli.Objects.GetFileObject(getReq, authToken) + if err != nil { + return err + } + formatOneObject(resp.Payload) + return nil + }, +} + +var fileObjUpdateCmd = &cobra.Command{ + Use: "update", + Short: "Update a file object", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + objID := args[0] + + hasChanges := false + updateParams := params.UpdateFileObjectParams{} + updateReq := apiClientObject.NewUpdateFileObjectParams().WithObjectID(objID) + if cmd.Flags().Changed("name") { + hasChanges = true + updateParams.Name = &fileName + } + + if cmd.Flags().Changed("tags") && fileObjTags != "" { + hasChanges = true + updateParams.Tags = strings.Split(fileObjTags, ",") + } + + if cmd.Flags().Changed("description") { + hasChanges = true + updateParams.Description = &fileObjDescription + } + + if !hasChanges { + fmt.Println("no changes made") + return nil + } + + updateReq.Body = updateParams + resp, err := apiCli.Objects.UpdateFileObject(updateReq, authToken) + if err != nil { + return err + } + formatOneObject(resp.Payload) + return nil + }, +} + +var fileObjCreateCmd = &cobra.Command{ + Use: "create", + Aliases: []string{"add", "upload"}, + Short: "Upload a file to the server", + RunE: func(_ *cobra.Command, _ []string) error { + if needsInit { + return errNeedsInitError + } + if filePath == "" { + return fmt.Errorf("missing file path") + } + stat, err := os.Stat(filePath) + if err != nil { + return fmt.Errorf("failed to acces file: %w", err) + } + file, err := os.Open(filePath) + if err != nil { + return fmt.Errorf("failed to open file: %w", err) + } + defer file.Close() + + var tags []string + if fileObjTags != "" { + tags = strings.Split(fileObjTags, ",") + } + + // Wrap file reader with progress tracking + progressR := newProgressReader(file, stat.Size()) + + // Create request with progress-tracked file stream + req, err := rawHTTPClient.NewRequest(http.MethodPost, "/objects/", progressR) + if err != nil { + return fmt.Errorf("failed to create request: %w", err) + } + req.Header.Set("X-File-Name", fileName) + if len(fileObjDescription) > 2<<12 { + return fmt.Errorf("description is too large (max 8KB)") + } + if fileObjDescription != "" { + req.Header.Set("X-File-Description", fileObjDescription) + } + if len(tags) > 0 { + req.Header.Set("X-Tags", strings.Join(tags, ",")) + } + req.ContentLength = stat.Size() + + // Debug: dump request + if debug { + // Don't dump body for large uploads + b, err2 := httputil.DumpRequestOut(req, false) + if err2 != nil { + return fmt.Errorf("failed to dump request: %w", err2) + } + fmt.Fprintf(os.Stderr, "DEBUG REQUEST:\n%s\n", string(b)) + } + + // Show initial progress + fmt.Printf("Uploading %s (%.2f MB)...\n", fileName, float64(stat.Size())/1024/1024) + + resp, err := http.DefaultClient.Do(req) + if err != nil { + if debug { + fmt.Fprintf(os.Stderr, "DEBUG ERROR: %v\n", err) + } + return fmt.Errorf("failed to upload: %w", err) + } + defer resp.Body.Close() + + // Debug: dump response + if debug { + b, err2 := httputil.DumpResponse(resp, true) + if err2 != nil { + return fmt.Errorf("failed to dump response: %w", err2) + } + fmt.Fprintf(os.Stderr, "DEBUG RESPONSE:\n%s\n", string(b)) + } + + data, err := io.ReadAll(resp.Body) + if err != nil { + if debug { + fmt.Fprintf(os.Stderr, "DEBUG ERROR reading response body: %v\n", err) + } + return fmt.Errorf("failed to read response body: %w", err) + } + + // Check for non-2xx status codes + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + if debug { + fmt.Fprintf(os.Stderr, "DEBUG ERROR: HTTP %d: %s\n", resp.StatusCode, string(data)) + } + return fmt.Errorf("HTTP %d: %s", resp.StatusCode, string(data)) + } + + var fileResp params.FileObject + if err := json.Unmarshal(data, &fileResp); err != nil { + if debug { + fmt.Fprintf(os.Stderr, "DEBUG ERROR decoding response: %v\nResponse body: %s\n", err, string(data)) + } + return fmt.Errorf("failed to decode response: %w", err) + } + formatOneObject(fileResp) + return nil + }, +} + +var fileObjDownloadCmd = &cobra.Command{ + Use: "download", + Short: "Download a file from the server", + Args: cobra.ExactArgs(1), + SilenceUsage: true, + RunE: func(_ *cobra.Command, args []string) error { + if needsInit { + return errNeedsInitError + } + + objectID := args[0] + + // Create request for download + req, err := rawHTTPClient.NewRequest(http.MethodGet, fmt.Sprintf("/objects/%s/download", objectID), nil) + if err != nil { + return fmt.Errorf("failed to create request: %w", err) + } + + // Debug: dump request + if debug { + b, err2 := httputil.DumpRequestOut(req, false) + if err2 != nil { + return fmt.Errorf("failed to dump request: %w", err2) + } + fmt.Fprintf(os.Stderr, "DEBUG REQUEST:\n%s\n", string(b)) + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + if debug { + fmt.Fprintf(os.Stderr, "DEBUG ERROR: %v\n", err) + } + return fmt.Errorf("failed to download: %w", err) + } + defer resp.Body.Close() + + // Debug: dump response headers (not body for large files) + if debug { + b, err2 := httputil.DumpResponse(resp, false) + if err2 != nil { + return fmt.Errorf("failed to dump response: %w", err2) + } + fmt.Fprintf(os.Stderr, "DEBUG RESPONSE:\n%s\n", string(b)) + } + + // Check for non-2xx status codes + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + data, _ := io.ReadAll(resp.Body) + if debug { + fmt.Fprintf(os.Stderr, "DEBUG ERROR: HTTP %d: %s\n", resp.StatusCode, string(data)) + } + return fmt.Errorf("HTTP %d: %s", resp.StatusCode, string(data)) + } + + // Get filename from Content-Disposition header if not specified + filename := outObjectPath + if filename == "" { + contentDisp := resp.Header.Get("Content-Disposition") + if contentDisp != "" { + // Parse Content-Disposition header + _, params, err := mime.ParseMediaType(contentDisp) + if err == nil && params["filename"] != "" { + filename = params["filename"] + } + } + if filename == "" { + return fmt.Errorf("no output file specified and server did not provide filename") + } + } + + // Check if path exists + if stat, err := os.Stat(filename); err == nil { + if stat.IsDir() { + return fmt.Errorf("output path is a directory: %s", filename) + } + if !forceOverwrite { + return fmt.Errorf("file already exists: %s (use --force-overwrite to overwrite)", filename) + } + } + + // Create output file + outFile, err := os.Create(filename) + if err != nil { + return fmt.Errorf("failed to create output file: %w", err) + } + defer outFile.Close() + + // Get content length for progress tracking + contentLength := resp.ContentLength + if contentLength <= 0 { + // Try to parse from header if not set + contentLengthStr := resp.Header.Get("Content-Length") + if contentLengthStr != "" { + fmt.Sscanf(contentLengthStr, "%d", &contentLength) + } + } + + // Show initial progress + if !quietMode { + if contentLength > 0 { + fmt.Printf("Downloading %s (%.2f MB)...\n", filename, float64(contentLength)/1024/1024) + } else { + fmt.Printf("Downloading %s...\n", filename) + } + } + + // Wrap reader with progress tracking + var reader io.Reader = resp.Body + if contentLength > 0 && !quietMode { + progressR := newProgressReader(resp.Body, contentLength) + // Change progress message for download + reader = &downloadProgressReader{progressR} + } + + // Copy to file + written, err := io.Copy(outFile, reader) + if err != nil { + if debug { + fmt.Fprintf(os.Stderr, "DEBUG ERROR writing to file: %v\n", err) + } + return fmt.Errorf("failed to write file: %w", err) + } + + if !quietMode { + fmt.Printf("Downloaded %s (%.2f MB)\n", filename, float64(written)/1024/1024) + } + return nil + }, +} + +// downloadProgressReader wraps progressReader to change the message +type downloadProgressReader struct { + *progressReader +} + +func (dpr *downloadProgressReader) Read(p []byte) (int, error) { + n, err := dpr.reader.Read(p) + dpr.mu.Lock() + dpr.current += int64(n) + dpr.mu.Unlock() + dpr.printProgress() + return n, err +} + +func (dpr *downloadProgressReader) printProgress() { + dpr.mu.Lock() + defer dpr.mu.Unlock() + + if dpr.total == 0 { + return + } + + percent := int(float64(dpr.current) / float64(dpr.total) * 100) + + // Only print every 5% or at 100% + if percent != dpr.lastPrinted && (percent%5 == 0 || percent == 100) { + mb := float64(dpr.current) / 1024 / 1024 + totalMB := float64(dpr.total) / 1024 / 1024 + fmt.Printf("\rDownloading: %d%% (%.2f MB / %.2f MB)", percent, mb, totalMB) + if percent == 100 { + fmt.Println() // New line at completion + } + dpr.lastPrinted = percent + } +} + +func init() { + fileObjCreateCmd.Flags().StringVar(&fileName, "name", "", "Name of the file") + fileObjCreateCmd.Flags().StringVar(&fileObjDescription, "description", "", "A short description for the file") + fileObjCreateCmd.Flags().StringVar(&filePath, "path", "", "The path on disk to the file") + fileObjCreateCmd.Flags().StringVar(&fileObjTags, "tags", "", "Comma separated tag list (ie: test,binary,os_type=linux,example)") + + fileObjCreateCmd.MarkFlagRequired("name") + fileObjCreateCmd.MarkFlagRequired("path") + + fileObjDownloadCmd.Flags().StringVar(&outObjectPath, "out-file", "", "Output file path (optional, defaults to filename from server)") + fileObjDownloadCmd.Flags().BoolVar(&forceOverwrite, "force-overwrite", false, "Overwrite existing file") + fileObjDownloadCmd.Flags().BoolVarP(&quietMode, "quiet", "q", false, "Suppress download progress output") + + fileObjUpdateCmd.Flags().StringVar(&fileName, "name", "", "New name of the file") + fileObjUpdateCmd.Flags().StringVar(&fileObjTags, "tags", "", "Set new tags. The tags are a comma separated list (ie: test,binary,os_type=linux,example)") + fileObjUpdateCmd.Flags().StringVar(&fileObjDescription, "description", "", "A short description for the file") + + fileObjListCmd.Flags().StringVar(&fileObjTags, "tags", "", "Comma separated list of tags to use as search items (optional)") + fileObjListCmd.Flags().Int64Var(&fileObjPage, "page", 0, "The file object page to display") + fileObjListCmd.Flags().Int64Var(&fileObjPageSize, "page-size", 25, "Total number of results per page") + + fileObjectCmd.AddCommand(fileObjCreateCmd) + fileObjectCmd.AddCommand(fileObjDownloadCmd) + fileObjectCmd.AddCommand(fileObjUpdateCmd) + fileObjectCmd.AddCommand(fileObjListCmd) + fileObjectCmd.AddCommand(fileObjShowCmd) + fileObjectCmd.AddCommand(fileObjDeleteCmd) + + rootCmd.AddCommand(fileObjectCmd) +} + +func formatOneObject(fileObj params.FileObject) { + if outputFormat == common.OutputFormatJSON { + printAsJSON(fileObj) + return + } + t := table.NewWriter() + t.Style().Options.SeparateHeader = true + header := table.Row{"Field", "Value"} + t.AppendHeader(header) + t.AppendRow([]interface{}{"ID", fileObj.ID}) + t.AppendRow([]interface{}{"Name", fileObj.Name}) + t.AppendRow([]interface{}{"Created At", fileObj.CreatedAt}) + t.AppendRow([]interface{}{"Updated At", fileObj.UpdatedAt}) + t.AppendRow([]interface{}{"Size", fileObj.Size}) + t.AppendRow([]interface{}{"SHA256SUM", fileObj.SHA256}) + t.AppendRow([]interface{}{"File Type", fileObj.FileType}) + t.AppendRow([]interface{}{"Description", fileObj.Description}) + + if len(fileObj.Tags) > 0 { + t.AppendRow([]interface{}{"Tags", strings.Join(fileObj.Tags, ", ")}) + } + t.SetColumnConfigs([]table.ColumnConfig{ + {Number: 1, AutoMerge: true}, + {Number: 2, AutoMerge: false, WidthMax: 100}, + }) + fmt.Println(t.Render()) +} + +func formatFileObjsList(files params.FileObjectPaginatedResponse) { + if outputFormat == common.OutputFormatJSON { + printAsJSON(files) + return + } + t := table.NewWriter() + // Define column count + numCols := 6 + t.Style().Options.SeparateHeader = true + t.Style().Options.SeparateRows = true + + // Page header - fill all columns with the same text + pageHeaderText := fmt.Sprintf("Page %d of %d", files.CurrentPage, files.Pages) + pageHeader := make(table.Row, numCols) + for i := range pageHeader { + pageHeader[i] = pageHeaderText + } + t.AppendHeader(pageHeader, table.RowConfig{ + AutoMerge: true, + AutoMergeAlign: text.AlignCenter, + }) + // Column headers + header := table.Row{"ID", "Name", "Size", "Tags", "Created", "Updated"} + t.AppendHeader(header) + // Right-align numeric columns + t.SetColumnConfigs([]table.ColumnConfig{ + {Number: 1, Align: text.AlignRight}, + {Number: 3, Align: text.AlignRight}, + }) + + for _, val := range files.Results { + row := table.Row{val.ID, val.Name, formatSize(val.Size), strings.Join(val.Tags, ", "), val.CreatedAt.Format("2006-01-02 15:04:05"), val.UpdatedAt.Format("2006-01-02 15:04:05")} + t.AppendRow(row) + } + fmt.Println(t.Render()) +} + +func formatSize(bytes int64) string { + const unit = 1024 + if bytes < unit { + return fmt.Sprintf("%d B", bytes) + } + div, exp := int64(unit), 0 + for n := bytes / unit; n >= unit; n /= unit { + div *= unit + exp++ + } + return fmt.Sprintf("%.1f %cB", float64(bytes)/float64(div), "KMGTPE"[exp]) +} diff --git a/cmd/garm-cli/cmd/root.go b/cmd/garm-cli/cmd/root.go index df3ef11b..693706ca 100644 --- a/cmd/garm-cli/cmd/root.go +++ b/cmd/garm-cli/cmd/root.go @@ -17,8 +17,10 @@ package cmd import ( "encoding/json" "fmt" + "net/http" "net/url" "os" + "time" "github.com/go-openapi/runtime" openapiRuntimeClient "github.com/go-openapi/runtime/client" @@ -47,6 +49,7 @@ var ( poolBalancerType string outputFormat common.OutputFormat = common.OutputFormatTable errNeedsInitError = fmt.Errorf("please log into a garm installation first") + rawHTTPClient *rawClient ) // rootCmd represents the base command when called without any subcommands @@ -90,6 +93,19 @@ func initAPIClient(baseURL, token string) { WithSchemes([]string{baseURLParsed.Scheme}) apiCli = apiClient.NewHTTPClientWithConfig(nil, transportCfg) authToken = openapiRuntimeClient.BearerToken(token) + + joined, err := url.JoinPath(baseURL, apiClient.DefaultBasePath) + if err != nil { + fmt.Printf("Failed to join base url %s with %s: %s", baseURL, apiClient.DefaultBasePath, err) + os.Exit(1) + } + rawHTTPClient = &rawClient{ + BaseURL: joined, + Token: token, + HTTPClient: &http.Client{ + Timeout: 30 * time.Second, + }, + } } func initConfig() { diff --git a/cmd/garm-cli/cmd/util.go b/cmd/garm-cli/cmd/util.go index a1e2ab85..2b276b5b 100644 --- a/cmd/garm-cli/cmd/util.go +++ b/cmd/garm-cli/cmd/util.go @@ -2,7 +2,10 @@ package cmd import ( "fmt" + "io" "math" + "net/http" + "net/url" "strconv" "strings" @@ -147,3 +150,27 @@ func resolveEnterprise(nameOrID, endpoint string) (string, error) { return response.Payload[0].ID, nil } + +type rawClient struct { + BaseURL string + Token string + HTTPClient *http.Client +} + +// NewRequest creates a new HTTP request with auth and proper URL +func (c *rawClient) NewRequest(method, path string, body io.Reader) (*http.Request, error) { + url, err := url.JoinPath(c.BaseURL, path) + if err != nil { + return nil, fmt.Errorf("failed to join URL: %w", err) + } + + req, err := http.NewRequest(method, url, body) + if err != nil { + return nil, err + } + + // Add JWT token + req.Header.Set("Authorization", "Bearer "+c.Token) + + return req, nil +} diff --git a/cmd/garm/main.go b/cmd/garm/main.go index 127eeaca..5ab4f18b 100644 --- a/cmd/garm/main.go +++ b/cmd/garm/main.go @@ -346,9 +346,12 @@ func main() { Handler: handlers.CORS(methodsOk, headersOk, allowedOrigins)(router), ReadHeaderTimeout: 5 * time.Second, MaxHeaderBytes: 1 << 20, // 1 MB - ReadTimeout: 15 * time.Second, - WriteTimeout: 15 * time.Second, - IdleTimeout: 60 * time.Second, + // Increased timeouts to support large file uploads/downloads + // ReadTimeout covers the entire request read including body + ReadTimeout: 30 * time.Minute, + // WriteTimeout covers the entire response write + WriteTimeout: 30 * time.Minute, + IdleTimeout: 60 * time.Second, } listener, err := net.Listen("tcp", srv.Addr) diff --git a/database/common/mocks/Store.go b/database/common/mocks/Store.go index 9635bbd3..ead6cda5 100644 --- a/database/common/mocks/Store.go +++ b/database/common/mocks/Store.go @@ -4,8 +4,10 @@ package mocks import ( context "context" + io "io" garm_provider_commonparams "github.com/cloudbase/garm-provider-common/params" + mock "github.com/stretchr/testify/mock" params "github.com/cloudbase/garm/params" @@ -403,6 +405,64 @@ func (_c *Store_CreateEntityScaleSet_Call) RunAndReturn(run func(context.Context return _c } +// CreateFileObject provides a mock function with given fields: ctx, param, reader +func (_m *Store) CreateFileObject(ctx context.Context, param params.CreateFileObjectParams, reader io.Reader) (params.FileObject, error) { + ret := _m.Called(ctx, param, reader) + + if len(ret) == 0 { + panic("no return value specified for CreateFileObject") + } + + var r0 params.FileObject + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, params.CreateFileObjectParams, io.Reader) (params.FileObject, error)); ok { + return rf(ctx, param, reader) + } + if rf, ok := ret.Get(0).(func(context.Context, params.CreateFileObjectParams, io.Reader) params.FileObject); ok { + r0 = rf(ctx, param, reader) + } else { + r0 = ret.Get(0).(params.FileObject) + } + + if rf, ok := ret.Get(1).(func(context.Context, params.CreateFileObjectParams, io.Reader) error); ok { + r1 = rf(ctx, param, reader) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Store_CreateFileObject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateFileObject' +type Store_CreateFileObject_Call struct { + *mock.Call +} + +// CreateFileObject is a helper method to define mock.On call +// - ctx context.Context +// - param params.CreateFileObjectParams +// - reader io.Reader +func (_e *Store_Expecter) CreateFileObject(ctx interface{}, param interface{}, reader interface{}) *Store_CreateFileObject_Call { + return &Store_CreateFileObject_Call{Call: _e.mock.On("CreateFileObject", ctx, param, reader)} +} + +func (_c *Store_CreateFileObject_Call) Run(run func(ctx context.Context, param params.CreateFileObjectParams, reader io.Reader)) *Store_CreateFileObject_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(params.CreateFileObjectParams), args[2].(io.Reader)) + }) + return _c +} + +func (_c *Store_CreateFileObject_Call) Return(fileObjParam params.FileObject, err error) *Store_CreateFileObject_Call { + _c.Call.Return(fileObjParam, err) + return _c +} + +func (_c *Store_CreateFileObject_Call) RunAndReturn(run func(context.Context, params.CreateFileObjectParams, io.Reader) (params.FileObject, error)) *Store_CreateFileObject_Call { + _c.Call.Return(run) + return _c +} + // CreateGiteaCredentials provides a mock function with given fields: ctx, param func (_m *Store) CreateGiteaCredentials(ctx context.Context, param params.CreateGiteaCredentialsParams) (params.ForgeCredentials, error) { ret := _m.Called(ctx, param) @@ -1180,6 +1240,53 @@ func (_c *Store_DeleteEntityPool_Call) RunAndReturn(run func(context.Context, pa return _c } +// DeleteFileObject provides a mock function with given fields: ctx, objID +func (_m *Store) DeleteFileObject(ctx context.Context, objID uint) error { + ret := _m.Called(ctx, objID) + + if len(ret) == 0 { + panic("no return value specified for DeleteFileObject") + } + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, uint) error); ok { + r0 = rf(ctx, objID) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// Store_DeleteFileObject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DeleteFileObject' +type Store_DeleteFileObject_Call struct { + *mock.Call +} + +// DeleteFileObject is a helper method to define mock.On call +// - ctx context.Context +// - objID uint +func (_e *Store_Expecter) DeleteFileObject(ctx interface{}, objID interface{}) *Store_DeleteFileObject_Call { + return &Store_DeleteFileObject_Call{Call: _e.mock.On("DeleteFileObject", ctx, objID)} +} + +func (_c *Store_DeleteFileObject_Call) Run(run func(ctx context.Context, objID uint)) *Store_DeleteFileObject_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(uint)) + }) + return _c +} + +func (_c *Store_DeleteFileObject_Call) Return(_a0 error) *Store_DeleteFileObject_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *Store_DeleteFileObject_Call) RunAndReturn(run func(context.Context, uint) error) *Store_DeleteFileObject_Call { + _c.Call.Return(run) + return _c +} + // DeleteGiteaCredentials provides a mock function with given fields: ctx, id func (_m *Store) DeleteGiteaCredentials(ctx context.Context, id uint) error { ret := _m.Called(ctx, id) @@ -2035,6 +2142,63 @@ func (_c *Store_GetEntityPool_Call) RunAndReturn(run func(context.Context, param return _c } +// GetFileObject provides a mock function with given fields: ctx, objID +func (_m *Store) GetFileObject(ctx context.Context, objID uint) (params.FileObject, error) { + ret := _m.Called(ctx, objID) + + if len(ret) == 0 { + panic("no return value specified for GetFileObject") + } + + var r0 params.FileObject + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, uint) (params.FileObject, error)); ok { + return rf(ctx, objID) + } + if rf, ok := ret.Get(0).(func(context.Context, uint) params.FileObject); ok { + r0 = rf(ctx, objID) + } else { + r0 = ret.Get(0).(params.FileObject) + } + + if rf, ok := ret.Get(1).(func(context.Context, uint) error); ok { + r1 = rf(ctx, objID) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Store_GetFileObject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetFileObject' +type Store_GetFileObject_Call struct { + *mock.Call +} + +// GetFileObject is a helper method to define mock.On call +// - ctx context.Context +// - objID uint +func (_e *Store_Expecter) GetFileObject(ctx interface{}, objID interface{}) *Store_GetFileObject_Call { + return &Store_GetFileObject_Call{Call: _e.mock.On("GetFileObject", ctx, objID)} +} + +func (_c *Store_GetFileObject_Call) Run(run func(ctx context.Context, objID uint)) *Store_GetFileObject_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(uint)) + }) + return _c +} + +func (_c *Store_GetFileObject_Call) Return(_a0 params.FileObject, _a1 error) *Store_GetFileObject_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *Store_GetFileObject_Call) RunAndReturn(run func(context.Context, uint) (params.FileObject, error)) *Store_GetFileObject_Call { + _c.Call.Return(run) + return _c +} + // GetForgeEntity provides a mock function with given fields: _a0, entityType, entityID func (_m *Store) GetForgeEntity(_a0 context.Context, entityType params.ForgeEntityType, entityID string) (params.ForgeEntity, error) { ret := _m.Called(_a0, entityType, entityID) @@ -3756,6 +3920,64 @@ func (_c *Store_ListEntityScaleSets_Call) RunAndReturn(run func(context.Context, return _c } +// ListFileObjects provides a mock function with given fields: ctx, page, pageSize +func (_m *Store) ListFileObjects(ctx context.Context, page uint64, pageSize uint64) (params.FileObjectPaginatedResponse, error) { + ret := _m.Called(ctx, page, pageSize) + + if len(ret) == 0 { + panic("no return value specified for ListFileObjects") + } + + var r0 params.FileObjectPaginatedResponse + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, uint64, uint64) (params.FileObjectPaginatedResponse, error)); ok { + return rf(ctx, page, pageSize) + } + if rf, ok := ret.Get(0).(func(context.Context, uint64, uint64) params.FileObjectPaginatedResponse); ok { + r0 = rf(ctx, page, pageSize) + } else { + r0 = ret.Get(0).(params.FileObjectPaginatedResponse) + } + + if rf, ok := ret.Get(1).(func(context.Context, uint64, uint64) error); ok { + r1 = rf(ctx, page, pageSize) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Store_ListFileObjects_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListFileObjects' +type Store_ListFileObjects_Call struct { + *mock.Call +} + +// ListFileObjects is a helper method to define mock.On call +// - ctx context.Context +// - page uint64 +// - pageSize uint64 +func (_e *Store_Expecter) ListFileObjects(ctx interface{}, page interface{}, pageSize interface{}) *Store_ListFileObjects_Call { + return &Store_ListFileObjects_Call{Call: _e.mock.On("ListFileObjects", ctx, page, pageSize)} +} + +func (_c *Store_ListFileObjects_Call) Run(run func(ctx context.Context, page uint64, pageSize uint64)) *Store_ListFileObjects_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(uint64), args[2].(uint64)) + }) + return _c +} + +func (_c *Store_ListFileObjects_Call) Return(_a0 params.FileObjectPaginatedResponse, _a1 error) *Store_ListFileObjects_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *Store_ListFileObjects_Call) RunAndReturn(run func(context.Context, uint64, uint64) (params.FileObjectPaginatedResponse, error)) *Store_ListFileObjects_Call { + _c.Call.Return(run) + return _c +} + // ListGiteaCredentials provides a mock function with given fields: ctx func (_m *Store) ListGiteaCredentials(ctx context.Context) ([]params.ForgeCredentials, error) { ret := _m.Called(ctx) @@ -4392,6 +4614,65 @@ func (_c *Store_LockJob_Call) RunAndReturn(run func(context.Context, int64, stri return _c } +// OpenFileObjectContent provides a mock function with given fields: ctx, objID +func (_m *Store) OpenFileObjectContent(ctx context.Context, objID uint) (io.ReadCloser, error) { + ret := _m.Called(ctx, objID) + + if len(ret) == 0 { + panic("no return value specified for OpenFileObjectContent") + } + + var r0 io.ReadCloser + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, uint) (io.ReadCloser, error)); ok { + return rf(ctx, objID) + } + if rf, ok := ret.Get(0).(func(context.Context, uint) io.ReadCloser); ok { + r0 = rf(ctx, objID) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(io.ReadCloser) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, uint) error); ok { + r1 = rf(ctx, objID) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Store_OpenFileObjectContent_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'OpenFileObjectContent' +type Store_OpenFileObjectContent_Call struct { + *mock.Call +} + +// OpenFileObjectContent is a helper method to define mock.On call +// - ctx context.Context +// - objID uint +func (_e *Store_Expecter) OpenFileObjectContent(ctx interface{}, objID interface{}) *Store_OpenFileObjectContent_Call { + return &Store_OpenFileObjectContent_Call{Call: _e.mock.On("OpenFileObjectContent", ctx, objID)} +} + +func (_c *Store_OpenFileObjectContent_Call) Run(run func(ctx context.Context, objID uint)) *Store_OpenFileObjectContent_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(uint)) + }) + return _c +} + +func (_c *Store_OpenFileObjectContent_Call) Return(_a0 io.ReadCloser, _a1 error) *Store_OpenFileObjectContent_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *Store_OpenFileObjectContent_Call) RunAndReturn(run func(context.Context, uint) (io.ReadCloser, error)) *Store_OpenFileObjectContent_Call { + _c.Call.Return(run) + return _c +} + // PoolInstanceCount provides a mock function with given fields: ctx, poolID func (_m *Store) PoolInstanceCount(ctx context.Context, poolID string) (int64, error) { ret := _m.Called(ctx, poolID) @@ -4449,6 +4730,65 @@ func (_c *Store_PoolInstanceCount_Call) RunAndReturn(run func(context.Context, s return _c } +// SearchFileObjectByTags provides a mock function with given fields: ctx, tags, page, pageSize +func (_m *Store) SearchFileObjectByTags(ctx context.Context, tags []string, page uint64, pageSize uint64) (params.FileObjectPaginatedResponse, error) { + ret := _m.Called(ctx, tags, page, pageSize) + + if len(ret) == 0 { + panic("no return value specified for SearchFileObjectByTags") + } + + var r0 params.FileObjectPaginatedResponse + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []string, uint64, uint64) (params.FileObjectPaginatedResponse, error)); ok { + return rf(ctx, tags, page, pageSize) + } + if rf, ok := ret.Get(0).(func(context.Context, []string, uint64, uint64) params.FileObjectPaginatedResponse); ok { + r0 = rf(ctx, tags, page, pageSize) + } else { + r0 = ret.Get(0).(params.FileObjectPaginatedResponse) + } + + if rf, ok := ret.Get(1).(func(context.Context, []string, uint64, uint64) error); ok { + r1 = rf(ctx, tags, page, pageSize) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Store_SearchFileObjectByTags_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SearchFileObjectByTags' +type Store_SearchFileObjectByTags_Call struct { + *mock.Call +} + +// SearchFileObjectByTags is a helper method to define mock.On call +// - ctx context.Context +// - tags []string +// - page uint64 +// - pageSize uint64 +func (_e *Store_Expecter) SearchFileObjectByTags(ctx interface{}, tags interface{}, page interface{}, pageSize interface{}) *Store_SearchFileObjectByTags_Call { + return &Store_SearchFileObjectByTags_Call{Call: _e.mock.On("SearchFileObjectByTags", ctx, tags, page, pageSize)} +} + +func (_c *Store_SearchFileObjectByTags_Call) Run(run func(ctx context.Context, tags []string, page uint64, pageSize uint64)) *Store_SearchFileObjectByTags_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]string), args[2].(uint64), args[3].(uint64)) + }) + return _c +} + +func (_c *Store_SearchFileObjectByTags_Call) Return(_a0 params.FileObjectPaginatedResponse, _a1 error) *Store_SearchFileObjectByTags_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *Store_SearchFileObjectByTags_Call) RunAndReturn(run func(context.Context, []string, uint64, uint64) (params.FileObjectPaginatedResponse, error)) *Store_SearchFileObjectByTags_Call { + _c.Call.Return(run) + return _c +} + // SetScaleSetDesiredRunnerCount provides a mock function with given fields: ctx, scaleSetID, desiredRunnerCount func (_m *Store) SetScaleSetDesiredRunnerCount(ctx context.Context, scaleSetID uint, desiredRunnerCount int) error { ret := _m.Called(ctx, scaleSetID, desiredRunnerCount) @@ -4826,6 +5166,64 @@ func (_c *Store_UpdateEntityScaleSet_Call) RunAndReturn(run func(context.Context return _c } +// UpdateFileObject provides a mock function with given fields: ctx, objID, param +func (_m *Store) UpdateFileObject(ctx context.Context, objID uint, param params.UpdateFileObjectParams) (params.FileObject, error) { + ret := _m.Called(ctx, objID, param) + + if len(ret) == 0 { + panic("no return value specified for UpdateFileObject") + } + + var r0 params.FileObject + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, uint, params.UpdateFileObjectParams) (params.FileObject, error)); ok { + return rf(ctx, objID, param) + } + if rf, ok := ret.Get(0).(func(context.Context, uint, params.UpdateFileObjectParams) params.FileObject); ok { + r0 = rf(ctx, objID, param) + } else { + r0 = ret.Get(0).(params.FileObject) + } + + if rf, ok := ret.Get(1).(func(context.Context, uint, params.UpdateFileObjectParams) error); ok { + r1 = rf(ctx, objID, param) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Store_UpdateFileObject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UpdateFileObject' +type Store_UpdateFileObject_Call struct { + *mock.Call +} + +// UpdateFileObject is a helper method to define mock.On call +// - ctx context.Context +// - objID uint +// - param params.UpdateFileObjectParams +func (_e *Store_Expecter) UpdateFileObject(ctx interface{}, objID interface{}, param interface{}) *Store_UpdateFileObject_Call { + return &Store_UpdateFileObject_Call{Call: _e.mock.On("UpdateFileObject", ctx, objID, param)} +} + +func (_c *Store_UpdateFileObject_Call) Run(run func(ctx context.Context, objID uint, param params.UpdateFileObjectParams)) *Store_UpdateFileObject_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(uint), args[2].(params.UpdateFileObjectParams)) + }) + return _c +} + +func (_c *Store_UpdateFileObject_Call) Return(_a0 params.FileObject, _a1 error) *Store_UpdateFileObject_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *Store_UpdateFileObject_Call) RunAndReturn(run func(context.Context, uint, params.UpdateFileObjectParams) (params.FileObject, error)) *Store_UpdateFileObject_Call { + _c.Call.Return(run) + return _c +} + // UpdateGiteaCredentials provides a mock function with given fields: ctx, id, param func (_m *Store) UpdateGiteaCredentials(ctx context.Context, id uint, param params.UpdateGiteaCredentialsParams) (params.ForgeCredentials, error) { ret := _m.Called(ctx, id, param) diff --git a/database/common/store.go b/database/common/store.go index 470f2302..d54cab12 100644 --- a/database/common/store.go +++ b/database/common/store.go @@ -183,7 +183,7 @@ type FileObjectStore interface { ListFileObjects(ctx context.Context, page, pageSize uint64) (params.FileObjectPaginatedResponse, error) SearchFileObjectByTags(ctx context.Context, tags []string, page, pageSize uint64) (params.FileObjectPaginatedResponse, error) GetFileObject(ctx context.Context, objID uint) (params.FileObject, error) - CreateFileObject(ctx context.Context, name string, size int64, tags []string, reader io.Reader) (params.FileObject, error) + CreateFileObject(ctx context.Context, param params.CreateFileObjectParams, reader io.Reader) (fileObjParam params.FileObject, err error) UpdateFileObject(ctx context.Context, objID uint, param params.UpdateFileObjectParams) (params.FileObject, error) DeleteFileObject(ctx context.Context, objID uint) error OpenFileObjectContent(ctx context.Context, objID uint) (io.ReadCloser, error) diff --git a/database/sql/file_store.go b/database/sql/file_store.go index 61a3e1a8..fcdacff1 100644 --- a/database/sql/file_store.go +++ b/database/sql/file_store.go @@ -8,6 +8,7 @@ import ( "errors" "fmt" "io" + "math" "github.com/mattn/go-sqlite3" "gorm.io/gorm" @@ -18,17 +19,18 @@ import ( "github.com/cloudbase/garm/util" ) -func (s *sqlDatabase) CreateFileObject(ctx context.Context, name string, size int64, tags []string, reader io.Reader) (fileObjParam params.FileObject, err error) { +// func (s *sqlDatabase) CreateFileObject(ctx context.Context, name string, size int64, tags []string, reader io.Reader) (fileObjParam params.FileObject, err error) { +func (s *sqlDatabase) CreateFileObject(ctx context.Context, param params.CreateFileObjectParams, reader io.Reader) (fileObjParam params.FileObject, err error) { // Read first 8KB for type detection buffer := make([]byte, 8192) n, _ := io.ReadFull(reader, buffer) fileType := util.DetectFileType(buffer[:n]) - // Create document with pre-allocated blob + fileObj := FileObject{ - Name: name, - FileType: fileType, - Size: size, - Content: make([]byte, size), + Name: param.Name, + Description: param.Description, + FileType: fileType, + Size: param.Size, } defer func() { @@ -37,10 +39,19 @@ func (s *sqlDatabase) CreateFileObject(ctx context.Context, name string, size in } }() + // Create the file first, without any space allocated for the blob. if err := s.conn.Create(&fileObj).Error; err != nil { return params.FileObject{}, fmt.Errorf("failed to create file object: %w", err) } + // allocate space for the blob using the zeroblob() function. This will allow us to avoid + // having to allocate potentially huge byte arrays in memory and writing that huge blob to + // disk. + query := fmt.Sprintf(`UPDATE %q SET content = zeroblob(?) WHERE id = ?`, fileObj.TableName()) + if err := s.conn.Exec(query, param.Size, fileObj.ID).Error; err != nil { + return params.FileObject{}, fmt.Errorf("failed to allocate disk space: %w", err) + } + // Stream file to blob and compute SHA256 conn, err := s.sqlDB.Conn(ctx) if err != nil { @@ -54,7 +65,7 @@ func (s *sqlDatabase) CreateFileObject(ctx context.Context, name string, size in blob, err := sqliteConn.Blob("main", fileObj.TableName(), "content", int64(fileObj.ID), 1) if err != nil { - return err + return fmt.Errorf("failed to open blob: %w", err) } defer blob.Close() @@ -63,14 +74,14 @@ func (s *sqlDatabase) CreateFileObject(ctx context.Context, name string, size in // Write the buffered data first if _, err := blob.Write(buffer[:n]); err != nil { - return err + return fmt.Errorf("failed to write blob initial buffer: %w", err) } hasher.Write(buffer[:n]) // Stream the rest with hash computation _, err = io.Copy(io.MultiWriter(blob, hasher), reader) if err != nil { - return err + return fmt.Errorf("failed to write blob: %w", err) } // Get final hash @@ -87,7 +98,7 @@ func (s *sqlDatabase) CreateFileObject(ctx context.Context, name string, size in } // Create tag entries - for _, tag := range tags { + for _, tag := range param.Tags { fileObjTag := FileObjectTag{ FileObjectID: fileObj.ID, Tag: tag, @@ -129,6 +140,10 @@ func (s *sqlDatabase) UpdateFileObject(_ context.Context, objID uint, param para fileObj.Name = *param.Name } + if param.Description != nil { + fileObj.Description = *param.Description + } + // Update tags if provided if param.Tags != nil { // Delete existing tags @@ -239,9 +254,20 @@ func (s *sqlDatabase) SearchFileObjectByTags(_ context.Context, tags []string, p offset := (page - 1) * pageSize + queryPageSize := math.MaxInt + if pageSize <= math.MaxInt { + queryPageSize = int(pageSize) + } + + var queryOffset int + if offset <= math.MaxInt { + queryOffset = int(offset) + } else { + return params.FileObjectPaginatedResponse{}, fmt.Errorf("offset excedes max int size: %d", math.MaxInt) + } if err := query. - Limit(int(pageSize)). - Offset(int(offset)). + Limit(queryPageSize). + Offset(queryOffset). Order("created_at DESC"). Omit("content"). Find(&fileObjectRes).Error; err != nil { @@ -343,10 +369,23 @@ func (s *sqlDatabase) ListFileObjects(_ context.Context, page, pageSize uint64) } offset := (page - 1) * pageSize + + queryPageSize := math.MaxInt + if pageSize <= math.MaxInt { + queryPageSize = int(pageSize) + } + + var queryOffset int + if offset <= math.MaxInt { + queryOffset = int(offset) + } else { + return params.FileObjectPaginatedResponse{}, fmt.Errorf("offset excedes max int size: %d", math.MaxInt) + } + var fileObjs []FileObject if err := s.conn.Preload("TagsList").Omit("content"). - Limit(int(pageSize)). - Offset(int(offset)). + Limit(queryPageSize). + Offset(queryOffset). Order("created_at DESC"). Find(&fileObjs).Error; err != nil { return params.FileObjectPaginatedResponse{}, fmt.Errorf("failed to list file objects: %w", err) @@ -384,13 +423,14 @@ func (s *sqlDatabase) sqlFileObjectToCommonParams(obj FileObject) params.FileObj tags[idx] = val.Tag } return params.FileObject{ - ID: obj.ID, - CreatedAt: obj.CreatedAt, - UpdatedAt: obj.UpdatedAt, - Name: obj.Name, - Size: obj.Size, - FileType: obj.FileType, - SHA256: obj.SHA256, - Tags: tags, + ID: obj.ID, + CreatedAt: obj.CreatedAt, + UpdatedAt: obj.UpdatedAt, + Name: obj.Name, + Size: obj.Size, + FileType: obj.FileType, + SHA256: obj.SHA256, + Description: obj.Description, + Tags: tags, } } diff --git a/database/sql/file_store_test.go b/database/sql/file_store_test.go index 77352241..8ab96125 100644 --- a/database/sql/file_store_test.go +++ b/database/sql/file_store_test.go @@ -67,7 +67,12 @@ func (s *FileStoreTestSuite) SetupTest() { // File 1: Small text file with tags content1 := []byte("Hello, World! This is test file 1.") - fileObj1, err := s.Store.CreateFileObject(s.ctx, "test-file-1.txt", int64(len(content1)), []string{"test", "text"}, bytes.NewReader(content1)) + param := params.CreateFileObjectParams{ + Name: "test-file-1.txt", + Size: int64(len(content1)), + Tags: []string{"test", "text"}, + } + fileObj1, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content1)) if err != nil { s.FailNow(fmt.Sprintf("failed to create test file 1: %s", err)) } @@ -75,7 +80,12 @@ func (s *FileStoreTestSuite) SetupTest() { // File 2: Binary-like content with different tags content2 := []byte{0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00} // PNG header-like - fileObj2, err := s.Store.CreateFileObject(s.ctx, "test-image.png", int64(len(content2)), []string{"image", "binary"}, bytes.NewReader(content2)) + param = params.CreateFileObjectParams{ + Name: "test-image.png", + Size: int64(len(content2)), + Tags: []string{"image", "binary"}, + } + fileObj2, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content2)) if err != nil { s.FailNow(fmt.Sprintf("failed to create test file 2: %s", err)) } @@ -83,7 +93,12 @@ func (s *FileStoreTestSuite) SetupTest() { // File 3: No tags content3 := []byte("File without tags.") - fileObj3, err := s.Store.CreateFileObject(s.ctx, "no-tags.txt", int64(len(content3)), []string{}, bytes.NewReader(content3)) + param = params.CreateFileObjectParams{ + Name: "no-tags.txt", + Size: int64(len(content3)), + Tags: []string{}, + } + fileObj3, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content3)) if err != nil { s.FailNow(fmt.Sprintf("failed to create test file 3: %s", err)) } @@ -98,7 +113,12 @@ func (s *FileStoreTestSuite) TestCreateFileObject() { content := []byte("New test file content") tags := []string{"new", "test"} - fileObj, err := s.Store.CreateFileObject(s.ctx, "new-file.txt", int64(len(content)), tags, bytes.NewReader(content)) + param := params.CreateFileObjectParams{ + Name: "new-file.txt", + Size: int64(len(content)), + Tags: tags, + } + fileObj, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content)) s.Require().Nil(err) s.Require().NotZero(fileObj.ID) s.Require().Equal("new-file.txt", fileObj.Name) @@ -115,7 +135,12 @@ func (s *FileStoreTestSuite) TestCreateFileObject() { func (s *FileStoreTestSuite) TestCreateFileObjectEmpty() { content := []byte{} - fileObj, err := s.Store.CreateFileObject(s.ctx, "empty-file.txt", 0, []string{}, bytes.NewReader(content)) + param := params.CreateFileObjectParams{ + Name: "empty-file.txt", + Size: 0, + Tags: []string{}, + } + fileObj, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content)) s.Require().Nil(err) s.Require().NotZero(fileObj.ID) s.Require().Equal("empty-file.txt", fileObj.Name) @@ -141,7 +166,12 @@ func (s *FileStoreTestSuite) TestGetFileObjectNotFound() { func (s *FileStoreTestSuite) TestOpenFileObjectContent() { // Create a file with known content content := []byte("Test content for reading") - fileObj, err := s.Store.CreateFileObject(s.ctx, "read-test.txt", int64(len(content)), []string{"read"}, bytes.NewReader(content)) + param := params.CreateFileObjectParams{ + Name: "read-test.txt", + Size: int64(len(content)), + Tags: []string{"read"}, + } + fileObj, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content)) s.Require().Nil(err) // Open and read the content @@ -182,7 +212,12 @@ func (s *FileStoreTestSuite) TestListFileObjectsPagination() { // Create more files to test pagination for i := 0; i < 5; i++ { content := []byte(fmt.Sprintf("File %d", i)) - _, err := s.Store.CreateFileObject(s.ctx, fmt.Sprintf("page-test-%d.txt", i), int64(len(content)), []string{"pagination"}, bytes.NewReader(content)) + param := params.CreateFileObjectParams{ + Name: fmt.Sprintf("page-test-%d.txt", i), + Size: int64(len(content)), + Tags: []string{"pagination"}, + } + _, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content)) s.Require().Nil(err) } @@ -313,7 +348,12 @@ func (s *FileStoreTestSuite) TestUpdateFileObjectEmptyName() { func (s *FileStoreTestSuite) TestDeleteFileObject() { // Create a file to delete content := []byte("To be deleted") - fileObj, err := s.Store.CreateFileObject(s.ctx, "delete-me.txt", int64(len(content)), []string{"delete"}, bytes.NewReader(content)) + param := params.CreateFileObjectParams{ + Name: "delete-me.txt", + Size: int64(len(content)), + Tags: []string{"delete"}, + } + fileObj, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content)) s.Require().Nil(err) // Delete the file @@ -339,8 +379,12 @@ func (s *FileStoreTestSuite) TestCreateFileObjectLargeContent() { for i := range content { content[i] = byte(i % 256) } - - fileObj, err := s.Store.CreateFileObject(s.ctx, "large-file.bin", int64(size), []string{"large", "binary"}, bytes.NewReader(content)) + param := params.CreateFileObjectParams{ + Name: "large-file.bin", + Size: int64(size), + Tags: []string{"large", "binary"}, + } + fileObj, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content)) s.Require().Nil(err) s.Require().Equal(int64(size), fileObj.Size) @@ -357,7 +401,12 @@ func (s *FileStoreTestSuite) TestCreateFileObjectLargeContent() { func (s *FileStoreTestSuite) TestFileObjectImmutableFields() { // Create a file content := []byte("Immutable test content") - fileObj, err := s.Store.CreateFileObject(s.ctx, "immutable-test.txt", int64(len(content)), []string{"original"}, bytes.NewReader(content)) + param := params.CreateFileObjectParams{ + Name: "immutable-test.txt", + Size: int64(len(content)), + Tags: []string{"original"}, + } + fileObj, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content)) s.Require().Nil(err) originalSize := fileObj.Size @@ -390,19 +439,39 @@ func (s *FileStoreTestSuite) TestFileObjectImmutableFields() { func (s *FileStoreTestSuite) TestSearchFileObjectByTags() { // Create files with specific tags for searching content1 := []byte("File with tag1 and tag2") - file1, err := s.Store.CreateFileObject(s.ctx, "search-file-1.txt", int64(len(content1)), []string{"tag1", "tag2"}, bytes.NewReader(content1)) + param := params.CreateFileObjectParams{ + Name: "search-file-1.txt", + Size: int64(len(content1)), + Tags: []string{"tag1", "tag2"}, + } + file1, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content1)) s.Require().Nil(err) content2 := []byte("File with tag1, tag2, and tag3") - file2, err := s.Store.CreateFileObject(s.ctx, "search-file-2.txt", int64(len(content2)), []string{"tag1", "tag2", "tag3"}, bytes.NewReader(content2)) + param = params.CreateFileObjectParams{ + Name: "search-file-2.txt", + Size: int64(len(content2)), + Tags: []string{"tag1", "tag2", "tag3"}, + } + file2, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content2)) s.Require().Nil(err) content3 := []byte("File with only tag1") - file3, err := s.Store.CreateFileObject(s.ctx, "search-file-3.txt", int64(len(content3)), []string{"tag1"}, bytes.NewReader(content3)) + param = params.CreateFileObjectParams{ + Name: "search-file-3.txt", + Size: int64(len(content3)), + Tags: []string{"tag1"}, + } + file3, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content3)) s.Require().Nil(err) content4 := []byte("File with tag3 only") - _, err = s.Store.CreateFileObject(s.ctx, "search-file-4.txt", int64(len(content4)), []string{"tag3"}, bytes.NewReader(content4)) + param = params.CreateFileObjectParams{ + Name: "search-file-4.txt", + Size: int64(len(content4)), + Tags: []string{"tag3"}, + } + _, err = s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content4)) s.Require().Nil(err) // Search for files with tag1 - should return 3 files @@ -423,15 +492,30 @@ func (s *FileStoreTestSuite) TestSearchFileObjectByTags() { func (s *FileStoreTestSuite) TestSearchFileObjectByTagsMultipleTags() { // Create files with various tag combinations content1 := []byte("File with search1 and search2") - file1, err := s.Store.CreateFileObject(s.ctx, "multi-search-1.txt", int64(len(content1)), []string{"search1", "search2"}, bytes.NewReader(content1)) + param := params.CreateFileObjectParams{ + Name: "multi-search-1.txt", + Size: int64(len(content1)), + Tags: []string{"search1", "search2"}, + } + file1, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content1)) s.Require().Nil(err) content2 := []byte("File with search1, search2, and search3") - file2, err := s.Store.CreateFileObject(s.ctx, "multi-search-2.txt", int64(len(content2)), []string{"search1", "search2", "search3"}, bytes.NewReader(content2)) + param = params.CreateFileObjectParams{ + Name: "multi-search-2.txt", + Size: int64(len(content2)), + Tags: []string{"search1", "search2", "search3"}, + } + file2, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content2)) s.Require().Nil(err) content3 := []byte("File with only search1") - _, err = s.Store.CreateFileObject(s.ctx, "multi-search-3.txt", int64(len(content3)), []string{"search1"}, bytes.NewReader(content3)) + param = params.CreateFileObjectParams{ + Name: "multi-search-3.txt", + Size: int64(len(content3)), + Tags: []string{"search1"}, + } + _, err = s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content3)) s.Require().Nil(err) // Search for files with both search1 AND search2 - should return only 2 files @@ -469,7 +553,12 @@ func (s *FileStoreTestSuite) TestSearchFileObjectByTagsPagination() { // Create multiple files with the same tag for i := 0; i < 5; i++ { content := []byte(fmt.Sprintf("Pagination test file %d", i)) - _, err := s.Store.CreateFileObject(s.ctx, fmt.Sprintf("page-search-%d.txt", i), int64(len(content)), []string{"pagination-test"}, bytes.NewReader(content)) + param := params.CreateFileObjectParams{ + Name: fmt.Sprintf("page-search-%d.txt", i), + Size: int64(len(content)), + Tags: []string{"pagination-test"}, + } + _, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content)) s.Require().Nil(err) } @@ -497,7 +586,12 @@ func (s *FileStoreTestSuite) TestSearchFileObjectByTagsPagination() { func (s *FileStoreTestSuite) TestSearchFileObjectByTagsDefaultPagination() { // Create a file with a unique tag content := []byte("Default pagination test") - _, err := s.Store.CreateFileObject(s.ctx, "default-page-search.txt", int64(len(content)), []string{"default-pagination"}, bytes.NewReader(content)) + param := params.CreateFileObjectParams{ + Name: "default-page-search.txt", + Size: int64(len(content)), + Tags: []string{"default-pagination"}, + } + _, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content)) s.Require().Nil(err) // Test default values (page 0 should become 1, pageSize 0 should become 20) @@ -511,19 +605,39 @@ func (s *FileStoreTestSuite) TestSearchFileObjectByTagsDefaultPagination() { func (s *FileStoreTestSuite) TestSearchFileObjectByTagsAllTagsRequired() { // Test that search requires ALL specified tags (AND logic, not OR) content1 := []byte("Has A and B") - file1, err := s.Store.CreateFileObject(s.ctx, "and-test-1.txt", int64(len(content1)), []string{"tagA", "tagB"}, bytes.NewReader(content1)) + param := params.CreateFileObjectParams{ + Name: "and-test-1.txt", + Size: int64(len(content1)), + Tags: []string{"tagA", "tagB"}, + } + file1, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content1)) s.Require().Nil(err) content2 := []byte("Has A, B, and C") - file2, err := s.Store.CreateFileObject(s.ctx, "and-test-2.txt", int64(len(content2)), []string{"tagA", "tagB", "tagC"}, bytes.NewReader(content2)) + param = params.CreateFileObjectParams{ + Name: "and-test-2.txt", + Size: int64(len(content2)), + Tags: []string{"tagA", "tagB", "tagC"}, + } + file2, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content2)) s.Require().Nil(err) content3 := []byte("Has only A") - _, err = s.Store.CreateFileObject(s.ctx, "and-test-3.txt", int64(len(content3)), []string{"tagA"}, bytes.NewReader(content3)) + param = params.CreateFileObjectParams{ + Name: "and-test-3.txt", + Size: int64(len(content3)), + Tags: []string{"tagA"}, + } + _, err = s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content3)) s.Require().Nil(err) content4 := []byte("Has only B") - _, err = s.Store.CreateFileObject(s.ctx, "and-test-4.txt", int64(len(content4)), []string{"tagB"}, bytes.NewReader(content4)) + param = params.CreateFileObjectParams{ + Name: "and-test-4.txt", + Size: int64(len(content4)), + Tags: []string{"tagB"}, + } + _, err = s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content4)) s.Require().Nil(err) // Search for files with BOTH tagA AND tagB @@ -546,15 +660,30 @@ func (s *FileStoreTestSuite) TestSearchFileObjectByTagsAllTagsRequired() { func (s *FileStoreTestSuite) TestSearchFileObjectByTagsCaseInsensitive() { // Test case insensitivity of tag search (COLLATE NOCASE) content1 := []byte("File with lowercase tag") - file1, err := s.Store.CreateFileObject(s.ctx, "case-test-1.txt", int64(len(content1)), []string{"TestTag"}, bytes.NewReader(content1)) + param := params.CreateFileObjectParams{ + Name: "case-test-1.txt", + Size: int64(len(content1)), + Tags: []string{"TestTag"}, + } + file1, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content1)) s.Require().Nil(err) content2 := []byte("File with UPPERCASE tag") - file2, err := s.Store.CreateFileObject(s.ctx, "case-test-2.txt", int64(len(content2)), []string{"TESTTAG"}, bytes.NewReader(content2)) + param = params.CreateFileObjectParams{ + Name: "case-test-2.txt", + Size: int64(len(content2)), + Tags: []string{"TESTTAG"}, + } + file2, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content2)) s.Require().Nil(err) content3 := []byte("File with MixedCase tag") - file3, err := s.Store.CreateFileObject(s.ctx, "case-test-3.txt", int64(len(content3)), []string{"testTAG"}, bytes.NewReader(content3)) + param = params.CreateFileObjectParams{ + Name: "case-test-3.txt", + Size: int64(len(content3)), + Tags: []string{"testTAG"}, + } + file3, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content3)) s.Require().Nil(err) // Search for lowercase - should return all files (case insensitive) @@ -586,15 +715,30 @@ func (s *FileStoreTestSuite) TestSearchFileObjectByTagsOrderByCreatedAt() { tag := "order-test" content1 := []byte("First file") - file1, err := s.Store.CreateFileObject(s.ctx, "order-1.txt", int64(len(content1)), []string{tag}, bytes.NewReader(content1)) + param := params.CreateFileObjectParams{ + Name: "order-1.txt", + Size: int64(len(content1)), + Tags: []string{tag}, + } + file1, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content1)) s.Require().Nil(err) content2 := []byte("Second file") - file2, err := s.Store.CreateFileObject(s.ctx, "order-2.txt", int64(len(content2)), []string{tag}, bytes.NewReader(content2)) + param = params.CreateFileObjectParams{ + Name: "order-2.txt", + Size: int64(len(content2)), + Tags: []string{tag}, + } + file2, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content2)) s.Require().Nil(err) content3 := []byte("Third file") - file3, err := s.Store.CreateFileObject(s.ctx, "order-3.txt", int64(len(content3)), []string{tag}, bytes.NewReader(content3)) + param = params.CreateFileObjectParams{ + Name: "order-3.txt", + Size: int64(len(content3)), + Tags: []string{tag}, + } + file3, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content3)) s.Require().Nil(err) // Search and verify order (should be DESC by created_at, so newest first) @@ -629,7 +773,12 @@ func (s *FileStoreTestSuite) TestPaginationFieldsLastPage() { // Create exactly 5 files for i := 0; i < 5; i++ { content := []byte(fmt.Sprintf("Last page test %d", i)) - _, err := s.Store.CreateFileObject(s.ctx, fmt.Sprintf("last-page-test-%d.txt", i), int64(len(content)), []string{"last-page"}, bytes.NewReader(content)) + param := params.CreateFileObjectParams{ + Name: fmt.Sprintf("last-page-test-%d.txt", i), + Size: int64(len(content)), + Tags: []string{"last-page"}, + } + _, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content)) s.Require().Nil(err) } @@ -649,7 +798,12 @@ func (s *FileStoreTestSuite) TestPaginationFieldsLastPage() { func (s *FileStoreTestSuite) TestPaginationFieldsSinglePage() { // Test when all results fit in a single page content := []byte("Single page test") - _, err := s.Store.CreateFileObject(s.ctx, "single-page-test.txt", int64(len(content)), []string{"single-page-unique-tag"}, bytes.NewReader(content)) + param := params.CreateFileObjectParams{ + Name: "single-page-test.txt", + Size: int64(len(content)), + Tags: []string{"single-page-unique-tag"}, + } + _, err := s.Store.CreateFileObject(s.ctx, param, bytes.NewReader(content)) s.Require().Nil(err) result, err := s.Store.SearchFileObjectByTags(s.ctx, []string{"single-page-unique-tag"}, 1, 20) diff --git a/database/sql/github_test.go b/database/sql/github_test.go index d2ed960e..24a1e187 100644 --- a/database/sql/github_test.go +++ b/database/sql/github_test.go @@ -51,20 +51,20 @@ type GithubTestSuite struct { db common.Store } +func (s *GithubTestSuite) TearDownTest() { + watcher.CloseWatcher() +} + func (s *GithubTestSuite) SetupTest() { ctx := context.Background() watcher.InitWatcher(ctx) - db, err := NewSQLDatabase(context.Background(), garmTesting.GetTestSqliteDBConfig(s.T())) + db, err := NewSQLDatabase(ctx, garmTesting.GetTestSqliteDBConfig(s.T())) if err != nil { s.FailNow(fmt.Sprintf("failed to create db connection: %s", err)) } s.db = db } -func (s *GithubTestSuite) TearDownTest() { - watcher.CloseWatcher() -} - func (s *GithubTestSuite) TestDefaultEndpointGetsCreatedAutomaticallyIfNoOtherEndpointExists() { ctx := garmTesting.ImpersonateAdminContext(context.Background(), s.db, s.T()) endpoint, err := s.db.GetGithubEndpoint(ctx, defaultGithubEndpoint) @@ -953,9 +953,11 @@ func TestCredentialsAndEndpointMigration(t *testing.T) { // Set the config credentials in the cfg. This is what happens in the main function. // of GARM as well. cfg.MigrateCredentials = credentials + ctx := context.Background() watcher.InitWatcher(ctx) defer watcher.CloseWatcher() + db, err := NewSQLDatabase(ctx, cfg) if err != nil { t.Fatalf("failed to create db connection: %s", err) diff --git a/database/sql/instances_test.go b/database/sql/instances_test.go index 2ac2ed0e..9538d97c 100644 --- a/database/sql/instances_test.go +++ b/database/sql/instances_test.go @@ -79,13 +79,13 @@ func (s *InstancesTestSuite) SetupTest() { ctx := context.Background() watcher.InitWatcher(ctx) // create testing sqlite database - db, err := NewSQLDatabase(context.Background(), garmTesting.GetTestSqliteDBConfig(s.T())) + db, err := NewSQLDatabase(ctx, garmTesting.GetTestSqliteDBConfig(s.T())) if err != nil { s.FailNow(fmt.Sprintf("failed to create db connection: %s", err)) } s.Store = db - adminCtx := garmTesting.ImpersonateAdminContext(context.Background(), db, s.T()) + adminCtx := garmTesting.ImpersonateAdminContext(ctx, db, s.T()) s.adminCtx = adminCtx githubEndpoint := garmTesting.CreateDefaultGithubEndpoint(adminCtx, db, s.T()) diff --git a/database/sql/models.go b/database/sql/models.go index 388375ed..b369b284 100644 --- a/database/sql/models.go +++ b/database/sql/models.go @@ -462,7 +462,9 @@ type GiteaCredentials struct { type FileObject struct { gorm.Model // Name is the name of the file - Name string `gotm:"type:text,index:idx_fo_name"` + Name string `gorm:"type:text;index:idx_fo_name"` + // Description is a description for the file + Description string `gorm:"type:text"` // FileType holds the MIME type or file type description FileType string `gorm:"type:text"` // Size is the file size in bytes diff --git a/database/sql/organizations_test.go b/database/sql/organizations_test.go index be1aec34..28064094 100644 --- a/database/sql/organizations_test.go +++ b/database/sql/organizations_test.go @@ -88,13 +88,13 @@ func (s *OrgTestSuite) SetupTest() { watcher.InitWatcher(ctx) // create testing sqlite database dbConfig := garmTesting.GetTestSqliteDBConfig(s.T()) - db, err := NewSQLDatabase(context.Background(), dbConfig) + db, err := NewSQLDatabase(ctx, dbConfig) if err != nil { s.FailNow(fmt.Sprintf("failed to create db connection: %s", err)) } s.Store = db - adminCtx := garmTesting.ImpersonateAdminContext(context.Background(), db, s.T()) + adminCtx := garmTesting.ImpersonateAdminContext(ctx, db, s.T()) s.adminCtx = adminCtx s.adminUserID = auth.UserID(adminCtx) s.Require().NotEmpty(s.adminUserID) diff --git a/params/params.go b/params/params.go index 0beadb9f..5e17e4c3 100644 --- a/params/params.go +++ b/params/params.go @@ -1308,15 +1308,17 @@ type Template struct { // swagger:model Templates type Templates []Template +// swagger:model FileObject type FileObject struct { - ID uint `json:"id"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` - Name string `json:"name"` - Size int64 `json:"size"` - Tags []string `json:"tags"` - SHA256 string `json:"sha256,omitempty"` - FileType string `json:"file_type"` + ID uint `json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + Name string `json:"name"` + Description string `json:"description,omitempty"` + Size int64 `json:"size"` + Tags []string `json:"tags"` + SHA256 string `json:"sha256,omitempty"` + FileType string `json:"file_type"` } type PaginatedResponse[T any] struct { diff --git a/params/requests.go b/params/requests.go index f7e928ba..38e4c4a9 100644 --- a/params/requests.go +++ b/params/requests.go @@ -867,9 +867,11 @@ func (u *UpdateTemplateParams) Validate() error { return nil } +// swagger:model UpdateFileObjectParams type UpdateFileObjectParams struct { - Name *string `json:"name"` - Tags []string `json:"tags"` + Name *string `json:"name"` + Description *string `json:"description"` + Tags []string `json:"tags"` } func (u *UpdateFileObjectParams) Validate() error { @@ -879,3 +881,11 @@ func (u *UpdateFileObjectParams) Validate() error { return nil } + +// swagger:model CreateFileObjectParams +type CreateFileObjectParams struct { + Name string `json:"name"` + Description string `json:"description"` + Size int64 `json:"size"` + Tags []string `json:"tags"` +} diff --git a/runner/object_store.go b/runner/object_store.go new file mode 100644 index 00000000..d9b68811 --- /dev/null +++ b/runner/object_store.go @@ -0,0 +1,102 @@ +// Copyright 2025 Cloudbase Solutions SRL +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +package runner + +import ( + "context" + "fmt" + "io" + + runnerErrors "github.com/cloudbase/garm-provider-common/errors" + "github.com/cloudbase/garm/auth" + "github.com/cloudbase/garm/params" +) + +func (r *Runner) CreateFileObject(ctx context.Context, param params.CreateFileObjectParams, reader io.Reader) (params.FileObject, error) { + if !auth.IsAdmin(ctx) { + return params.FileObject{}, runnerErrors.ErrUnauthorized + } + + fileObj, err := r.store.CreateFileObject(ctx, param, reader) + if err != nil { + return params.FileObject{}, fmt.Errorf("failed to create file object: %w", err) + } + return fileObj, nil +} + +func (r *Runner) GetFileObject(ctx context.Context, objID uint) (params.FileObject, error) { + if !auth.IsAdmin(ctx) { + return params.FileObject{}, runnerErrors.ErrUnauthorized + } + + fileObj, err := r.store.GetFileObject(ctx, objID) + if err != nil { + return params.FileObject{}, fmt.Errorf("failed to get file object: %w", err) + } + + return fileObj, nil +} + +func (r *Runner) DeleteFileObject(ctx context.Context, objID uint) error { + if !auth.IsAdmin(ctx) { + return runnerErrors.ErrUnauthorized + } + + if err := r.store.DeleteFileObject(ctx, objID); err != nil { + return fmt.Errorf("failed to delete file object: %w", err) + } + return nil +} + +func (r *Runner) ListFileObjects(ctx context.Context, page, pageSize uint64, tags []string) (params.FileObjectPaginatedResponse, error) { + if !auth.IsAdmin(ctx) { + return params.FileObjectPaginatedResponse{}, runnerErrors.ErrUnauthorized + } + var resp params.FileObjectPaginatedResponse + var err error + if len(tags) == 0 { + resp, err = r.store.ListFileObjects(ctx, page, pageSize) + } else { + resp, err = r.store.SearchFileObjectByTags(ctx, tags, page, pageSize) + } + + if err != nil { + return params.FileObjectPaginatedResponse{}, fmt.Errorf("failed to list objects: %w", err) + } + return resp, nil +} + +func (r *Runner) UpdateFileObject(ctx context.Context, objID uint, param params.UpdateFileObjectParams) (params.FileObject, error) { + if !auth.IsAdmin(ctx) { + return params.FileObject{}, runnerErrors.ErrUnauthorized + } + + resp, err := r.store.UpdateFileObject(ctx, objID, param) + if err != nil { + return params.FileObject{}, fmt.Errorf("failed to update object: %w", err) + } + return resp, nil +} + +func (r *Runner) GetFileObjectReader(ctx context.Context, objID uint) (io.ReadCloser, error) { + if !auth.IsAdmin(ctx) { + return nil, runnerErrors.ErrUnauthorized + } + + readCloser, err := r.store.OpenFileObjectContent(ctx, objID) + if err != nil { + return nil, fmt.Errorf("failed to open file object: %w", err) + } + return readCloser, nil +} diff --git a/runner/object_store_test.go b/runner/object_store_test.go new file mode 100644 index 00000000..70c013d5 --- /dev/null +++ b/runner/object_store_test.go @@ -0,0 +1,353 @@ +// Copyright 2025 Cloudbase Solutions SRL +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +//go:build testing +// +build testing + +package runner + +import ( + "bytes" + "context" + "fmt" + "io" + "testing" + + "github.com/stretchr/testify/suite" + + runnerErrors "github.com/cloudbase/garm-provider-common/errors" + "github.com/cloudbase/garm/database" + dbCommon "github.com/cloudbase/garm/database/common" + garmTesting "github.com/cloudbase/garm/internal/testing" + "github.com/cloudbase/garm/params" +) + +type ObjectStoreTestFixtures struct { + AdminContext context.Context + UnauthorizedContext context.Context + Store dbCommon.Store + CreateObjectParams params.CreateFileObjectParams + UpdateObjectParams params.UpdateFileObjectParams + TestFileObject params.FileObject + TestFileContent []byte +} + +type ObjectStoreTestSuite struct { + suite.Suite + Fixtures *ObjectStoreTestFixtures + Runner *Runner +} + +func (s *ObjectStoreTestSuite) SetupTest() { + // create testing sqlite database + dbCfg := garmTesting.GetTestSqliteDBConfig(s.T()) + db, err := database.NewDatabase(context.Background(), dbCfg) + if err != nil { + s.FailNow(fmt.Sprintf("failed to create db connection: %s", err)) + } + + adminCtx := garmTesting.ImpersonateAdminContext(context.Background(), db, s.T()) + + // Create a test file object + testContent := []byte("test file content for object store") + param := params.CreateFileObjectParams{ + Name: "test-file.bin", + Size: int64(len(testContent)), + Tags: []string{"test", "binary"}, + } + fileObj, err := db.CreateFileObject(adminCtx, param, bytes.NewReader(testContent)) + if err != nil { + s.FailNow(fmt.Sprintf("failed to create test file object: %s", err)) + } + + updatedName := "updated-file.txt" + // Setup fixtures + fixtures := &ObjectStoreTestFixtures{ + AdminContext: adminCtx, + UnauthorizedContext: context.Background(), + Store: db, + CreateObjectParams: params.CreateFileObjectParams{ + Name: "new-file.txt", + Size: 100, + Tags: []string{"new", "test"}, + }, + UpdateObjectParams: params.UpdateFileObjectParams{ + Name: &updatedName, + Tags: []string{"updated", "test"}, + }, + TestFileObject: fileObj, + TestFileContent: testContent, + } + s.Fixtures = fixtures + + // Setup test runner + runner := &Runner{ + ctx: fixtures.AdminContext, + store: fixtures.Store, + } + s.Runner = runner +} + +func (s *ObjectStoreTestSuite) TestCreateFileObject() { + content := []byte("new file content") + reader := bytes.NewReader(content) + + createParams := params.CreateFileObjectParams{ + Name: "create-test.txt", + Size: int64(len(content)), + Tags: []string{"create", "test"}, + } + + fileObj, err := s.Runner.CreateFileObject(s.Fixtures.AdminContext, createParams, reader) + + s.Require().Nil(err) + s.Require().NotEmpty(fileObj.ID) + s.Require().Equal(createParams.Name, fileObj.Name) + s.Require().Equal(createParams.Size, fileObj.Size) + s.Require().ElementsMatch(createParams.Tags, fileObj.Tags) + s.Require().NotEmpty(fileObj.SHA256) +} + +func (s *ObjectStoreTestSuite) TestCreateFileObjectUnauthorized() { + content := []byte("unauthorized content") + reader := bytes.NewReader(content) + + _, err := s.Runner.CreateFileObject(s.Fixtures.UnauthorizedContext, s.Fixtures.CreateObjectParams, reader) + + s.Require().NotNil(err) + s.Require().ErrorIs(err, runnerErrors.ErrUnauthorized) +} + +func (s *ObjectStoreTestSuite) TestGetFileObject() { + fileObj, err := s.Runner.GetFileObject(s.Fixtures.AdminContext, s.Fixtures.TestFileObject.ID) + + s.Require().Nil(err) + s.Require().Equal(s.Fixtures.TestFileObject.ID, fileObj.ID) + s.Require().Equal(s.Fixtures.TestFileObject.Name, fileObj.Name) + s.Require().Equal(s.Fixtures.TestFileObject.Size, fileObj.Size) + s.Require().ElementsMatch(s.Fixtures.TestFileObject.Tags, fileObj.Tags) +} + +func (s *ObjectStoreTestSuite) TestGetFileObjectUnauthorized() { + _, err := s.Runner.GetFileObject(s.Fixtures.UnauthorizedContext, s.Fixtures.TestFileObject.ID) + + s.Require().NotNil(err) + s.Require().ErrorIs(err, runnerErrors.ErrUnauthorized) +} + +func (s *ObjectStoreTestSuite) TestGetFileObjectNotFound() { + _, err := s.Runner.GetFileObject(s.Fixtures.AdminContext, 99999) + + s.Require().NotNil(err) + s.Require().Contains(err.Error(), "failed to get file object") +} + +func (s *ObjectStoreTestSuite) TestDeleteFileObject() { + // Create a file to delete + content := []byte("file to delete") + param := params.CreateFileObjectParams{ + Name: "delete-test.txt", + Size: int64(len(content)), + Tags: []string{"delete"}, + } + fileObj, err := s.Fixtures.Store.CreateFileObject(s.Fixtures.AdminContext, param, bytes.NewReader(content)) + s.Require().Nil(err) + + err = s.Runner.DeleteFileObject(s.Fixtures.AdminContext, fileObj.ID) + + s.Require().Nil(err) + + // Verify it's deleted + _, err = s.Fixtures.Store.GetFileObject(s.Fixtures.AdminContext, fileObj.ID) + s.Require().NotNil(err) +} + +func (s *ObjectStoreTestSuite) TestDeleteFileObjectUnauthorized() { + err := s.Runner.DeleteFileObject(s.Fixtures.UnauthorizedContext, s.Fixtures.TestFileObject.ID) + + s.Require().NotNil(err) + s.Require().ErrorIs(err, runnerErrors.ErrUnauthorized) +} + +func (s *ObjectStoreTestSuite) TestDeleteFileObjectNotFound() { + // Delete of non-existent object is a noop and returns nil (idempotent) + err := s.Runner.DeleteFileObject(s.Fixtures.AdminContext, 99999) + + s.Require().Nil(err) +} + +func (s *ObjectStoreTestSuite) TestListFileObjects() { + // Create additional test files + for i := 1; i <= 3; i++ { + content := []byte(fmt.Sprintf("test file %d", i)) + param := params.CreateFileObjectParams{ + Name: fmt.Sprintf("list-test-%d.txt", i), + Size: int64(len(content)), + Tags: []string{"list", "test"}, + } + _, err := s.Fixtures.Store.CreateFileObject( + s.Fixtures.AdminContext, + param, + bytes.NewReader(content), + ) + s.Require().Nil(err) + } + + resp, err := s.Runner.ListFileObjects(s.Fixtures.AdminContext, 0, 25, nil) + + s.Require().Nil(err) + s.Require().NotNil(resp.Results) + s.Require().GreaterOrEqual(len(resp.Results), 4) // At least the test file + 3 new ones +} + +func (s *ObjectStoreTestSuite) TestListFileObjectsUnauthorized() { + _, err := s.Runner.ListFileObjects(s.Fixtures.UnauthorizedContext, 0, 25, nil) + + s.Require().NotNil(err) + s.Require().ErrorIs(err, runnerErrors.ErrUnauthorized) +} + +func (s *ObjectStoreTestSuite) TestListFileObjectsWithTags() { + // Create files with specific tags + specificTag := "specific-list-tag" + for i := 1; i <= 2; i++ { + content := []byte(fmt.Sprintf("tagged file %d", i)) + param := params.CreateFileObjectParams{ + Name: fmt.Sprintf("tagged-list-%d.txt", i), + Size: int64(len(content)), + Tags: []string{specificTag, "test"}, + } + _, err := s.Fixtures.Store.CreateFileObject( + s.Fixtures.AdminContext, + param, + bytes.NewReader(content), + ) + s.Require().Nil(err) + } + + resp, err := s.Runner.ListFileObjects(s.Fixtures.AdminContext, 0, 25, []string{specificTag}) + + s.Require().Nil(err) + s.Require().NotNil(resp.Results) + s.Require().GreaterOrEqual(len(resp.Results), 2) + // Verify all results have the specific tag + for _, obj := range resp.Results { + s.Require().Contains(obj.Tags, specificTag) + } +} + +func (s *ObjectStoreTestSuite) TestListFileObjectsPagination() { + // Create multiple files for pagination test + for i := 1; i <= 10; i++ { + content := []byte(fmt.Sprintf("pagination file %d", i)) + param := params.CreateFileObjectParams{ + Name: fmt.Sprintf("page-test-%d.txt", i), + Size: int64(len(content)), + Tags: []string{"pagination"}, + } + _, err := s.Fixtures.Store.CreateFileObject( + s.Fixtures.AdminContext, + param, + bytes.NewReader(content), + ) + s.Require().Nil(err) + } + + // Get first page + resp1, err := s.Runner.ListFileObjects(s.Fixtures.AdminContext, 1, 5, []string{"pagination"}) + s.Require().Nil(err) + s.Require().Len(resp1.Results, 5) + + // Get second page + resp2, err := s.Runner.ListFileObjects(s.Fixtures.AdminContext, 2, 5, []string{"pagination"}) + s.Require().Nil(err) + s.Require().Len(resp2.Results, 5) + + // Verify different results on different pages + s.Require().NotEqual(resp1.Results[0].ID, resp2.Results[0].ID) +} + +func (s *ObjectStoreTestSuite) TestUpdateFileObject() { + // Create a file to update + content := []byte("original content") + param := params.CreateFileObjectParams{ + Name: "update-test.txt", + Size: int64(len(content)), + Tags: []string{"original"}, + } + fileObj, err := s.Fixtures.Store.CreateFileObject( + s.Fixtures.AdminContext, + param, + bytes.NewReader(content), + ) + s.Require().Nil(err) + + newName := "updated-name.txt" + updateParams := params.UpdateFileObjectParams{ + Name: &newName, + Tags: []string{"updated", "modified"}, + } + + updatedObj, err := s.Runner.UpdateFileObject(s.Fixtures.AdminContext, fileObj.ID, updateParams) + + s.Require().Nil(err) + s.Require().Equal(*updateParams.Name, updatedObj.Name) + s.Require().ElementsMatch(updateParams.Tags, updatedObj.Tags) + s.Require().Equal(fileObj.ID, updatedObj.ID) +} + +func (s *ObjectStoreTestSuite) TestUpdateFileObjectUnauthorized() { + _, err := s.Runner.UpdateFileObject(s.Fixtures.UnauthorizedContext, s.Fixtures.TestFileObject.ID, s.Fixtures.UpdateObjectParams) + + s.Require().NotNil(err) + s.Require().ErrorIs(err, runnerErrors.ErrUnauthorized) +} + +func (s *ObjectStoreTestSuite) TestUpdateFileObjectNotFound() { + _, err := s.Runner.UpdateFileObject(s.Fixtures.AdminContext, 99999, s.Fixtures.UpdateObjectParams) + + s.Require().NotNil(err) + s.Require().Contains(err.Error(), "failed to update object") +} + +func (s *ObjectStoreTestSuite) TestGetFileObjectReader() { + reader, err := s.Runner.GetFileObjectReader(s.Fixtures.AdminContext, s.Fixtures.TestFileObject.ID) + + s.Require().Nil(err) + s.Require().NotNil(reader) + defer reader.Close() + + // Read the content + content, err := io.ReadAll(reader) + s.Require().Nil(err) + s.Require().Equal(s.Fixtures.TestFileContent, content) +} + +func (s *ObjectStoreTestSuite) TestGetFileObjectReaderUnauthorized() { + _, err := s.Runner.GetFileObjectReader(s.Fixtures.UnauthorizedContext, s.Fixtures.TestFileObject.ID) + + s.Require().NotNil(err) + s.Require().ErrorIs(err, runnerErrors.ErrUnauthorized) +} + +func (s *ObjectStoreTestSuite) TestGetFileObjectReaderNotFound() { + _, err := s.Runner.GetFileObjectReader(s.Fixtures.AdminContext, 99999) + + s.Require().NotNil(err) + s.Require().Contains(err.Error(), "failed to open file object") +} + +func TestObjectStoreTestSuite(t *testing.T) { + suite.Run(t, new(ObjectStoreTestSuite)) +} diff --git a/webapp/assets/_app/immutable/assets/0.BIzx0g6N.css b/webapp/assets/_app/immutable/assets/0.BIzx0g6N.css deleted file mode 100644 index 7e058911..00000000 --- a/webapp/assets/_app/immutable/assets/0.BIzx0g6N.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-50:oklch(98% .016 73.684);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-900:oklch(35.9% .144 278.697);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-wide:.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-full{right:100%}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-full{left:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.container\!{width:100%!important}@media (min-width:640px){.container\!{max-width:640px!important}}@media (min-width:768px){.container\!{max-width:768px!important}}@media (min-width:1024px){.container\!{max-width:1024px!important}}@media (min-width:1280px){.container\!{max-width:1280px!important}}@media (min-width:1536px){.container\!{max-width:1536px!important}}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.-mr-0\.5{margin-right:calc(var(--spacing)*-.5)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-12{margin-right:calc(var(--spacing)*-12)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-2\.5{margin-right:calc(var(--spacing)*2.5)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-0\.5{margin-left:calc(var(--spacing)*-.5)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.h-0{height:calc(var(--spacing)*0)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-24{height:calc(var(--spacing)*24)}.h-48{height:calc(var(--spacing)*48)}.h-full{height:100%}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[90vh\]{max-height:90vh}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[38px\]{min-height:38px}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing)*0)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-64{width:calc(var(--spacing)*64)}.w-80{width:calc(var(--spacing)*80)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize\!{resize:both!important}.resize-none{resize:none}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing)*0)}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}:where(.-space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(-1px*var(--tw-space-y-reverse));margin-block-end:calc(-1px*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{-moz-column-gap:calc(var(--spacing)*4);column-gap:calc(var(--spacing)*4)}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-1px*var(--tw-space-x-reverse));margin-inline-end:calc(-1px*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-6{row-gap:calc(var(--spacing)*6)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-600{border-color:var(--color-gray-600)}.border-green-200{border-color:var(--color-green-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-yellow-300{border-color:var(--color-yellow-300)}.border-t-gray-900{border-top-color:var(--color-gray-900)}.border-r-gray-900{border-right-color:var(--color-gray-900)}.border-b-gray-900{border-bottom-color:var(--color-gray-900)}.border-l-gray-900{border-left-color:var(--color-gray-900)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-900{background-color:var(--color-red-900)}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-20{padding-top:calc(var(--spacing)*20)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.text-black{color:var(--color-black)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-indigo-600{color:var(--color-indigo-600)}.text-orange-700{color:var(--color-orange-700)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-600\/20{--tw-ring-color:#155dfc33}@supports (color:color-mix(in lab,red,red)){.ring-blue-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-600)20%,transparent)}}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.ring-gray-600\/20{--tw-ring-color:#4a556533}@supports (color:color-mix(in lab,red,red)){.ring-gray-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-600)20%,transparent)}}.ring-green-200{--tw-ring-color:var(--color-green-200)}.ring-green-600\/20{--tw-ring-color:#00a54433}@supports (color:color-mix(in lab,red,red)){.ring-green-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-600)20%,transparent)}}.ring-orange-600\/20{--tw-ring-color:#f0510033}@supports (color:color-mix(in lab,red,red)){.ring-orange-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-600)20%,transparent)}}.ring-purple-600\/20{--tw-ring-color:#9810fa33}@supports (color:color-mix(in lab,red,red)){.ring-purple-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-600)20%,transparent)}}.ring-red-200{--tw-ring-color:var(--color-red-200)}.ring-red-600\/20{--tw-ring-color:#e4001433}@supports (color:color-mix(in lab,red,red)){.ring-red-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-600)20%,transparent)}}.ring-yellow-200{--tw-ring-color:var(--color-yellow-200)}.ring-yellow-600\/20{--tw-ring-color:#cd890033}@supports (color:color-mix(in lab,red,red)){.ring-yellow-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-600)20%,transparent)}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ring-inset{--tw-ring-inset:inset}@media (hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-red-200:hover{background-color:var(--color-red-200)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-500:hover{color:var(--color-green-500)}.hover\:text-green-900:hover{color:var(--color-green-900)}.hover\:text-indigo-900:hover{color:var(--color-indigo-900)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-900:hover{color:var(--color-red-900)}.hover\:text-yellow-300:hover{color:var(--color-yellow-300)}.hover\:text-yellow-500:hover{color:var(--color-yellow-500)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:bg-red-200:focus{background-color:var(--color-red-200)}.focus\:placeholder-gray-400:focus::-moz-placeholder{color:var(--color-gray-400)}.focus\:placeholder-gray-400:focus::placeholder{color:var(--color-gray-400)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white:focus{--tw-ring-color:var(--color-white)}.focus\:ring-yellow-500:focus{--tw-ring-color:var(--color-yellow-500)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-400:disabled{background-color:var(--color-gray-400)}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:bg-gray-400:disabled:hover{background-color:var(--color-gray-400)}}@media (min-width:640px){.sm\:mx-auto{margin-inline:auto}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:w-full{width:100%}.sm\:max-w-md{max-width:var(--container-md)}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:768px){.md\:ml-2{margin-left:calc(var(--spacing)*2)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}:where(.md\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}}@media (min-width:1024px){.lg\:fixed{position:fixed}.lg\:inset-y-0{inset-block:calc(var(--spacing)*0)}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-64{width:calc(var(--spacing)*64)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:pt-6{padding-top:calc(var(--spacing)*6)}.lg\:pl-64{padding-left:calc(var(--spacing)*64)}}.dark .dark\:block{display:block}.dark .dark\:hidden{display:none}:where(.dark .dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}.dark .dark\:border-blue-700{border-color:var(--color-blue-700)}.dark .dark\:border-blue-800{border-color:var(--color-blue-800)}.dark .dark\:border-gray-600{border-color:var(--color-gray-600)}.dark .dark\:border-gray-700{border-color:var(--color-gray-700)}.dark .dark\:border-green-700{border-color:var(--color-green-700)}.dark .dark\:border-red-500{border-color:var(--color-red-500)}.dark .dark\:border-red-600{border-color:var(--color-red-600)}.dark .dark\:border-red-700{border-color:var(--color-red-700)}.dark .dark\:border-red-800{border-color:var(--color-red-800)}.dark .dark\:border-yellow-600{border-color:var(--color-yellow-600)}.dark .dark\:border-yellow-700{border-color:var(--color-yellow-700)}.dark .dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark .dark\:bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.dark .dark\:bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.dark .dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark .dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark .dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark .dark\:bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/50{background-color:color-mix(in oklab,var(--color-blue-900)50%,transparent)}}.dark .dark\:bg-gray-500\/10{background-color:#6a72821a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-500\/10{background-color:color-mix(in oklab,var(--color-gray-500)10%,transparent)}}.dark .dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark .dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark .dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark .dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark .dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark .dark\:bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.dark .dark\:bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.dark .dark\:bg-green-900{background-color:var(--color-green-900)}.dark .dark\:bg-green-900\/50{background-color:#0d542b80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/50{background-color:color-mix(in oklab,var(--color-green-900)50%,transparent)}}.dark .dark\:bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.dark .dark\:bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500)10%,transparent)}}.dark .dark\:bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.dark .dark\:bg-red-700{background-color:var(--color-red-700)}.dark .dark\:bg-red-800{background-color:var(--color-red-800)}.dark .dark\:bg-red-900{background-color:var(--color-red-900)}.dark .dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark .dark\:bg-red-900\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/50{background-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.dark .dark\:bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.dark .dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark .dark\:bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}}.dark .dark\:from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-700{--tw-gradient-to:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:text-blue-100{color:var(--color-blue-100)}.dark .dark\:text-blue-200{color:var(--color-blue-200)}.dark .dark\:text-blue-300{color:var(--color-blue-300)}.dark .dark\:text-blue-400{color:var(--color-blue-400)}.dark .dark\:text-gray-200{color:var(--color-gray-200)}.dark .dark\:text-gray-300{color:var(--color-gray-300)}.dark .dark\:text-gray-400{color:var(--color-gray-400)}.dark .dark\:text-gray-500{color:var(--color-gray-500)}.dark .dark\:text-green-200{color:var(--color-green-200)}.dark .dark\:text-green-300{color:var(--color-green-300)}.dark .dark\:text-green-400{color:var(--color-green-400)}.dark .dark\:text-indigo-400{color:var(--color-indigo-400)}.dark .dark\:text-orange-400{color:var(--color-orange-400)}.dark .dark\:text-purple-400{color:var(--color-purple-400)}.dark .dark\:text-red-100{color:var(--color-red-100)}.dark .dark\:text-red-200{color:var(--color-red-200)}.dark .dark\:text-red-300{color:var(--color-red-300)}.dark .dark\:text-red-400{color:var(--color-red-400)}.dark .dark\:text-white{color:var(--color-white)}.dark .dark\:text-yellow-200{color:var(--color-yellow-200)}.dark .dark\:text-yellow-300{color:var(--color-yellow-300)}.dark .dark\:text-yellow-400{color:var(--color-yellow-400)}.dark .dark\:placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-400::placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.dark .dark\:placeholder-gray-500::placeholder{color:var(--color-gray-500)}.dark .dark\:ring-blue-400\/20{--tw-ring-color:#54a2ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)20%,transparent)}}.dark .dark\:ring-blue-400\/30{--tw-ring-color:#54a2ff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)30%,transparent)}}.dark .dark\:ring-blue-500\/20{--tw-ring-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.dark .dark\:ring-gray-400\/20{--tw-ring-color:#99a1af33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)20%,transparent)}}.dark .dark\:ring-gray-400\/30{--tw-ring-color:#99a1af4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)30%,transparent)}}.dark .dark\:ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.dark .dark\:ring-green-400\/20{--tw-ring-color:#05df7233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-400)20%,transparent)}}.dark .dark\:ring-green-400\/30{--tw-ring-color:#05df724d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-green-400)30%,transparent)}}.dark .dark\:ring-green-500\/20{--tw-ring-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.dark .dark\:ring-orange-500\/20{--tw-ring-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-orange-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.dark .dark\:ring-purple-500\/20{--tw-ring-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-purple-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.dark .dark\:ring-red-400\/20{--tw-ring-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}}.dark .dark\:ring-red-400\/30{--tw-ring-color:#ff65684d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-red-400)30%,transparent)}}.dark .dark\:ring-red-500\/20{--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.dark .dark\:ring-yellow-400\/30{--tw-ring-color:#fac8004d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-yellow-400)30%,transparent)}}.dark .dark\:ring-yellow-500\/20{--tw-ring-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}@media (hover:hover){.dark .dark\:hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.dark .dark\:hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.dark .dark\:hover\:bg-blue-800:hover{background-color:var(--color-blue-800)}.dark .dark\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.dark .dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.dark .dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark .dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark .dark\:hover\:bg-red-700:hover{background-color:var(--color-red-700)}.dark .dark\:hover\:bg-red-800:hover{background-color:var(--color-red-800)}.dark .dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark .dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.dark .dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark .dark\:hover\:text-green-300:hover{color:var(--color-green-300)}.dark .dark\:hover\:text-indigo-300:hover{color:var(--color-indigo-300)}.dark .dark\:hover\:text-red-300:hover{color:var(--color-red-300)}.dark .dark\:hover\:text-white:hover{color:var(--color-white)}}.dark .dark\:focus\:bg-red-700:focus{background-color:var(--color-red-700)}.dark .dark\:focus\:ring-offset-gray-900:focus{--tw-ring-offset-color:var(--color-gray-900)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/webapp/assets/_app/immutable/assets/0.BSyLSYks.css b/webapp/assets/_app/immutable/assets/0.BSyLSYks.css new file mode 100644 index 00000000..0da004ab --- /dev/null +++ b/webapp/assets/_app/immutable/assets/0.BSyLSYks.css @@ -0,0 +1 @@ +/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-50:oklch(98% .016 73.684);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-900:oklch(35.9% .144 278.697);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-wide:.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-full{right:100%}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-full{left:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.container\!{width:100%!important}@media (min-width:640px){.container\!{max-width:640px!important}}@media (min-width:768px){.container\!{max-width:768px!important}}@media (min-width:1024px){.container\!{max-width:1024px!important}}@media (min-width:1280px){.container\!{max-width:1280px!important}}@media (min-width:1536px){.container\!{max-width:1536px!important}}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.-mr-0\.5{margin-right:calc(var(--spacing)*-.5)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-12{margin-right:calc(var(--spacing)*-12)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-2\.5{margin-right:calc(var(--spacing)*2.5)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-0\.5{margin-left:calc(var(--spacing)*-.5)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.h-0{height:calc(var(--spacing)*0)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-24{height:calc(var(--spacing)*24)}.h-48{height:calc(var(--spacing)*48)}.h-64{height:calc(var(--spacing)*64)}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[90vh\]{max-height:90vh}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[38px\]{min-height:38px}.min-h-\[42px\]{min-height:42px}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing)*0)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-64{width:calc(var(--spacing)*64)}.w-80{width:calc(var(--spacing)*80)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[120px\]{min-width:120px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize\!{resize:both!important}.resize-none{resize:none}.resize-y{resize:vertical}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing)*0)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}:where(.-space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(-1px*var(--tw-space-y-reverse));margin-block-end:calc(-1px*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{-moz-column-gap:calc(var(--spacing)*4);column-gap:calc(var(--spacing)*4)}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-1px*var(--tw-space-x-reverse));margin-inline-end:calc(-1px*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-6{row-gap:calc(var(--spacing)*6)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-600{border-color:var(--color-gray-600)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-600{border-color:var(--color-indigo-600)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-yellow-300{border-color:var(--color-yellow-300)}.border-t-gray-900{border-top-color:var(--color-gray-900)}.border-r-gray-900{border-right-color:var(--color-gray-900)}.border-b-gray-900{border-bottom-color:var(--color-gray-900)}.border-l-gray-900{border-left-color:var(--color-gray-900)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-800\/50{background-color:#193cb880}@supports (color:color-mix(in lab,red,red)){.bg-blue-800\/50{background-color:color-mix(in oklab,var(--color-blue-800)50%,transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-900{background-color:var(--color-red-900)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-20{padding-top:calc(var(--spacing)*20)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-black{color:var(--color-black)}.text-blue-200{color:var(--color-blue-200)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-indigo-600{color:var(--color-indigo-600)}.text-orange-700{color:var(--color-orange-700)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-600\/20{--tw-ring-color:#155dfc33}@supports (color:color-mix(in lab,red,red)){.ring-blue-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-600)20%,transparent)}}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.ring-gray-600\/20{--tw-ring-color:#4a556533}@supports (color:color-mix(in lab,red,red)){.ring-gray-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-600)20%,transparent)}}.ring-green-200{--tw-ring-color:var(--color-green-200)}.ring-green-600\/20{--tw-ring-color:#00a54433}@supports (color:color-mix(in lab,red,red)){.ring-green-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-600)20%,transparent)}}.ring-orange-600\/20{--tw-ring-color:#f0510033}@supports (color:color-mix(in lab,red,red)){.ring-orange-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-600)20%,transparent)}}.ring-purple-600\/20{--tw-ring-color:#9810fa33}@supports (color:color-mix(in lab,red,red)){.ring-purple-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-600)20%,transparent)}}.ring-red-200{--tw-ring-color:var(--color-red-200)}.ring-red-600\/20{--tw-ring-color:#e4001433}@supports (color:color-mix(in lab,red,red)){.ring-red-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-600)20%,transparent)}}.ring-yellow-200{--tw-ring-color:var(--color-yellow-200)}.ring-yellow-600\/20{--tw-ring-color:#cd890033}@supports (color:color-mix(in lab,red,red)){.ring-yellow-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-600)20%,transparent)}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.ring-inset{--tw-ring-inset:inset}@media (hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-red-200:hover{background-color:var(--color-red-200)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-500:hover{color:var(--color-green-500)}.hover\:text-green-900:hover{color:var(--color-green-900)}.hover\:text-indigo-500:hover{color:var(--color-indigo-500)}.hover\:text-indigo-900:hover{color:var(--color-indigo-900)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-900:hover{color:var(--color-red-900)}.hover\:text-yellow-300:hover{color:var(--color-yellow-300)}.hover\:text-yellow-500:hover{color:var(--color-yellow-500)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:bg-red-200:focus{background-color:var(--color-red-200)}.focus\:placeholder-gray-400:focus::-moz-placeholder{color:var(--color-gray-400)}.focus\:placeholder-gray-400:focus::placeholder{color:var(--color-gray-400)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white:focus{--tw-ring-color:var(--color-white)}.focus\:ring-yellow-500:focus{--tw-ring-color:var(--color-yellow-500)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-400:disabled{background-color:var(--color-gray-400)}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:bg-gray-400:disabled:hover{background-color:var(--color-gray-400)}}@media (min-width:640px){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:w-full{width:100%}.sm\:max-w-md{max-width:var(--container-md)}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:768px){.md\:ml-2{margin-left:calc(var(--spacing)*2)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}:where(.md\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}}@media (min-width:1024px){.lg\:fixed{position:fixed}.lg\:inset-y-0{inset-block:calc(var(--spacing)*0)}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-64{width:calc(var(--spacing)*64)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:pt-6{padding-top:calc(var(--spacing)*6)}.lg\:pl-64{padding-left:calc(var(--spacing)*64)}}.dark .dark\:block{display:block}.dark .dark\:hidden{display:none}:where(.dark .dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}.dark .dark\:border-blue-700{border-color:var(--color-blue-700)}.dark .dark\:border-blue-800{border-color:var(--color-blue-800)}.dark .dark\:border-gray-600{border-color:var(--color-gray-600)}.dark .dark\:border-gray-700{border-color:var(--color-gray-700)}.dark .dark\:border-green-700{border-color:var(--color-green-700)}.dark .dark\:border-red-500{border-color:var(--color-red-500)}.dark .dark\:border-red-600{border-color:var(--color-red-600)}.dark .dark\:border-red-700{border-color:var(--color-red-700)}.dark .dark\:border-red-800{border-color:var(--color-red-800)}.dark .dark\:border-yellow-600{border-color:var(--color-yellow-600)}.dark .dark\:border-yellow-700{border-color:var(--color-yellow-700)}.dark .dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark .dark\:bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.dark .dark\:bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.dark .dark\:bg-blue-700{background-color:var(--color-blue-700)}.dark .dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark .dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark .dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark .dark\:bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/50{background-color:color-mix(in oklab,var(--color-blue-900)50%,transparent)}}.dark .dark\:bg-gray-500\/10{background-color:#6a72821a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-500\/10{background-color:color-mix(in oklab,var(--color-gray-500)10%,transparent)}}.dark .dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark .dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark .dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark .dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark .dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark .dark\:bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.dark .dark\:bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.dark .dark\:bg-green-900{background-color:var(--color-green-900)}.dark .dark\:bg-green-900\/50{background-color:#0d542b80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/50{background-color:color-mix(in oklab,var(--color-green-900)50%,transparent)}}.dark .dark\:bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.dark .dark\:bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500)10%,transparent)}}.dark .dark\:bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.dark .dark\:bg-red-700{background-color:var(--color-red-700)}.dark .dark\:bg-red-800{background-color:var(--color-red-800)}.dark .dark\:bg-red-900{background-color:var(--color-red-900)}.dark .dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark .dark\:bg-red-900\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/50{background-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.dark .dark\:bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.dark .dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark .dark\:bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}}.dark .dark\:from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-700{--tw-gradient-to:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:text-blue-100{color:var(--color-blue-100)}.dark .dark\:text-blue-200{color:var(--color-blue-200)}.dark .dark\:text-blue-300{color:var(--color-blue-300)}.dark .dark\:text-blue-400{color:var(--color-blue-400)}.dark .dark\:text-gray-200{color:var(--color-gray-200)}.dark .dark\:text-gray-300{color:var(--color-gray-300)}.dark .dark\:text-gray-400{color:var(--color-gray-400)}.dark .dark\:text-gray-500{color:var(--color-gray-500)}.dark .dark\:text-green-200{color:var(--color-green-200)}.dark .dark\:text-green-300{color:var(--color-green-300)}.dark .dark\:text-green-400{color:var(--color-green-400)}.dark .dark\:text-indigo-400{color:var(--color-indigo-400)}.dark .dark\:text-orange-400{color:var(--color-orange-400)}.dark .dark\:text-purple-400{color:var(--color-purple-400)}.dark .dark\:text-red-100{color:var(--color-red-100)}.dark .dark\:text-red-200{color:var(--color-red-200)}.dark .dark\:text-red-300{color:var(--color-red-300)}.dark .dark\:text-red-400{color:var(--color-red-400)}.dark .dark\:text-white{color:var(--color-white)}.dark .dark\:text-yellow-200{color:var(--color-yellow-200)}.dark .dark\:text-yellow-300{color:var(--color-yellow-300)}.dark .dark\:text-yellow-400{color:var(--color-yellow-400)}.dark .dark\:placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-400::placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.dark .dark\:placeholder-gray-500::placeholder{color:var(--color-gray-500)}.dark .dark\:ring-blue-400\/20{--tw-ring-color:#54a2ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)20%,transparent)}}.dark .dark\:ring-blue-400\/30{--tw-ring-color:#54a2ff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)30%,transparent)}}.dark .dark\:ring-blue-500\/20{--tw-ring-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.dark .dark\:ring-gray-400\/20{--tw-ring-color:#99a1af33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)20%,transparent)}}.dark .dark\:ring-gray-400\/30{--tw-ring-color:#99a1af4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)30%,transparent)}}.dark .dark\:ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.dark .dark\:ring-green-400\/20{--tw-ring-color:#05df7233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-400)20%,transparent)}}.dark .dark\:ring-green-400\/30{--tw-ring-color:#05df724d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-green-400)30%,transparent)}}.dark .dark\:ring-green-500\/20{--tw-ring-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.dark .dark\:ring-orange-500\/20{--tw-ring-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-orange-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.dark .dark\:ring-purple-500\/20{--tw-ring-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-purple-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.dark .dark\:ring-red-400\/20{--tw-ring-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}}.dark .dark\:ring-red-400\/30{--tw-ring-color:#ff65684d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-red-400)30%,transparent)}}.dark .dark\:ring-red-500\/20{--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.dark .dark\:ring-yellow-400\/30{--tw-ring-color:#fac8004d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-yellow-400)30%,transparent)}}.dark .dark\:ring-yellow-500\/20{--tw-ring-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}@media (hover:hover){.dark .dark\:hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.dark .dark\:hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.dark .dark\:hover\:bg-blue-800:hover{background-color:var(--color-blue-800)}.dark .dark\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.dark .dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.dark .dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark .dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark .dark\:hover\:bg-red-700:hover{background-color:var(--color-red-700)}.dark .dark\:hover\:bg-red-800:hover{background-color:var(--color-red-800)}.dark .dark\:hover\:text-blue-100:hover{color:var(--color-blue-100)}.dark .dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark .dark\:hover\:text-blue-400:hover{color:var(--color-blue-400)}.dark .dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.dark .dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark .dark\:hover\:text-green-300:hover{color:var(--color-green-300)}.dark .dark\:hover\:text-indigo-300:hover{color:var(--color-indigo-300)}.dark .dark\:hover\:text-red-300:hover{color:var(--color-red-300)}.dark .dark\:hover\:text-white:hover{color:var(--color-white)}}.dark .dark\:focus\:bg-red-700:focus{background-color:var(--color-red-700)}.dark .dark\:focus\:ring-offset-gray-900:focus{--tw-ring-offset-color:var(--color-gray-900)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/webapp/assets/_app/immutable/assets/_layout.BIzx0g6N.css b/webapp/assets/_app/immutable/assets/_layout.BIzx0g6N.css deleted file mode 100644 index 7e058911..00000000 --- a/webapp/assets/_app/immutable/assets/_layout.BIzx0g6N.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-50:oklch(98% .016 73.684);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-900:oklch(35.9% .144 278.697);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-wide:.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-full{right:100%}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-full{left:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.container\!{width:100%!important}@media (min-width:640px){.container\!{max-width:640px!important}}@media (min-width:768px){.container\!{max-width:768px!important}}@media (min-width:1024px){.container\!{max-width:1024px!important}}@media (min-width:1280px){.container\!{max-width:1280px!important}}@media (min-width:1536px){.container\!{max-width:1536px!important}}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.-mr-0\.5{margin-right:calc(var(--spacing)*-.5)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-12{margin-right:calc(var(--spacing)*-12)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-2\.5{margin-right:calc(var(--spacing)*2.5)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-0\.5{margin-left:calc(var(--spacing)*-.5)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.h-0{height:calc(var(--spacing)*0)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-24{height:calc(var(--spacing)*24)}.h-48{height:calc(var(--spacing)*48)}.h-full{height:100%}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[90vh\]{max-height:90vh}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[38px\]{min-height:38px}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing)*0)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-64{width:calc(var(--spacing)*64)}.w-80{width:calc(var(--spacing)*80)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize\!{resize:both!important}.resize-none{resize:none}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing)*0)}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}:where(.-space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(-1px*var(--tw-space-y-reverse));margin-block-end:calc(-1px*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{-moz-column-gap:calc(var(--spacing)*4);column-gap:calc(var(--spacing)*4)}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-1px*var(--tw-space-x-reverse));margin-inline-end:calc(-1px*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-6{row-gap:calc(var(--spacing)*6)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-600{border-color:var(--color-gray-600)}.border-green-200{border-color:var(--color-green-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-yellow-300{border-color:var(--color-yellow-300)}.border-t-gray-900{border-top-color:var(--color-gray-900)}.border-r-gray-900{border-right-color:var(--color-gray-900)}.border-b-gray-900{border-bottom-color:var(--color-gray-900)}.border-l-gray-900{border-left-color:var(--color-gray-900)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-900{background-color:var(--color-red-900)}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-20{padding-top:calc(var(--spacing)*20)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.text-black{color:var(--color-black)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-indigo-600{color:var(--color-indigo-600)}.text-orange-700{color:var(--color-orange-700)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-600\/20{--tw-ring-color:#155dfc33}@supports (color:color-mix(in lab,red,red)){.ring-blue-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-600)20%,transparent)}}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.ring-gray-600\/20{--tw-ring-color:#4a556533}@supports (color:color-mix(in lab,red,red)){.ring-gray-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-600)20%,transparent)}}.ring-green-200{--tw-ring-color:var(--color-green-200)}.ring-green-600\/20{--tw-ring-color:#00a54433}@supports (color:color-mix(in lab,red,red)){.ring-green-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-600)20%,transparent)}}.ring-orange-600\/20{--tw-ring-color:#f0510033}@supports (color:color-mix(in lab,red,red)){.ring-orange-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-600)20%,transparent)}}.ring-purple-600\/20{--tw-ring-color:#9810fa33}@supports (color:color-mix(in lab,red,red)){.ring-purple-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-600)20%,transparent)}}.ring-red-200{--tw-ring-color:var(--color-red-200)}.ring-red-600\/20{--tw-ring-color:#e4001433}@supports (color:color-mix(in lab,red,red)){.ring-red-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-600)20%,transparent)}}.ring-yellow-200{--tw-ring-color:var(--color-yellow-200)}.ring-yellow-600\/20{--tw-ring-color:#cd890033}@supports (color:color-mix(in lab,red,red)){.ring-yellow-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-600)20%,transparent)}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ring-inset{--tw-ring-inset:inset}@media (hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-red-200:hover{background-color:var(--color-red-200)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-500:hover{color:var(--color-green-500)}.hover\:text-green-900:hover{color:var(--color-green-900)}.hover\:text-indigo-900:hover{color:var(--color-indigo-900)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-900:hover{color:var(--color-red-900)}.hover\:text-yellow-300:hover{color:var(--color-yellow-300)}.hover\:text-yellow-500:hover{color:var(--color-yellow-500)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:bg-red-200:focus{background-color:var(--color-red-200)}.focus\:placeholder-gray-400:focus::-moz-placeholder{color:var(--color-gray-400)}.focus\:placeholder-gray-400:focus::placeholder{color:var(--color-gray-400)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white:focus{--tw-ring-color:var(--color-white)}.focus\:ring-yellow-500:focus{--tw-ring-color:var(--color-yellow-500)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-400:disabled{background-color:var(--color-gray-400)}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:bg-gray-400:disabled:hover{background-color:var(--color-gray-400)}}@media (min-width:640px){.sm\:mx-auto{margin-inline:auto}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:w-full{width:100%}.sm\:max-w-md{max-width:var(--container-md)}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:768px){.md\:ml-2{margin-left:calc(var(--spacing)*2)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}:where(.md\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}}@media (min-width:1024px){.lg\:fixed{position:fixed}.lg\:inset-y-0{inset-block:calc(var(--spacing)*0)}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-64{width:calc(var(--spacing)*64)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:pt-6{padding-top:calc(var(--spacing)*6)}.lg\:pl-64{padding-left:calc(var(--spacing)*64)}}.dark .dark\:block{display:block}.dark .dark\:hidden{display:none}:where(.dark .dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}.dark .dark\:border-blue-700{border-color:var(--color-blue-700)}.dark .dark\:border-blue-800{border-color:var(--color-blue-800)}.dark .dark\:border-gray-600{border-color:var(--color-gray-600)}.dark .dark\:border-gray-700{border-color:var(--color-gray-700)}.dark .dark\:border-green-700{border-color:var(--color-green-700)}.dark .dark\:border-red-500{border-color:var(--color-red-500)}.dark .dark\:border-red-600{border-color:var(--color-red-600)}.dark .dark\:border-red-700{border-color:var(--color-red-700)}.dark .dark\:border-red-800{border-color:var(--color-red-800)}.dark .dark\:border-yellow-600{border-color:var(--color-yellow-600)}.dark .dark\:border-yellow-700{border-color:var(--color-yellow-700)}.dark .dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark .dark\:bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.dark .dark\:bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.dark .dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark .dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark .dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark .dark\:bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/50{background-color:color-mix(in oklab,var(--color-blue-900)50%,transparent)}}.dark .dark\:bg-gray-500\/10{background-color:#6a72821a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-500\/10{background-color:color-mix(in oklab,var(--color-gray-500)10%,transparent)}}.dark .dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark .dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark .dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark .dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark .dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark .dark\:bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.dark .dark\:bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.dark .dark\:bg-green-900{background-color:var(--color-green-900)}.dark .dark\:bg-green-900\/50{background-color:#0d542b80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/50{background-color:color-mix(in oklab,var(--color-green-900)50%,transparent)}}.dark .dark\:bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.dark .dark\:bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500)10%,transparent)}}.dark .dark\:bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.dark .dark\:bg-red-700{background-color:var(--color-red-700)}.dark .dark\:bg-red-800{background-color:var(--color-red-800)}.dark .dark\:bg-red-900{background-color:var(--color-red-900)}.dark .dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark .dark\:bg-red-900\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/50{background-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.dark .dark\:bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.dark .dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark .dark\:bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}}.dark .dark\:from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-700{--tw-gradient-to:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:text-blue-100{color:var(--color-blue-100)}.dark .dark\:text-blue-200{color:var(--color-blue-200)}.dark .dark\:text-blue-300{color:var(--color-blue-300)}.dark .dark\:text-blue-400{color:var(--color-blue-400)}.dark .dark\:text-gray-200{color:var(--color-gray-200)}.dark .dark\:text-gray-300{color:var(--color-gray-300)}.dark .dark\:text-gray-400{color:var(--color-gray-400)}.dark .dark\:text-gray-500{color:var(--color-gray-500)}.dark .dark\:text-green-200{color:var(--color-green-200)}.dark .dark\:text-green-300{color:var(--color-green-300)}.dark .dark\:text-green-400{color:var(--color-green-400)}.dark .dark\:text-indigo-400{color:var(--color-indigo-400)}.dark .dark\:text-orange-400{color:var(--color-orange-400)}.dark .dark\:text-purple-400{color:var(--color-purple-400)}.dark .dark\:text-red-100{color:var(--color-red-100)}.dark .dark\:text-red-200{color:var(--color-red-200)}.dark .dark\:text-red-300{color:var(--color-red-300)}.dark .dark\:text-red-400{color:var(--color-red-400)}.dark .dark\:text-white{color:var(--color-white)}.dark .dark\:text-yellow-200{color:var(--color-yellow-200)}.dark .dark\:text-yellow-300{color:var(--color-yellow-300)}.dark .dark\:text-yellow-400{color:var(--color-yellow-400)}.dark .dark\:placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-400::placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.dark .dark\:placeholder-gray-500::placeholder{color:var(--color-gray-500)}.dark .dark\:ring-blue-400\/20{--tw-ring-color:#54a2ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)20%,transparent)}}.dark .dark\:ring-blue-400\/30{--tw-ring-color:#54a2ff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)30%,transparent)}}.dark .dark\:ring-blue-500\/20{--tw-ring-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.dark .dark\:ring-gray-400\/20{--tw-ring-color:#99a1af33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)20%,transparent)}}.dark .dark\:ring-gray-400\/30{--tw-ring-color:#99a1af4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)30%,transparent)}}.dark .dark\:ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.dark .dark\:ring-green-400\/20{--tw-ring-color:#05df7233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-400)20%,transparent)}}.dark .dark\:ring-green-400\/30{--tw-ring-color:#05df724d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-green-400)30%,transparent)}}.dark .dark\:ring-green-500\/20{--tw-ring-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.dark .dark\:ring-orange-500\/20{--tw-ring-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-orange-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.dark .dark\:ring-purple-500\/20{--tw-ring-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-purple-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.dark .dark\:ring-red-400\/20{--tw-ring-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}}.dark .dark\:ring-red-400\/30{--tw-ring-color:#ff65684d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-red-400)30%,transparent)}}.dark .dark\:ring-red-500\/20{--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.dark .dark\:ring-yellow-400\/30{--tw-ring-color:#fac8004d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-yellow-400)30%,transparent)}}.dark .dark\:ring-yellow-500\/20{--tw-ring-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}@media (hover:hover){.dark .dark\:hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.dark .dark\:hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.dark .dark\:hover\:bg-blue-800:hover{background-color:var(--color-blue-800)}.dark .dark\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.dark .dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.dark .dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark .dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark .dark\:hover\:bg-red-700:hover{background-color:var(--color-red-700)}.dark .dark\:hover\:bg-red-800:hover{background-color:var(--color-red-800)}.dark .dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark .dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.dark .dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark .dark\:hover\:text-green-300:hover{color:var(--color-green-300)}.dark .dark\:hover\:text-indigo-300:hover{color:var(--color-indigo-300)}.dark .dark\:hover\:text-red-300:hover{color:var(--color-red-300)}.dark .dark\:hover\:text-white:hover{color:var(--color-white)}}.dark .dark\:focus\:bg-red-700:focus{background-color:var(--color-red-700)}.dark .dark\:focus\:ring-offset-gray-900:focus{--tw-ring-offset-color:var(--color-gray-900)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/webapp/assets/_app/immutable/assets/_layout.BSyLSYks.css b/webapp/assets/_app/immutable/assets/_layout.BSyLSYks.css new file mode 100644 index 00000000..0da004ab --- /dev/null +++ b/webapp/assets/_app/immutable/assets/_layout.BSyLSYks.css @@ -0,0 +1 @@ +/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-50:oklch(98% .016 73.684);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-900:oklch(35.9% .144 278.697);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-wide:.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-full{right:100%}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-full{left:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.container\!{width:100%!important}@media (min-width:640px){.container\!{max-width:640px!important}}@media (min-width:768px){.container\!{max-width:768px!important}}@media (min-width:1024px){.container\!{max-width:1024px!important}}@media (min-width:1280px){.container\!{max-width:1280px!important}}@media (min-width:1536px){.container\!{max-width:1536px!important}}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.-mr-0\.5{margin-right:calc(var(--spacing)*-.5)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-12{margin-right:calc(var(--spacing)*-12)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-2\.5{margin-right:calc(var(--spacing)*2.5)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-0\.5{margin-left:calc(var(--spacing)*-.5)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.h-0{height:calc(var(--spacing)*0)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-24{height:calc(var(--spacing)*24)}.h-48{height:calc(var(--spacing)*48)}.h-64{height:calc(var(--spacing)*64)}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[90vh\]{max-height:90vh}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[38px\]{min-height:38px}.min-h-\[42px\]{min-height:42px}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing)*0)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-64{width:calc(var(--spacing)*64)}.w-80{width:calc(var(--spacing)*80)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[120px\]{min-width:120px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize\!{resize:both!important}.resize-none{resize:none}.resize-y{resize:vertical}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing)*0)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}:where(.-space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(-1px*var(--tw-space-y-reverse));margin-block-end:calc(-1px*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{-moz-column-gap:calc(var(--spacing)*4);column-gap:calc(var(--spacing)*4)}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-1px*var(--tw-space-x-reverse));margin-inline-end:calc(-1px*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-6{row-gap:calc(var(--spacing)*6)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-600{border-color:var(--color-gray-600)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-600{border-color:var(--color-indigo-600)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-yellow-300{border-color:var(--color-yellow-300)}.border-t-gray-900{border-top-color:var(--color-gray-900)}.border-r-gray-900{border-right-color:var(--color-gray-900)}.border-b-gray-900{border-bottom-color:var(--color-gray-900)}.border-l-gray-900{border-left-color:var(--color-gray-900)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-800\/50{background-color:#193cb880}@supports (color:color-mix(in lab,red,red)){.bg-blue-800\/50{background-color:color-mix(in oklab,var(--color-blue-800)50%,transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-900{background-color:var(--color-red-900)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-20{padding-top:calc(var(--spacing)*20)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-black{color:var(--color-black)}.text-blue-200{color:var(--color-blue-200)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-indigo-600{color:var(--color-indigo-600)}.text-orange-700{color:var(--color-orange-700)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-600\/20{--tw-ring-color:#155dfc33}@supports (color:color-mix(in lab,red,red)){.ring-blue-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-600)20%,transparent)}}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.ring-gray-600\/20{--tw-ring-color:#4a556533}@supports (color:color-mix(in lab,red,red)){.ring-gray-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-600)20%,transparent)}}.ring-green-200{--tw-ring-color:var(--color-green-200)}.ring-green-600\/20{--tw-ring-color:#00a54433}@supports (color:color-mix(in lab,red,red)){.ring-green-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-600)20%,transparent)}}.ring-orange-600\/20{--tw-ring-color:#f0510033}@supports (color:color-mix(in lab,red,red)){.ring-orange-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-600)20%,transparent)}}.ring-purple-600\/20{--tw-ring-color:#9810fa33}@supports (color:color-mix(in lab,red,red)){.ring-purple-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-600)20%,transparent)}}.ring-red-200{--tw-ring-color:var(--color-red-200)}.ring-red-600\/20{--tw-ring-color:#e4001433}@supports (color:color-mix(in lab,red,red)){.ring-red-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-600)20%,transparent)}}.ring-yellow-200{--tw-ring-color:var(--color-yellow-200)}.ring-yellow-600\/20{--tw-ring-color:#cd890033}@supports (color:color-mix(in lab,red,red)){.ring-yellow-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-600)20%,transparent)}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.ring-inset{--tw-ring-inset:inset}@media (hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-red-200:hover{background-color:var(--color-red-200)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-500:hover{color:var(--color-green-500)}.hover\:text-green-900:hover{color:var(--color-green-900)}.hover\:text-indigo-500:hover{color:var(--color-indigo-500)}.hover\:text-indigo-900:hover{color:var(--color-indigo-900)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-900:hover{color:var(--color-red-900)}.hover\:text-yellow-300:hover{color:var(--color-yellow-300)}.hover\:text-yellow-500:hover{color:var(--color-yellow-500)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:bg-red-200:focus{background-color:var(--color-red-200)}.focus\:placeholder-gray-400:focus::-moz-placeholder{color:var(--color-gray-400)}.focus\:placeholder-gray-400:focus::placeholder{color:var(--color-gray-400)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white:focus{--tw-ring-color:var(--color-white)}.focus\:ring-yellow-500:focus{--tw-ring-color:var(--color-yellow-500)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-400:disabled{background-color:var(--color-gray-400)}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:bg-gray-400:disabled:hover{background-color:var(--color-gray-400)}}@media (min-width:640px){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:w-full{width:100%}.sm\:max-w-md{max-width:var(--container-md)}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:768px){.md\:ml-2{margin-left:calc(var(--spacing)*2)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}:where(.md\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}}@media (min-width:1024px){.lg\:fixed{position:fixed}.lg\:inset-y-0{inset-block:calc(var(--spacing)*0)}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-64{width:calc(var(--spacing)*64)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:pt-6{padding-top:calc(var(--spacing)*6)}.lg\:pl-64{padding-left:calc(var(--spacing)*64)}}.dark .dark\:block{display:block}.dark .dark\:hidden{display:none}:where(.dark .dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}.dark .dark\:border-blue-700{border-color:var(--color-blue-700)}.dark .dark\:border-blue-800{border-color:var(--color-blue-800)}.dark .dark\:border-gray-600{border-color:var(--color-gray-600)}.dark .dark\:border-gray-700{border-color:var(--color-gray-700)}.dark .dark\:border-green-700{border-color:var(--color-green-700)}.dark .dark\:border-red-500{border-color:var(--color-red-500)}.dark .dark\:border-red-600{border-color:var(--color-red-600)}.dark .dark\:border-red-700{border-color:var(--color-red-700)}.dark .dark\:border-red-800{border-color:var(--color-red-800)}.dark .dark\:border-yellow-600{border-color:var(--color-yellow-600)}.dark .dark\:border-yellow-700{border-color:var(--color-yellow-700)}.dark .dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark .dark\:bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.dark .dark\:bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.dark .dark\:bg-blue-700{background-color:var(--color-blue-700)}.dark .dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark .dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark .dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark .dark\:bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/50{background-color:color-mix(in oklab,var(--color-blue-900)50%,transparent)}}.dark .dark\:bg-gray-500\/10{background-color:#6a72821a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-500\/10{background-color:color-mix(in oklab,var(--color-gray-500)10%,transparent)}}.dark .dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark .dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark .dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark .dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark .dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark .dark\:bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.dark .dark\:bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.dark .dark\:bg-green-900{background-color:var(--color-green-900)}.dark .dark\:bg-green-900\/50{background-color:#0d542b80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/50{background-color:color-mix(in oklab,var(--color-green-900)50%,transparent)}}.dark .dark\:bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.dark .dark\:bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500)10%,transparent)}}.dark .dark\:bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.dark .dark\:bg-red-700{background-color:var(--color-red-700)}.dark .dark\:bg-red-800{background-color:var(--color-red-800)}.dark .dark\:bg-red-900{background-color:var(--color-red-900)}.dark .dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark .dark\:bg-red-900\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/50{background-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.dark .dark\:bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.dark .dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark .dark\:bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}}.dark .dark\:from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-700{--tw-gradient-to:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:text-blue-100{color:var(--color-blue-100)}.dark .dark\:text-blue-200{color:var(--color-blue-200)}.dark .dark\:text-blue-300{color:var(--color-blue-300)}.dark .dark\:text-blue-400{color:var(--color-blue-400)}.dark .dark\:text-gray-200{color:var(--color-gray-200)}.dark .dark\:text-gray-300{color:var(--color-gray-300)}.dark .dark\:text-gray-400{color:var(--color-gray-400)}.dark .dark\:text-gray-500{color:var(--color-gray-500)}.dark .dark\:text-green-200{color:var(--color-green-200)}.dark .dark\:text-green-300{color:var(--color-green-300)}.dark .dark\:text-green-400{color:var(--color-green-400)}.dark .dark\:text-indigo-400{color:var(--color-indigo-400)}.dark .dark\:text-orange-400{color:var(--color-orange-400)}.dark .dark\:text-purple-400{color:var(--color-purple-400)}.dark .dark\:text-red-100{color:var(--color-red-100)}.dark .dark\:text-red-200{color:var(--color-red-200)}.dark .dark\:text-red-300{color:var(--color-red-300)}.dark .dark\:text-red-400{color:var(--color-red-400)}.dark .dark\:text-white{color:var(--color-white)}.dark .dark\:text-yellow-200{color:var(--color-yellow-200)}.dark .dark\:text-yellow-300{color:var(--color-yellow-300)}.dark .dark\:text-yellow-400{color:var(--color-yellow-400)}.dark .dark\:placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-400::placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.dark .dark\:placeholder-gray-500::placeholder{color:var(--color-gray-500)}.dark .dark\:ring-blue-400\/20{--tw-ring-color:#54a2ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)20%,transparent)}}.dark .dark\:ring-blue-400\/30{--tw-ring-color:#54a2ff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)30%,transparent)}}.dark .dark\:ring-blue-500\/20{--tw-ring-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.dark .dark\:ring-gray-400\/20{--tw-ring-color:#99a1af33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)20%,transparent)}}.dark .dark\:ring-gray-400\/30{--tw-ring-color:#99a1af4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)30%,transparent)}}.dark .dark\:ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.dark .dark\:ring-green-400\/20{--tw-ring-color:#05df7233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-400)20%,transparent)}}.dark .dark\:ring-green-400\/30{--tw-ring-color:#05df724d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-green-400)30%,transparent)}}.dark .dark\:ring-green-500\/20{--tw-ring-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.dark .dark\:ring-orange-500\/20{--tw-ring-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-orange-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.dark .dark\:ring-purple-500\/20{--tw-ring-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-purple-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.dark .dark\:ring-red-400\/20{--tw-ring-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}}.dark .dark\:ring-red-400\/30{--tw-ring-color:#ff65684d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-red-400)30%,transparent)}}.dark .dark\:ring-red-500\/20{--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.dark .dark\:ring-yellow-400\/30{--tw-ring-color:#fac8004d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-yellow-400)30%,transparent)}}.dark .dark\:ring-yellow-500\/20{--tw-ring-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}@media (hover:hover){.dark .dark\:hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.dark .dark\:hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.dark .dark\:hover\:bg-blue-800:hover{background-color:var(--color-blue-800)}.dark .dark\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.dark .dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.dark .dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark .dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark .dark\:hover\:bg-red-700:hover{background-color:var(--color-red-700)}.dark .dark\:hover\:bg-red-800:hover{background-color:var(--color-red-800)}.dark .dark\:hover\:text-blue-100:hover{color:var(--color-blue-100)}.dark .dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark .dark\:hover\:text-blue-400:hover{color:var(--color-blue-400)}.dark .dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.dark .dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark .dark\:hover\:text-green-300:hover{color:var(--color-green-300)}.dark .dark\:hover\:text-indigo-300:hover{color:var(--color-indigo-300)}.dark .dark\:hover\:text-red-300:hover{color:var(--color-red-300)}.dark .dark\:hover\:text-white:hover{color:var(--color-white)}}.dark .dark\:focus\:bg-red-700:focus{background-color:var(--color-red-700)}.dark .dark\:focus\:ring-offset-gray-900:focus{--tw-ring-offset-color:var(--color-gray-900)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/webapp/assets/_app/immutable/chunks/30NlHgQ_.js b/webapp/assets/_app/immutable/chunks/30NlHgQ_.js new file mode 100644 index 00000000..e3beabfa --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/30NlHgQ_.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as H}from"./TJn6xDN9.js";import{p as J,l as j,h as K,f as g,t as h,b as k,c as L,s as u,d as r,k as z,m as E,r as a,q as l,u as p,g as _,e as y}from"./DniTuB_0.js";import{p as d,i as I}from"./DbNhg6mG.js";import{c as M,s as P,d as n}from"./DSfKzFV1.js";var Q=g('
'),S=g('
'),V=g('');function te(C,i){J(i,!1);const m=E(),b=E();let e=d(i,"item",8),s=d(i,"entityType",8,"repository"),N=d(i,"showOwner",8,!1),O=d(i,"showId",8,!1),T=d(i,"fontMono",8,!1);function q(){if(!e())return"Unknown";switch(s()){case"repository":return N()?`${e().owner||"Unknown"}/${e().name||"Unknown"}`:e().name||"Unknown";case"organization":case"enterprise":return e().name||"Unknown";case"pool":return O()?e().id||"Unknown":e().name||"Unknown";case"scaleset":return e().name||"Unknown";case"instance":return e().name||"Unknown";case"template":return e().name||"Unknown";case"object":return e().name||"Unknown";default:return e().name||e().id||"Unknown"}}function B(){if(!e())return"#";let t;switch(s()){case"instance":t=e().name;break;default:t=e().id||e().name;break}if(!t)return"#";switch(s()){case"repository":return n(`/repositories/${t}`);case"organization":return n(`/organizations/${t}`);case"enterprise":return n(`/enterprises/${t}`);case"pool":return n(`/pools/${t}`);case"scaleset":return n(`/scalesets/${t}`);case"instance":return n(`/instances/${encodeURIComponent(t)}`);case"template":return n(`/templates/${t}`);case"object":return n(`/objects/${t}`);default:return"#"}}j(()=>{},()=>{z(m,q())}),j(()=>{},()=>{z(b,B())}),K(),H();var f=V(),w=r(f),c=r(w),D=r(c,!0);a(c);var R=u(c,2);{var $=t=>{var o=Q(),v=u(r(o),2),x=r(v),U=u(r(x),2),G=r(U,!0);a(U),a(x),a(v),a(o),h(()=>y(G,(l(e()),p(()=>e().description)))),k(t,o)};I(R,t=>{l(s()),l(e()),p(()=>s()==="object"&&e()?.description)&&t($)})}a(w);var A=u(w,2);{var F=t=>{var o=S(),v=r(o,!0);a(o),h(()=>y(v,(l(e()),p(()=>e().provider_id)))),k(t,o)};I(A,t=>{l(s()),l(e()),p(()=>s()==="instance"&&e()?.provider_id)&&t(F)})}a(f),h(()=>{M(c,"href",_(b)),P(c,1,`truncate text-blue-600 dark:text-blue-400 hover:text-blue-500 dark:hover:text-blue-300 ${T()?"font-mono":""}`),M(c,"title",_(m)),y(D,_(m))}),k(C,f),L()}export{te as E}; diff --git a/webapp/assets/_app/immutable/chunks/d1ceLqrJ.js b/webapp/assets/_app/immutable/chunks/B3d8BqkX.js similarity index 89% rename from webapp/assets/_app/immutable/chunks/d1ceLqrJ.js rename to webapp/assets/_app/immutable/chunks/B3d8BqkX.js index 8e12fc43..eaaec6a3 100644 --- a/webapp/assets/_app/immutable/chunks/d1ceLqrJ.js +++ b/webapp/assets/_app/immutable/chunks/B3d8BqkX.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as D}from"./TJn6xDN9.js";import{p as P,f as I,d as s,r as n,s as u,u as l,q as i,t as w,e as S,b as N,c as A}from"./DniTuB_0.js";import{d as f,c as F}from"./BZ2rxtTc.js";import{p as d}from"./DbNhg6mG.js";import{D as E,G,A as j}from"./CKaB5fL4.js";import{E as q}from"./Dh8uHEF5.js";import{S as g}from"./C1GM4Goa.js";var L=I('');function O(y,a){P(a,!1);let e=d(a,"instances",8),h=d(a,"entityType",8),v=d(a,"onDeleteInstance",8);const b=[{key:"name",title:"Name",cellComponent:q,cellProps:{entityType:"instance",nameField:"name"}},{key:"status",title:"Status",cellComponent:g,cellProps:{statusType:"instance",statusField:"status"}},{key:"runner_status",title:"Runner Status",cellComponent:g,cellProps:{statusType:"instance",statusField:"runner_status"}},{key:"created",title:"Created",cellComponent:G,cellProps:{field:"created_at",type:"date"}},{key:"actions",title:"Actions",align:"right",cellComponent:j,cellProps:{actions:[{type:"delete",label:"Delete",title:"Delete instance",ariaLabel:"Delete instance",action:"delete"}]}}],x={entityType:"instance",primaryText:{field:"name",isClickable:!0,href:"/instances/{name}"},secondaryText:{field:"provider_id"},badges:[{type:"status",field:"status"}],actions:[{type:"delete",handler:t=>m(t)}]};function m(t){v()(t)}function C(t){m(t.detail.item)}D();var r=L(),p=s(r),o=s(p),c=s(o),T=s(c);n(c);var _=u(c,2);n(o);var k=u(o,2);E(k,{get columns(){return b},get data(){return e()},loading:!1,error:"",searchTerm:"",showSearch:!1,showPagination:!1,currentPage:1,get perPage(){return i(e()),l(()=>e().length)},totalPages:1,get totalItems(){return i(e()),l(()=>e().length)},itemName:"instances",emptyTitle:"No instances running",get emptyMessage(){return`No instances running for this ${h()??""}.`},emptyIconType:"cog",get mobileCardConfig(){return x},$$events:{delete:C}}),n(p),n(r),w(t=>{S(T,`Instances (${i(e()),l(()=>e().length)??""})`),F(_,"href",t)},[()=>(i(f),l(()=>f("/instances")))]),N(y,r),A()}export{O as I}; +import"./DsnmJJEf.js";import{i as D}from"./TJn6xDN9.js";import{p as P,f as I,d as s,r as n,s as u,u as l,q as i,t as w,e as S,b as N,c as A}from"./DniTuB_0.js";import{d as f,c as F}from"./DSfKzFV1.js";import{p as d}from"./DbNhg6mG.js";import{D as E,G,A as j}from"./BlJ06z1t.js";import{E as q}from"./30NlHgQ_.js";import{S as g}from"./BsX_CrDw.js";var L=I('');function O(y,a){P(a,!1);let e=d(a,"instances",8),h=d(a,"entityType",8),v=d(a,"onDeleteInstance",8);const b=[{key:"name",title:"Name",cellComponent:q,cellProps:{entityType:"instance",nameField:"name"}},{key:"status",title:"Status",cellComponent:g,cellProps:{statusType:"instance",statusField:"status"}},{key:"runner_status",title:"Runner Status",cellComponent:g,cellProps:{statusType:"instance",statusField:"runner_status"}},{key:"created",title:"Created",cellComponent:G,cellProps:{field:"created_at",type:"date"}},{key:"actions",title:"Actions",align:"right",cellComponent:j,cellProps:{actions:[{type:"delete",label:"Delete",title:"Delete instance",ariaLabel:"Delete instance",action:"delete"}]}}],x={entityType:"instance",primaryText:{field:"name",isClickable:!0,href:"/instances/{name}"},secondaryText:{field:"provider_id"},badges:[{type:"status",field:"status"}],actions:[{type:"delete",handler:t=>m(t)}]};function m(t){v()(t)}function C(t){m(t.detail.item)}D();var r=L(),p=s(r),o=s(p),c=s(o),T=s(c);n(c);var _=u(c,2);n(o);var k=u(o,2);E(k,{get columns(){return b},get data(){return e()},loading:!1,error:"",searchTerm:"",showSearch:!1,showPagination:!1,currentPage:1,get perPage(){return i(e()),l(()=>e().length)},totalPages:1,get totalItems(){return i(e()),l(()=>e().length)},itemName:"instances",emptyTitle:"No instances running",get emptyMessage(){return`No instances running for this ${h()??""}.`},emptyIconType:"cog",get mobileCardConfig(){return x},$$events:{delete:C}}),n(p),n(r),w(t=>{S(T,`Instances (${i(e()),l(()=>e().length)??""})`),F(_,"href",t)},[()=>(i(f),l(()=>f("/instances")))]),N(y,r),A()}export{O as I}; diff --git a/webapp/assets/_app/immutable/chunks/BC4TpgBU.js b/webapp/assets/_app/immutable/chunks/BC4TpgBU.js new file mode 100644 index 00000000..f2f2e065 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/BC4TpgBU.js @@ -0,0 +1,4 @@ +import{d as o}from"./DSfKzFV1.js";function l(r){if(!r)return"N/A";try{return(typeof r=="string"?new Date(r):r).toLocaleString()}catch{return"Invalid Date"}}function f(r,e="w-4 h-4"){return r==="gitea"?``:r==="github"?`
`:` + + + `}function d(r,e){if(r.repo_name)return r.repo_name;if(r.org_name)return r.org_name;if(r.enterprise_name)return r.enterprise_name;if(r.repo_id&&!r.repo_name&&e?.repositories){const n=e.repositories.find(t=>t.id===r.repo_id);return n?`${n.owner}/${n.name}`:"Unknown Entity"}if(r.org_id&&!r.org_name&&e?.organizations){const n=e.organizations.find(t=>t.id===r.org_id);return n&&n.name?n.name:"Unknown Entity"}if(r.enterprise_id&&!r.enterprise_name&&e?.enterprises){const n=e.enterprises.find(t=>t.id===r.enterprise_id);return n&&n.name?n.name:"Unknown Entity"}return"Unknown Entity"}function p(r){return r.repo_id?"repository":r.org_id?"organization":r.enterprise_id?"enterprise":"unknown"}function g(r){return r.repo_id?o(`/repositories/${r.repo_id}`):r.org_id?o(`/organizations/${r.org_id}`):r.enterprise_id?o(`/enterprises/${r.enterprise_id}`):"#"}function w(r){r&&(r.scrollTop=r.scrollHeight)}function m(r){return{newPerPage:r,newCurrentPage:1}}function v(r){return r.pool_manager_status?.running?{text:"Running",variant:"success"}:{text:"Stopped",variant:"error"}}function _(r){switch(r.toLowerCase()){case"error":return{text:"Error",variant:"error"};case"warning":return{text:"Warning",variant:"warning"};case"info":return{text:"Info",variant:"info"};default:return{text:r,variant:"info"}}}function i(r,e,n){if(!e.trim())return r;const t=e.toLowerCase();return r.filter(s=>typeof n=="function"?n(s).toLowerCase().includes(t):n.some(a=>s[a]?.toString().toLowerCase().includes(t)))}function h(r,e){return i(r,e,["name","owner"])}function x(r,e){return i(r,e,["name"])}function k(r,e){return i(r,e,n=>[n.name||"",n.description||"",n.endpoint?.name||""].join(" "))}function E(r,e){return i(r,e,["name","description","base_url","api_base_url"])}function L(r,e,n){return r.slice((e-1)*n,e*n)}export{E as a,l as b,m as c,_ as d,d as e,k as f,f as g,i as h,p as i,g as j,v as k,x as l,h as m,L as p,w as s}; diff --git a/webapp/assets/_app/immutable/chunks/DKJ_c8yL.js b/webapp/assets/_app/immutable/chunks/BE9PkXKz.js similarity index 98% rename from webapp/assets/_app/immutable/chunks/DKJ_c8yL.js rename to webapp/assets/_app/immutable/chunks/BE9PkXKz.js index 6e4b7dba..9d1bb7c2 100644 --- a/webapp/assets/_app/immutable/chunks/DKJ_c8yL.js +++ b/webapp/assets/_app/immutable/chunks/BE9PkXKz.js @@ -1 +1 @@ -import{F as p,G as l}from"./DniTuB_0.js";import{g as d}from"./BZ2rxtTc.js";import{w as r}from"./DmHFwzWx.js";const f={repositories:[],organizations:[],enterprises:[],pools:[],scalesets:[],credentials:[],endpoints:[],controllerInfo:null,templates:[],loading:{repositories:!1,organizations:!1,enterprises:!1,pools:!1,scalesets:!1,credentials:!1,endpoints:!1,controllerInfo:!1,templates:!1},loaded:{repositories:!1,organizations:!1,enterprises:!1,pools:!1,scalesets:!1,credentials:!1,endpoints:!1,controllerInfo:!1,templates:!1},errorMessages:{repositories:"",organizations:"",enterprises:"",pools:"",scalesets:"",credentials:"",endpoints:"",controllerInfo:"",templates:""}},a=p(f);class u{unsubscribers=[];loadingPromises=new Map;retryAttempts=new Map;MAX_RETRIES=3;RETRY_DELAY_MS=1e3;websocketStatusUnsubscriber=null;async loadResource(e,t=!1){if(this.loadingPromises.has(e))return this.loadingPromises.get(e);a.update(o=>({...o,loading:{...o.loading,[e]:!0},errorMessages:{...o.errorMessages,[e]:""}}));const s=this.attemptLoad(e);this.loadingPromises.set(e,s);try{const o=await s;return a.update(n=>({...n,[e]:o,loading:{...n.loading,[e]:!1},loaded:{...n.loaded,[e]:!0},errorMessages:{...n.errorMessages,[e]:""}})),this.retryAttempts.delete(e),t&&this.startBackgroundLoading(e),o}catch(o){const n=o instanceof Error?o.message:"Failed to load data";throw a.update(i=>({...i,loading:{...i.loading,[e]:!1},errorMessages:{...i.errorMessages,[e]:n}})),console.error(`Failed to load ${e}:`,o),o}finally{this.loadingPromises.delete(e)}}async attemptLoad(e){const t=(this.retryAttempts.get(e)||0)+1;this.retryAttempts.set(e,t);try{let s;switch(e){case"repositories":s=d.listRepositories();break;case"organizations":s=d.listOrganizations();break;case"enterprises":s=d.listEnterprises();break;case"pools":s=d.listAllPools();break;case"scalesets":s=d.listScaleSets();break;case"credentials":s=d.listAllCredentials();break;case"endpoints":s=d.listAllEndpoints();break;case"controllerInfo":s=d.getControllerInfo();break;case"templates":s=d.listTemplates();break;default:throw new Error(`Unknown resource type: ${e}`)}return await s}catch(s){if(tsetTimeout(n,o)),this.attemptLoad(e)}else throw console.error(`All ${this.MAX_RETRIES} attempts failed for ${e}:`,s),s}}async startBackgroundLoading(e){const s=["repositories","organizations","enterprises","pools","scalesets","credentials","endpoints","templates"].filter(o=>o!==e);for(const o of s)setTimeout(()=>{this.loadResource(o,!1).catch(n=>{console.warn(`Background loading failed for ${o}:`,n)})},100*s.indexOf(o))}retryResource(e){return this.retryAttempts.delete(e),this.loadResource(e,!0)}setupWebSocketSubscriptions(){this.cleanup();const e=[r.subscribeToEntity("repository",["create","update","delete"],this.handleRepositoryEvent.bind(this)),r.subscribeToEntity("organization",["create","update","delete"],this.handleOrganizationEvent.bind(this)),r.subscribeToEntity("enterprise",["create","update","delete"],this.handleEnterpriseEvent.bind(this)),r.subscribeToEntity("pool",["create","update","delete"],this.handlePoolEvent.bind(this)),r.subscribeToEntity("scaleset",["create","update","delete"],this.handleScaleSetEvent.bind(this)),r.subscribeToEntity("controller",["update"],this.handleControllerEvent.bind(this)),r.subscribeToEntity("github_credentials",["create","update","delete"],this.handleCredentialsEvent.bind(this)),r.subscribeToEntity("gitea_credentials",["create","update","delete"],this.handleCredentialsEvent.bind(this)),r.subscribeToEntity("github_endpoint",["create","update","delete"],this.handleEndpointEvent.bind(this)),r.subscribeToEntity("template",["create","update","delete"],this.handleTemplateEvent.bind(this))];this.unsubscribers=e,this.setupWebSocketStatusMonitoring()}setupWebSocketStatusMonitoring(){this.websocketStatusUnsubscriber&&this.websocketStatusUnsubscriber();let e=!1;this.websocketStatusUnsubscriber=r.subscribe(t=>{t.connected&&!e&&(console.log("[EagerCache] WebSocket connected - reinitializing cache"),this.initializeAllResources()),e=t.connected})}async initializeAllResources(){const t=["repositories","organizations","enterprises","pools","scalesets","credentials","endpoints","controllerInfo","templates"].map(s=>this.loadResource(s,!0).catch(o=>{console.warn(`Failed to reload ${s} on WebSocket reconnect:`,o)}));await Promise.allSettled(t)}handleRepositoryEvent(e){a.update(t=>{if(!t.loaded.repositories)return t;const s=[...t.repositories],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,repositories:s}})}handleOrganizationEvent(e){a.update(t=>{if(!t.loaded.organizations)return t;const s=[...t.organizations],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,organizations:s}})}handleEnterpriseEvent(e){a.update(t=>{if(!t.loaded.enterprises)return t;const s=[...t.enterprises],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,enterprises:s}})}handlePoolEvent(e){a.update(t=>{if(!t.loaded.pools)return t;const s=[...t.pools],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,pools:s}})}handleScaleSetEvent(e){a.update(t=>{if(!t.loaded.scalesets)return t;const s=[...t.scalesets],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,scalesets:s}})}handleCredentialsEvent(e){a.update(t=>{if(!t.loaded.credentials)return t;const s=[...t.credentials],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,credentials:s}})}handleEndpointEvent(e){a.update(t=>{if(!t.loaded.endpoints)return t;const s=[...t.endpoints],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.name===o.name);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.name:o,i=s.findIndex(c=>c.name===n);i!==-1&&s.splice(i,1)}return{...t,endpoints:s}})}cleanup(){this.unsubscribers.forEach(e=>e()),this.unsubscribers=[],this.websocketStatusUnsubscriber&&(this.websocketStatusUnsubscriber(),this.websocketStatusUnsubscriber=null)}shouldUseCache(){return l(r).connected}async getRepositories(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching repositories directly from API"),await d.listRepositories();const t=l(a);return t.loaded.repositories?t.repositories:this.loadResource("repositories",!0)}async getOrganizations(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching organizations directly from API"),await d.listOrganizations();const t=l(a);return t.loaded.organizations?t.organizations:this.loadResource("organizations",!0)}async getEnterprises(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching enterprises directly from API"),await d.listEnterprises();const t=l(a);return t.loaded.enterprises?t.enterprises:this.loadResource("enterprises",!0)}async getPools(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching pools directly from API"),await d.listAllPools();const t=l(a);return t.loaded.pools?t.pools:this.loadResource("pools",!0)}async getScaleSets(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching scalesets directly from API"),await d.listScaleSets();const t=l(a);return t.loaded.scalesets?t.scalesets:this.loadResource("scalesets",!0)}async getCredentials(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching credentials directly from API"),await d.listAllCredentials();const t=l(a);return t.loaded.credentials?t.credentials:this.loadResource("credentials",!0)}async getEndpoints(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching endpoints directly from API"),await d.listAllEndpoints();const t=l(a);return t.loaded.endpoints?t.endpoints:this.loadResource("endpoints",!0)}async getControllerInfo(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching controller info directly from API"),await d.getControllerInfo();const t=l(a);return t.loaded.controllerInfo?t.controllerInfo:this.loadResource("controllerInfo",!0)}async getTemplates(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching templates directly from API"),await d.listTemplates();const t=l(a);return t.loaded.templates?t.templates:this.loadResource("templates",!0)}handleControllerEvent(e){a.update(t=>{if(!t.loaded.controllerInfo)return t;const s=e.payload;return e.operation==="update"?{...t,controllerInfo:s}:t})}handleTemplateEvent(e){a.update(t=>{if(!t.loaded.templates)return t;const s=[...t.templates],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,templates:s}})}}const h=new u;typeof window<"u"&&h.setupWebSocketSubscriptions();export{h as a,a as e}; +import{F as p,G as l}from"./DniTuB_0.js";import{g as d}from"./DSfKzFV1.js";import{w as r}from"./DmHFwzWx.js";const f={repositories:[],organizations:[],enterprises:[],pools:[],scalesets:[],credentials:[],endpoints:[],controllerInfo:null,templates:[],loading:{repositories:!1,organizations:!1,enterprises:!1,pools:!1,scalesets:!1,credentials:!1,endpoints:!1,controllerInfo:!1,templates:!1},loaded:{repositories:!1,organizations:!1,enterprises:!1,pools:!1,scalesets:!1,credentials:!1,endpoints:!1,controllerInfo:!1,templates:!1},errorMessages:{repositories:"",organizations:"",enterprises:"",pools:"",scalesets:"",credentials:"",endpoints:"",controllerInfo:"",templates:""}},a=p(f);class u{unsubscribers=[];loadingPromises=new Map;retryAttempts=new Map;MAX_RETRIES=3;RETRY_DELAY_MS=1e3;websocketStatusUnsubscriber=null;async loadResource(e,t=!1){if(this.loadingPromises.has(e))return this.loadingPromises.get(e);a.update(o=>({...o,loading:{...o.loading,[e]:!0},errorMessages:{...o.errorMessages,[e]:""}}));const s=this.attemptLoad(e);this.loadingPromises.set(e,s);try{const o=await s;return a.update(n=>({...n,[e]:o,loading:{...n.loading,[e]:!1},loaded:{...n.loaded,[e]:!0},errorMessages:{...n.errorMessages,[e]:""}})),this.retryAttempts.delete(e),t&&this.startBackgroundLoading(e),o}catch(o){const n=o instanceof Error?o.message:"Failed to load data";throw a.update(i=>({...i,loading:{...i.loading,[e]:!1},errorMessages:{...i.errorMessages,[e]:n}})),console.error(`Failed to load ${e}:`,o),o}finally{this.loadingPromises.delete(e)}}async attemptLoad(e){const t=(this.retryAttempts.get(e)||0)+1;this.retryAttempts.set(e,t);try{let s;switch(e){case"repositories":s=d.listRepositories();break;case"organizations":s=d.listOrganizations();break;case"enterprises":s=d.listEnterprises();break;case"pools":s=d.listAllPools();break;case"scalesets":s=d.listScaleSets();break;case"credentials":s=d.listAllCredentials();break;case"endpoints":s=d.listAllEndpoints();break;case"controllerInfo":s=d.getControllerInfo();break;case"templates":s=d.listTemplates();break;default:throw new Error(`Unknown resource type: ${e}`)}return await s}catch(s){if(tsetTimeout(n,o)),this.attemptLoad(e)}else throw console.error(`All ${this.MAX_RETRIES} attempts failed for ${e}:`,s),s}}async startBackgroundLoading(e){const s=["repositories","organizations","enterprises","pools","scalesets","credentials","endpoints","templates"].filter(o=>o!==e);for(const o of s)setTimeout(()=>{this.loadResource(o,!1).catch(n=>{console.warn(`Background loading failed for ${o}:`,n)})},100*s.indexOf(o))}retryResource(e){return this.retryAttempts.delete(e),this.loadResource(e,!0)}setupWebSocketSubscriptions(){this.cleanup();const e=[r.subscribeToEntity("repository",["create","update","delete"],this.handleRepositoryEvent.bind(this)),r.subscribeToEntity("organization",["create","update","delete"],this.handleOrganizationEvent.bind(this)),r.subscribeToEntity("enterprise",["create","update","delete"],this.handleEnterpriseEvent.bind(this)),r.subscribeToEntity("pool",["create","update","delete"],this.handlePoolEvent.bind(this)),r.subscribeToEntity("scaleset",["create","update","delete"],this.handleScaleSetEvent.bind(this)),r.subscribeToEntity("controller",["update"],this.handleControllerEvent.bind(this)),r.subscribeToEntity("github_credentials",["create","update","delete"],this.handleCredentialsEvent.bind(this)),r.subscribeToEntity("gitea_credentials",["create","update","delete"],this.handleCredentialsEvent.bind(this)),r.subscribeToEntity("github_endpoint",["create","update","delete"],this.handleEndpointEvent.bind(this)),r.subscribeToEntity("template",["create","update","delete"],this.handleTemplateEvent.bind(this))];this.unsubscribers=e,this.setupWebSocketStatusMonitoring()}setupWebSocketStatusMonitoring(){this.websocketStatusUnsubscriber&&this.websocketStatusUnsubscriber();let e=!1;this.websocketStatusUnsubscriber=r.subscribe(t=>{t.connected&&!e&&(console.log("[EagerCache] WebSocket connected - reinitializing cache"),this.initializeAllResources()),e=t.connected})}async initializeAllResources(){const t=["repositories","organizations","enterprises","pools","scalesets","credentials","endpoints","controllerInfo","templates"].map(s=>this.loadResource(s,!0).catch(o=>{console.warn(`Failed to reload ${s} on WebSocket reconnect:`,o)}));await Promise.allSettled(t)}handleRepositoryEvent(e){a.update(t=>{if(!t.loaded.repositories)return t;const s=[...t.repositories],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,repositories:s}})}handleOrganizationEvent(e){a.update(t=>{if(!t.loaded.organizations)return t;const s=[...t.organizations],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,organizations:s}})}handleEnterpriseEvent(e){a.update(t=>{if(!t.loaded.enterprises)return t;const s=[...t.enterprises],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,enterprises:s}})}handlePoolEvent(e){a.update(t=>{if(!t.loaded.pools)return t;const s=[...t.pools],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,pools:s}})}handleScaleSetEvent(e){a.update(t=>{if(!t.loaded.scalesets)return t;const s=[...t.scalesets],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,scalesets:s}})}handleCredentialsEvent(e){a.update(t=>{if(!t.loaded.credentials)return t;const s=[...t.credentials],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,credentials:s}})}handleEndpointEvent(e){a.update(t=>{if(!t.loaded.endpoints)return t;const s=[...t.endpoints],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.name===o.name);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.name:o,i=s.findIndex(c=>c.name===n);i!==-1&&s.splice(i,1)}return{...t,endpoints:s}})}cleanup(){this.unsubscribers.forEach(e=>e()),this.unsubscribers=[],this.websocketStatusUnsubscriber&&(this.websocketStatusUnsubscriber(),this.websocketStatusUnsubscriber=null)}shouldUseCache(){return l(r).connected}async getRepositories(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching repositories directly from API"),await d.listRepositories();const t=l(a);return t.loaded.repositories?t.repositories:this.loadResource("repositories",!0)}async getOrganizations(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching organizations directly from API"),await d.listOrganizations();const t=l(a);return t.loaded.organizations?t.organizations:this.loadResource("organizations",!0)}async getEnterprises(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching enterprises directly from API"),await d.listEnterprises();const t=l(a);return t.loaded.enterprises?t.enterprises:this.loadResource("enterprises",!0)}async getPools(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching pools directly from API"),await d.listAllPools();const t=l(a);return t.loaded.pools?t.pools:this.loadResource("pools",!0)}async getScaleSets(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching scalesets directly from API"),await d.listScaleSets();const t=l(a);return t.loaded.scalesets?t.scalesets:this.loadResource("scalesets",!0)}async getCredentials(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching credentials directly from API"),await d.listAllCredentials();const t=l(a);return t.loaded.credentials?t.credentials:this.loadResource("credentials",!0)}async getEndpoints(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching endpoints directly from API"),await d.listAllEndpoints();const t=l(a);return t.loaded.endpoints?t.endpoints:this.loadResource("endpoints",!0)}async getControllerInfo(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching controller info directly from API"),await d.getControllerInfo();const t=l(a);return t.loaded.controllerInfo?t.controllerInfo:this.loadResource("controllerInfo",!0)}async getTemplates(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching templates directly from API"),await d.listTemplates();const t=l(a);return t.loaded.templates?t.templates:this.loadResource("templates",!0)}handleControllerEvent(e){a.update(t=>{if(!t.loaded.controllerInfo)return t;const s=e.payload;return e.operation==="update"?{...t,controllerInfo:s}:t})}handleTemplateEvent(e){a.update(t=>{if(!t.loaded.templates)return t;const s=[...t.templates],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,templates:s}})}}const h=new u;typeof window<"u"&&h.setupWebSocketSubscriptions();export{h as a,a as e}; diff --git a/webapp/assets/_app/immutable/chunks/BZ2rxtTc.js b/webapp/assets/_app/immutable/chunks/BZ2rxtTc.js deleted file mode 100644 index c42d5c51..00000000 --- a/webapp/assets/_app/immutable/chunks/BZ2rxtTc.js +++ /dev/null @@ -1,7 +0,0 @@ -import{b as zr,r as Gr}from"./CGAsTaG2.js";import"./DsnmJJEf.js";import{i as _r}from"./TJn6xDN9.js";import{t as ke,H as ee,I as ot,ac as qr,aW as Hr,P as At,X as $r,a8 as Nr,aX as Wr,aY as Qr,aZ as Rt,R as Mr,a_ as Jr,S as Le,J as nr,a7 as nt,M as lr,ag as ut,a1 as Kr,a$ as Xr,b0 as Yr,aw as Zr,ak as es,b1 as ts,b2 as rs,b3 as ss,b4 as as,g as F,b5 as os,b6 as ns,W as yt,b7 as ls,b8 as is,b9 as cs,ba as ps,bb as ds,at as hs,bc as us,bd as Os,be as Ps,p as ms,E as bs,l as se,h as Vs,f as Ss,i as As,b as ye,c as Rs,q as ce,m as ae,k as oe,d as Xe,s as ft,r as Ye,C as Ot,A as ys,a as fs}from"./DniTuB_0.js";import{l as wt,p as ne,i as Ze}from"./DbNhg6mG.js";function It(r,e,t=!1,s=!1,o=!1){var a=r,n="";ke(()=>{var l=qr;if(n===(n=e()??"")){ee&&ot();return}if(l.nodes_start!==null&&(Hr(l.nodes_start,l.nodes_end),l.nodes_start=l.nodes_end=null),n!==""){if(ee){At.data;for(var i=ot(),c=i;i!==null&&(i.nodeType!==$r||i.data!=="");)c=i,i=Nr(i);if(i===null)throw Wr(),Qr;Rt(At,c),a=Mr(i);return}var p=n+"";t?p=`${p}`:s&&(p=`${p}`);var R=Jr(p);if((t||s)&&(R=Le(R)),Rt(Le(R),R.lastChild),t||s)for(;Le(R);)a.before(Le(R));else a.before(R)}})}function ws(r,e,t,s,o){ee&&ot();var a=e.$$slots?.[t],n=!1;a===!0&&(a=e[t==="default"?"children":t],n=!0),a===void 0||a(r,n?()=>s:s)}function Is(r,e){var t=void 0,s;nr(()=>{t!==(t=e())&&(s&&(nt(s),s=null),t&&(s=lr(()=>{ut(()=>t(r))})))})}function ir(r){var e,t,s="";if(typeof r=="string"||typeof r=="number")s+=r;else if(typeof r=="object")if(Array.isArray(r)){var o=r.length;for(e=0;e=0;){var l=n+a;(n===0||Et.includes(s[n-1]))&&(l===s.length||Et.includes(s[l]))?s=(n===0?"":s.substring(0,n))+s.substring(l+1):n=l}}return s===""?null:s}function gt(r,e=!1){var t=e?" !important;":";",s="";for(var o in r){var a=r[o];a!=null&&a!==""&&(s+=" "+o+": "+a+t)}return s}function et(r){return r[0]!=="-"||r[1]!=="-"?r.toLowerCase():r}function vs(r,e){if(e){var t="",s,o;if(Array.isArray(e)?(s=e[0],o=e[1]):s=e,r){r=String(r).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var a=!1,n=0,l=!1,i=[];s&&i.push(...Object.keys(s).map(et)),o&&i.push(...Object.keys(o).map(et));var c=0,p=-1;const f=r.length;for(var R=0;R{qe(r,r.__value)});e.observe(r,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),Zr(()=>{e.disconnect()})}function _o(r,e,t=e){var s=!0;es(r,"change",o=>{var a=o?"[selected]":":checked",n;if(r.multiple)n=[].map.call(r.querySelectorAll(a),ge);else{var l=r.querySelector(a)??r.querySelector("option:not([disabled])");n=l&&ge(l)}t(n)}),ut(()=>{var o=e();if(qe(r,o,s),s&&o===void 0){var a=r.querySelector(":checked");a!==null&&(o=ge(a),t(o))}r.__value=o,s=!1}),cr(r)}function ge(r){return"__value"in r?r.__value:r.value}const fe=Symbol("class"),we=Symbol("style"),pr=Symbol("is custom element"),dr=Symbol("is html");function qo(r){if(ee){var e=!1,t=()=>{if(!e){if(e=!0,r.hasAttribute("value")){var s=r.value;He(r,"value",null),r.value=s}if(r.hasAttribute("checked")){var o=r.checked;He(r,"checked",null),r.checked=o}}};r.__on_r=t,us(t),Os()}}function Ho(r,e){var t=Pt(r);t.value===(t.value=e??void 0)||r.value===e&&(e!==0||r.nodeName!=="PROGRESS")||(r.value=e??"")}function Cs(r,e){e?r.hasAttribute("selected")||r.setAttribute("selected",""):r.removeAttribute("selected")}function He(r,e,t,s){var o=Pt(r);ee&&(o[e]=r.getAttribute(e),e==="src"||e==="srcset"||e==="href"&&r.nodeName==="LINK")||o[e]!==(o[e]=t)&&(e==="loading"&&(r[rs]=t),t==null?r.removeAttribute(e):typeof t!="string"&&hr(r).includes(e)?r[e]=t:r.setAttribute(e,t))}function Ts(r,e,t,s,o=!1){var a=Pt(r),n=a[pr],l=!a[dr];let i=ee&&n;i&&yt(!1);var c=e||{},p=r.tagName==="OPTION";for(var R in e)R in t||(t[R]=null);t.class?t.class=gs(t.class):t[fe]&&(t.class=null),t[we]&&(t.style??=null);var I=hr(r);for(const E in t){let g=t[E];if(p&&E==="value"&&g==null){r.value=r.__value="",c[E]=g;continue}if(E==="class"){var B=r.namespaceURI==="http://www.w3.org/1999/xhtml";Fe(r,B,g,s,e?.[fe],t[fe]),c[E]=g,c[fe]=t[fe];continue}if(E==="style"){Us(r,g,e?.[we],t[we]),c[E]=g,c[we]=t[we];continue}var y=c[E];if(!(g===y&&!(g===void 0&&r.hasAttribute(E)))){c[E]=g;var f=E[0]+E[1];if(f!=="$$")if(f==="on"){const T={},D="$$"+E;let C=E.slice(2);var w=Ps(C);if(ls(C)&&(C=C.slice(0,-7),T.capture=!0),!w&&y){if(g!=null)continue;r.removeEventListener(C,c[D],T),c[D]=null}if(g!=null)if(w)r[`__${C}`]=g,cs([C]);else{let ie=function(te){c[E].call(this,te)};c[D]=is(C,r,ie,T)}else w&&(r[`__${C}`]=void 0)}else if(E==="style")He(r,E,g);else if(E==="autofocus")ps(r,!!g);else if(!n&&(E==="__value"||E==="value"&&g!=null))r.value=r.__value=g;else if(E==="selected"&&p)Cs(r,g);else{var U=E;l||(U=ds(U));var j=U==="defaultValue"||U==="defaultChecked";if(g==null&&!n&&!j)if(a[E]=null,U==="value"||U==="checked"){let T=r;const D=e===void 0;if(U==="value"){let C=T.defaultValue;T.removeAttribute(U),T.defaultValue=C,T.value=T.__value=D?C:null}else{let C=T.defaultChecked;T.removeAttribute(U),T.defaultChecked=C,T.checked=D?C:!1}}else r.removeAttribute(E);else j||I.includes(U)&&(n||typeof g!="string")?(r[U]=g,U in a&&(a[U]=hs)):typeof g!="function"&&He(r,U,g)}}}return i&&yt(!0),c}function Bs(r,e,t=[],s=[],o,a=!1){ts(t,s,n=>{var l=void 0,i={},c=r.nodeName==="SELECT",p=!1;if(nr(()=>{var I=e(...n.map(F)),B=Ts(r,l,I,o,a);p&&c&&"value"in I&&qe(r,I.value);for(let f of Object.getOwnPropertySymbols(i))I[f]||nt(i[f]);for(let f of Object.getOwnPropertySymbols(I)){var y=I[f];f.description===os&&(!l||y!==l[f])&&(i[f]&&nt(i[f]),i[f]=lr(()=>Is(r,()=>y))),B[f]=y}l=B}),c){var R=r;ut(()=>{qe(R,l.value,!0),cr(R)})}p=!0})}function Pt(r){return r.__attributes??={[pr]:r.nodeName.includes("-"),[dr]:r.namespaceURI===ss}}var xt=new Map;function hr(r){var e=xt.get(r.nodeName);if(e)return e;xt.set(r.nodeName,e=[]);for(var t,s=r,o=Element.prototype;o!==s;){t=ns(s);for(var a in t)t[a].set&&e.push(a);s=as(s)}return e}function $o(r,e){return zr+Gr(r,e)}function ur(r,e){return function(){return r.apply(e,arguments)}}const{toString:Ds}=Object.prototype,{getPrototypeOf:mt}=Object,{iterator:Ne,toStringTag:Or}=Symbol,We=(r=>e=>{const t=Ds.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())})(Object.create(null)),J=r=>(r=r.toLowerCase(),e=>We(e)===r),Qe=r=>e=>typeof e===r,{isArray:Se}=Array,Ve=Qe("undefined");function xe(r){return r!==null&&!Ve(r)&&r.constructor!==null&&!Ve(r.constructor)&&$(r.constructor.isBuffer)&&r.constructor.isBuffer(r)}const Pr=J("ArrayBuffer");function Ls(r){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(r):e=r&&r.buffer&&Pr(r.buffer),e}const js=Qe("string"),$=Qe("function"),mr=Qe("number"),ve=r=>r!==null&&typeof r=="object",ks=r=>r===!0||r===!1,ze=r=>{if(We(r)!=="object")return!1;const e=mt(r);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Or in r)&&!(Ne in r)},Fs=r=>{if(!ve(r)||xe(r))return!1;try{return Object.keys(r).length===0&&Object.getPrototypeOf(r)===Object.prototype}catch{return!1}},zs=J("Date"),Gs=J("File"),_s=J("Blob"),qs=J("FileList"),Hs=r=>ve(r)&&$(r.pipe),$s=r=>{let e;return r&&(typeof FormData=="function"&&r instanceof FormData||$(r.append)&&((e=We(r))==="formdata"||e==="object"&&$(r.toString)&&r.toString()==="[object FormData]"))},Ns=J("URLSearchParams"),[Ws,Qs,Ms,Js]=["ReadableStream","Request","Response","Headers"].map(J),Ks=r=>r.trim?r.trim():r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Ue(r,e,{allOwnKeys:t=!1}={}){if(r===null||typeof r>"u")return;let s,o;if(typeof r!="object"&&(r=[r]),Se(r))for(s=0,o=r.length;s0;)if(o=t[s],e===o.toLowerCase())return o;return null}const pe=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Vr=r=>!Ve(r)&&r!==pe;function lt(){const{caseless:r,skipUndefined:e}=Vr(this)&&this||{},t={},s=(o,a)=>{const n=r&&br(t,a)||a;ze(t[n])&&ze(o)?t[n]=lt(t[n],o):ze(o)?t[n]=lt({},o):Se(o)?t[n]=o.slice():(!e||!Ve(o))&&(t[n]=o)};for(let o=0,a=arguments.length;o(Ue(e,(o,a)=>{t&&$(o)?r[a]=ur(o,t):r[a]=o},{allOwnKeys:s}),r),Ys=r=>(r.charCodeAt(0)===65279&&(r=r.slice(1)),r),Zs=(r,e,t,s)=>{r.prototype=Object.create(e.prototype,s),r.prototype.constructor=r,Object.defineProperty(r,"super",{value:e.prototype}),t&&Object.assign(r.prototype,t)},ea=(r,e,t,s)=>{let o,a,n;const l={};if(e=e||{},r==null)return e;do{for(o=Object.getOwnPropertyNames(r),a=o.length;a-- >0;)n=o[a],(!s||s(n,r,e))&&!l[n]&&(e[n]=r[n],l[n]=!0);r=t!==!1&&mt(r)}while(r&&(!t||t(r,e))&&r!==Object.prototype);return e},ta=(r,e,t)=>{r=String(r),(t===void 0||t>r.length)&&(t=r.length),t-=e.length;const s=r.indexOf(e,t);return s!==-1&&s===t},ra=r=>{if(!r)return null;if(Se(r))return r;let e=r.length;if(!mr(e))return null;const t=new Array(e);for(;e-- >0;)t[e]=r[e];return t},sa=(r=>e=>r&&e instanceof r)(typeof Uint8Array<"u"&&mt(Uint8Array)),aa=(r,e)=>{const s=(r&&r[Ne]).call(r);let o;for(;(o=s.next())&&!o.done;){const a=o.value;e.call(r,a[0],a[1])}},oa=(r,e)=>{let t;const s=[];for(;(t=r.exec(e))!==null;)s.push(t);return s},na=J("HTMLFormElement"),la=r=>r.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,s,o){return s.toUpperCase()+o}),vt=(({hasOwnProperty:r})=>(e,t)=>r.call(e,t))(Object.prototype),ia=J("RegExp"),Sr=(r,e)=>{const t=Object.getOwnPropertyDescriptors(r),s={};Ue(t,(o,a)=>{let n;(n=e(o,a,r))!==!1&&(s[a]=n||o)}),Object.defineProperties(r,s)},ca=r=>{Sr(r,(e,t)=>{if($(r)&&["arguments","caller","callee"].indexOf(t)!==-1)return!1;const s=r[t];if($(s)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+t+"'")})}})},pa=(r,e)=>{const t={},s=o=>{o.forEach(a=>{t[a]=!0})};return Se(r)?s(r):s(String(r).split(e)),t},da=()=>{},ha=(r,e)=>r!=null&&Number.isFinite(r=+r)?r:e;function ua(r){return!!(r&&$(r.append)&&r[Or]==="FormData"&&r[Ne])}const Oa=r=>{const e=new Array(10),t=(s,o)=>{if(ve(s)){if(e.indexOf(s)>=0)return;if(xe(s))return s;if(!("toJSON"in s)){e[o]=s;const a=Se(s)?[]:{};return Ue(s,(n,l)=>{const i=t(n,o+1);!Ve(i)&&(a[l]=i)}),e[o]=void 0,a}}return s};return t(r,0)},Pa=J("AsyncFunction"),ma=r=>r&&(ve(r)||$(r))&&$(r.then)&&$(r.catch),Ar=((r,e)=>r?setImmediate:e?((t,s)=>(pe.addEventListener("message",({source:o,data:a})=>{o===pe&&a===t&&s.length&&s.shift()()},!1),o=>{s.push(o),pe.postMessage(t,"*")}))(`axios@${Math.random()}`,[]):t=>setTimeout(t))(typeof setImmediate=="function",$(pe.postMessage)),ba=typeof queueMicrotask<"u"?queueMicrotask.bind(pe):typeof process<"u"&&process.nextTick||Ar,Va=r=>r!=null&&$(r[Ne]),h={isArray:Se,isArrayBuffer:Pr,isBuffer:xe,isFormData:$s,isArrayBufferView:Ls,isString:js,isNumber:mr,isBoolean:ks,isObject:ve,isPlainObject:ze,isEmptyObject:Fs,isReadableStream:Ws,isRequest:Qs,isResponse:Ms,isHeaders:Js,isUndefined:Ve,isDate:zs,isFile:Gs,isBlob:_s,isRegExp:ia,isFunction:$,isStream:Hs,isURLSearchParams:Ns,isTypedArray:sa,isFileList:qs,forEach:Ue,merge:lt,extend:Xs,trim:Ks,stripBOM:Ys,inherits:Zs,toFlatObject:ea,kindOf:We,kindOfTest:J,endsWith:ta,toArray:ra,forEachEntry:aa,matchAll:oa,isHTMLForm:na,hasOwnProperty:vt,hasOwnProp:vt,reduceDescriptors:Sr,freezeMethods:ca,toObjectSet:pa,toCamelCase:la,noop:da,toFiniteNumber:ha,findKey:br,global:pe,isContextDefined:Vr,isSpecCompliantForm:ua,toJSONObject:Oa,isAsyncFn:Pa,isThenable:ma,setImmediate:Ar,asap:ba,isIterable:Va};function v(r,e,t,s,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=r,this.name="AxiosError",e&&(this.code=e),t&&(this.config=t),s&&(this.request=s),o&&(this.response=o,this.status=o.status?o.status:null)}h.inherits(v,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:h.toJSONObject(this.config),code:this.code,status:this.status}}});const Rr=v.prototype,yr={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(r=>{yr[r]={value:r}});Object.defineProperties(v,yr);Object.defineProperty(Rr,"isAxiosError",{value:!0});v.from=(r,e,t,s,o,a)=>{const n=Object.create(Rr);h.toFlatObject(r,n,function(p){return p!==Error.prototype},c=>c!=="isAxiosError");const l=r&&r.message?r.message:"Error",i=e==null&&r?r.code:e;return v.call(n,l,i,t,s,o),r&&n.cause==null&&Object.defineProperty(n,"cause",{value:r,configurable:!0}),n.name=r&&r.name||"Error",a&&Object.assign(n,a),n};const Sa=null;function it(r){return h.isPlainObject(r)||h.isArray(r)}function fr(r){return h.endsWith(r,"[]")?r.slice(0,-2):r}function Ut(r,e,t){return r?r.concat(e).map(function(o,a){return o=fr(o),!t&&a?"["+o+"]":o}).join(t?".":""):e}function Aa(r){return h.isArray(r)&&!r.some(it)}const Ra=h.toFlatObject(h,{},null,function(e){return/^is[A-Z]/.test(e)});function Me(r,e,t){if(!h.isObject(r))throw new TypeError("target must be an object");e=e||new FormData,t=h.toFlatObject(t,{metaTokens:!0,dots:!1,indexes:!1},!1,function(f,w){return!h.isUndefined(w[f])});const s=t.metaTokens,o=t.visitor||p,a=t.dots,n=t.indexes,i=(t.Blob||typeof Blob<"u"&&Blob)&&h.isSpecCompliantForm(e);if(!h.isFunction(o))throw new TypeError("visitor must be a function");function c(y){if(y===null)return"";if(h.isDate(y))return y.toISOString();if(h.isBoolean(y))return y.toString();if(!i&&h.isBlob(y))throw new v("Blob is not supported. Use a Buffer instead.");return h.isArrayBuffer(y)||h.isTypedArray(y)?i&&typeof Blob=="function"?new Blob([y]):Buffer.from(y):y}function p(y,f,w){let U=y;if(y&&!w&&typeof y=="object"){if(h.endsWith(f,"{}"))f=s?f:f.slice(0,-2),y=JSON.stringify(y);else if(h.isArray(y)&&Aa(y)||(h.isFileList(y)||h.endsWith(f,"[]"))&&(U=h.toArray(y)))return f=fr(f),U.forEach(function(E,g){!(h.isUndefined(E)||E===null)&&e.append(n===!0?Ut([f],g,a):n===null?f:f+"[]",c(E))}),!1}return it(y)?!0:(e.append(Ut(w,f,a),c(y)),!1)}const R=[],I=Object.assign(Ra,{defaultVisitor:p,convertValue:c,isVisitable:it});function B(y,f){if(!h.isUndefined(y)){if(R.indexOf(y)!==-1)throw Error("Circular reference detected in "+f.join("."));R.push(y),h.forEach(y,function(U,j){(!(h.isUndefined(U)||U===null)&&o.call(e,U,h.isString(j)?j.trim():j,f,I))===!0&&B(U,f?f.concat(j):[j])}),R.pop()}}if(!h.isObject(r))throw new TypeError("data must be an object");return B(r),e}function Ct(r){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(r).replace(/[!'()~]|%20|%00/g,function(s){return e[s]})}function bt(r,e){this._pairs=[],r&&Me(r,this,e)}const wr=bt.prototype;wr.append=function(e,t){this._pairs.push([e,t])};wr.toString=function(e){const t=e?function(s){return e.call(this,s,Ct)}:Ct;return this._pairs.map(function(o){return t(o[0])+"="+t(o[1])},"").join("&")};function ya(r){return encodeURIComponent(r).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Ir(r,e,t){if(!e)return r;const s=t&&t.encode||ya;h.isFunction(t)&&(t={serialize:t});const o=t&&t.serialize;let a;if(o?a=o(e,t):a=h.isURLSearchParams(e)?e.toString():new bt(e,t).toString(s),a){const n=r.indexOf("#");n!==-1&&(r=r.slice(0,n)),r+=(r.indexOf("?")===-1?"?":"&")+a}return r}class Tt{constructor(){this.handlers=[]}use(e,t,s){return this.handlers.push({fulfilled:e,rejected:t,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){h.forEach(this.handlers,function(s){s!==null&&e(s)})}}const Er={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},fa=typeof URLSearchParams<"u"?URLSearchParams:bt,wa=typeof FormData<"u"?FormData:null,Ia=typeof Blob<"u"?Blob:null,Ea={isBrowser:!0,classes:{URLSearchParams:fa,FormData:wa,Blob:Ia},protocols:["http","https","file","blob","url","data"]},Vt=typeof window<"u"&&typeof document<"u",ct=typeof navigator=="object"&&navigator||void 0,ga=Vt&&(!ct||["ReactNative","NativeScript","NS"].indexOf(ct.product)<0),xa=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",va=Vt&&window.location.href||"http://localhost",Ua=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Vt,hasStandardBrowserEnv:ga,hasStandardBrowserWebWorkerEnv:xa,navigator:ct,origin:va},Symbol.toStringTag,{value:"Module"})),q={...Ua,...Ea};function Ca(r,e){return Me(r,new q.classes.URLSearchParams,{visitor:function(t,s,o,a){return q.isNode&&h.isBuffer(t)?(this.append(s,t.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)},...e})}function Ta(r){return h.matchAll(/\w+|\[(\w*)]/g,r).map(e=>e[0]==="[]"?"":e[1]||e[0])}function Ba(r){const e={},t=Object.keys(r);let s;const o=t.length;let a;for(s=0;s=t.length;return n=!n&&h.isArray(o)?o.length:n,i?(h.hasOwnProp(o,n)?o[n]=[o[n],s]:o[n]=s,!l):((!o[n]||!h.isObject(o[n]))&&(o[n]=[]),e(t,s,o[n],a)&&h.isArray(o[n])&&(o[n]=Ba(o[n])),!l)}if(h.isFormData(r)&&h.isFunction(r.entries)){const t={};return h.forEachEntry(r,(s,o)=>{e(Ta(s),o,t,0)}),t}return null}function Da(r,e,t){if(h.isString(r))try{return(e||JSON.parse)(r),h.trim(r)}catch(s){if(s.name!=="SyntaxError")throw s}return(t||JSON.stringify)(r)}const Ce={transitional:Er,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const s=t.getContentType()||"",o=s.indexOf("application/json")>-1,a=h.isObject(e);if(a&&h.isHTMLForm(e)&&(e=new FormData(e)),h.isFormData(e))return o?JSON.stringify(gr(e)):e;if(h.isArrayBuffer(e)||h.isBuffer(e)||h.isStream(e)||h.isFile(e)||h.isBlob(e)||h.isReadableStream(e))return e;if(h.isArrayBufferView(e))return e.buffer;if(h.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let l;if(a){if(s.indexOf("application/x-www-form-urlencoded")>-1)return Ca(e,this.formSerializer).toString();if((l=h.isFileList(e))||s.indexOf("multipart/form-data")>-1){const i=this.env&&this.env.FormData;return Me(l?{"files[]":e}:e,i&&new i,this.formSerializer)}}return a||o?(t.setContentType("application/json",!1),Da(e)):e}],transformResponse:[function(e){const t=this.transitional||Ce.transitional,s=t&&t.forcedJSONParsing,o=this.responseType==="json";if(h.isResponse(e)||h.isReadableStream(e))return e;if(e&&h.isString(e)&&(s&&!this.responseType||o)){const n=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e,this.parseReviver)}catch(l){if(n)throw l.name==="SyntaxError"?v.from(l,v.ERR_BAD_RESPONSE,this,null,this.response):l}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:q.classes.FormData,Blob:q.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};h.forEach(["delete","get","head","post","put","patch"],r=>{Ce.headers[r]={}});const La=h.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),ja=r=>{const e={};let t,s,o;return r&&r.split(` -`).forEach(function(n){o=n.indexOf(":"),t=n.substring(0,o).trim().toLowerCase(),s=n.substring(o+1).trim(),!(!t||e[t]&&La[t])&&(t==="set-cookie"?e[t]?e[t].push(s):e[t]=[s]:e[t]=e[t]?e[t]+", "+s:s)}),e},Bt=Symbol("internals");function Ie(r){return r&&String(r).trim().toLowerCase()}function Ge(r){return r===!1||r==null?r:h.isArray(r)?r.map(Ge):String(r)}function ka(r){const e=Object.create(null),t=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=t.exec(r);)e[s[1]]=s[2];return e}const Fa=r=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(r.trim());function rt(r,e,t,s,o){if(h.isFunction(s))return s.call(this,e,t);if(o&&(e=t),!!h.isString(e)){if(h.isString(s))return e.indexOf(s)!==-1;if(h.isRegExp(s))return s.test(e)}}function za(r){return r.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,s)=>t.toUpperCase()+s)}function Ga(r,e){const t=h.toCamelCase(" "+e);["get","set","has"].forEach(s=>{Object.defineProperty(r,s+t,{value:function(o,a,n){return this[s].call(this,e,o,a,n)},configurable:!0})})}let N=class{constructor(e){e&&this.set(e)}set(e,t,s){const o=this;function a(l,i,c){const p=Ie(i);if(!p)throw new Error("header name must be a non-empty string");const R=h.findKey(o,p);(!R||o[R]===void 0||c===!0||c===void 0&&o[R]!==!1)&&(o[R||i]=Ge(l))}const n=(l,i)=>h.forEach(l,(c,p)=>a(c,p,i));if(h.isPlainObject(e)||e instanceof this.constructor)n(e,t);else if(h.isString(e)&&(e=e.trim())&&!Fa(e))n(ja(e),t);else if(h.isObject(e)&&h.isIterable(e)){let l={},i,c;for(const p of e){if(!h.isArray(p))throw TypeError("Object iterator must return a key-value pair");l[c=p[0]]=(i=l[c])?h.isArray(i)?[...i,p[1]]:[i,p[1]]:p[1]}n(l,t)}else e!=null&&a(t,e,s);return this}get(e,t){if(e=Ie(e),e){const s=h.findKey(this,e);if(s){const o=this[s];if(!t)return o;if(t===!0)return ka(o);if(h.isFunction(t))return t.call(this,o,s);if(h.isRegExp(t))return t.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Ie(e),e){const s=h.findKey(this,e);return!!(s&&this[s]!==void 0&&(!t||rt(this,this[s],s,t)))}return!1}delete(e,t){const s=this;let o=!1;function a(n){if(n=Ie(n),n){const l=h.findKey(s,n);l&&(!t||rt(s,s[l],l,t))&&(delete s[l],o=!0)}}return h.isArray(e)?e.forEach(a):a(e),o}clear(e){const t=Object.keys(this);let s=t.length,o=!1;for(;s--;){const a=t[s];(!e||rt(this,this[a],a,e,!0))&&(delete this[a],o=!0)}return o}normalize(e){const t=this,s={};return h.forEach(this,(o,a)=>{const n=h.findKey(s,a);if(n){t[n]=Ge(o),delete t[a];return}const l=e?za(a):String(a).trim();l!==a&&delete t[a],t[l]=Ge(o),s[l]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return h.forEach(this,(s,o)=>{s!=null&&s!==!1&&(t[o]=e&&h.isArray(s)?s.join(", "):s)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join(` -`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const s=new this(e);return t.forEach(o=>s.set(o)),s}static accessor(e){const s=(this[Bt]=this[Bt]={accessors:{}}).accessors,o=this.prototype;function a(n){const l=Ie(n);s[l]||(Ga(o,n),s[l]=!0)}return h.isArray(e)?e.forEach(a):a(e),this}};N.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);h.reduceDescriptors(N.prototype,({value:r},e)=>{let t=e[0].toUpperCase()+e.slice(1);return{get:()=>r,set(s){this[t]=s}}});h.freezeMethods(N);function st(r,e){const t=this||Ce,s=e||t,o=N.from(s.headers);let a=s.data;return h.forEach(r,function(l){a=l.call(t,a,o.normalize(),e?e.status:void 0)}),o.normalize(),a}function xr(r){return!!(r&&r.__CANCEL__)}function Ae(r,e,t){v.call(this,r??"canceled",v.ERR_CANCELED,e,t),this.name="CanceledError"}h.inherits(Ae,v,{__CANCEL__:!0});function vr(r,e,t){const s=t.config.validateStatus;!t.status||!s||s(t.status)?r(t):e(new v("Request failed with status code "+t.status,[v.ERR_BAD_REQUEST,v.ERR_BAD_RESPONSE][Math.floor(t.status/100)-4],t.config,t.request,t))}function _a(r){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(r);return e&&e[1]||""}function qa(r,e){r=r||10;const t=new Array(r),s=new Array(r);let o=0,a=0,n;return e=e!==void 0?e:1e3,function(i){const c=Date.now(),p=s[a];n||(n=c),t[o]=i,s[o]=c;let R=a,I=0;for(;R!==o;)I+=t[R++],R=R%r;if(o=(o+1)%r,o===a&&(a=(a+1)%r),c-n{t=p,o=null,a&&(clearTimeout(a),a=null),r(...c)};return[(...c)=>{const p=Date.now(),R=p-t;R>=s?n(c,p):(o=c,a||(a=setTimeout(()=>{a=null,n(o)},s-R)))},()=>o&&n(o)]}const $e=(r,e,t=3)=>{let s=0;const o=qa(50,250);return Ha(a=>{const n=a.loaded,l=a.lengthComputable?a.total:void 0,i=n-s,c=o(i),p=n<=l;s=n;const R={loaded:n,total:l,progress:l?n/l:void 0,bytes:i,rate:c||void 0,estimated:c&&l&&p?(l-n)/c:void 0,event:a,lengthComputable:l!=null,[e?"download":"upload"]:!0};r(R)},t)},Dt=(r,e)=>{const t=r!=null;return[s=>e[0]({lengthComputable:t,total:r,loaded:s}),e[1]]},Lt=r=>(...e)=>h.asap(()=>r(...e)),$a=q.hasStandardBrowserEnv?((r,e)=>t=>(t=new URL(t,q.origin),r.protocol===t.protocol&&r.host===t.host&&(e||r.port===t.port)))(new URL(q.origin),q.navigator&&/(msie|trident)/i.test(q.navigator.userAgent)):()=>!0,Na=q.hasStandardBrowserEnv?{write(r,e,t,s,o,a){const n=[r+"="+encodeURIComponent(e)];h.isNumber(t)&&n.push("expires="+new Date(t).toGMTString()),h.isString(s)&&n.push("path="+s),h.isString(o)&&n.push("domain="+o),a===!0&&n.push("secure"),document.cookie=n.join("; ")},read(r){const e=document.cookie.match(new RegExp("(^|;\\s*)("+r+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(r){this.write(r,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Wa(r){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(r)}function Qa(r,e){return e?r.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):r}function Ur(r,e,t){let s=!Wa(e);return r&&(s||t==!1)?Qa(r,e):e}const jt=r=>r instanceof N?{...r}:r;function he(r,e){e=e||{};const t={};function s(c,p,R,I){return h.isPlainObject(c)&&h.isPlainObject(p)?h.merge.call({caseless:I},c,p):h.isPlainObject(p)?h.merge({},p):h.isArray(p)?p.slice():p}function o(c,p,R,I){if(h.isUndefined(p)){if(!h.isUndefined(c))return s(void 0,c,R,I)}else return s(c,p,R,I)}function a(c,p){if(!h.isUndefined(p))return s(void 0,p)}function n(c,p){if(h.isUndefined(p)){if(!h.isUndefined(c))return s(void 0,c)}else return s(void 0,p)}function l(c,p,R){if(R in e)return s(c,p);if(R in r)return s(void 0,c)}const i={url:a,method:a,data:a,baseURL:n,transformRequest:n,transformResponse:n,paramsSerializer:n,timeout:n,timeoutMessage:n,withCredentials:n,withXSRFToken:n,adapter:n,responseType:n,xsrfCookieName:n,xsrfHeaderName:n,onUploadProgress:n,onDownloadProgress:n,decompress:n,maxContentLength:n,maxBodyLength:n,beforeRedirect:n,transport:n,httpAgent:n,httpsAgent:n,cancelToken:n,socketPath:n,responseEncoding:n,validateStatus:l,headers:(c,p,R)=>o(jt(c),jt(p),R,!0)};return h.forEach(Object.keys({...r,...e}),function(p){const R=i[p]||o,I=R(r[p],e[p],p);h.isUndefined(I)&&R!==l||(t[p]=I)}),t}const Cr=r=>{const e=he({},r);let{data:t,withXSRFToken:s,xsrfHeaderName:o,xsrfCookieName:a,headers:n,auth:l}=e;if(e.headers=n=N.from(n),e.url=Ir(Ur(e.baseURL,e.url,e.allowAbsoluteUrls),r.params,r.paramsSerializer),l&&n.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),h.isFormData(t)){if(q.hasStandardBrowserEnv||q.hasStandardBrowserWebWorkerEnv)n.setContentType(void 0);else if(h.isFunction(t.getHeaders)){const i=t.getHeaders(),c=["content-type","content-length"];Object.entries(i).forEach(([p,R])=>{c.includes(p.toLowerCase())&&n.set(p,R)})}}if(q.hasStandardBrowserEnv&&(s&&h.isFunction(s)&&(s=s(e)),s||s!==!1&&$a(e.url))){const i=o&&a&&Na.read(a);i&&n.set(o,i)}return e},Ma=typeof XMLHttpRequest<"u",Ja=Ma&&function(r){return new Promise(function(t,s){const o=Cr(r);let a=o.data;const n=N.from(o.headers).normalize();let{responseType:l,onUploadProgress:i,onDownloadProgress:c}=o,p,R,I,B,y;function f(){B&&B(),y&&y(),o.cancelToken&&o.cancelToken.unsubscribe(p),o.signal&&o.signal.removeEventListener("abort",p)}let w=new XMLHttpRequest;w.open(o.method.toUpperCase(),o.url,!0),w.timeout=o.timeout;function U(){if(!w)return;const E=N.from("getAllResponseHeaders"in w&&w.getAllResponseHeaders()),T={data:!l||l==="text"||l==="json"?w.responseText:w.response,status:w.status,statusText:w.statusText,headers:E,config:r,request:w};vr(function(C){t(C),f()},function(C){s(C),f()},T),w=null}"onloadend"in w?w.onloadend=U:w.onreadystatechange=function(){!w||w.readyState!==4||w.status===0&&!(w.responseURL&&w.responseURL.indexOf("file:")===0)||setTimeout(U)},w.onabort=function(){w&&(s(new v("Request aborted",v.ECONNABORTED,r,w)),w=null)},w.onerror=function(g){const T=g&&g.message?g.message:"Network Error",D=new v(T,v.ERR_NETWORK,r,w);D.event=g||null,s(D),w=null},w.ontimeout=function(){let g=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const T=o.transitional||Er;o.timeoutErrorMessage&&(g=o.timeoutErrorMessage),s(new v(g,T.clarifyTimeoutError?v.ETIMEDOUT:v.ECONNABORTED,r,w)),w=null},a===void 0&&n.setContentType(null),"setRequestHeader"in w&&h.forEach(n.toJSON(),function(g,T){w.setRequestHeader(T,g)}),h.isUndefined(o.withCredentials)||(w.withCredentials=!!o.withCredentials),l&&l!=="json"&&(w.responseType=o.responseType),c&&([I,y]=$e(c,!0),w.addEventListener("progress",I)),i&&w.upload&&([R,B]=$e(i),w.upload.addEventListener("progress",R),w.upload.addEventListener("loadend",B)),(o.cancelToken||o.signal)&&(p=E=>{w&&(s(!E||E.type?new Ae(null,r,w):E),w.abort(),w=null)},o.cancelToken&&o.cancelToken.subscribe(p),o.signal&&(o.signal.aborted?p():o.signal.addEventListener("abort",p)));const j=_a(o.url);if(j&&q.protocols.indexOf(j)===-1){s(new v("Unsupported protocol "+j+":",v.ERR_BAD_REQUEST,r));return}w.send(a||null)})},Ka=(r,e)=>{const{length:t}=r=r?r.filter(Boolean):[];if(e||t){let s=new AbortController,o;const a=function(c){if(!o){o=!0,l();const p=c instanceof Error?c:this.reason;s.abort(p instanceof v?p:new Ae(p instanceof Error?p.message:p))}};let n=e&&setTimeout(()=>{n=null,a(new v(`timeout ${e} of ms exceeded`,v.ETIMEDOUT))},e);const l=()=>{r&&(n&&clearTimeout(n),n=null,r.forEach(c=>{c.unsubscribe?c.unsubscribe(a):c.removeEventListener("abort",a)}),r=null)};r.forEach(c=>c.addEventListener("abort",a));const{signal:i}=s;return i.unsubscribe=()=>h.asap(l),i}},Xa=function*(r,e){let t=r.byteLength;if(t{const o=Ya(r,e);let a=0,n,l=i=>{n||(n=!0,s&&s(i))};return new ReadableStream({async pull(i){try{const{done:c,value:p}=await o.next();if(c){l(),i.close();return}let R=p.byteLength;if(t){let I=a+=R;t(I)}i.enqueue(new Uint8Array(p))}catch(c){throw l(c),c}},cancel(i){return l(i),o.return()}},{highWaterMark:2})},Ft=64*1024,{isFunction:je}=h,eo=(({Request:r,Response:e})=>({Request:r,Response:e}))(h.global),{ReadableStream:zt,TextEncoder:Gt}=h.global,_t=(r,...e)=>{try{return!!r(...e)}catch{return!1}},to=r=>{r=h.merge.call({skipUndefined:!0},eo,r);const{fetch:e,Request:t,Response:s}=r,o=e?je(e):typeof fetch=="function",a=je(t),n=je(s);if(!o)return!1;const l=o&&je(zt),i=o&&(typeof Gt=="function"?(y=>f=>y.encode(f))(new Gt):async y=>new Uint8Array(await new t(y).arrayBuffer())),c=a&&l&&_t(()=>{let y=!1;const f=new t(q.origin,{body:new zt,method:"POST",get duplex(){return y=!0,"half"}}).headers.has("Content-Type");return y&&!f}),p=n&&l&&_t(()=>h.isReadableStream(new s("").body)),R={stream:p&&(y=>y.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach(y=>{!R[y]&&(R[y]=(f,w)=>{let U=f&&f[y];if(U)return U.call(f);throw new v(`Response type '${y}' is not supported`,v.ERR_NOT_SUPPORT,w)})});const I=async y=>{if(y==null)return 0;if(h.isBlob(y))return y.size;if(h.isSpecCompliantForm(y))return(await new t(q.origin,{method:"POST",body:y}).arrayBuffer()).byteLength;if(h.isArrayBufferView(y)||h.isArrayBuffer(y))return y.byteLength;if(h.isURLSearchParams(y)&&(y=y+""),h.isString(y))return(await i(y)).byteLength},B=async(y,f)=>{const w=h.toFiniteNumber(y.getContentLength());return w??I(f)};return async y=>{let{url:f,method:w,data:U,signal:j,cancelToken:E,timeout:g,onDownloadProgress:T,onUploadProgress:D,responseType:C,headers:ie,withCredentials:te="same-origin",fetchOptions:Re}=Cr(y),Te=e||fetch;C=C?(C+"").toLowerCase():"text";let ue=Ka([j,E&&E.toAbortSignal()],g),z=null;const k=ue&&ue.unsubscribe&&(()=>{ue.unsubscribe()});let Oe;try{if(D&&c&&w!=="get"&&w!=="head"&&(Oe=await B(ie,U))!==0){let re=new t(f,{method:"POST",body:U,duplex:"half"}),me;if(h.isFormData(U)&&(me=re.headers.get("content-type"))&&ie.setContentType(me),re.body){const[Ke,De]=Dt(Oe,$e(Lt(D)));U=kt(re.body,Ft,Ke,De)}}h.isString(te)||(te=te?"include":"omit");const M=a&&"credentials"in t.prototype,Pe={...Re,signal:ue,method:w.toUpperCase(),headers:ie.normalize().toJSON(),body:U,duplex:"half",credentials:M?te:void 0};z=a&&new t(f,Pe);let W=await(a?Te(z,Re):Te(f,Pe));const Be=p&&(C==="stream"||C==="response");if(p&&(T||Be&&k)){const re={};["status","statusText","headers"].forEach(St=>{re[St]=W[St]});const me=h.toFiniteNumber(W.headers.get("content-length")),[Ke,De]=T&&Dt(me,$e(Lt(T),!0))||[];W=new s(kt(W.body,Ft,Ke,()=>{De&&De(),k&&k()}),re)}C=C||"text";let Fr=await R[h.findKey(R,C)||"text"](W,y);return!Be&&k&&k(),await new Promise((re,me)=>{vr(re,me,{data:Fr,headers:N.from(W.headers),status:W.status,statusText:W.statusText,config:y,request:z})})}catch(M){throw k&&k(),M&&M.name==="TypeError"&&/Load failed|fetch/i.test(M.message)?Object.assign(new v("Network Error",v.ERR_NETWORK,y,z),{cause:M.cause||M}):v.from(M,M&&M.code,y,z)}}},ro=new Map,Tr=r=>{let e=r?r.env:{};const{fetch:t,Request:s,Response:o}=e,a=[s,o,t];let n=a.length,l=n,i,c,p=ro;for(;l--;)i=a[l],c=p.get(i),c===void 0&&p.set(i,c=l?new Map:to(e)),p=c;return c};Tr();const pt={http:Sa,xhr:Ja,fetch:{get:Tr}};h.forEach(pt,(r,e)=>{if(r){try{Object.defineProperty(r,"name",{value:e})}catch{}Object.defineProperty(r,"adapterName",{value:e})}});const qt=r=>`- ${r}`,so=r=>h.isFunction(r)||r===null||r===!1,Br={getAdapter:(r,e)=>{r=h.isArray(r)?r:[r];const{length:t}=r;let s,o;const a={};for(let n=0;n`adapter ${i} `+(c===!1?"is not supported by the environment":"is not available in the build"));let l=t?n.length>1?`since : -`+n.map(qt).join(` -`):" "+qt(n[0]):"as no adapter specified";throw new v("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return o},adapters:pt};function at(r){if(r.cancelToken&&r.cancelToken.throwIfRequested(),r.signal&&r.signal.aborted)throw new Ae(null,r)}function Ht(r){return at(r),r.headers=N.from(r.headers),r.data=st.call(r,r.transformRequest),["post","put","patch"].indexOf(r.method)!==-1&&r.headers.setContentType("application/x-www-form-urlencoded",!1),Br.getAdapter(r.adapter||Ce.adapter,r)(r).then(function(s){return at(r),s.data=st.call(r,r.transformResponse,s),s.headers=N.from(s.headers),s},function(s){return xr(s)||(at(r),s&&s.response&&(s.response.data=st.call(r,r.transformResponse,s.response),s.response.headers=N.from(s.response.headers))),Promise.reject(s)})}const Dr="1.12.2",Je={};["object","boolean","number","function","string","symbol"].forEach((r,e)=>{Je[r]=function(s){return typeof s===r||"a"+(e<1?"n ":" ")+r}});const $t={};Je.transitional=function(e,t,s){function o(a,n){return"[Axios v"+Dr+"] Transitional option '"+a+"'"+n+(s?". "+s:"")}return(a,n,l)=>{if(e===!1)throw new v(o(n," has been removed"+(t?" in "+t:"")),v.ERR_DEPRECATED);return t&&!$t[n]&&($t[n]=!0,console.warn(o(n," has been deprecated since v"+t+" and will be removed in the near future"))),e?e(a,n,l):!0}};Je.spelling=function(e){return(t,s)=>(console.warn(`${s} is likely a misspelling of ${e}`),!0)};function ao(r,e,t){if(typeof r!="object")throw new v("options must be an object",v.ERR_BAD_OPTION_VALUE);const s=Object.keys(r);let o=s.length;for(;o-- >0;){const a=s[o],n=e[a];if(n){const l=r[a],i=l===void 0||n(l,a,r);if(i!==!0)throw new v("option "+a+" must be "+i,v.ERR_BAD_OPTION_VALUE);continue}if(t!==!0)throw new v("Unknown option "+a,v.ERR_BAD_OPTION)}}const _e={assertOptions:ao,validators:Je},K=_e.validators;let de=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Tt,response:new Tt}}async request(e,t){try{return await this._request(e,t)}catch(s){if(s instanceof Error){let o={};Error.captureStackTrace?Error.captureStackTrace(o):o=new Error;const a=o.stack?o.stack.replace(/^.+\n/,""):"";try{s.stack?a&&!String(s.stack).endsWith(a.replace(/^.+\n.+\n/,""))&&(s.stack+=` -`+a):s.stack=a}catch{}}throw s}}_request(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=he(this.defaults,t);const{transitional:s,paramsSerializer:o,headers:a}=t;s!==void 0&&_e.assertOptions(s,{silentJSONParsing:K.transitional(K.boolean),forcedJSONParsing:K.transitional(K.boolean),clarifyTimeoutError:K.transitional(K.boolean)},!1),o!=null&&(h.isFunction(o)?t.paramsSerializer={serialize:o}:_e.assertOptions(o,{encode:K.function,serialize:K.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),_e.assertOptions(t,{baseUrl:K.spelling("baseURL"),withXsrfToken:K.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let n=a&&h.merge(a.common,a[t.method]);a&&h.forEach(["delete","get","head","post","put","patch","common"],y=>{delete a[y]}),t.headers=N.concat(n,a);const l=[];let i=!0;this.interceptors.request.forEach(function(f){typeof f.runWhen=="function"&&f.runWhen(t)===!1||(i=i&&f.synchronous,l.unshift(f.fulfilled,f.rejected))});const c=[];this.interceptors.response.forEach(function(f){c.push(f.fulfilled,f.rejected)});let p,R=0,I;if(!i){const y=[Ht.bind(this),void 0];for(y.unshift(...l),y.push(...c),I=y.length,p=Promise.resolve(t);R{if(!s._listeners)return;let a=s._listeners.length;for(;a-- >0;)s._listeners[a](o);s._listeners=null}),this.promise.then=o=>{let a;const n=new Promise(l=>{s.subscribe(l),a=l}).then(o);return n.cancel=function(){s.unsubscribe(a)},n},e(function(a,n,l){s.reason||(s.reason=new Ae(a,n,l),t(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=s=>{e.abort(s)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new Lr(function(o){e=o}),cancel:e}}};function no(r){return function(t){return r.apply(null,t)}}function lo(r){return h.isObject(r)&&r.isAxiosError===!0}const dt={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(dt).forEach(([r,e])=>{dt[e]=r});function jr(r){const e=new de(r),t=ur(de.prototype.request,e);return h.extend(t,de.prototype,e,{allOwnKeys:!0}),h.extend(t,e,null,{allOwnKeys:!0}),t.create=function(o){return jr(he(r,o))},t}const u=jr(Ce);u.Axios=de;u.CanceledError=Ae;u.CancelToken=oo;u.isCancel=xr;u.VERSION=Dr;u.toFormData=Me;u.AxiosError=v;u.Cancel=u.CanceledError;u.all=function(e){return Promise.all(e)};u.spread=no;u.isAxiosError=lo;u.mergeConfig=he;u.AxiosHeaders=N;u.formToJSON=r=>gr(h.isHTMLForm(r)?new FormData(r):r);u.getAdapter=Br.getAdapter;u.HttpStatusCode=dt;u.default=u;const{Axios:Qo,AxiosError:Mo,CanceledError:Jo,isCancel:Ko,CancelToken:Xo,VERSION:Yo,all:Zo,Cancel:en,isAxiosError:tn,spread:rn,toFormData:sn,AxiosHeaders:an,HttpStatusCode:on,formToJSON:nn,getAdapter:ln,mergeConfig:cn}=u,O="/api/v1".replace(/\/+$/,"");class H{constructor(e,t=O,s=u){this.basePath=t,this.axios=s,e&&(this.configuration=e,this.basePath=e.basePath??t)}configuration}class io extends Error{constructor(e,t){super(t),this.field=e,this.name="RequiredError"}}const P={},m="https://example.com",d=function(r,e,t){if(t==null)throw new io(e,`Required parameter ${e} was null or undefined when calling ${r}.`)},b=async function(r,e,t){if(t&&t.apiKey){const s=typeof t.apiKey=="function"?await t.apiKey(e):await t.apiKey;r[e]=s}};function ht(r,e,t=""){e!=null&&(typeof e=="object"?Array.isArray(e)?e.forEach(s=>ht(r,s,t)):Object.keys(e).forEach(s=>ht(r,e[s],`${t}${t!==""?".":""}${s}`)):r.has(t)?r.append(t,e):r.set(t,e))}const V=function(r,...e){const t=new URLSearchParams(r.search);ht(t,e),r.search=t.toString()},x=function(r,e,t){const s=typeof r!="string";return(s&&t&&t.isJsonMime?t.isJsonMime(e.headers["Content-Type"]):s)?JSON.stringify(r!==void 0?r:{}):r||""},S=function(r){return r.pathname+r.search+r.hash},A=function(r,e,t,s){return(o=e,a=t)=>{const n={...r.options,url:(o.defaults.baseURL?"":s?.basePath??a)+r.url};return o.request(n)}},co=function(r){return{updateController:async(e,t={})=>{d("updateController","body",e);const s="/controller",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"PUT",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=x(e,n,r),{url:S(o),options:n}}}},po=function(r){const e=co(r);return{async updateController(t,s){const o=await e.updateController(t,s),a=r?.serverIndex??0,n=P["ControllerApi.updateController"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)}}};class Nt extends H{updateController(e,t){return po(this.configuration).updateController(e,t).then(s=>s(this.axios,this.basePath))}}const ho=function(r){return{controllerInfo:async(e={})=>{const t="/controller-info",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}}}},uo=function(r){const e=ho(r);return{async controllerInfo(t){const s=await e.controllerInfo(t),o=r?.serverIndex??0,a=P["ControllerInfoApi.controllerInfo"]?.[o]?.url;return(n,l)=>A(s,u,O,r)(n,a||l)}}};class Wt extends H{controllerInfo(e){return uo(this.configuration).controllerInfo(e).then(t=>t(this.axios,this.basePath))}}const Oo=function(r){return{createCredentials:async(e,t={})=>{d("createCredentials","body",e);const s="/github/credentials",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=x(e,n,r),{url:S(o),options:n}},createGiteaCredentials:async(e,t={})=>{d("createGiteaCredentials","body",e);const s="/gitea/credentials",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=x(e,n,r),{url:S(o),options:n}},deleteCredentials:async(e,t={})=>{d("deleteCredentials","id",e);const s="/github/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteGiteaCredentials:async(e,t={})=>{d("deleteGiteaCredentials","id",e);const s="/gitea/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getCredentials:async(e,t={})=>{d("getCredentials","id",e);const s="/github/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getGiteaCredentials:async(e,t={})=>{d("getGiteaCredentials","id",e);const s="/gitea/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listCredentials:async(e={})=>{const t="/github/credentials",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listGiteaCredentials:async(e={})=>{const t="/gitea/credentials",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},updateCredentials:async(e,t,s={})=>{d("updateCredentials","id",e),d("updateCredentials","body",t);const o="/github/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},updateGiteaCredentials:async(e,t,s={})=>{d("updateGiteaCredentials","id",e),d("updateGiteaCredentials","body",t);const o="/gitea/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}}}},X=function(r){const e=Oo(r);return{async createCredentials(t,s){const o=await e.createCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.createCredentials"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async createGiteaCredentials(t,s){const o=await e.createGiteaCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.createGiteaCredentials"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async deleteCredentials(t,s){const o=await e.deleteCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.deleteCredentials"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async deleteGiteaCredentials(t,s){const o=await e.deleteGiteaCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.deleteGiteaCredentials"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async getCredentials(t,s){const o=await e.getCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.getCredentials"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async getGiteaCredentials(t,s){const o=await e.getGiteaCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.getGiteaCredentials"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listCredentials(t){const s=await e.listCredentials(t),o=r?.serverIndex??0,a=P["CredentialsApi.listCredentials"]?.[o]?.url;return(n,l)=>A(s,u,O,r)(n,a||l)},async listGiteaCredentials(t){const s=await e.listGiteaCredentials(t),o=r?.serverIndex??0,a=P["CredentialsApi.listGiteaCredentials"]?.[o]?.url;return(n,l)=>A(s,u,O,r)(n,a||l)},async updateCredentials(t,s,o){const a=await e.updateCredentials(t,s,o),n=r?.serverIndex??0,l=P["CredentialsApi.updateCredentials"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async updateGiteaCredentials(t,s,o){const a=await e.updateGiteaCredentials(t,s,o),n=r?.serverIndex??0,l=P["CredentialsApi.updateGiteaCredentials"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)}}};class Qt extends H{createCredentials(e,t){return X(this.configuration).createCredentials(e,t).then(s=>s(this.axios,this.basePath))}createGiteaCredentials(e,t){return X(this.configuration).createGiteaCredentials(e,t).then(s=>s(this.axios,this.basePath))}deleteCredentials(e,t){return X(this.configuration).deleteCredentials(e,t).then(s=>s(this.axios,this.basePath))}deleteGiteaCredentials(e,t){return X(this.configuration).deleteGiteaCredentials(e,t).then(s=>s(this.axios,this.basePath))}getCredentials(e,t){return X(this.configuration).getCredentials(e,t).then(s=>s(this.axios,this.basePath))}getGiteaCredentials(e,t){return X(this.configuration).getGiteaCredentials(e,t).then(s=>s(this.axios,this.basePath))}listCredentials(e){return X(this.configuration).listCredentials(e).then(t=>t(this.axios,this.basePath))}listGiteaCredentials(e){return X(this.configuration).listGiteaCredentials(e).then(t=>t(this.axios,this.basePath))}updateCredentials(e,t,s){return X(this.configuration).updateCredentials(e,t,s).then(o=>o(this.axios,this.basePath))}updateGiteaCredentials(e,t,s){return X(this.configuration).updateGiteaCredentials(e,t,s).then(o=>o(this.axios,this.basePath))}}const Po=function(r){return{createGiteaEndpoint:async(e,t={})=>{d("createGiteaEndpoint","body",e);const s="/gitea/endpoints",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=x(e,n,r),{url:S(o),options:n}},createGithubEndpoint:async(e,t={})=>{d("createGithubEndpoint","body",e);const s="/github/endpoints",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=x(e,n,r),{url:S(o),options:n}},deleteGiteaEndpoint:async(e,t={})=>{d("deleteGiteaEndpoint","name",e);const s="/gitea/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteGithubEndpoint:async(e,t={})=>{d("deleteGithubEndpoint","name",e);const s="/github/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getGiteaEndpoint:async(e,t={})=>{d("getGiteaEndpoint","name",e);const s="/gitea/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getGithubEndpoint:async(e,t={})=>{d("getGithubEndpoint","name",e);const s="/github/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listGiteaEndpoints:async(e={})=>{const t="/gitea/endpoints",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listGithubEndpoints:async(e={})=>{const t="/github/endpoints",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},updateGiteaEndpoint:async(e,t,s={})=>{d("updateGiteaEndpoint","name",e),d("updateGiteaEndpoint","body",t);const o="/gitea/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},updateGithubEndpoint:async(e,t,s={})=>{d("updateGithubEndpoint","name",e),d("updateGithubEndpoint","body",t);const o="/github/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}}}},Y=function(r){const e=Po(r);return{async createGiteaEndpoint(t,s){const o=await e.createGiteaEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.createGiteaEndpoint"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async createGithubEndpoint(t,s){const o=await e.createGithubEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.createGithubEndpoint"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async deleteGiteaEndpoint(t,s){const o=await e.deleteGiteaEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.deleteGiteaEndpoint"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async deleteGithubEndpoint(t,s){const o=await e.deleteGithubEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.deleteGithubEndpoint"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async getGiteaEndpoint(t,s){const o=await e.getGiteaEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.getGiteaEndpoint"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async getGithubEndpoint(t,s){const o=await e.getGithubEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.getGithubEndpoint"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listGiteaEndpoints(t){const s=await e.listGiteaEndpoints(t),o=r?.serverIndex??0,a=P["EndpointsApi.listGiteaEndpoints"]?.[o]?.url;return(n,l)=>A(s,u,O,r)(n,a||l)},async listGithubEndpoints(t){const s=await e.listGithubEndpoints(t),o=r?.serverIndex??0,a=P["EndpointsApi.listGithubEndpoints"]?.[o]?.url;return(n,l)=>A(s,u,O,r)(n,a||l)},async updateGiteaEndpoint(t,s,o){const a=await e.updateGiteaEndpoint(t,s,o),n=r?.serverIndex??0,l=P["EndpointsApi.updateGiteaEndpoint"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async updateGithubEndpoint(t,s,o){const a=await e.updateGithubEndpoint(t,s,o),n=r?.serverIndex??0,l=P["EndpointsApi.updateGithubEndpoint"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)}}};class Mt extends H{createGiteaEndpoint(e,t){return Y(this.configuration).createGiteaEndpoint(e,t).then(s=>s(this.axios,this.basePath))}createGithubEndpoint(e,t){return Y(this.configuration).createGithubEndpoint(e,t).then(s=>s(this.axios,this.basePath))}deleteGiteaEndpoint(e,t){return Y(this.configuration).deleteGiteaEndpoint(e,t).then(s=>s(this.axios,this.basePath))}deleteGithubEndpoint(e,t){return Y(this.configuration).deleteGithubEndpoint(e,t).then(s=>s(this.axios,this.basePath))}getGiteaEndpoint(e,t){return Y(this.configuration).getGiteaEndpoint(e,t).then(s=>s(this.axios,this.basePath))}getGithubEndpoint(e,t){return Y(this.configuration).getGithubEndpoint(e,t).then(s=>s(this.axios,this.basePath))}listGiteaEndpoints(e){return Y(this.configuration).listGiteaEndpoints(e).then(t=>t(this.axios,this.basePath))}listGithubEndpoints(e){return Y(this.configuration).listGithubEndpoints(e).then(t=>t(this.axios,this.basePath))}updateGiteaEndpoint(e,t,s){return Y(this.configuration).updateGiteaEndpoint(e,t,s).then(o=>o(this.axios,this.basePath))}updateGithubEndpoint(e,t,s){return Y(this.configuration).updateGithubEndpoint(e,t,s).then(o=>o(this.axios,this.basePath))}}const mo=function(r){return{createEnterprise:async(e,t={})=>{d("createEnterprise","body",e);const s="/enterprises",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=x(e,n,r),{url:S(o),options:n}},createEnterprisePool:async(e,t,s={})=>{d("createEnterprisePool","enterpriseID",e),d("createEnterprisePool","body",t);const o="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},createEnterpriseScaleSet:async(e,t,s={})=>{d("createEnterpriseScaleSet","enterpriseID",e),d("createEnterpriseScaleSet","body",t);const o="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},deleteEnterprise:async(e,t={})=>{d("deleteEnterprise","enterpriseID",e);const s="/enterprises/{enterpriseID}".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteEnterprisePool:async(e,t,s={})=>{d("deleteEnterprisePool","enterpriseID",e),d("deleteEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getEnterprise:async(e,t={})=>{d("getEnterprise","enterpriseID",e);const s="/enterprises/{enterpriseID}".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getEnterprisePool:async(e,t,s={})=>{d("getEnterprisePool","enterpriseID",e),d("getEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},listEnterpriseInstances:async(e,t={})=>{d("listEnterpriseInstances","enterpriseID",e);const s="/enterprises/{enterpriseID}/instances".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterprisePools:async(e,t={})=>{d("listEnterprisePools","enterpriseID",e);const s="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterpriseScaleSets:async(e,t={})=>{d("listEnterpriseScaleSets","enterpriseID",e);const s="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterprises:async(e,t,s={})=>{const o="/enterprises",a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),e!==void 0&&(c.name=e),t!==void 0&&(c.endpoint=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},updateEnterprise:async(e,t,s={})=>{d("updateEnterprise","enterpriseID",e),d("updateEnterprise","body",t);const o="/enterprises/{enterpriseID}".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},updateEnterprisePool:async(e,t,s,o={})=>{d("updateEnterprisePool","enterpriseID",e),d("updateEnterprisePool","poolID",t),d("updateEnterprisePool","body",s);const a="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let R=l&&l.headers?l.headers:{};return i.headers={...c,...R,...o.headers},i.data=x(s,i,r),{url:S(n),options:i}}}},Q=function(r){const e=mo(r);return{async createEnterprise(t,s){const o=await e.createEnterprise(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.createEnterprise"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async createEnterprisePool(t,s,o){const a=await e.createEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.createEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async createEnterpriseScaleSet(t,s,o){const a=await e.createEnterpriseScaleSet(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.createEnterpriseScaleSet"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async deleteEnterprise(t,s){const o=await e.deleteEnterprise(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.deleteEnterprise"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async deleteEnterprisePool(t,s,o){const a=await e.deleteEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.deleteEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async getEnterprise(t,s){const o=await e.getEnterprise(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.getEnterprise"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async getEnterprisePool(t,s,o){const a=await e.getEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.getEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async listEnterpriseInstances(t,s){const o=await e.listEnterpriseInstances(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.listEnterpriseInstances"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listEnterprisePools(t,s){const o=await e.listEnterprisePools(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.listEnterprisePools"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listEnterpriseScaleSets(t,s){const o=await e.listEnterpriseScaleSets(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.listEnterpriseScaleSets"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listEnterprises(t,s,o){const a=await e.listEnterprises(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.listEnterprises"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async updateEnterprise(t,s,o){const a=await e.updateEnterprise(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.updateEnterprise"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async updateEnterprisePool(t,s,o,a){const n=await e.updateEnterprisePool(t,s,o,a),l=r?.serverIndex??0,i=P["EnterprisesApi.updateEnterprisePool"]?.[l]?.url;return(c,p)=>A(n,u,O,r)(c,i||p)}}};class Jt extends H{createEnterprise(e,t){return Q(this.configuration).createEnterprise(e,t).then(s=>s(this.axios,this.basePath))}createEnterprisePool(e,t,s){return Q(this.configuration).createEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}createEnterpriseScaleSet(e,t,s){return Q(this.configuration).createEnterpriseScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteEnterprise(e,t){return Q(this.configuration).deleteEnterprise(e,t).then(s=>s(this.axios,this.basePath))}deleteEnterprisePool(e,t,s){return Q(this.configuration).deleteEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}getEnterprise(e,t){return Q(this.configuration).getEnterprise(e,t).then(s=>s(this.axios,this.basePath))}getEnterprisePool(e,t,s){return Q(this.configuration).getEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}listEnterpriseInstances(e,t){return Q(this.configuration).listEnterpriseInstances(e,t).then(s=>s(this.axios,this.basePath))}listEnterprisePools(e,t){return Q(this.configuration).listEnterprisePools(e,t).then(s=>s(this.axios,this.basePath))}listEnterpriseScaleSets(e,t){return Q(this.configuration).listEnterpriseScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listEnterprises(e,t,s){return Q(this.configuration).listEnterprises(e,t,s).then(o=>o(this.axios,this.basePath))}updateEnterprise(e,t,s){return Q(this.configuration).updateEnterprise(e,t,s).then(o=>o(this.axios,this.basePath))}updateEnterprisePool(e,t,s,o){return Q(this.configuration).updateEnterprisePool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const bo=function(r){return{firstRun:async(e,t={})=>{d("firstRun","body",e);const s="/first-run",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=x(e,n,r),{url:S(o),options:n}}}},Vo=function(r){const e=bo(r);return{async firstRun(t,s){const o=await e.firstRun(t,s),a=r?.serverIndex??0,n=P["FirstRunApi.firstRun"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)}}};class Kt extends H{firstRun(e,t){return Vo(this.configuration).firstRun(e,t).then(s=>s(this.axios,this.basePath))}}const So=function(r){return{getOrgWebhookInfo:async(e,t={})=>{d("getOrgWebhookInfo","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getRepoWebhookInfo:async(e,t={})=>{d("getRepoWebhookInfo","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},installOrgWebhook:async(e,t,s={})=>{d("installOrgWebhook","orgID",e),d("installOrgWebhook","body",t);const o="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},installRepoWebhook:async(e,t,s={})=>{d("installRepoWebhook","repoID",e),d("installRepoWebhook","body",t);const o="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},uninstallOrgWebhook:async(e,t={})=>{d("uninstallOrgWebhook","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},uninstallRepoWebhook:async(e,t={})=>{d("uninstallRepoWebhook","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}}}},be=function(r){const e=So(r);return{async getOrgWebhookInfo(t,s){const o=await e.getOrgWebhookInfo(t,s),a=r?.serverIndex??0,n=P["HooksApi.getOrgWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async getRepoWebhookInfo(t,s){const o=await e.getRepoWebhookInfo(t,s),a=r?.serverIndex??0,n=P["HooksApi.getRepoWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async installOrgWebhook(t,s,o){const a=await e.installOrgWebhook(t,s,o),n=r?.serverIndex??0,l=P["HooksApi.installOrgWebhook"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async installRepoWebhook(t,s,o){const a=await e.installRepoWebhook(t,s,o),n=r?.serverIndex??0,l=P["HooksApi.installRepoWebhook"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async uninstallOrgWebhook(t,s){const o=await e.uninstallOrgWebhook(t,s),a=r?.serverIndex??0,n=P["HooksApi.uninstallOrgWebhook"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async uninstallRepoWebhook(t,s){const o=await e.uninstallRepoWebhook(t,s),a=r?.serverIndex??0,n=P["HooksApi.uninstallRepoWebhook"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)}}};class Xt extends H{getOrgWebhookInfo(e,t){return be(this.configuration).getOrgWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}getRepoWebhookInfo(e,t){return be(this.configuration).getRepoWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}installOrgWebhook(e,t,s){return be(this.configuration).installOrgWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}installRepoWebhook(e,t,s){return be(this.configuration).installRepoWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}uninstallOrgWebhook(e,t){return be(this.configuration).uninstallOrgWebhook(e,t).then(s=>s(this.axios,this.basePath))}uninstallRepoWebhook(e,t){return be(this.configuration).uninstallRepoWebhook(e,t).then(s=>s(this.axios,this.basePath))}}const Ao=function(r){return{deleteInstance:async(e,t,s,o={})=>{d("deleteInstance","instanceName",e);const a="/instances/{instanceName}".replace("{instanceName}",encodeURIComponent(String(e))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"DELETE",...l,...o},c={},p={};await b(c,"Authorization",r),t!==void 0&&(p.forceRemove=t),s!==void 0&&(p.bypassGHUnauthorized=s),V(n,p);let R=l&&l.headers?l.headers:{};return i.headers={...c,...R,...o.headers},{url:S(n),options:i}},getInstance:async(e,t={})=>{d("getInstance","instanceName",e);const s="/instances/{instanceName}".replace("{instanceName}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterpriseInstances:async(e,t={})=>{d("listEnterpriseInstances","enterpriseID",e);const s="/enterprises/{enterpriseID}/instances".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listInstances:async(e={})=>{const t="/instances",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listOrgInstances:async(e,t={})=>{d("listOrgInstances","orgID",e);const s="/organizations/{orgID}/instances".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listPoolInstances:async(e,t={})=>{d("listPoolInstances","poolID",e);const s="/pools/{poolID}/instances".replace("{poolID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoInstances:async(e,t={})=>{d("listRepoInstances","repoID",e);const s="/repositories/{repoID}/instances".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listScaleSetInstances:async(e,t={})=>{d("listScaleSetInstances","scalesetID",e);const s="/scalesets/{scalesetID}/instances".replace("{scalesetID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}}}},le=function(r){const e=Ao(r);return{async deleteInstance(t,s,o,a){const n=await e.deleteInstance(t,s,o,a),l=r?.serverIndex??0,i=P["InstancesApi.deleteInstance"]?.[l]?.url;return(c,p)=>A(n,u,O,r)(c,i||p)},async getInstance(t,s){const o=await e.getInstance(t,s),a=r?.serverIndex??0,n=P["InstancesApi.getInstance"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listEnterpriseInstances(t,s){const o=await e.listEnterpriseInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listEnterpriseInstances"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listInstances(t){const s=await e.listInstances(t),o=r?.serverIndex??0,a=P["InstancesApi.listInstances"]?.[o]?.url;return(n,l)=>A(s,u,O,r)(n,a||l)},async listOrgInstances(t,s){const o=await e.listOrgInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listOrgInstances"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listPoolInstances(t,s){const o=await e.listPoolInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listPoolInstances"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listRepoInstances(t,s){const o=await e.listRepoInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listRepoInstances"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listScaleSetInstances(t,s){const o=await e.listScaleSetInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listScaleSetInstances"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)}}};class Yt extends H{deleteInstance(e,t,s,o){return le(this.configuration).deleteInstance(e,t,s,o).then(a=>a(this.axios,this.basePath))}getInstance(e,t){return le(this.configuration).getInstance(e,t).then(s=>s(this.axios,this.basePath))}listEnterpriseInstances(e,t){return le(this.configuration).listEnterpriseInstances(e,t).then(s=>s(this.axios,this.basePath))}listInstances(e){return le(this.configuration).listInstances(e).then(t=>t(this.axios,this.basePath))}listOrgInstances(e,t){return le(this.configuration).listOrgInstances(e,t).then(s=>s(this.axios,this.basePath))}listPoolInstances(e,t){return le(this.configuration).listPoolInstances(e,t).then(s=>s(this.axios,this.basePath))}listRepoInstances(e,t){return le(this.configuration).listRepoInstances(e,t).then(s=>s(this.axios,this.basePath))}listScaleSetInstances(e,t){return le(this.configuration).listScaleSetInstances(e,t).then(s=>s(this.axios,this.basePath))}}const Ro=function(r){return{login:async(e,t={})=>{d("login","body",e);const s="/auth/login",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=x(e,n,r),{url:S(o),options:n}}}},yo=function(r){const e=Ro(r);return{async login(t,s){const o=await e.login(t,s),a=r?.serverIndex??0,n=P["LoginApi.login"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)}}};class Zt extends H{login(e,t){return yo(this.configuration).login(e,t).then(s=>s(this.axios,this.basePath))}}const fo=function(r){return{createOrg:async(e,t={})=>{d("createOrg","body",e);const s="/organizations",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=x(e,n,r),{url:S(o),options:n}},createOrgPool:async(e,t,s={})=>{d("createOrgPool","orgID",e),d("createOrgPool","body",t);const o="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},createOrgScaleSet:async(e,t,s={})=>{d("createOrgScaleSet","orgID",e),d("createOrgScaleSet","body",t);const o="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},deleteOrg:async(e,t,s={})=>{d("deleteOrg","orgID",e);const o="/organizations/{orgID}".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),t!==void 0&&(c.keepWebhook=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deleteOrgPool:async(e,t,s={})=>{d("deleteOrgPool","orgID",e),d("deleteOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getOrg:async(e,t={})=>{d("getOrg","orgID",e);const s="/organizations/{orgID}".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getOrgPool:async(e,t,s={})=>{d("getOrgPool","orgID",e),d("getOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getOrgWebhookInfo:async(e,t={})=>{d("getOrgWebhookInfo","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},installOrgWebhook:async(e,t,s={})=>{d("installOrgWebhook","orgID",e),d("installOrgWebhook","body",t);const o="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},listOrgInstances:async(e,t={})=>{d("listOrgInstances","orgID",e);const s="/organizations/{orgID}/instances".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgPools:async(e,t={})=>{d("listOrgPools","orgID",e);const s="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgScaleSets:async(e,t={})=>{d("listOrgScaleSets","orgID",e);const s="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgs:async(e,t,s={})=>{const o="/organizations",a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),e!==void 0&&(c.name=e),t!==void 0&&(c.endpoint=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},uninstallOrgWebhook:async(e,t={})=>{d("uninstallOrgWebhook","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},updateOrg:async(e,t,s={})=>{d("updateOrg","orgID",e),d("updateOrg","body",t);const o="/organizations/{orgID}".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},updateOrgPool:async(e,t,s,o={})=>{d("updateOrgPool","orgID",e),d("updateOrgPool","poolID",t),d("updateOrgPool","body",s);const a="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let R=l&&l.headers?l.headers:{};return i.headers={...c,...R,...o.headers},i.data=x(s,i,r),{url:S(n),options:i}}}},G=function(r){const e=fo(r);return{async createOrg(t,s){const o=await e.createOrg(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.createOrg"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async createOrgPool(t,s,o){const a=await e.createOrgPool(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.createOrgPool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async createOrgScaleSet(t,s,o){const a=await e.createOrgScaleSet(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.createOrgScaleSet"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async deleteOrg(t,s,o){const a=await e.deleteOrg(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.deleteOrg"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async deleteOrgPool(t,s,o){const a=await e.deleteOrgPool(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.deleteOrgPool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async getOrg(t,s){const o=await e.getOrg(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.getOrg"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async getOrgPool(t,s,o){const a=await e.getOrgPool(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.getOrgPool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async getOrgWebhookInfo(t,s){const o=await e.getOrgWebhookInfo(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.getOrgWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async installOrgWebhook(t,s,o){const a=await e.installOrgWebhook(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.installOrgWebhook"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async listOrgInstances(t,s){const o=await e.listOrgInstances(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.listOrgInstances"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listOrgPools(t,s){const o=await e.listOrgPools(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.listOrgPools"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listOrgScaleSets(t,s){const o=await e.listOrgScaleSets(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.listOrgScaleSets"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listOrgs(t,s,o){const a=await e.listOrgs(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.listOrgs"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async uninstallOrgWebhook(t,s){const o=await e.uninstallOrgWebhook(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.uninstallOrgWebhook"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async updateOrg(t,s,o){const a=await e.updateOrg(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.updateOrg"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async updateOrgPool(t,s,o,a){const n=await e.updateOrgPool(t,s,o,a),l=r?.serverIndex??0,i=P["OrganizationsApi.updateOrgPool"]?.[l]?.url;return(c,p)=>A(n,u,O,r)(c,i||p)}}};class er extends H{createOrg(e,t){return G(this.configuration).createOrg(e,t).then(s=>s(this.axios,this.basePath))}createOrgPool(e,t,s){return G(this.configuration).createOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}createOrgScaleSet(e,t,s){return G(this.configuration).createOrgScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteOrg(e,t,s){return G(this.configuration).deleteOrg(e,t,s).then(o=>o(this.axios,this.basePath))}deleteOrgPool(e,t,s){return G(this.configuration).deleteOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}getOrg(e,t){return G(this.configuration).getOrg(e,t).then(s=>s(this.axios,this.basePath))}getOrgPool(e,t,s){return G(this.configuration).getOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}getOrgWebhookInfo(e,t){return G(this.configuration).getOrgWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}installOrgWebhook(e,t,s){return G(this.configuration).installOrgWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}listOrgInstances(e,t){return G(this.configuration).listOrgInstances(e,t).then(s=>s(this.axios,this.basePath))}listOrgPools(e,t){return G(this.configuration).listOrgPools(e,t).then(s=>s(this.axios,this.basePath))}listOrgScaleSets(e,t){return G(this.configuration).listOrgScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listOrgs(e,t,s){return G(this.configuration).listOrgs(e,t,s).then(o=>o(this.axios,this.basePath))}uninstallOrgWebhook(e,t){return G(this.configuration).uninstallOrgWebhook(e,t).then(s=>s(this.axios,this.basePath))}updateOrg(e,t,s){return G(this.configuration).updateOrg(e,t,s).then(o=>o(this.axios,this.basePath))}updateOrgPool(e,t,s,o){return G(this.configuration).updateOrgPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const wo=function(r){return{createEnterprisePool:async(e,t,s={})=>{d("createEnterprisePool","enterpriseID",e),d("createEnterprisePool","body",t);const o="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},createOrgPool:async(e,t,s={})=>{d("createOrgPool","orgID",e),d("createOrgPool","body",t);const o="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},createRepoPool:async(e,t,s={})=>{d("createRepoPool","repoID",e),d("createRepoPool","body",t);const o="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},deleteEnterprisePool:async(e,t,s={})=>{d("deleteEnterprisePool","enterpriseID",e),d("deleteEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deleteOrgPool:async(e,t,s={})=>{d("deleteOrgPool","orgID",e),d("deleteOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deletePool:async(e,t={})=>{d("deletePool","poolID",e);const s="/pools/{poolID}".replace("{poolID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteRepoPool:async(e,t,s={})=>{d("deleteRepoPool","repoID",e),d("deleteRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getEnterprisePool:async(e,t,s={})=>{d("getEnterprisePool","enterpriseID",e),d("getEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getOrgPool:async(e,t,s={})=>{d("getOrgPool","orgID",e),d("getOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getPool:async(e,t={})=>{d("getPool","poolID",e);const s="/pools/{poolID}".replace("{poolID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getRepoPool:async(e,t,s={})=>{d("getRepoPool","repoID",e),d("getRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},listEnterprisePools:async(e,t={})=>{d("listEnterprisePools","enterpriseID",e);const s="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgPools:async(e,t={})=>{d("listOrgPools","orgID",e);const s="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listPools:async(e={})=>{const t="/pools",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listRepoPools:async(e,t={})=>{d("listRepoPools","repoID",e);const s="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},updateEnterprisePool:async(e,t,s,o={})=>{d("updateEnterprisePool","enterpriseID",e),d("updateEnterprisePool","poolID",t),d("updateEnterprisePool","body",s);const a="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let R=l&&l.headers?l.headers:{};return i.headers={...c,...R,...o.headers},i.data=x(s,i,r),{url:S(n),options:i}},updateOrgPool:async(e,t,s,o={})=>{d("updateOrgPool","orgID",e),d("updateOrgPool","poolID",t),d("updateOrgPool","body",s);const a="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let R=l&&l.headers?l.headers:{};return i.headers={...c,...R,...o.headers},i.data=x(s,i,r),{url:S(n),options:i}},updatePool:async(e,t,s={})=>{d("updatePool","poolID",e),d("updatePool","body",t);const o="/pools/{poolID}".replace("{poolID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},updateRepoPool:async(e,t,s,o={})=>{d("updateRepoPool","repoID",e),d("updateRepoPool","poolID",t),d("updateRepoPool","body",s);const a="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let R=l&&l.headers?l.headers:{};return i.headers={...c,...R,...o.headers},i.data=x(s,i,r),{url:S(n),options:i}}}},L=function(r){const e=wo(r);return{async createEnterprisePool(t,s,o){const a=await e.createEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.createEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async createOrgPool(t,s,o){const a=await e.createOrgPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.createOrgPool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async createRepoPool(t,s,o){const a=await e.createRepoPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.createRepoPool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async deleteEnterprisePool(t,s,o){const a=await e.deleteEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.deleteEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async deleteOrgPool(t,s,o){const a=await e.deleteOrgPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.deleteOrgPool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async deletePool(t,s){const o=await e.deletePool(t,s),a=r?.serverIndex??0,n=P["PoolsApi.deletePool"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async deleteRepoPool(t,s,o){const a=await e.deleteRepoPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.deleteRepoPool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async getEnterprisePool(t,s,o){const a=await e.getEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.getEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async getOrgPool(t,s,o){const a=await e.getOrgPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.getOrgPool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async getPool(t,s){const o=await e.getPool(t,s),a=r?.serverIndex??0,n=P["PoolsApi.getPool"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async getRepoPool(t,s,o){const a=await e.getRepoPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.getRepoPool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async listEnterprisePools(t,s){const o=await e.listEnterprisePools(t,s),a=r?.serverIndex??0,n=P["PoolsApi.listEnterprisePools"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listOrgPools(t,s){const o=await e.listOrgPools(t,s),a=r?.serverIndex??0,n=P["PoolsApi.listOrgPools"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listPools(t){const s=await e.listPools(t),o=r?.serverIndex??0,a=P["PoolsApi.listPools"]?.[o]?.url;return(n,l)=>A(s,u,O,r)(n,a||l)},async listRepoPools(t,s){const o=await e.listRepoPools(t,s),a=r?.serverIndex??0,n=P["PoolsApi.listRepoPools"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async updateEnterprisePool(t,s,o,a){const n=await e.updateEnterprisePool(t,s,o,a),l=r?.serverIndex??0,i=P["PoolsApi.updateEnterprisePool"]?.[l]?.url;return(c,p)=>A(n,u,O,r)(c,i||p)},async updateOrgPool(t,s,o,a){const n=await e.updateOrgPool(t,s,o,a),l=r?.serverIndex??0,i=P["PoolsApi.updateOrgPool"]?.[l]?.url;return(c,p)=>A(n,u,O,r)(c,i||p)},async updatePool(t,s,o){const a=await e.updatePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.updatePool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async updateRepoPool(t,s,o,a){const n=await e.updateRepoPool(t,s,o,a),l=r?.serverIndex??0,i=P["PoolsApi.updateRepoPool"]?.[l]?.url;return(c,p)=>A(n,u,O,r)(c,i||p)}}};class tr extends H{createEnterprisePool(e,t,s){return L(this.configuration).createEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}createOrgPool(e,t,s){return L(this.configuration).createOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}createRepoPool(e,t,s){return L(this.configuration).createRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}deleteEnterprisePool(e,t,s){return L(this.configuration).deleteEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}deleteOrgPool(e,t,s){return L(this.configuration).deleteOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}deletePool(e,t){return L(this.configuration).deletePool(e,t).then(s=>s(this.axios,this.basePath))}deleteRepoPool(e,t,s){return L(this.configuration).deleteRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}getEnterprisePool(e,t,s){return L(this.configuration).getEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}getOrgPool(e,t,s){return L(this.configuration).getOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}getPool(e,t){return L(this.configuration).getPool(e,t).then(s=>s(this.axios,this.basePath))}getRepoPool(e,t,s){return L(this.configuration).getRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}listEnterprisePools(e,t){return L(this.configuration).listEnterprisePools(e,t).then(s=>s(this.axios,this.basePath))}listOrgPools(e,t){return L(this.configuration).listOrgPools(e,t).then(s=>s(this.axios,this.basePath))}listPools(e){return L(this.configuration).listPools(e).then(t=>t(this.axios,this.basePath))}listRepoPools(e,t){return L(this.configuration).listRepoPools(e,t).then(s=>s(this.axios,this.basePath))}updateEnterprisePool(e,t,s,o){return L(this.configuration).updateEnterprisePool(e,t,s,o).then(a=>a(this.axios,this.basePath))}updateOrgPool(e,t,s,o){return L(this.configuration).updateOrgPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}updatePool(e,t,s){return L(this.configuration).updatePool(e,t,s).then(o=>o(this.axios,this.basePath))}updateRepoPool(e,t,s,o){return L(this.configuration).updateRepoPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const Io=function(r){return{listProviders:async(e={})=>{const t="/providers",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}}}},Eo=function(r){const e=Io(r);return{async listProviders(t){const s=await e.listProviders(t),o=r?.serverIndex??0,a=P["ProvidersApi.listProviders"]?.[o]?.url;return(n,l)=>A(s,u,O,r)(n,a||l)}}};class rr extends H{listProviders(e){return Eo(this.configuration).listProviders(e).then(t=>t(this.axios,this.basePath))}}const go=function(r){return{createRepo:async(e,t={})=>{d("createRepo","body",e);const s="/repositories",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=x(e,n,r),{url:S(o),options:n}},createRepoPool:async(e,t,s={})=>{d("createRepoPool","repoID",e),d("createRepoPool","body",t);const o="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},createRepoScaleSet:async(e,t,s={})=>{d("createRepoScaleSet","repoID",e),d("createRepoScaleSet","body",t);const o="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},deleteRepo:async(e,t,s={})=>{d("deleteRepo","repoID",e);const o="/repositories/{repoID}".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),t!==void 0&&(c.keepWebhook=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deleteRepoPool:async(e,t,s={})=>{d("deleteRepoPool","repoID",e),d("deleteRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getRepo:async(e,t={})=>{d("getRepo","repoID",e);const s="/repositories/{repoID}".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getRepoPool:async(e,t,s={})=>{d("getRepoPool","repoID",e),d("getRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getRepoWebhookInfo:async(e,t={})=>{d("getRepoWebhookInfo","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},installRepoWebhook:async(e,t,s={})=>{d("installRepoWebhook","repoID",e),d("installRepoWebhook","body",t);const o="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},listRepoInstances:async(e,t={})=>{d("listRepoInstances","repoID",e);const s="/repositories/{repoID}/instances".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoPools:async(e,t={})=>{d("listRepoPools","repoID",e);const s="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoScaleSets:async(e,t={})=>{d("listRepoScaleSets","repoID",e);const s="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepos:async(e,t,s,o={})=>{const a="/repositories",n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"GET",...l,...o},c={},p={};await b(c,"Authorization",r),e!==void 0&&(p.owner=e),t!==void 0&&(p.name=t),s!==void 0&&(p.endpoint=s),V(n,p);let R=l&&l.headers?l.headers:{};return i.headers={...c,...R,...o.headers},{url:S(n),options:i}},uninstallRepoWebhook:async(e,t={})=>{d("uninstallRepoWebhook","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},updateRepo:async(e,t,s={})=>{d("updateRepo","repoID",e),d("updateRepo","body",t);const o="/repositories/{repoID}".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},updateRepoPool:async(e,t,s,o={})=>{d("updateRepoPool","repoID",e),d("updateRepoPool","poolID",t),d("updateRepoPool","body",s);const a="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let R=l&&l.headers?l.headers:{};return i.headers={...c,...R,...o.headers},i.data=x(s,i,r),{url:S(n),options:i}}}},_=function(r){const e=go(r);return{async createRepo(t,s){const o=await e.createRepo(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.createRepo"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async createRepoPool(t,s,o){const a=await e.createRepoPool(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.createRepoPool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async createRepoScaleSet(t,s,o){const a=await e.createRepoScaleSet(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.createRepoScaleSet"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async deleteRepo(t,s,o){const a=await e.deleteRepo(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.deleteRepo"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async deleteRepoPool(t,s,o){const a=await e.deleteRepoPool(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.deleteRepoPool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async getRepo(t,s){const o=await e.getRepo(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.getRepo"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async getRepoPool(t,s,o){const a=await e.getRepoPool(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.getRepoPool"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async getRepoWebhookInfo(t,s){const o=await e.getRepoWebhookInfo(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.getRepoWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async installRepoWebhook(t,s,o){const a=await e.installRepoWebhook(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.installRepoWebhook"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async listRepoInstances(t,s){const o=await e.listRepoInstances(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.listRepoInstances"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listRepoPools(t,s){const o=await e.listRepoPools(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.listRepoPools"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listRepoScaleSets(t,s){const o=await e.listRepoScaleSets(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.listRepoScaleSets"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listRepos(t,s,o,a){const n=await e.listRepos(t,s,o,a),l=r?.serverIndex??0,i=P["RepositoriesApi.listRepos"]?.[l]?.url;return(c,p)=>A(n,u,O,r)(c,i||p)},async uninstallRepoWebhook(t,s){const o=await e.uninstallRepoWebhook(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.uninstallRepoWebhook"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async updateRepo(t,s,o){const a=await e.updateRepo(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.updateRepo"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async updateRepoPool(t,s,o,a){const n=await e.updateRepoPool(t,s,o,a),l=r?.serverIndex??0,i=P["RepositoriesApi.updateRepoPool"]?.[l]?.url;return(c,p)=>A(n,u,O,r)(c,i||p)}}};class sr extends H{createRepo(e,t){return _(this.configuration).createRepo(e,t).then(s=>s(this.axios,this.basePath))}createRepoPool(e,t,s){return _(this.configuration).createRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}createRepoScaleSet(e,t,s){return _(this.configuration).createRepoScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteRepo(e,t,s){return _(this.configuration).deleteRepo(e,t,s).then(o=>o(this.axios,this.basePath))}deleteRepoPool(e,t,s){return _(this.configuration).deleteRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}getRepo(e,t){return _(this.configuration).getRepo(e,t).then(s=>s(this.axios,this.basePath))}getRepoPool(e,t,s){return _(this.configuration).getRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}getRepoWebhookInfo(e,t){return _(this.configuration).getRepoWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}installRepoWebhook(e,t,s){return _(this.configuration).installRepoWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}listRepoInstances(e,t){return _(this.configuration).listRepoInstances(e,t).then(s=>s(this.axios,this.basePath))}listRepoPools(e,t){return _(this.configuration).listRepoPools(e,t).then(s=>s(this.axios,this.basePath))}listRepoScaleSets(e,t){return _(this.configuration).listRepoScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listRepos(e,t,s,o){return _(this.configuration).listRepos(e,t,s,o).then(a=>a(this.axios,this.basePath))}uninstallRepoWebhook(e,t){return _(this.configuration).uninstallRepoWebhook(e,t).then(s=>s(this.axios,this.basePath))}updateRepo(e,t,s){return _(this.configuration).updateRepo(e,t,s).then(o=>o(this.axios,this.basePath))}updateRepoPool(e,t,s,o){return _(this.configuration).updateRepoPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const xo=function(r){return{createEnterpriseScaleSet:async(e,t,s={})=>{d("createEnterpriseScaleSet","enterpriseID",e),d("createEnterpriseScaleSet","body",t);const o="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},createOrgScaleSet:async(e,t,s={})=>{d("createOrgScaleSet","orgID",e),d("createOrgScaleSet","body",t);const o="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},createRepoScaleSet:async(e,t,s={})=>{d("createRepoScaleSet","repoID",e),d("createRepoScaleSet","body",t);const o="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}},deleteScaleSet:async(e,t={})=>{d("deleteScaleSet","scalesetID",e);const s="/scalesets/{scalesetID}".replace("{scalesetID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getScaleSet:async(e,t={})=>{d("getScaleSet","scalesetID",e);const s="/scalesets/{scalesetID}".replace("{scalesetID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterpriseScaleSets:async(e,t={})=>{d("listEnterpriseScaleSets","enterpriseID",e);const s="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgScaleSets:async(e,t={})=>{d("listOrgScaleSets","orgID",e);const s="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoScaleSets:async(e,t={})=>{d("listRepoScaleSets","repoID",e);const s="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listScalesets:async(e={})=>{const t="/scalesets",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},updateScaleSet:async(e,t,s={})=>{d("updateScaleSet","scalesetID",e),d("updateScaleSet","body",t);const o="/scalesets/{scalesetID}".replace("{scalesetID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}}}},Z=function(r){const e=xo(r);return{async createEnterpriseScaleSet(t,s,o){const a=await e.createEnterpriseScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.createEnterpriseScaleSet"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async createOrgScaleSet(t,s,o){const a=await e.createOrgScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.createOrgScaleSet"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async createRepoScaleSet(t,s,o){const a=await e.createRepoScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.createRepoScaleSet"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)},async deleteScaleSet(t,s){const o=await e.deleteScaleSet(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.deleteScaleSet"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async getScaleSet(t,s){const o=await e.getScaleSet(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.getScaleSet"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listEnterpriseScaleSets(t,s){const o=await e.listEnterpriseScaleSets(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.listEnterpriseScaleSets"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listOrgScaleSets(t,s){const o=await e.listOrgScaleSets(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.listOrgScaleSets"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listRepoScaleSets(t,s){const o=await e.listRepoScaleSets(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.listRepoScaleSets"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listScalesets(t){const s=await e.listScalesets(t),o=r?.serverIndex??0,a=P["ScalesetsApi.listScalesets"]?.[o]?.url;return(n,l)=>A(s,u,O,r)(n,a||l)},async updateScaleSet(t,s,o){const a=await e.updateScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.updateScaleSet"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)}}};class ar extends H{createEnterpriseScaleSet(e,t,s){return Z(this.configuration).createEnterpriseScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}createOrgScaleSet(e,t,s){return Z(this.configuration).createOrgScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}createRepoScaleSet(e,t,s){return Z(this.configuration).createRepoScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteScaleSet(e,t){return Z(this.configuration).deleteScaleSet(e,t).then(s=>s(this.axios,this.basePath))}getScaleSet(e,t){return Z(this.configuration).getScaleSet(e,t).then(s=>s(this.axios,this.basePath))}listEnterpriseScaleSets(e,t){return Z(this.configuration).listEnterpriseScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listOrgScaleSets(e,t){return Z(this.configuration).listOrgScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listRepoScaleSets(e,t){return Z(this.configuration).listRepoScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listScalesets(e){return Z(this.configuration).listScalesets(e).then(t=>t(this.axios,this.basePath))}updateScaleSet(e,t,s){return Z(this.configuration).updateScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}}const vo=function(r){return{createTemplate:async(e,t={})=>{d("createTemplate","body",e);const s="/templates",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=x(e,n,r),{url:S(o),options:n}},deleteTemplate:async(e,t={})=>{d("deleteTemplate","templateID",e);const s="/templates/{templateID}".replace("{templateID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getTemplate:async(e,t={})=>{d("getTemplate","templateID",e);const s="/templates/{templateID}".replace("{templateID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listTemplates:async(e,t,s,o={})=>{const a="/templates",n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"GET",...l,...o},c={},p={};await b(c,"Authorization",r),e!==void 0&&(p.osType=e),t!==void 0&&(p.partialName=t),s!==void 0&&(p.forgeType=s),V(n,p);let R=l&&l.headers?l.headers:{};return i.headers={...c,...R,...o.headers},{url:S(n),options:i}},updateTemplate:async(e,t,s={})=>{d("updateTemplate","templateID",e),d("updateTemplate","body",t);const o="/templates/{templateID}".replace("{templateID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=x(t,l,r),{url:S(a),options:l}}}},Ee=function(r){const e=vo(r);return{async createTemplate(t,s){const o=await e.createTemplate(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.createTemplate"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async deleteTemplate(t,s){const o=await e.deleteTemplate(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.deleteTemplate"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async getTemplate(t,s){const o=await e.getTemplate(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.getTemplate"]?.[a]?.url;return(l,i)=>A(o,u,O,r)(l,n||i)},async listTemplates(t,s,o,a){const n=await e.listTemplates(t,s,o,a),l=r?.serverIndex??0,i=P["TemplatesApi.listTemplates"]?.[l]?.url;return(c,p)=>A(n,u,O,r)(c,i||p)},async updateTemplate(t,s,o){const a=await e.updateTemplate(t,s,o),n=r?.serverIndex??0,l=P["TemplatesApi.updateTemplate"]?.[n]?.url;return(i,c)=>A(a,u,O,r)(i,l||c)}}};class Uo extends H{createTemplate(e,t){return Ee(this.configuration).createTemplate(e,t).then(s=>s(this.axios,this.basePath))}deleteTemplate(e,t){return Ee(this.configuration).deleteTemplate(e,t).then(s=>s(this.axios,this.basePath))}getTemplate(e,t){return Ee(this.configuration).getTemplate(e,t).then(s=>s(this.axios,this.basePath))}listTemplates(e,t,s,o){return Ee(this.configuration).listTemplates(e,t,s,o).then(a=>a(this.axios,this.basePath))}updateTemplate(e,t,s){return Ee(this.configuration).updateTemplate(e,t,s).then(o=>o(this.axios,this.basePath))}}class or{apiKey;username;password;accessToken;basePath;serverIndex;baseOptions;formDataCtor;constructor(e={}){this.apiKey=e.apiKey,this.username=e.username,this.password=e.password,this.accessToken=e.accessToken,this.basePath=e.basePath,this.serverIndex=e.serverIndex,this.baseOptions={...e.baseOptions,headers:{...e.baseOptions?.headers}},this.formDataCtor=e.formDataCtor}isJsonMime(e){const t=new RegExp("^(application/json|[^;/ ]+/[^;/ ]+[+]json)[ ]*(;.*)?$","i");return e!==null&&(t.test(e)||e.toLowerCase()==="application/json-patch+json")}}class kr{baseUrl;token;config;isDevelopmentMode(){return typeof window>"u"?!1:window.location.port==="5173"}loginApi;controllerInfoApi;controllerApi;endpointsApi;credentialsApi;repositoriesApi;organizationsApi;enterprisesApi;poolsApi;scaleSetsApi;instancesApi;providersApi;firstRunApi;hooksApi;templatesApi;constructor(e=""){this.baseUrl=e||window.location.origin;const t=this.isDevelopmentMode();this.config=new or({basePath:`${this.baseUrl}/api/v1`,accessToken:()=>this.token||"",baseOptions:{withCredentials:!t}}),this.loginApi=new Zt(this.config),this.controllerInfoApi=new Wt(this.config),this.controllerApi=new Nt(this.config),this.endpointsApi=new Mt(this.config),this.credentialsApi=new Qt(this.config),this.repositoriesApi=new sr(this.config),this.organizationsApi=new er(this.config),this.enterprisesApi=new Jt(this.config),this.poolsApi=new tr(this.config),this.scaleSetsApi=new ar(this.config),this.instancesApi=new Yt(this.config),this.providersApi=new rr(this.config),this.firstRunApi=new Kt(this.config),this.hooksApi=new Xt(this.config),this.templatesApi=new Uo(this.config)}setToken(e){this.token=e;const t=this.isDevelopmentMode();this.config=new or({basePath:`${this.baseUrl}/api/v1`,accessToken:()=>e,baseOptions:{withCredentials:!t}}),this.loginApi=new Zt(this.config),this.controllerInfoApi=new Wt(this.config),this.controllerApi=new Nt(this.config),this.endpointsApi=new Mt(this.config),this.credentialsApi=new Qt(this.config),this.repositoriesApi=new sr(this.config),this.organizationsApi=new er(this.config),this.enterprisesApi=new Jt(this.config),this.poolsApi=new tr(this.config),this.scaleSetsApi=new ar(this.config),this.instancesApi=new Yt(this.config),this.providersApi=new rr(this.config),this.firstRunApi=new Kt(this.config),this.hooksApi=new Xt(this.config)}async login(e){const t={username:e.username,password:e.password},o=(await this.loginApi.login(t)).data.token;if(o)return this.setToken(o),{token:o};throw new Error("Login failed")}async getControllerInfo(){return(await this.controllerInfoApi.controllerInfo()).data}async listGithubEndpoints(){return(await this.endpointsApi.listGithubEndpoints()).data||[]}async getGithubEndpoint(e){return(await this.endpointsApi.getGithubEndpoint(e)).data}async createGithubEndpoint(e){return(await this.endpointsApi.createGithubEndpoint(e)).data}async updateGithubEndpoint(e,t){return(await this.endpointsApi.updateGithubEndpoint(e,t)).data}async deleteGithubEndpoint(e){await this.endpointsApi.deleteGithubEndpoint(e)}async listGiteaEndpoints(){return(await this.endpointsApi.listGiteaEndpoints()).data||[]}async getGiteaEndpoint(e){return(await this.endpointsApi.getGiteaEndpoint(e)).data}async createGiteaEndpoint(e){return(await this.endpointsApi.createGiteaEndpoint(e)).data}async updateGiteaEndpoint(e,t){return(await this.endpointsApi.updateGiteaEndpoint(e,t)).data}async deleteGiteaEndpoint(e){await this.endpointsApi.deleteGiteaEndpoint(e)}async listAllEndpoints(){const[e,t]=await Promise.all([this.listGithubEndpoints().catch(()=>[]),this.listGiteaEndpoints().catch(()=>[])]);return[...e.map(s=>({...s,endpoint_type:"github"})),...t.map(s=>({...s,endpoint_type:"gitea"}))]}async listGithubCredentials(){return(await this.credentialsApi.listCredentials()).data||[]}async getGithubCredentials(e){return(await this.credentialsApi.getCredentials(e)).data}async createGithubCredentials(e){return(await this.credentialsApi.createCredentials(e)).data}async updateGithubCredentials(e,t){return(await this.credentialsApi.updateCredentials(e,t)).data}async deleteGithubCredentials(e){await this.credentialsApi.deleteCredentials(e)}async listGiteaCredentials(){return(await this.credentialsApi.listGiteaCredentials()).data||[]}async getGiteaCredentials(e){return(await this.credentialsApi.getGiteaCredentials(e)).data}async createGiteaCredentials(e){return(await this.credentialsApi.createGiteaCredentials(e)).data}async updateGiteaCredentials(e,t){return(await this.credentialsApi.updateGiteaCredentials(e,t)).data}async deleteGiteaCredentials(e){await this.credentialsApi.deleteGiteaCredentials(e)}async listAllCredentials(){const[e,t]=await Promise.all([this.listGithubCredentials().catch(()=>[]),this.listGiteaCredentials().catch(()=>[])]);return[...e,...t]}async installRepositoryWebhook(e,t={}){await this.repositoriesApi.installRepoWebhook(e,t)}async uninstallRepositoryWebhook(e){await this.hooksApi.uninstallRepoWebhook(e)}async getRepositoryWebhookInfo(e){return(await this.hooksApi.getRepoWebhookInfo(e)).data}async listRepositories(){return(await this.repositoriesApi.listRepos()).data||[]}async getRepository(e){return(await this.repositoriesApi.getRepo(e)).data}async createRepository(e){return(await this.repositoriesApi.createRepo(e)).data}async updateRepository(e,t){return(await this.repositoriesApi.updateRepo(e,t)).data}async deleteRepository(e){await this.repositoriesApi.deleteRepo(e)}async installRepoWebhook(e){await this.repositoriesApi.installRepoWebhook(e,{})}async listRepositoryPools(e){return(await this.repositoriesApi.listRepoPools(e)).data||[]}async listRepositoryInstances(e){return(await this.repositoriesApi.listRepoInstances(e)).data||[]}async createRepositoryPool(e,t){return(await this.repositoriesApi.createRepoPool(e,t)).data}async installOrganizationWebhook(e,t={}){await this.organizationsApi.installOrgWebhook(e,t)}async uninstallOrganizationWebhook(e){await this.hooksApi.uninstallOrgWebhook(e)}async getOrganizationWebhookInfo(e){return(await this.hooksApi.getOrgWebhookInfo(e)).data}async listOrganizations(){return(await this.organizationsApi.listOrgs()).data||[]}async getOrganization(e){return(await this.organizationsApi.getOrg(e)).data}async createOrganization(e){return(await this.organizationsApi.createOrg(e)).data}async updateOrganization(e,t){return(await this.organizationsApi.updateOrg(e,t)).data}async deleteOrganization(e){await this.organizationsApi.deleteOrg(e)}async listOrganizationPools(e){return(await this.organizationsApi.listOrgPools(e)).data||[]}async listOrganizationInstances(e){return(await this.organizationsApi.listOrgInstances(e)).data||[]}async createOrganizationPool(e,t){return(await this.organizationsApi.createOrgPool(e,t)).data}async listEnterprises(){return(await this.enterprisesApi.listEnterprises()).data||[]}async getEnterprise(e){return(await this.enterprisesApi.getEnterprise(e)).data}async createEnterprise(e){return(await this.enterprisesApi.createEnterprise(e)).data}async updateEnterprise(e,t){return(await this.enterprisesApi.updateEnterprise(e,t)).data}async deleteEnterprise(e){await this.enterprisesApi.deleteEnterprise(e)}async listEnterprisePools(e){return(await this.enterprisesApi.listEnterprisePools(e)).data||[]}async listEnterpriseInstances(e){return(await this.enterprisesApi.listEnterpriseInstances(e)).data||[]}async createEnterprisePool(e,t){return(await this.enterprisesApi.createEnterprisePool(e,t)).data}async createRepositoryScaleSet(e,t){return(await this.repositoriesApi.createRepoScaleSet(e,t)).data}async listRepositoryScaleSets(e){return(await this.repositoriesApi.listRepoScaleSets(e)).data||[]}async createOrganizationScaleSet(e,t){return(await this.organizationsApi.createOrgScaleSet(e,t)).data}async listOrganizationScaleSets(e){return(await this.organizationsApi.listOrgScaleSets(e)).data||[]}async createEnterpriseScaleSet(e,t){return(await this.enterprisesApi.createEnterpriseScaleSet(e,t)).data}async listEnterpriseScaleSets(e){return(await this.enterprisesApi.listEnterpriseScaleSets(e)).data||[]}async listPools(){return(await this.poolsApi.listPools()).data||[]}async listAllPools(){return this.listPools()}async getPool(e){return(await this.poolsApi.getPool(e)).data}async updatePool(e,t){return(await this.poolsApi.updatePool(e,t)).data}async deletePool(e){await this.poolsApi.deletePool(e)}async listScaleSets(){return(await this.scaleSetsApi.listScalesets()).data||[]}async getScaleSet(e){return(await this.scaleSetsApi.getScaleSet(e.toString())).data}async updateScaleSet(e,t){return(await this.scaleSetsApi.updateScaleSet(e.toString(),t)).data}async deleteScaleSet(e){await this.scaleSetsApi.deleteScaleSet(e.toString())}async listInstances(){return(await this.instancesApi.listInstances()).data||[]}async getInstance(e){return(await this.instancesApi.getInstance(e)).data}async deleteInstance(e){await this.instancesApi.deleteInstance(e)}async listProviders(){return(await this.providersApi.listProviders()).data||[]}async listCredentials(){return this.listAllCredentials()}async listEndpoints(){return this.listAllEndpoints()}async firstRun(e){return(await this.firstRunApi.firstRun(e)).data}async updateController(e){return(await this.controllerApi.updateController(e)).data}async listTemplates(e,t,s){return(await this.templatesApi.listTemplates(e,t,s)).data||[]}async getTemplate(e){return(await this.templatesApi.getTemplate(e)).data}async createTemplate(e){return(await this.templatesApi.createTemplate(e)).data}async updateTemplate(e,t){return(await this.templatesApi.updateTemplate(e.toString(),t)).data}async deleteTemplate(e){await this.templatesApi.deleteTemplate(e)}}new kr;class Co extends kr{constructor(e=""){super(e)}}const pn=new Co;var To=Ot(''),Bo=Ot(''),Do=Ot(''),Lo=Ss("");function dn(r,e){const t=wt(e,["children","$$slots","$$events","$$legacy"]),s=wt(t,["variant","size","disabled","loading","type","fullWidth","icon","iconPosition"]);ms(e,!1);const o=ae(),a=ae(),n=ae(),l=ae(),i=ae(),c=ae(),p=ae(),R=ae(),I=bs();let B=ne(e,"variant",8,"primary"),y=ne(e,"size",8,"md"),f=ne(e,"disabled",8,!1),w=ne(e,"loading",8,!1),U=ne(e,"type",8,"button"),j=ne(e,"fullWidth",8,!1),E=ne(e,"icon",8,null),g=ne(e,"iconPosition",8,"left");function T(){!f()&&!w()&&I("click")}se(()=>{},()=>{oe(o,"inline-flex items-center justify-center font-medium rounded-md transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-gray-900 cursor-pointer disabled:cursor-not-allowed")}),se(()=>ce(y()),()=>{oe(a,{sm:"px-3 py-2 text-sm",md:"px-4 py-2 text-sm",lg:"px-6 py-3 text-base"}[y()])}),se(()=>ce(B()),()=>{oe(n,{primary:"text-white bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 disabled:bg-gray-400 disabled:hover:bg-gray-400",secondary:"text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600 focus:ring-blue-500",danger:"text-white bg-red-600 hover:bg-red-700 focus:ring-red-500 disabled:bg-gray-400 disabled:hover:bg-gray-400",ghost:"text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 focus:ring-blue-500"}[B()])}),se(()=>ce(j()),()=>{oe(l,j()?"w-full":"")}),se(()=>ce(f()),()=>{oe(i,f()?"opacity-50":"")}),se(()=>(F(o),F(a),F(n),F(l),F(i)),()=>{oe(c,[F(o),F(a),F(n),F(l),F(i)].filter(Boolean).join(" "))}),se(()=>ce(y()),()=>{oe(p,{sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6"}[y()])}),se(()=>(ce(g()),ce(y())),()=>{oe(R,{sm:g()==="left"?"-ml-0.5 mr-2":"ml-2 -mr-0.5",md:g()==="left"?"-ml-1 mr-2":"ml-2 -mr-1",lg:g()==="left"?"-ml-1 mr-3":"ml-3 -mr-1"}[y()])}),Vs(),_r();var D=Lo();Bs(D,()=>({type:U(),disabled:f(),class:F(c),...s}));var C=Xe(D);{var ie=z=>{var k=To();ke(()=>Fe(k,0,`animate-spin ${F(p)??""} ${g()==="left"?"-ml-1 mr-2":"ml-2 -mr-1"}`)),ye(z,k)},te=z=>{var k=ys(),Oe=fs(k);{var M=Pe=>{var W=Bo(),Be=Xe(W);It(Be,E,!0),Ye(W),ke(()=>Fe(W,0,`${F(p)??""} ${F(R)??""}`)),ye(Pe,W)};Ze(Oe,Pe=>{E()&&g()==="left"&&Pe(M)},!0)}ye(z,k)};Ze(C,z=>{w()?z(ie):z(te,!1)})}var Re=ft(C,2);ws(Re,e,"default",{});var Te=ft(Re,2);{var ue=z=>{var k=Do(),Oe=Xe(k);It(Oe,E,!0),Ye(k),ke(()=>Fe(k,0,`${F(p)??""} ${F(R)??""}`)),ye(z,k)};Ze(Te,z=>{E()&&g()==="right"&&!w()&&z(ue)})}Ye(D),As("click",D,T),ye(r,D),Rs()}export{dn as B,Ho as a,_o as b,He as c,$o as d,Bs as e,gs as f,pn as g,It as h,ws as i,Us as j,qo as r,Fe as s}; diff --git a/webapp/assets/_app/immutable/chunks/BZ_AecKg.js b/webapp/assets/_app/immutable/chunks/BZ_AecKg.js deleted file mode 100644 index d792ae34..00000000 --- a/webapp/assets/_app/immutable/chunks/BZ_AecKg.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as K}from"./TJn6xDN9.js";import{p as O,f as U,d as e,r as t,s,q as c,u as o,z as at,t as W,e as g,b as h,c as Q,E as mt,D as ut,A as Y,a as Z,g as P}from"./DniTuB_0.js";import{p as T,i as H,s as gt,a as pt}from"./DbNhg6mG.js";import{c as rt,d as tt,B as xt}from"./BZ2rxtTc.js";import{b as R,B as $,e as ft}from"./CTcPpzia.js";import{e as yt}from"./DKJ_c8yL.js";import{D as ht,G as et}from"./CKaB5fL4.js";import{E as _t}from"./Dh8uHEF5.js";import{S as bt}from"./C1GM4Goa.js";import{e as kt,i as wt}from"./Ck5PkeSc.js";import{b as Ct}from"./C-xTH-sp.js";var Pt=U('

ID
Created At
Updated At
Status
Pool Balancer Type
');function $t(L,v){O(v,!1);let a=T(v,"entity",8),p=T(v,"entityType",8);function B(){return`${p().charAt(0).toUpperCase()+p().slice(1)} Information`}function n(){if(!a().endpoint?.base_url)return"#";switch(p()){case"repository":const d=a();return`${a().endpoint.base_url}/${d.owner}/${a().name}`;case"organization":return`${a().endpoint.base_url}/${a().name}`;case"enterprise":return`${a().endpoint.base_url}/enterprises/${a().name}`;default:return"#"}}function E(){return`${p().charAt(0).toUpperCase()+p().slice(1)} URL`}function V(){const d=a().pool_balancing_type;if(!d||d===""||d==="none")return"Round Robin (default)";switch(d){case"roundrobin":return"Round Robin";case"pack":return"Pack";default:return d}}K();var m=Pt(),x=e(m),_=e(x),I=e(_,!0);t(_);var b=s(_,2),i=e(b),f=s(e(i),2),k=e(f,!0);t(f),t(i);var u=s(i,2),D=s(e(u),2),M=e(D,!0);t(D),t(u);var w=s(u,2),S=s(e(w),2),G=e(S,!0);t(S),t(w);var r=s(w,2),C=s(e(r),2),l=e(C);{var A=d=>{$(d,{variant:"success",text:"Running"})},j=d=>{$(d,{variant:"error",text:"Stopped"})};H(l,d=>{c(a()),o(()=>a().pool_manager_status?.running)?d(A):d(j,!1)})}t(C),t(r);var N=s(r,2),z=s(e(N),2),y=e(z,!0);t(z),t(N);var q=s(N,2),F=e(q),st=e(F,!0);t(F);var X=s(F,2),J=e(X),ot=e(J);at(),t(J),t(X),t(q),t(b),t(x),t(m),W((d,it,dt,nt,lt,vt,ct)=>{g(I,d),g(k,(c(a()),o(()=>a().id))),g(M,it),g(G,dt),g(y,nt),g(st,lt),rt(J,"href",vt),g(ot,`${ct??""} `)},[()=>o(B),()=>(c(R),c(a()),o(()=>R(a().created_at))),()=>(c(R),c(a()),o(()=>R(a().updated_at))),()=>o(V),()=>o(E),()=>o(n),()=>o(n)]),h(L,m),Q()}var Tt=U('

No pools configured

'),Et=U('');function qt(L,v){O(v,!1);const[a,p]=gt(),B=()=>pt(yt,"$eagerCache",a);let n=T(v,"pools",8),E=T(v,"entityType",8),V=T(v,"entityId",8,""),m=T(v,"entityName",8,"");const x=mt();function _(){x("addPool",{entityType:E(),entityId:V(),entityName:m()})}const I=[{key:"id",title:"ID",flexible:!0,cellComponent:_t,cellProps:{entityType:"pool",showId:!0,fontMono:!0}},{key:"image",title:"Image",flexible:!0,cellComponent:et,cellProps:{field:"image",type:"code",showTitle:!0}},{key:"provider",title:"Provider",cellComponent:et,cellProps:{field:"provider_name"}},{key:"status",title:"Status",cellComponent:bt,cellProps:{statusType:"enabled"}}],b={entityType:"pool",primaryText:{field:"id",isClickable:!0,href:"/pools/{id}",useId:!0,isMonospace:!0},secondaryText:{field:"entity_name",computedValue:r=>ft(r,B())},badges:[{type:"custom",value:r=>({variant:r.enabled?"success":"error",text:r.enabled?"Enabled":"Disabled"})}]};K();var i=Et(),f=e(i),k=e(f),u=e(k),D=e(u);t(u);var M=s(u,2);t(k);var w=s(k,2);{var S=r=>{var C=Tt(),l=s(e(C),4),A=e(l);t(l);var j=s(l,2),N=e(j);xt(N,{variant:"primary",size:"sm",$$events:{click:_},children:(z,y)=>{at();var q=ut("Add Pool");h(z,q)},$$slots:{default:!0}}),t(j),t(C),W(()=>g(A,`No pools configured for this ${E()??""}.`)),h(r,C)},G=r=>{ht(r,{get columns(){return I},get data(){return n()},loading:!1,error:"",searchTerm:"",showSearch:!1,showPagination:!1,currentPage:1,get perPage(){return c(n()),o(()=>n().length)},totalPages:1,get totalItems(){return c(n()),o(()=>n().length)},itemName:"pools",emptyTitle:"No pools configured",get emptyMessage(){return`No pools configured for this ${E()??""}.`},emptyIconType:"cog",get mobileCardConfig(){return b}})};H(w,r=>{c(n()),o(()=>n().length===0)?r(S):r(G,!1)})}t(f),t(i),W(r=>{g(D,`Pools (${c(n()),o(()=>n().length)??""})`),rt(M,"href",r)},[()=>(c(tt),o(()=>tt("/pools")))]),h(L,i),Q(),p()}var It=U('

'),Nt=U('

Events

'),Bt=U('

Events

No events available

');function Wt(L,v){O(v,!1);let a=T(v,"events",8),p=T(v,"eventsContainer",12,void 0);K();var B=Y(),n=Z(B);{var E=m=>{var x=Nt(),_=e(x),I=s(e(_),2);kt(I,5,a,wt,(b,i)=>{var f=It(),k=e(f),u=e(k),D=e(u,!0);t(u);var M=s(u,2),w=e(M);{var S=l=>{$(l,{variant:"error",text:"Error"})},G=l=>{var A=Y(),j=Z(A);{var N=y=>{$(y,{variant:"warning",text:"Warning"})},z=y=>{$(y,{variant:"info",text:"Info"})};H(j,y=>{P(i),o(()=>(P(i).event_level||"info").toLowerCase()==="warning")?y(N):y(z,!1)},!0)}h(l,A)};H(w,l=>{P(i),o(()=>(P(i).event_level||"info").toLowerCase()==="error")?l(S):l(G,!1)})}var r=s(w,2),C=e(r,!0);t(r),t(M),t(k),t(f),W(l=>{g(D,(P(i),o(()=>P(i).message))),g(C,l)},[()=>(c(R),P(i),o(()=>R(P(i).created_at)))]),h(b,f)}),t(I),Ct(I,b=>p(b),()=>p()),t(_),t(x),h(m,x)},V=m=>{var x=Bt();h(m,x)};H(n,m=>{c(a()),o(()=>a()&&a().length>0)?m(E):m(V,!1)})}h(L,B),Q()}export{$t as E,qt as P,Wt as a}; diff --git a/webapp/assets/_app/immutable/chunks/BehbwORU.js b/webapp/assets/_app/immutable/chunks/BehbwORU.js new file mode 100644 index 00000000..3b9e8b6b --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/BehbwORU.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as K}from"./TJn6xDN9.js";import{p as O,f as U,d as e,r as t,s,q as c,u as o,z as at,t as W,e as p,b as h,c as Q,E as mt,D as ut,A as Y,a as Z,g as P}from"./DniTuB_0.js";import{p as T,i as H,s as pt,a as gt}from"./DbNhg6mG.js";import{c as rt,d as tt,B as xt}from"./DSfKzFV1.js";import{b as R,e as ft}from"./BC4TpgBU.js";import{B as $}from"./Dyp1NLoF.js";import{e as yt}from"./BE9PkXKz.js";import{D as ht,G as et}from"./BlJ06z1t.js";import{E as _t}from"./30NlHgQ_.js";import{S as bt}from"./BsX_CrDw.js";import{e as kt,i as wt}from"./Ck5PkeSc.js";import{b as Ct}from"./C-xTH-sp.js";var Pt=U('

ID
Created At
Updated At
Status
Pool Balancer Type
');function qt(L,v){O(v,!1);let a=T(v,"entity",8),g=T(v,"entityType",8);function B(){return`${g().charAt(0).toUpperCase()+g().slice(1)} Information`}function n(){if(!a().endpoint?.base_url)return"#";switch(g()){case"repository":const d=a();return`${a().endpoint.base_url}/${d.owner}/${a().name}`;case"organization":return`${a().endpoint.base_url}/${a().name}`;case"enterprise":return`${a().endpoint.base_url}/enterprises/${a().name}`;default:return"#"}}function E(){return`${g().charAt(0).toUpperCase()+g().slice(1)} URL`}function V(){const d=a().pool_balancing_type;if(!d||d===""||d==="none")return"Round Robin (default)";switch(d){case"roundrobin":return"Round Robin";case"pack":return"Pack";default:return d}}K();var m=Pt(),x=e(m),_=e(x),I=e(_,!0);t(_);var b=s(_,2),i=e(b),f=s(e(i),2),k=e(f,!0);t(f),t(i);var u=s(i,2),D=s(e(u),2),M=e(D,!0);t(D),t(u);var w=s(u,2),S=s(e(w),2),G=e(S,!0);t(S),t(w);var r=s(w,2),C=s(e(r),2),l=e(C);{var A=d=>{$(d,{variant:"success",text:"Running"})},j=d=>{$(d,{variant:"error",text:"Stopped"})};H(l,d=>{c(a()),o(()=>a().pool_manager_status?.running)?d(A):d(j,!1)})}t(C),t(r);var N=s(r,2),z=s(e(N),2),y=e(z,!0);t(z),t(N);var q=s(N,2),F=e(q),st=e(F,!0);t(F);var X=s(F,2),J=e(X),ot=e(J);at(),t(J),t(X),t(q),t(b),t(x),t(m),W((d,it,dt,nt,lt,vt,ct)=>{p(I,d),p(k,(c(a()),o(()=>a().id))),p(M,it),p(G,dt),p(y,nt),p(st,lt),rt(J,"href",vt),p(ot,`${ct??""} `)},[()=>o(B),()=>(c(R),c(a()),o(()=>R(a().created_at))),()=>(c(R),c(a()),o(()=>R(a().updated_at))),()=>o(V),()=>o(E),()=>o(n),()=>o(n)]),h(L,m),Q()}var Tt=U('

No pools configured

'),Et=U('');function Wt(L,v){O(v,!1);const[a,g]=pt(),B=()=>gt(yt,"$eagerCache",a);let n=T(v,"pools",8),E=T(v,"entityType",8),V=T(v,"entityId",8,""),m=T(v,"entityName",8,"");const x=mt();function _(){x("addPool",{entityType:E(),entityId:V(),entityName:m()})}const I=[{key:"id",title:"ID",flexible:!0,cellComponent:_t,cellProps:{entityType:"pool",showId:!0,fontMono:!0}},{key:"image",title:"Image",flexible:!0,cellComponent:et,cellProps:{field:"image",type:"code",showTitle:!0}},{key:"provider",title:"Provider",cellComponent:et,cellProps:{field:"provider_name"}},{key:"status",title:"Status",cellComponent:bt,cellProps:{statusType:"enabled"}}],b={entityType:"pool",primaryText:{field:"id",isClickable:!0,href:"/pools/{id}",useId:!0,isMonospace:!0},secondaryText:{field:"entity_name",computedValue:r=>ft(r,B())},badges:[{type:"custom",value:r=>({variant:r.enabled?"success":"error",text:r.enabled?"Enabled":"Disabled"})}]};K();var i=Et(),f=e(i),k=e(f),u=e(k),D=e(u);t(u);var M=s(u,2);t(k);var w=s(k,2);{var S=r=>{var C=Tt(),l=s(e(C),4),A=e(l);t(l);var j=s(l,2),N=e(j);xt(N,{variant:"primary",size:"sm",$$events:{click:_},children:(z,y)=>{at();var q=ut("Add Pool");h(z,q)},$$slots:{default:!0}}),t(j),t(C),W(()=>p(A,`No pools configured for this ${E()??""}.`)),h(r,C)},G=r=>{ht(r,{get columns(){return I},get data(){return n()},loading:!1,error:"",searchTerm:"",showSearch:!1,showPagination:!1,currentPage:1,get perPage(){return c(n()),o(()=>n().length)},totalPages:1,get totalItems(){return c(n()),o(()=>n().length)},itemName:"pools",emptyTitle:"No pools configured",get emptyMessage(){return`No pools configured for this ${E()??""}.`},emptyIconType:"cog",get mobileCardConfig(){return b}})};H(w,r=>{c(n()),o(()=>n().length===0)?r(S):r(G,!1)})}t(f),t(i),W(r=>{p(D,`Pools (${c(n()),o(()=>n().length)??""})`),rt(M,"href",r)},[()=>(c(tt),o(()=>tt("/pools")))]),h(L,i),Q(),g()}var It=U('

'),Nt=U('

Events

'),Bt=U('

Events

No events available

');function Ft(L,v){O(v,!1);let a=T(v,"events",8),g=T(v,"eventsContainer",12,void 0);K();var B=Y(),n=Z(B);{var E=m=>{var x=Nt(),_=e(x),I=s(e(_),2);kt(I,5,a,wt,(b,i)=>{var f=It(),k=e(f),u=e(k),D=e(u,!0);t(u);var M=s(u,2),w=e(M);{var S=l=>{$(l,{variant:"error",text:"Error"})},G=l=>{var A=Y(),j=Z(A);{var N=y=>{$(y,{variant:"warning",text:"Warning"})},z=y=>{$(y,{variant:"info",text:"Info"})};H(j,y=>{P(i),o(()=>(P(i).event_level||"info").toLowerCase()==="warning")?y(N):y(z,!1)},!0)}h(l,A)};H(w,l=>{P(i),o(()=>(P(i).event_level||"info").toLowerCase()==="error")?l(S):l(G,!1)})}var r=s(w,2),C=e(r,!0);t(r),t(M),t(k),t(f),W(l=>{p(D,(P(i),o(()=>P(i).message))),p(C,l)},[()=>(c(R),P(i),o(()=>R(P(i).created_at)))]),h(b,f)}),t(I),Ct(I,b=>g(b),()=>g()),t(_),t(x),h(m,x)},V=m=>{var x=Bt();h(m,x)};H(n,m=>{c(a()),o(()=>a()&&a().length>0)?m(E):m(V,!1)})}h(L,B),Q()}export{qt as E,Wt as P,Ft as a}; diff --git a/webapp/assets/_app/immutable/chunks/BlJ06z1t.js b/webapp/assets/_app/immutable/chunks/BlJ06z1t.js new file mode 100644 index 00000000..bc5a6fcf --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/BlJ06z1t.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as me}from"./TJn6xDN9.js";import{aj as mt,aU as pt,aV as xt,J as yt,L as kt,M as _t,N as bt,O as wt,at as Mt,H as Xe,I as Pt,Q as Ct,P as jt,a1 as Tt,p as fe,l as je,k as Te,m as ze,q as y,h as Ne,C as _e,d as s,g as e,r as n,t as U,b as i,c as ge,f as I,s as P,e as q,z as Ee,D as Ce,A as G,a as R,E as be,i as Fe,y as zt,v as X,u}from"./DniTuB_0.js";import{p as l,i as j,b as It}from"./DbNhg6mG.js";import{e as oe,i as ue}from"./Ck5PkeSc.js";import{h as Ge,s as ke,B as ye,r as St,c as De,b as Ht,d as Lt,f as Ye,k as Bt}from"./DSfKzFV1.js";import{c as At}from"./BZLWIdPw.js";import{b as Et}from"./CCQwxxp9.js";import{A as tt}from"./DGZKesLN.js";import{B as Dt}from"./Dyp1NLoF.js";import{g as $e,b as Nt}from"./BC4TpgBU.js";function et(A,r,v){Xe&&Pt();var a=A,t=Mt,x,m,g=null,c=mt()?pt:xt;function p(){x&&Ct(x),g!==null&&(g.lastChild.remove(),a.before(g),g=null),x=m}yt(()=>{if(c(t,t=r())){var k=a,B=wt();B&&(g=document.createDocumentFragment(),g.append(k=kt())),m=_t(()=>v(k)),B?bt.add_callback(p):p()}}),Xe&&(a=jt)}function Ae(A,r){var v=A.$$events?.[r.type],a=Tt(v)?v.slice():v==null?[]:[v];for(var t of a)t.call(this,r)}var Vt=_e('');function Rt(A,r){fe(r,!1);const v=ze();let a=l(r,"name",8),t=l(r,"class",8,"h-5 w-5");const x={plus:'',edit:'',delete:'',view:'',close:'',check:'',x:'',"chevron-left":'',"chevron-right":'',"chevron-down":'',"chevron-up":'',search:'',refresh:'',menu:'',settings:'',"check-circle":'',"x-circle":'',"exclamation-circle":'',"information-circle":'',loading:'',sun:'',moon:'',document:'',folder:''};je(()=>y(a()),()=>{Te(v,x[a()]||"")}),Ne();var m=Vt(),g=s(m);Ge(g,()=>e(v),!0),n(m),U(()=>ke(m,0,`${t()}`)),i(A,m),ge()}var Ut=I('

');function qt(A,r){let v=l(r,"message",8,"Loading...");var a=Ut(),t=P(s(a),2),x=s(t,!0);n(t),n(a),U(()=>q(x,v())),i(A,a)}var Ot=I('
'),Ft=I('

');function Gt(A,r){let v=l(r,"title",8,"Error"),a=l(r,"message",8),t=l(r,"showRetry",8,!1),x=l(r,"onRetry",8,void 0);var m=Ft(),g=s(m),c=s(g),p=P(s(c),2),k=s(p),B=s(k,!0);n(k);var O=P(k,2),N=s(O,!0);n(O);var E=P(O,2);{var J=K=>{var T=Ot(),w=s(T);ye(w,{variant:"secondary",size:"sm",icon:"",class:"text-red-700 dark:text-red-200 bg-red-100 dark:bg-red-800 hover:bg-red-200 dark:hover:bg-red-700 focus:outline-none focus:bg-red-200 dark:focus:bg-red-700",$$events:{click(...V){x()?.apply(this,V)}},children:(V,C)=>{Ee();var Z=Ce("Retry");i(V,Z)},$$slots:{default:!0}}),n(T),i(K,T)};j(E,K=>{t()&&x()&&K(J)})}n(p),n(c),n(g),n(m),U(()=>{q(B,v()),q(N,a())}),i(A,m)}var Jt=_e(''),Kt=_e(''),Qt=_e(''),Zt=_e(''),Wt=_e(''),Xt=_e(''),Yt=I('

');function $t(A,r){let v=l(r,"title",8),a=l(r,"message",8),t=l(r,"iconType",8,"document");var x=Yt(),m=s(x);{var g=N=>{var E=Jt();i(N,E)},c=N=>{var E=G(),J=R(E);{var K=w=>{var V=Kt();i(w,V)},T=w=>{var V=G(),C=R(V);{var Z=d=>{var f=Qt();i(d,f)},o=d=>{var f=G(),h=R(f);{var S=M=>{var D=Zt();i(M,D)},W=M=>{var D=G(),H=R(D);{var z=L=>{var Q=Wt();i(L,Q)},b=L=>{var Q=G(),$=R(Q);{var te=ee=>{var ce=Xt();i(ee,ce)};j($,ee=>{t()==="settings"&&ee(te)},!0)}i(L,Q)};j(H,L=>{t()==="key"?L(z):L(b,!1)},!0)}i(M,D)};j(h,M=>{t()==="cog"?M(S):M(W,!1)},!0)}i(d,f)};j(C,d=>{t()==="users"?d(Z):d(o,!1)},!0)}i(w,V)};j(J,w=>{t()==="building"?w(K):w(T,!1)},!0)}i(N,E)};j(m,N=>{t()==="document"?N(g):N(c,!1)})}var p=P(m,2),k=s(p,!0);n(p);var B=P(p,2),O=s(B,!0);n(B),n(x),U(()=>{q(k,v()),q(O,a())}),i(A,x)}var er=I('
');function rt(A,r){fe(r,!1);let v=l(r,"value",12,""),a=l(r,"placeholder",8,"Search..."),t=l(r,"disabled",8,!1);const x=be();function m(){x("input",v())}me();var g=er(),c=s(g),p=s(c);Rt(p,{name:"search",class:"h-5 w-5 text-gray-400"}),n(c);var k=P(c,2);St(k),n(g),U(()=>{De(k,"placeholder",a()),k.disabled=t()}),Et(k,v),Fe("input",k,m),Fe("keydown",k,function(B){Ae.call(this,r,B)}),i(A,g),ge()}var tr=I(""),rr=I('
'),ar=I('
');function nr(A,r){fe(r,!1);let v=l(r,"searchTerm",12,""),a=l(r,"perPage",12,25),t=l(r,"placeholder",8,"Search..."),x=l(r,"showPerPageSelector",8,!0),m=l(r,"perPageOptions",24,()=>[25,50,100]);const g=be();function c(){g("search",{term:v()})}function p(){g("perPageChange",{perPage:a()})}me();var k=ar(),B=s(k),O=s(B),N=s(O),E=P(s(N),2);rt(E,{get placeholder(){return t()},get value(){return v()},set value(T){v(T)},$$events:{input:c},$$legacy:!0}),n(N),n(O);var J=P(O,2);{var K=T=>{var w=rr(),V=s(w),C=P(s(V),2);U(()=>{a(),zt(()=>{m()})}),oe(C,5,m,ue,(Z,o)=>{var d=tr(),f=s(d,!0);n(d);var h={};U(()=>{q(f,e(o)),h!==(h=e(o))&&(d.value=(d.__value=e(o))??"")}),i(Z,d)}),n(C),n(V),n(w),Ht(C,a),Fe("change",C,p),i(T,w)};j(J,T=>{x()&&T(K)})}n(B),n(k),i(A,k),ge()}var ir=I('

'),lr=I('
');function sr(A,r){fe(r,!1);let v=l(r,"value",12,""),a=l(r,"placeholder",8,"Search..."),t=l(r,"disabled",8,!1),x=l(r,"helpText",8,""),m=l(r,"showButton",8,!0);const g=be();function c(){g("search",v())}function p(){g("search",v())}function k(C){C.key==="Enter"&&c()}me();var B=lr(),O=s(B),N=s(O),E=s(N),J=s(E);rt(J,{get placeholder(){return a()},get disabled(){return t()},get value(){return v()},set value(C){v(C)},$$events:{input:p,keydown:k},$$legacy:!0}),n(E);var K=P(E,2);{var T=C=>{ye(C,{variant:"secondary",get disabled(){return t()},$$events:{click:c},children:(Z,o)=>{Ee();var d=Ce("Search");i(Z,d)},$$slots:{default:!0}})};j(K,C=>{m()&&C(T)})}n(N);var w=P(N,2);{var V=C=>{var Z=ir(),o=s(Z,!0);n(Z),U(()=>q(o,x())),i(C,Z)};j(w,C=>{x()&&C(V)})}n(O),n(B),i(A,B),ge()}var or=I('Showing to of ',1),dr=I('
');function vr(A,r){fe(r,!1);const v=ze(),a=ze();let t=l(r,"currentPage",8,1),x=l(r,"totalPages",8,1),m=l(r,"perPage",8,25),g=l(r,"totalItems",8,0),c=l(r,"itemName",8,"results");const p=be();function k(E){E>=1&&E<=x()&&E!==t()&&p("pageChange",{page:E})}je(()=>(y(g()),y(t()),y(m())),()=>{Te(v,g()===0?0:(t()-1)*m()+1)}),je(()=>(y(t()),y(m()),y(g())),()=>{Te(a,Math.min(t()*m(),g()))}),Ne(),me();var B=G(),O=R(B);{var N=E=>{var J=dr(),K=s(J),T=s(K);{let H=X(()=>t()===1);ye(T,{variant:"secondary",get disabled(){return e(H)},$$events:{click:()=>k(t()-1)},children:(z,b)=>{Ee();var L=Ce("Previous");i(z,L)},$$slots:{default:!0}})}var w=P(T,2);{let H=X(()=>t()===x());ye(w,{variant:"secondary",get disabled(){return e(H)},class:"ml-3",$$events:{click:()=>k(t()+1)},children:(z,b)=>{Ee();var L=Ce("Next");i(z,L)},$$slots:{default:!0}})}n(K);var V=P(K,2),C=s(V),Z=s(C),o=s(Z);{var d=H=>{var z=Ce();U(()=>q(z,`No ${c()??""}`)),i(H,z)},f=H=>{var z=or(),b=P(R(z)),L=s(b,!0);n(b);var Q=P(b,2),$=s(Q,!0);n(Q);var te=P(Q,2),ee=s(te,!0);n(te);var ce=P(te);U(()=>{q(L,e(v)),q($,e(a)),q(ee,g()),q(ce,` ${c()??""}`)}),i(H,z)};j(o,H=>{g()===0?H(d):H(f,!1)})}n(Z),n(C);var h=P(C,2),S=s(h),W=s(S);{let H=X(()=>t()===1);ye(W,{variant:"secondary",size:"sm",get disabled(){return e(H)},class:"rounded-r-none","aria-label":"Previous page",icon:"",$$events:{click:()=>k(t()-1)}})}var M=P(W,2);oe(M,1,()=>(y(x()),u(()=>Array(x()))),ue,(H,z,b)=>{const L=X(()=>b+1);{let Q=X(()=>e(L)===t()?"primary":"secondary");ye(H,{get variant(){return e(Q)},size:"sm",class:"rounded-none border-l-0 first:border-l first:rounded-l-md",$$events:{click:()=>k(e(L))},children:($,te)=>{Ee();var ee=Ce();U(()=>q(ee,e(L))),i($,ee)},$$slots:{default:!0}})}});var D=P(M,2);{let H=X(()=>t()===x());ye(D,{variant:"secondary",size:"sm",get disabled(){return e(H)},class:"rounded-l-none","aria-label":"Next page",icon:"",$$events:{click:()=>k(t()+1)}})}n(S),n(h),n(V),n(J),i(E,J)};j(O,E=>{x()>1&&E(N)})}i(A,B),ge()}var cr=I('

'),ur=I('

'),fr=I('

'),gr=I('

'),hr=I('
'),mr=I('
'),pr=I('
'),xr=I(" "),yr=I('
'),kr=I('
');function _r(A,r){fe(r,!1);const v=be();let a=l(r,"item",8),t=l(r,"config",8);function x(){if(!a())return"Unknown";const{field:o,useId:d,showOwner:f}=t().primaryText,h=a()[o];return d&&h?`${h.slice(0,8)}...`:f&&a().owner&&a().name?`${a().owner}/${a().name}`:h||"Unknown"}function m(){if(!t().secondaryText)return"";const{field:o,computedValue:d}=t().secondaryText;return d!==void 0?typeof d=="function"?d(a()):d:a()?.[o]||""}function g(){if(!t().primaryText.href||!a())return"#";let o=t().primaryText.href;return o=o.replace("{id}",a().id||""),o=o.replace("{name}",encodeURIComponent(a().name||"")),Lt(o)}function c(o){if(!a())return;const d=t().actions?.find(f=>f.type===o);d&&d.handler(a()),o==="edit"?v("edit",{item:a()}):o==="delete"?v("delete",{item:a()}):o==="clone"?v("clone",{item:a()}):v("action",{type:o,item:a()})}function p(o){switch(o.type){case"status":if(t().entityType==="instance"){const f=a()?.[o.field]||"unknown";let h="neutral",S=f.charAt(0).toUpperCase()+f.slice(1);return o.field==="status"?h=f==="running"?"success":f==="pending"||f==="creating"?"info":f==="failed"||f==="error"?"error":"neutral":o.field==="runner_status"&&(h=f==="idle"?"info":f==="active"||f==="running"?"success":f==="failed"||f==="error"?"error":"neutral"),{variant:h,text:S}}return{variant:"neutral",text:a()?.[o.field]||"Unknown"};case"forge":return{variant:"neutral",text:a()?.[o.field]||"unknown"};case"auth":const d=a()?.[o.field]||"pat";return{variant:d==="pat"?"success":"info",text:d.toUpperCase()};case"custom":if(typeof o.value=="function"){const f=o.value(a());return{variant:f?.variant||"neutral",text:f?.text||""}}return{variant:o.value?.variant||"neutral",text:o.value?.text||""};default:return{variant:"neutral",text:""}}}me();var k=kr(),B=s(k),O=s(B);{var N=o=>{var d=ur(),f=s(d),h=s(f,!0);n(f);var S=P(f,2);{var W=M=>{var D=cr(),H=s(D,!0);n(D),U(z=>q(H,z),[()=>u(m)]),i(M,D)};j(S,M=>{y(t()),u(()=>t().secondaryText)&&M(W)})}n(d),U((M,D)=>{De(d,"href",M),ke(f,1,`text-sm font-medium text-blue-600 dark:text-blue-400 hover:text-blue-500 dark:hover:text-blue-300 truncate${y(t()),u(()=>t().primaryText.isMonospace?" font-mono":"")??""}`),q(h,D)},[()=>u(g),()=>u(x)]),i(o,d)},E=o=>{var d=gr(),f=s(d),h=s(f,!0);n(f);var S=P(f,2);{var W=M=>{var D=fr(),H=s(D,!0);n(D),U(z=>q(H,z),[()=>u(m)]),i(M,D)};j(S,M=>{y(t()),u(()=>t().secondaryText)&&M(W)})}n(d),U(M=>q(h,M),[()=>u(x)]),i(o,d)};j(O,o=>{y(t()),u(()=>t().primaryText.isClickable)?o(N):o(E,!1)})}var J=P(O,2);{var K=o=>{var d=pr(),f=s(d);{var h=M=>{var D=G(),H=R(D);oe(H,1,()=>(y(t()),u(()=>t().customInfo)),ue,(z,b)=>{const L=X(()=>(e(b),y(a()),u(()=>typeof e(b).icon=="function"?e(b).icon(a()):e(b).icon))),Q=X(()=>(e(b),y(a()),u(()=>typeof e(b).text=="function"?e(b).text(a()):e(b).text)));var $=hr(),te=s($);{var ee=we=>{var Ie=G(),Re=R(Ie);Ge(Re,()=>e(L)),i(we,Ie)};j(te,we=>{e(L)&&we(ee)})}var ce=P(te,2),Ve=s(ce,!0);n(ce),n($),U(()=>q(Ve,e(Q))),i(z,$)}),i(M,D)};j(f,M=>{y(t()),u(()=>t().customInfo)&&M(h)})}var S=P(f,2);{var W=M=>{var D=G(),H=R(D);oe(H,1,()=>(y(t()),u(()=>t().badges.filter(z=>z.type==="forge"))),ue,(z,b)=>{var L=mr(),Q=s(L);Ge(Q,()=>(y($e),e(b),y(a()),u(()=>$e(e(b).field?a()?.[e(b).field]||"unknown":a()?.endpoint?.endpoint_type||"unknown"))));var $=P(Q,2),te=s($,!0);n($),n(L),U(()=>q(te,(y(a()),u(()=>a()?.endpoint?.name||"Unknown")))),i(z,L)}),i(M,D)};j(S,M=>{y(t()),u(()=>t().badges)&&M(W)})}n(d),i(o,d)};j(J,o=>{y(t()),u(()=>t().customInfo||t().badges?.some(d=>d.type==="forge"))&&o(K)})}n(B);var T=P(B,2),w=s(T);{var V=o=>{var d=G(),f=R(d);oe(f,1,()=>(y(t()),u(()=>t().badges.filter(h=>h.type!=="forge"))),ue,(h,S)=>{var W=G(),M=R(W);{var D=z=>{const b=X(()=>(e(S),u(()=>p(e(S)))));var L=xr(),Q=s(L,!0);n(L),U(()=>{ke(L,1,`inline-flex items-center rounded-full px-2 py-1 text-xs font-medium ring-1 ring-inset ${y(e(b)),u(()=>e(b).variant==="success"?"bg-green-50 text-green-700 ring-green-600/20 dark:bg-green-900/50 dark:text-green-300 dark:ring-green-400/20":e(b).variant==="info"?"bg-blue-50 text-blue-700 ring-blue-600/20 dark:bg-blue-900/50 dark:text-blue-300 dark:ring-blue-400/20":e(b).variant==="error"?"bg-red-50 text-red-700 ring-red-600/20 dark:bg-red-900/50 dark:text-red-300 dark:ring-red-400/20":"bg-gray-50 text-gray-700 ring-gray-600/20 dark:bg-gray-900/50 dark:text-gray-300 dark:ring-gray-400/20")??""}`),q(Q,(y(e(b)),u(()=>e(b).text)))}),i(z,L)},H=z=>{const b=X(()=>(e(S),u(()=>p(e(S)))));Dt(z,{get variant(){return y(e(b)),u(()=>e(b).variant)},get text(){return y(e(b)),u(()=>e(b).text)}})};j(M,z=>{e(S),u(()=>e(S).type==="status")?z(D):z(H,!1)})}i(h,W)}),i(o,d)};j(w,o=>{y(t()),u(()=>t().badges)&&o(V)})}var C=P(w,2);{var Z=o=>{var d=yr();oe(d,5,()=>(y(t()),u(()=>t().actions)),ue,(f,h)=>{{let S=X(()=>(e(h),u(()=>e(h).type==="clone"?"copy":e(h).type))),W=X(()=>(e(h),y(t()),u(()=>e(h).type==="edit"?`Edit ${t().entityType}`:e(h).type==="delete"?`Delete ${t().entityType}`:e(h).type==="clone"?`Clone ${t().entityType}`:e(h).type))),M=X(()=>(e(h),y(t()),u(()=>e(h).type==="edit"?`Edit ${t().entityType}`:e(h).type==="delete"?`Delete ${t().entityType}`:e(h).type==="clone"?`Clone ${t().entityType}`:e(h).type)));tt(f,{get action(){return e(S)},size:"sm",get title(){return e(W)},get ariaLabel(){return e(M)},$$events:{click:()=>c(e(h).type)}})}}),n(d),i(o,d)};j(C,o=>{y(t()),u(()=>t().actions)&&o(Z)})}n(T),n(k),i(A,k),ge()}var br=I('
'),wr=I('
'),Mr=I("
"),Pr=I("
"),Cr=I(' ',1),jr=I('
');function qr(A,r){fe(r,!1);const v=ze();let a=l(r,"columns",24,()=>[]),t=l(r,"data",24,()=>[]),x=l(r,"loading",8,!1),m=l(r,"error",8,""),g=l(r,"totalItems",8,0),c=l(r,"itemName",8,"results"),p=l(r,"searchTerm",12,""),k=l(r,"searchPlaceholder",8,"Search..."),B=l(r,"showSearch",8,!0),O=l(r,"searchType",8,"client"),N=l(r,"searchHelpText",8,""),E=l(r,"currentPage",8,1),J=l(r,"perPage",12,25),K=l(r,"totalPages",8,1),T=l(r,"showPagination",8,!0),w=l(r,"showPerPageSelector",8,!0),V=l(r,"emptyTitle",8,"No items found"),C=l(r,"emptyMessage",8,""),Z=l(r,"emptyIconType",8,"document"),o=l(r,"errorTitle",8,"Error loading data"),d=l(r,"showRetry",8,!1),f=l(r,"showMobileCards",8,!0),h=l(r,"mobileCardConfig",8,null);const S=be();function W(_){const de=typeof _.detail=="string"?_.detail:_.detail.term;S("search",{term:de})}function M(_){S("pageChange",_.detail)}function D(_){S("perPageChange",_.detail)}function H(){S("retry")}function z(_){S("edit",_.detail)}function b(_){S("delete",_.detail)}function L(_){S("clone",_.detail)}function Q(_){S("action",_.detail)}function $(_){const de="px-6 py-4 text-sm",Se=_.align==="right"?"text-right":_.align==="center"?"text-center":"text-left",He=_.key==="actions"?"font-medium":"text-gray-900 dark:text-white",Le=_.flexible?"min-w-0":"";return`${de} ${Se} ${He} ${Le}`.trim()}function te(){return a().map(_=>_.flexible?`${_.flexRatio||1}fr`:"auto").join(" ")}je(()=>(y(C()),y(p()),y(c())),()=>{Te(v,C()||(p()?`No items found matching "${p()}"`:`No ${c()} found`))}),Ne(),me();var ee=jr(),ce=s(ee);{var Ve=_=>{var de=G(),Se=R(de);{var He=re=>{sr(re,{get placeholder(){return k()},get helpText(){return N()},showButton:!1,get value(){return p()},set value(ve){p(ve)},$$events:{search:W},$$legacy:!0})},Le=re=>{nr(re,{get placeholder(){return k()},get showPerPageSelector(){return w()},get searchTerm(){return p()},set searchTerm(ve){p(ve)},get perPage(){return J()},set perPage(ve){J(ve)},$$events:{search:W,perPageChange:D},$$legacy:!0})};j(Se,re=>{O()==="backend"?re(He):re(Le,!1)})}i(_,de)};j(ce,_=>{B()&&_(Ve)})}var we=P(ce,2),Ie=s(we);{var Re=_=>{qt(_,{get message(){return`Loading ${c()??""}...`}})},at=_=>{var de=G(),Se=R(de);{var He=re=>{{let ve=X(()=>d()?H:void 0);Gt(re,{get title(){return o()},get message(){return m()},get showRetry(){return d()},get onRetry(){return e(ve)}})}},Le=re=>{var ve=G(),lt=R(ve);{var st=Me=>{$t(Me,{get title(){return V()},get message(){return e(v)},get iconType(){return Z()}})},ot=Me=>{var Je=Cr(),Ke=R(Je);{var dt=ne=>{var F=wr();oe(F,7,t,(le,ae)=>le.id||le.name||ae,(le,ae,qe)=>{var Be=br(),Y=s(Be);{var Pe=he=>{var pe=G(),ie=R(pe);et(ie,()=>(e(ae),u(()=>`${e(ae).id||e(ae).name}-${e(ae).updated_at}-mobile`)),xe=>{_r(xe,{get item(){return e(ae)},get config(){return h()},$$events:{edit(se){Ae.call(this,r,se)},delete(se){Ae.call(this,r,se)},clone(se){Ae.call(this,r,se)},action(se){Ae.call(this,r,se)}}})}),i(he,pe)},Oe=he=>{var pe=G(),ie=R(pe);Ye(ie,r,"mobile-card",{get item(){return e(ae)},get index(){return e(qe)}}),i(he,pe)};j(Y,he=>{h()?he(Pe):he(Oe,!1)})}n(Be),i(le,Be)}),n(F),i(ne,F)};j(Ke,ne=>{f()&&ne(dt)})}var Qe=P(Ke,2),Ue=s(Qe),Ze=s(Ue);oe(Ze,1,a,ue,(ne,F)=>{var le=Mr(),ae=s(le,!0);n(le),U(()=>{ke(le,1,`px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider bg-gray-50 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600 ${e(F),u(()=>e(F).align==="right"?"text-right":e(F).align==="center"?"text-center":"text-left")??""}`),q(ae,(e(F),u(()=>e(F).title)))}),i(ne,le)});var vt=P(Ze,2);oe(vt,3,t,(ne,F)=>ne.id||ne.name||F,(ne,F,le)=>{var ae=G(),qe=R(ae);oe(qe,1,a,ue,(Be,Y)=>{var Pe=Pr(),Oe=s(Pe);{var he=ie=>{var xe=G(),se=R(xe);et(se,()=>(e(F),e(Y),u(()=>`${e(F).id||e(F).name}-${e(F).updated_at}-${e(Y).key}`)),ct=>{var We=G(),ut=R(We);{let ft=X(()=>typeof e(Y).cellProps=="function"?e(Y).cellProps(e(F)):e(Y).cellProps);At(ut,()=>e(Y).cellComponent,(gt,ht)=>{ht(gt,It({get item(){return e(F)}},()=>e(ft),{$$events:{edit:z,delete:b,clone:L,action:Q}}))})}i(ct,We)}),i(ie,xe)},pe=ie=>{var xe=G(),se=R(xe);Ye(se,r,"cell",{get item(){return e(F)},get column(){return e(Y)},get index(){return e(le)},get value(){return e(F),e(Y),u(()=>e(F)[e(Y).key])}}),i(ie,xe)};j(Oe,ie=>{e(Y),u(()=>e(Y).cellComponent)?ie(he):ie(pe,!1)})}n(Pe),U(ie=>ke(Pe,1,`${ie??""} border-b border-gray-200 dark:border-gray-700`),[()=>(e(Y),u(()=>$(e(Y))))]),i(Be,Pe)}),i(ne,ae)}),n(Ue),n(Qe),U(ne=>Bt(Ue,`grid-template-columns: ${ne??""}`),[()=>u(te)]),i(Me,Je)};j(lt,Me=>{y(t()),u(()=>t().length===0)?Me(st):Me(ot,!1)},!0)}i(re,ve)};j(Se,re=>{m()?re(He):re(Le,!1)},!0)}i(_,de)};j(Ie,_=>{x()?_(Re):_(at,!1)})}var nt=P(Ie,2);{var it=_=>{vr(_,{get currentPage(){return E()},get totalPages(){return K()},get perPage(){return J()},get totalItems(){return g()},get itemName(){return c()},$$events:{pageChange:M}})};j(nt,_=>{y(T()),y(x()),y(m()),y(t()),u(()=>T()&&!x()&&!m()&&t().length>0)&&_(it)})}n(we),n(ee),i(A,ee),ge()}var Tr=I('
');function Or(A,r){fe(r,!1);const v=be();let a=l(r,"item",8),t=l(r,"actions",24,()=>[{type:"edit",title:"Edit",ariaLabel:"Edit item",action:"edit"},{type:"delete",title:"Delete",ariaLabel:"Delete item",action:"delete"}]);function x(g,c){if(!a())return;const p=c||g;p==="edit"?v("edit",{item:a()}):p==="delete"?v("delete",{item:a()}):p==="copy"||p==="clone"?v("clone",{item:a()}):v("action",{type:p,item:a()})}me();var m=Tr();oe(m,5,t,ue,(g,c)=>{{let p=X(()=>(e(c),u(()=>e(c).action==="clone"?"copy":e(c).action||(e(c).type==="edit"?"edit":e(c).type==="delete"?"delete":e(c).type==="copy"?"copy":"view")))),k=X(()=>(e(c),u(()=>e(c).title||(e(c).type==="edit"?"Edit":e(c).type==="delete"?"Delete":e(c).type==="copy"?"Clone":e(c).label)))),B=X(()=>(e(c),u(()=>e(c).ariaLabel||(e(c).type==="edit"?"Edit item":e(c).type==="delete"?"Delete item":e(c).type==="copy"?"Clone item":e(c).label))));tt(g,{get action(){return e(p)},get title(){return e(k)},get ariaLabel(){return e(B)},$$events:{click:()=>x(e(c).type,e(c).action)}})}}),n(m),i(A,m),ge()}var zr=I(" "),Ir=I(" ");function Fr(A,r){fe(r,!1);const v=ze(),a=ze();let t=l(r,"item",8),x=l(r,"field",8,void 0),m=l(r,"getValue",8,void 0),g=l(r,"type",8,"text"),c=l(r,"truncateLength",8,50),p=l(r,"showTitle",8,!1);function k(){return t()?m()?m()(t()):x()&&x().split(".").reduce((T,w)=>T?.[w],t())||"":""}function B(){return g()==="date"?Nt(e(v)):g()==="truncated"&&e(v).length>c()?`${e(v).slice(0,c())}...`:e(v)}function O(){switch(g()){case"code":return"inline-block max-w-full truncate bg-gray-100 dark:bg-gray-700 px-2 py-1 rounded text-xs font-mono";case"description":return"block w-full truncate text-sm text-gray-500 dark:text-gray-300";case"date":return"block w-full truncate text-sm text-gray-900 dark:text-white font-mono";default:return"block w-full truncate text-sm text-gray-900 dark:text-white"}}je(()=>{},()=>{Te(v,k())}),je(()=>{},()=>{Te(a,B())}),Ne(),me();var N=G(),E=R(N);{var J=T=>{var w=zr(),V=s(w,!0);n(w),U(C=>{ke(w,1,`${C??""} ${p()?"cursor-default":""}`),De(w,"title",p()?e(v):""),q(V,e(a))},[()=>u(O)]),i(T,w)},K=T=>{var w=Ir(),V=s(w,!0);n(w),U(C=>{ke(w,1,`${C??""} ${p()?"cursor-default":""}`),De(w,"title",p()?e(v):""),q(V,e(a))},[()=>u(O)]),i(T,w)};j(E,T=>{g()==="code"?T(J):T(K,!1)})}i(A,N),ge()}export{Or as A,qr as D,Fr as G,qt as L,et as k}; diff --git a/webapp/assets/_app/immutable/chunks/BsX_CrDw.js b/webapp/assets/_app/immutable/chunks/BsX_CrDw.js new file mode 100644 index 00000000..67542f26 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/BsX_CrDw.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as v}from"./TJn6xDN9.js";import{p as w,l as m,q as s,g as r,m as g,h as x,A as h,a as T,b as S,c as A,k,u}from"./DniTuB_0.js";import{k as B}from"./BlJ06z1t.js";import{p}from"./DbNhg6mG.js";import{B as C}from"./Dyp1NLoF.js";import{k as b}from"./BC4TpgBU.js";import{f as E}from"./ow_oMtSd.js";function z(_,i){w(i,!1);const c=g(),n=g();let e=p(i,"item",8),d=p(i,"statusType",8,"entity"),a=p(i,"statusField",8,"status");m(()=>(s(e()),s(a())),()=>{k(c,e()?.[a()]||"unknown")}),m(()=>(s(e()),s(d()),r(c),s(a())),()=>{k(n,(()=>{if(!e())return{variant:"error",text:"Unknown"};switch(d()){case"entity":return b(e());case"instance":let t="secondary";switch(r(c).toLowerCase()){case"running":t="success";break;case"stopped":t="info";break;case"creating":case"pending_create":t="warning";break;case"deleting":case"pending_delete":case"pending_force_delete":t="warning";break;case"error":case"deleted":t="error";break;case"active":case"online":t="success";break;case"idle":t="info";break;case"pending":case"installing":t="warning";break;case"failed":case"terminated":case"offline":t="error";break;case"unknown":default:t="secondary";break}return{variant:t,text:E(r(c))};case"enabled":return{variant:e().enabled?"success":"error",text:e().enabled?"Enabled":"Disabled"};case"custom":const o=e()[a()]||"Unknown";if(a()==="auth-type"){const f=o==="pat"||!o?"pat":"app";return{variant:f==="pat"?"success":"info",text:f==="pat"?"PAT":"App"}}return{variant:"info",text:o};default:return b(e())}})())}),x(),v();var l=h(),y=T(l);B(y,()=>(s(e()),s(a()),u(()=>`${e()?.name||"item"}-${e()?.[a()]||"status"}-${e()?.updated_at||"time"}`)),t=>{C(t,{get variant(){return r(n),u(()=>r(n).variant)},get text(){return r(n),u(()=>r(n).text)}})}),S(_,l),A()}export{z as S}; diff --git a/webapp/assets/_app/immutable/chunks/C1GM4Goa.js b/webapp/assets/_app/immutable/chunks/C1GM4Goa.js deleted file mode 100644 index 92495a7e..00000000 --- a/webapp/assets/_app/immutable/chunks/C1GM4Goa.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as v}from"./TJn6xDN9.js";import{p as w,l as m,q as s,g as r,m as g,h as x,A as h,a as T,b as S,c as A,k,u}from"./DniTuB_0.js";import{k as B}from"./CKaB5fL4.js";import{p as d}from"./DbNhg6mG.js";import{k as b,B as C}from"./CTcPpzia.js";import{f as E}from"./ow_oMtSd.js";function j(_,i){w(i,!1);const c=g(),n=g();let e=d(i,"item",8),l=d(i,"statusType",8,"entity"),a=d(i,"statusField",8,"status");m(()=>(s(e()),s(a())),()=>{k(c,e()?.[a()]||"unknown")}),m(()=>(s(e()),s(l()),r(c),s(a())),()=>{k(n,(()=>{if(!e())return{variant:"error",text:"Unknown"};switch(l()){case"entity":return b(e());case"instance":let t="secondary";switch(r(c).toLowerCase()){case"running":t="success";break;case"stopped":t="info";break;case"creating":case"pending_create":t="warning";break;case"deleting":case"pending_delete":case"pending_force_delete":t="warning";break;case"error":case"deleted":t="error";break;case"active":case"online":t="success";break;case"idle":t="info";break;case"pending":case"installing":t="warning";break;case"failed":case"terminated":case"offline":t="error";break;case"unknown":default:t="secondary";break}return{variant:t,text:E(r(c))};case"enabled":return{variant:e().enabled?"success":"error",text:e().enabled?"Enabled":"Disabled"};case"custom":const o=e()[a()]||"Unknown";if(a()==="auth-type"){const f=o==="pat"||!o?"pat":"app";return{variant:f==="pat"?"success":"info",text:f==="pat"?"PAT":"App"}}return{variant:"info",text:o};default:return b(e())}})())}),x(),v();var p=h(),y=T(p);B(y,()=>(s(e()),s(a()),u(()=>`${e()?.name||"item"}-${e()?.[a()]||"status"}-${e()?.updated_at||"time"}`)),t=>{C(t,{get variant(){return r(n),u(()=>r(n).variant)},get text(){return r(n),u(()=>r(n).text)}})}),S(_,p),A()}export{j as S}; diff --git a/webapp/assets/_app/immutable/chunks/Bz3T1MM4.js b/webapp/assets/_app/immutable/chunks/CE0C-N9m.js similarity index 83% rename from webapp/assets/_app/immutable/chunks/Bz3T1MM4.js rename to webapp/assets/_app/immutable/chunks/CE0C-N9m.js index 88e078ea..cfcdeaa5 100644 --- a/webapp/assets/_app/immutable/chunks/Bz3T1MM4.js +++ b/webapp/assets/_app/immutable/chunks/CE0C-N9m.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as _}from"./TJn6xDN9.js";import{p as h,f as x,t as u,b as g,c as k,s as w,d as o,u as d,q as e,r,e as y}from"./DniTuB_0.js";import{h as b}from"./BZ2rxtTc.js";import{p as m}from"./DbNhg6mG.js";import{g as l}from"./CTcPpzia.js";var z=x('
');function U(v,i){h(i,!1);let t=m(i,"item",8),s=m(i,"iconSize",8,"w-5 h-5");_();var a=z(),n=o(a),f=o(n);b(f,()=>(e(l),e(t()),e(s()),d(()=>l(t()?.endpoint?.endpoint_type||t()?.endpoint_type||"unknown",s())))),r(n);var p=w(n,2),c=o(p,!0);r(p),r(a),u(()=>y(c,(e(t()),d(()=>t()?.endpoint?.name||t()?.endpoint_name||t()?.endpoint_type||"Unknown")))),g(v,a),k()}export{U as E}; +import"./DsnmJJEf.js";import{i as _}from"./TJn6xDN9.js";import{p as h,f as x,t as u,b as g,c as k,s as w,d as o,u as d,q as e,r,e as y}from"./DniTuB_0.js";import{h as b}from"./DSfKzFV1.js";import{p as m}from"./DbNhg6mG.js";import{g as l}from"./BC4TpgBU.js";var z=x('
');function U(v,i){h(i,!1);let t=m(i,"item",8),s=m(i,"iconSize",8,"w-5 h-5");_();var a=z(),n=o(a),f=o(n);b(f,()=>(e(l),e(t()),e(s()),d(()=>l(t()?.endpoint?.endpoint_type||t()?.endpoint_type||"unknown",s())))),r(n);var p=w(n,2),c=o(p,!0);r(p),r(a),u(()=>y(c,(e(t()),d(()=>t()?.endpoint?.name||t()?.endpoint_name||t()?.endpoint_type||"Unknown")))),g(v,a),k()}export{U as E}; diff --git a/webapp/assets/_app/immutable/chunks/CHjY0Kaf.js b/webapp/assets/_app/immutable/chunks/CHjY0Kaf.js deleted file mode 100644 index c9ec0c7b..00000000 --- a/webapp/assets/_app/immutable/chunks/CHjY0Kaf.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as u}from"./TJn6xDN9.js";import{p as v,E as m,f as h,d as r,r as d,i,b as k,c as g}from"./DniTuB_0.js";import{i as b}from"./BZ2rxtTc.js";var w=h('');function M(s,t){v(t,!1);const l=m();function n(){l("close")}function c(o){o.stopPropagation()}function f(o){o.key==="Escape"&&l("close")}u();var a=w(),e=r(a),p=r(e);b(p,t,"default",{}),d(e),d(a),i("click",e,c),i("click",a,n),i("keydown",a,f),k(s,a),g()}export{M}; diff --git a/webapp/assets/_app/immutable/chunks/CKaB5fL4.js b/webapp/assets/_app/immutable/chunks/CKaB5fL4.js deleted file mode 100644 index 1354306a..00000000 --- a/webapp/assets/_app/immutable/chunks/CKaB5fL4.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as pe}from"./TJn6xDN9.js";import{aj as gt,aU as ft,aV as ht,J as mt,L as pt,M as xt,N as kt,O as yt,at as _t,H as We,I as bt,Q as wt,P as Mt,a1 as Pt,p as ue,l as we,k as Me,m as Pe,q as p,h as Ee,C as xe,d as s,g as e,r as i,t as R,b as n,c as ge,f as T,s as P,e as U,z as Ae,D as Te,A as F,a as V,E as Ce,i as et,y as Ct,v as Q,u as c}from"./DniTuB_0.js";import{p as d,i as z,b as jt}from"./DbNhg6mG.js";import{e as se,i as ve}from"./Ck5PkeSc.js";import{h as Fe,s as me,B as be,r as zt,c as Be,b as Tt,d as It,i as Xe,j as Lt}from"./BZ2rxtTc.js";import{c as Ht}from"./BZLWIdPw.js";import{b as St}from"./CCQwxxp9.js";import{A as tt}from"./Ok63PiOl.js";import{B as At,g as Ye,b as Bt}from"./CTcPpzia.js";function $e(H,r,g){We&&bt();var a=H,t=_t,x,h,m=null,u=gt()?ft:ht;function I(){x&&wt(x),m!==null&&(m.lastChild.remove(),a.before(m),m=null),x=h}mt(()=>{if(u(t,t=r())){var b=a,S=yt();S&&(m=document.createDocumentFragment(),m.append(b=pt())),h=xt(()=>g(b)),S?kt.add_callback(I):I()}}),We&&(a=Mt)}function Se(H,r){var g=H.$$events?.[r.type],a=Pt(g)?g.slice():g==null?[]:[g];for(var t of a)t.call(this,r)}var Et=xe('');function Dt(H,r){ue(r,!1);const g=Pe();let a=d(r,"name",8),t=d(r,"class",8,"h-5 w-5");const x={plus:'',edit:'',delete:'',view:'',close:'',check:'',x:'',"chevron-left":'',"chevron-right":'',"chevron-down":'',"chevron-up":'',search:'',refresh:'',menu:'',settings:'',"check-circle":'',"x-circle":'',"exclamation-circle":'',"information-circle":'',loading:'',sun:'',moon:'',document:'',folder:''};we(()=>p(a()),()=>{Me(g,x[a()]||"")}),Ee();var h=Et(),m=s(h);Fe(m,()=>e(g),!0),i(h),R(()=>me(h,0,`${t()}`)),n(H,h),ge()}var Nt=T('

');function Vt(H,r){let g=d(r,"message",8,"Loading...");var a=Nt(),t=P(s(a),2),x=s(t,!0);i(t),i(a),R(()=>U(x,g())),n(H,a)}var Rt=T('
'),Ut=T('

');function qt(H,r){let g=d(r,"title",8,"Error"),a=d(r,"message",8),t=d(r,"showRetry",8,!1),x=d(r,"onRetry",8,void 0);var h=Ut(),m=s(h),u=s(m),I=P(s(u),2),b=s(I),S=s(b,!0);i(b);var G=P(b,2),q=s(G,!0);i(G);var E=P(G,2);{var K=A=>{var w=Rt(),B=s(w);be(B,{variant:"secondary",size:"sm",icon:"",class:"text-red-700 dark:text-red-200 bg-red-100 dark:bg-red-800 hover:bg-red-200 dark:hover:bg-red-700 focus:outline-none focus:bg-red-200 dark:focus:bg-red-700",$$events:{click(...N){x()?.apply(this,N)}},children:(N,X)=>{Ae();var ee=Te("Retry");n(N,ee)},$$slots:{default:!0}}),i(w),n(A,w)};z(E,A=>{t()&&x()&&A(K)})}i(I),i(u),i(m),i(h),R(()=>{U(S,g()),U(q,a())}),n(H,h)}var Ot=xe(''),Ft=xe(''),Gt=xe(''),Jt=xe(''),Qt=xe(''),Zt=xe(''),Kt=T('

');function Wt(H,r){let g=d(r,"title",8),a=d(r,"message",8),t=d(r,"iconType",8,"document");var x=Kt(),h=s(x);{var m=q=>{var E=Ot();n(q,E)},u=q=>{var E=F(),K=V(E);{var A=B=>{var N=Ft();n(B,N)},w=B=>{var N=F(),X=V(N);{var ee=v=>{var l=Gt();n(v,l)},o=v=>{var l=F(),f=V(l);{var D=_=>{var L=Jt();n(_,L)},Z=_=>{var L=F(),C=V(L);{var M=j=>{var J=Qt();n(j,J)},k=j=>{var J=F(),W=V(J);{var $=re=>{var le=Zt();n(re,le)};z(W,re=>{t()==="settings"&&re($)},!0)}n(j,J)};z(C,j=>{t()==="key"?j(M):j(k,!1)},!0)}n(_,L)};z(f,_=>{t()==="cog"?_(D):_(Z,!1)},!0)}n(v,l)};z(X,v=>{t()==="users"?v(ee):v(o,!1)},!0)}n(B,N)};z(K,B=>{t()==="building"?B(A):B(w,!1)},!0)}n(q,E)};z(h,q=>{t()==="document"?q(m):q(u,!1)})}var I=P(h,2),b=s(I,!0);i(I);var S=P(I,2),G=s(S,!0);i(S),i(x),R(()=>{U(b,g()),U(G,a())}),n(H,x)}var Xt=T('
');function Yt(H,r){ue(r,!1);let g=d(r,"value",12,""),a=d(r,"placeholder",8,"Search..."),t=d(r,"disabled",8,!1);const x=Ce();function h(){x("input",g())}pe();var m=Xt(),u=s(m),I=s(u);Dt(I,{name:"search",class:"h-5 w-5 text-gray-400"}),i(u);var b=P(u,2);zt(b),i(m),R(()=>{Be(b,"placeholder",a()),b.disabled=t()}),St(b,g),et("input",b,h),n(H,m),ge()}var $t=T(""),er=T('
'),tr=T('
');function rr(H,r){ue(r,!1);let g=d(r,"searchTerm",12,""),a=d(r,"perPage",12,25),t=d(r,"placeholder",8,"Search..."),x=d(r,"showPerPageSelector",8,!0),h=d(r,"perPageOptions",24,()=>[25,50,100]);const m=Ce();function u(){m("search",{term:g()})}function I(){m("perPageChange",{perPage:a()})}pe();var b=tr(),S=s(b),G=s(S),q=s(G),E=P(s(q),2);Yt(E,{get placeholder(){return t()},get value(){return g()},set value(w){g(w)},$$events:{input:u},$$legacy:!0}),i(q),i(G);var K=P(G,2);{var A=w=>{var B=er(),N=s(B),X=P(s(N),2);R(()=>{a(),Ct(()=>{h()})}),se(X,5,h,ve,(ee,o)=>{var v=$t(),l=s(v,!0);i(v);var f={};R(()=>{U(l,e(o)),f!==(f=e(o))&&(v.value=(v.__value=e(o))??"")}),n(ee,v)}),i(X),i(N),i(B),Tt(X,a),et("change",X,I),n(w,B)};z(K,w=>{x()&&w(A)})}i(S),i(b),n(H,b),ge()}var ar=T('Showing to of ',1),nr=T('
');function ir(H,r){ue(r,!1);const g=Pe(),a=Pe();let t=d(r,"currentPage",8,1),x=d(r,"totalPages",8,1),h=d(r,"perPage",8,25),m=d(r,"totalItems",8,0),u=d(r,"itemName",8,"results");const I=Ce();function b(E){E>=1&&E<=x()&&E!==t()&&I("pageChange",{page:E})}we(()=>(p(m()),p(t()),p(h())),()=>{Me(g,m()===0?0:(t()-1)*h()+1)}),we(()=>(p(t()),p(h()),p(m())),()=>{Me(a,Math.min(t()*h(),m()))}),Ee(),pe();var S=F(),G=V(S);{var q=E=>{var K=nr(),A=s(K),w=s(A);{let C=Q(()=>t()===1);be(w,{variant:"secondary",get disabled(){return e(C)},$$events:{click:()=>b(t()-1)},children:(M,k)=>{Ae();var j=Te("Previous");n(M,j)},$$slots:{default:!0}})}var B=P(w,2);{let C=Q(()=>t()===x());be(B,{variant:"secondary",get disabled(){return e(C)},class:"ml-3",$$events:{click:()=>b(t()+1)},children:(M,k)=>{Ae();var j=Te("Next");n(M,j)},$$slots:{default:!0}})}i(A);var N=P(A,2),X=s(N),ee=s(X),o=s(ee);{var v=C=>{var M=Te();R(()=>U(M,`No ${u()??""}`)),n(C,M)},l=C=>{var M=ar(),k=P(V(M)),j=s(k,!0);i(k);var J=P(k,2),W=s(J,!0);i(J);var $=P(J,2),re=s($,!0);i($);var le=P($);R(()=>{U(j,e(g)),U(W,e(a)),U(re,m()),U(le,` ${u()??""}`)}),n(C,M)};z(o,C=>{m()===0?C(v):C(l,!1)})}i(ee),i(X);var f=P(X,2),D=s(f),Z=s(D);{let C=Q(()=>t()===1);be(Z,{variant:"secondary",size:"sm",get disabled(){return e(C)},class:"rounded-r-none","aria-label":"Previous page",icon:"",$$events:{click:()=>b(t()-1)}})}var _=P(Z,2);se(_,1,()=>(p(x()),c(()=>Array(x()))),ve,(C,M,k)=>{const j=Q(()=>k+1);{let J=Q(()=>e(j)===t()?"primary":"secondary");be(C,{get variant(){return e(J)},size:"sm",class:"rounded-none border-l-0 first:border-l first:rounded-l-md",$$events:{click:()=>b(e(j))},children:(W,$)=>{Ae();var re=Te();R(()=>U(re,e(j))),n(W,re)},$$slots:{default:!0}})}});var L=P(_,2);{let C=Q(()=>t()===x());be(L,{variant:"secondary",size:"sm",get disabled(){return e(C)},class:"rounded-l-none","aria-label":"Next page",icon:"",$$events:{click:()=>b(t()+1)}})}i(D),i(f),i(N),i(K),n(E,K)};z(G,E=>{x()>1&&E(q)})}n(H,S),ge()}var or=T('

'),sr=T('

'),lr=T('

'),dr=T('

'),vr=T('
'),cr=T('
'),ur=T('
'),gr=T(" "),fr=T('
'),hr=T('
');function mr(H,r){ue(r,!1);const g=Ce();let a=d(r,"item",8),t=d(r,"config",8);function x(){if(!a())return"Unknown";const{field:o,useId:v,showOwner:l}=t().primaryText,f=a()[o];return v&&f?`${f.slice(0,8)}...`:l&&a().owner&&a().name?`${a().owner}/${a().name}`:f||"Unknown"}function h(){if(!t().secondaryText)return"";const{field:o,computedValue:v}=t().secondaryText;return v!==void 0?typeof v=="function"?v(a()):v:a()?.[o]||""}function m(){if(!t().primaryText.href||!a())return"#";let o=t().primaryText.href;return o=o.replace("{id}",a().id||""),o=o.replace("{name}",encodeURIComponent(a().name||"")),It(o)}function u(o){if(!a())return;const v=t().actions?.find(l=>l.type===o);v&&v.handler(a()),o==="edit"?g("edit",{item:a()}):o==="delete"?g("delete",{item:a()}):o==="clone"?g("clone",{item:a()}):g("action",{type:o,item:a()})}function I(o){switch(o.type){case"status":if(t().entityType==="instance"){const l=a()?.[o.field]||"unknown";let f="neutral",D=l.charAt(0).toUpperCase()+l.slice(1);return o.field==="status"?f=l==="running"?"success":l==="pending"||l==="creating"?"info":l==="failed"||l==="error"?"error":"neutral":o.field==="runner_status"&&(f=l==="idle"?"info":l==="active"||l==="running"?"success":l==="failed"||l==="error"?"error":"neutral"),{variant:f,text:D}}return{variant:"neutral",text:a()?.[o.field]||"Unknown"};case"forge":return{variant:"neutral",text:a()?.[o.field]||"unknown"};case"auth":const v=a()?.[o.field]||"pat";return{variant:v==="pat"?"success":"info",text:v.toUpperCase()};case"custom":if(typeof o.value=="function"){const l=o.value(a());return{variant:l?.variant||"neutral",text:l?.text||""}}return{variant:o.value?.variant||"neutral",text:o.value?.text||""};default:return{variant:"neutral",text:""}}}pe();var b=hr(),S=s(b),G=s(S);{var q=o=>{var v=sr(),l=s(v),f=s(l,!0);i(l);var D=P(l,2);{var Z=_=>{var L=or(),C=s(L,!0);i(L),R(M=>U(C,M),[()=>c(h)]),n(_,L)};z(D,_=>{p(t()),c(()=>t().secondaryText)&&_(Z)})}i(v),R((_,L)=>{Be(v,"href",_),me(l,1,`text-sm font-medium text-blue-600 dark:text-blue-400 hover:text-blue-500 dark:hover:text-blue-300 truncate${p(t()),c(()=>t().primaryText.isMonospace?" font-mono":"")??""}`),U(f,L)},[()=>c(m),()=>c(x)]),n(o,v)},E=o=>{var v=dr(),l=s(v),f=s(l,!0);i(l);var D=P(l,2);{var Z=_=>{var L=lr(),C=s(L,!0);i(L),R(M=>U(C,M),[()=>c(h)]),n(_,L)};z(D,_=>{p(t()),c(()=>t().secondaryText)&&_(Z)})}i(v),R(_=>U(f,_),[()=>c(x)]),n(o,v)};z(G,o=>{p(t()),c(()=>t().primaryText.isClickable)?o(q):o(E,!1)})}var K=P(G,2);{var A=o=>{var v=ur(),l=s(v);{var f=_=>{var L=F(),C=V(L);se(C,1,()=>(p(t()),c(()=>t().customInfo)),ve,(M,k)=>{const j=Q(()=>(e(k),p(a()),c(()=>typeof e(k).icon=="function"?e(k).icon(a()):e(k).icon))),J=Q(()=>(e(k),p(a()),c(()=>typeof e(k).text=="function"?e(k).text(a()):e(k).text)));var W=vr(),$=s(W);{var re=je=>{var Le=F(),De=V(Le);Fe(De,()=>e(j)),n(je,Le)};z($,je=>{e(j)&&je(re)})}var le=P($,2),Ie=s(le,!0);i(le),i(W),R(()=>U(Ie,e(J))),n(M,W)}),n(_,L)};z(l,_=>{p(t()),c(()=>t().customInfo)&&_(f)})}var D=P(l,2);{var Z=_=>{var L=F(),C=V(L);se(C,1,()=>(p(t()),c(()=>t().badges.filter(M=>M.type==="forge"))),ve,(M,k)=>{var j=cr(),J=s(j);Fe(J,()=>(p(Ye),e(k),p(a()),c(()=>Ye(e(k).field?a()?.[e(k).field]||"unknown":a()?.endpoint?.endpoint_type||"unknown"))));var W=P(J,2),$=s(W,!0);i(W),i(j),R(()=>U($,(p(a()),c(()=>a()?.endpoint?.name||"Unknown")))),n(M,j)}),n(_,L)};z(D,_=>{p(t()),c(()=>t().badges)&&_(Z)})}i(v),n(o,v)};z(K,o=>{p(t()),c(()=>t().customInfo||t().badges?.some(v=>v.type==="forge"))&&o(A)})}i(S);var w=P(S,2),B=s(w);{var N=o=>{var v=F(),l=V(v);se(l,1,()=>(p(t()),c(()=>t().badges.filter(f=>f.type!=="forge"))),ve,(f,D)=>{var Z=F(),_=V(Z);{var L=M=>{const k=Q(()=>(e(D),c(()=>I(e(D)))));var j=gr(),J=s(j,!0);i(j),R(()=>{me(j,1,`inline-flex items-center rounded-full px-2 py-1 text-xs font-medium ring-1 ring-inset ${p(e(k)),c(()=>e(k).variant==="success"?"bg-green-50 text-green-700 ring-green-600/20 dark:bg-green-900/50 dark:text-green-300 dark:ring-green-400/20":e(k).variant==="info"?"bg-blue-50 text-blue-700 ring-blue-600/20 dark:bg-blue-900/50 dark:text-blue-300 dark:ring-blue-400/20":e(k).variant==="error"?"bg-red-50 text-red-700 ring-red-600/20 dark:bg-red-900/50 dark:text-red-300 dark:ring-red-400/20":"bg-gray-50 text-gray-700 ring-gray-600/20 dark:bg-gray-900/50 dark:text-gray-300 dark:ring-gray-400/20")??""}`),U(J,(p(e(k)),c(()=>e(k).text)))}),n(M,j)},C=M=>{const k=Q(()=>(e(D),c(()=>I(e(D)))));At(M,{get variant(){return p(e(k)),c(()=>e(k).variant)},get text(){return p(e(k)),c(()=>e(k).text)}})};z(_,M=>{e(D),c(()=>e(D).type==="status")?M(L):M(C,!1)})}n(f,Z)}),n(o,v)};z(B,o=>{p(t()),c(()=>t().badges)&&o(N)})}var X=P(B,2);{var ee=o=>{var v=fr();se(v,5,()=>(p(t()),c(()=>t().actions)),ve,(l,f)=>{{let D=Q(()=>(e(f),c(()=>e(f).type==="clone"?"copy":e(f).type))),Z=Q(()=>(e(f),p(t()),c(()=>e(f).type==="edit"?`Edit ${t().entityType}`:e(f).type==="delete"?`Delete ${t().entityType}`:e(f).type==="clone"?`Clone ${t().entityType}`:e(f).type))),_=Q(()=>(e(f),p(t()),c(()=>e(f).type==="edit"?`Edit ${t().entityType}`:e(f).type==="delete"?`Delete ${t().entityType}`:e(f).type==="clone"?`Clone ${t().entityType}`:e(f).type)));tt(l,{get action(){return e(D)},size:"sm",get title(){return e(Z)},get ariaLabel(){return e(_)},$$events:{click:()=>u(e(f).type)}})}}),i(v),n(o,v)};z(X,o=>{p(t()),c(()=>t().actions)&&o(ee)})}i(w),i(b),n(H,b),ge()}var pr=T('
'),xr=T('
'),kr=T("
"),yr=T("
"),_r=T(' ',1),br=T('
');function Er(H,r){ue(r,!1);const g=Pe();let a=d(r,"columns",24,()=>[]),t=d(r,"data",24,()=>[]),x=d(r,"loading",8,!1),h=d(r,"error",8,""),m=d(r,"totalItems",8,0),u=d(r,"itemName",8,"results"),I=d(r,"searchTerm",12,""),b=d(r,"searchPlaceholder",8,"Search..."),S=d(r,"showSearch",8,!0),G=d(r,"currentPage",8,1),q=d(r,"perPage",12,25),E=d(r,"totalPages",8,1),K=d(r,"showPagination",8,!0),A=d(r,"showPerPageSelector",8,!0),w=d(r,"emptyTitle",8,"No items found"),B=d(r,"emptyMessage",8,""),N=d(r,"emptyIconType",8,"document"),X=d(r,"errorTitle",8,"Error loading data"),ee=d(r,"showRetry",8,!1),o=d(r,"showMobileCards",8,!0),v=d(r,"mobileCardConfig",8,null);const l=Ce();function f(y){l("search",y.detail)}function D(y){l("pageChange",y.detail)}function Z(y){l("perPageChange",y.detail)}function _(){l("retry")}function L(y){l("edit",y.detail)}function C(y){l("delete",y.detail)}function M(y){l("clone",y.detail)}function k(y){l("action",y.detail)}function j(y){const de="px-6 py-4 text-sm",Ne=y.align==="right"?"text-right":y.align==="center"?"text-center":"text-left",Ve=y.key==="actions"?"font-medium":"text-gray-900 dark:text-white",Re=y.flexible?"min-w-0":"";return`${de} ${Ne} ${Ve} ${Re}`.trim()}function J(){return a().map(y=>y.flexible?`${y.flexRatio||1}fr`:"auto").join(" ")}we(()=>(p(B()),p(I()),p(u())),()=>{Me(g,B()||(I()?`No items found matching "${I()}"`:`No ${u()} found`))}),Ee(),pe();var W=br(),$=s(W);{var re=y=>{rr(y,{get placeholder(){return b()},get showPerPageSelector(){return A()},get searchTerm(){return I()},set searchTerm(de){I(de)},get perPage(){return q()},set perPage(de){q(de)},$$events:{search:f,perPageChange:Z},$$legacy:!0})};z($,y=>{S()&&y(re)})}var le=P($,2),Ie=s(le);{var je=y=>{Vt(y,{get message(){return`Loading ${u()??""}...`}})},Le=y=>{var de=F(),Ne=V(de);{var Ve=ke=>{{let He=Q(()=>ee()?_:void 0);qt(ke,{get title(){return X()},get message(){return h()},get showRetry(){return ee()},get onRetry(){return e(He)}})}},Re=ke=>{var He=F(),at=V(He);{var nt=ye=>{Wt(ye,{get title(){return w()},get message(){return e(g)},get iconType(){return N()}})},it=ye=>{var Ge=_r(),Je=V(Ge);{var ot=ae=>{var O=xr();se(O,7,t,(ie,te)=>ie.id||ie.name||te,(ie,te,qe)=>{var ze=pr(),Y=s(ze);{var _e=ce=>{var fe=F(),ne=V(fe);$e(ne,()=>(e(te),c(()=>`${e(te).id||e(te).name}-${e(te).updated_at}-mobile`)),he=>{mr(he,{get item(){return e(te)},get config(){return v()},$$events:{edit(oe){Se.call(this,r,oe)},delete(oe){Se.call(this,r,oe)},clone(oe){Se.call(this,r,oe)},action(oe){Se.call(this,r,oe)}}})}),n(ce,fe)},Oe=ce=>{var fe=F(),ne=V(fe);Xe(ne,r,"mobile-card",{get item(){return e(te)},get index(){return e(qe)}}),n(ce,fe)};z(Y,ce=>{v()?ce(_e):ce(Oe,!1)})}i(ze),n(ie,ze)}),i(O),n(ae,O)};z(Je,ae=>{o()&&ae(ot)})}var Qe=P(Je,2),Ue=s(Qe),Ze=s(Ue);se(Ze,1,a,ve,(ae,O)=>{var ie=kr(),te=s(ie,!0);i(ie),R(()=>{me(ie,1,`px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider bg-gray-50 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600 ${e(O),c(()=>e(O).align==="right"?"text-right":e(O).align==="center"?"text-center":"text-left")??""}`),U(te,(e(O),c(()=>e(O).title)))}),n(ae,ie)});var st=P(Ze,2);se(st,3,t,(ae,O)=>ae.id||ae.name||O,(ae,O,ie)=>{var te=F(),qe=V(te);se(qe,1,a,ve,(ze,Y)=>{var _e=yr(),Oe=s(_e);{var ce=ne=>{var he=F(),oe=V(he);$e(oe,()=>(e(O),e(Y),c(()=>`${e(O).id||e(O).name}-${e(O).updated_at}-${e(Y).key}`)),lt=>{var Ke=F(),dt=V(Ke);{let vt=Q(()=>typeof e(Y).cellProps=="function"?e(Y).cellProps(e(O)):e(Y).cellProps);Ht(dt,()=>e(Y).cellComponent,(ct,ut)=>{ut(ct,jt({get item(){return e(O)}},()=>e(vt),{$$events:{edit:L,delete:C,clone:M,action:k}}))})}n(lt,Ke)}),n(ne,he)},fe=ne=>{var he=F(),oe=V(he);Xe(oe,r,"cell",{get item(){return e(O)},get column(){return e(Y)},get index(){return e(ie)},get value(){return e(O),e(Y),c(()=>e(O)[e(Y).key])}}),n(ne,he)};z(Oe,ne=>{e(Y),c(()=>e(Y).cellComponent)?ne(ce):ne(fe,!1)})}i(_e),R(ne=>me(_e,1,`${ne??""} border-b border-gray-200 dark:border-gray-700`),[()=>(e(Y),c(()=>j(e(Y))))]),n(ze,_e)}),n(ae,te)}),i(Ue),i(Qe),R(ae=>Lt(Ue,`grid-template-columns: ${ae??""}`),[()=>c(J)]),n(ye,Ge)};z(at,ye=>{p(t()),c(()=>t().length===0)?ye(nt):ye(it,!1)},!0)}n(ke,He)};z(Ne,ke=>{h()?ke(Ve):ke(Re,!1)},!0)}n(y,de)};z(Ie,y=>{x()?y(je):y(Le,!1)})}var De=P(Ie,2);{var rt=y=>{ir(y,{get currentPage(){return G()},get totalPages(){return E()},get perPage(){return q()},get totalItems(){return m()},get itemName(){return u()},$$events:{pageChange:D}})};z(De,y=>{p(K()),p(x()),p(h()),p(t()),c(()=>K()&&!x()&&!h()&&t().length>0)&&y(rt)})}i(le),i(W),n(H,W),ge()}var wr=T('
');function Dr(H,r){ue(r,!1);const g=Ce();let a=d(r,"item",8),t=d(r,"actions",24,()=>[{type:"edit",title:"Edit",ariaLabel:"Edit item",action:"edit"},{type:"delete",title:"Delete",ariaLabel:"Delete item",action:"delete"}]);function x(m){a()&&(m==="edit"?g("edit",{item:a()}):m==="delete"?g("delete",{item:a()}):m==="copy"?g("clone",{item:a()}):g("action",{type:m,item:a()}))}pe();var h=wr();se(h,5,t,ve,(m,u)=>{{let I=Q(()=>(e(u),c(()=>e(u).action==="clone"?"copy":e(u).action||(e(u).type==="edit"?"edit":e(u).type==="delete"?"delete":e(u).type==="copy"?"copy":"view")))),b=Q(()=>(e(u),c(()=>e(u).title||(e(u).type==="edit"?"Edit":e(u).type==="delete"?"Delete":e(u).type==="copy"?"Clone":e(u).label)))),S=Q(()=>(e(u),c(()=>e(u).ariaLabel||(e(u).type==="edit"?"Edit item":e(u).type==="delete"?"Delete item":e(u).type==="copy"?"Clone item":e(u).label))));tt(m,{get action(){return e(I)},get title(){return e(b)},get ariaLabel(){return e(S)},$$events:{click:()=>x(e(u).type)}})}}),i(h),n(H,h),ge()}var Mr=T(" "),Pr=T(" ");function Nr(H,r){ue(r,!1);const g=Pe(),a=Pe();let t=d(r,"item",8),x=d(r,"field",8),h=d(r,"type",8,"text"),m=d(r,"truncateLength",8,50),u=d(r,"showTitle",8,!1);function I(){return t()&&x().split(".").reduce((A,w)=>A?.[w],t())||""}function b(){return h()==="date"?Bt(e(g)):h()==="truncated"&&e(g).length>m()?`${e(g).slice(0,m())}...`:e(g)}function S(){switch(h()){case"code":return"inline-block max-w-full truncate bg-gray-100 dark:bg-gray-700 px-2 py-1 rounded text-xs font-mono";case"description":return"block w-full truncate text-sm text-gray-500 dark:text-gray-300";case"date":return"block w-full truncate text-sm text-gray-900 dark:text-white font-mono";default:return"block w-full truncate text-sm text-gray-900 dark:text-white"}}we(()=>{},()=>{Me(g,I())}),we(()=>{},()=>{Me(a,b())}),Ee(),pe();var G=F(),q=V(G);{var E=A=>{var w=Mr(),B=s(w,!0);i(w),R(N=>{me(w,1,`${N??""} ${u()?"cursor-default":""}`),Be(w,"title",u()?e(g):""),U(B,e(a))},[()=>c(S)]),n(A,w)},K=A=>{var w=Pr(),B=s(w,!0);i(w),R(N=>{me(w,1,`${N??""} ${u()?"cursor-default":""}`),Be(w,"title",u()?e(g):""),U(B,e(a))},[()=>c(S)]),n(A,w)};z(q,A=>{h()==="code"?A(E):A(K,!1)})}n(H,G),ge()}export{Dr as A,Er as D,Nr as G,Vt as L,$e as k}; diff --git a/webapp/assets/_app/immutable/chunks/mwBQAfJV.js b/webapp/assets/_app/immutable/chunks/CMD3IPWU.js similarity index 99% rename from webapp/assets/_app/immutable/chunks/mwBQAfJV.js rename to webapp/assets/_app/immutable/chunks/CMD3IPWU.js index 8ac7e88b..5e3f4820 100644 --- a/webapp/assets/_app/immutable/chunks/mwBQAfJV.js +++ b/webapp/assets/_app/immutable/chunks/CMD3IPWU.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as it}from"./TJn6xDN9.js";import{p as st,E as lt,m as n,o as nt,l as zr,g as e,h as ut,f as x,s as r,d as o,r as a,t as p,i as B,b as u,e as M,a as de,z as Ye,y as Q,u as v,k as d,D as X,c as bt,A as Ir,q as vt}from"./DniTuB_0.js";import{p as Ar,i as E}from"./DbNhg6mG.js";import{e as ie,i as se}from"./Ck5PkeSc.js";import{s as Ze,r as C,b as Y,g as D,c as jr,d as $r}from"./BZ2rxtTc.js";import{b as $,a as ct}from"./CCQwxxp9.js";import{p as gt}from"./D4Caz1gY.js";import{M as pt}from"./CHjY0Kaf.js";import{e as le}from"./BZiHL9L3.js";import{J as ft}from"./C-CyTC2O.js";var mt=x('

'),yt=x('
'),xt=x(""),_t=x(''),ht=x('
'),kt=x(""),wt=x(''),Et=x('
Loading templates...
'),Tt=x(""),Mt=x('

Templates define how the runner software is installed and configured.

',1),Pt=x('

Create a template first or proceed without a template to use default behavior.

'),Rt=x('

Select an entity first to see available templates

'),St=x(' '),Ct=x('
'),zt=x('

Entity & Provider Configuration

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Extra Specs (JSON)
',1),It=x('
Creating...
'),At=x('

Create New Pool

Entity Level *
');function Vt(Or,ne){st(ne,!1);const Z=lt();let ue=Ar(ne,"initialEntityType",8,""),er=Ar(ne,"initialEntityId",8,""),ee=n(!1),O=n(""),f=n(ue()),H=n([]),be=n([]),P=n([]),ve=n(!1),ce=n(!1),ge=n(!1),m=n(er()),G=n(""),V=n(""),F=n(""),pe=n(void 0),fe=n(void 0),me=n(void 0),ye=n(100),xe=n("garm"),T=n("linux"),re=n("amd64"),_e=n(""),he=n(!0),z=n([]),J=n(""),K=n("{}"),I=n(void 0);async function Hr(){try{d(ce,!0),d(be,await D.listProviders())}catch(i){d(O,le(i))}finally{d(ce,!1)}}async function rr(){try{d(ge,!0);const i=ke();if(!i){d(P,[]);return}if(d(P,await D.listTemplates(e(T),void 0,i)),!e(I)||!e(P).find(g=>g.id===e(I))){const g=e(P).find(L=>L.owner_id==="system");g?d(I,g.id):e(P).length>0&&d(I,e(P)[0].id)}}catch(i){d(O,le(i))}finally{d(ge,!1)}}function ke(){if(!e(m)||!e(H))return null;const i=e(H).find(g=>g.id===e(m));if(!i)return null;if("forge_type"in i)return i.forge_type;if("endpoint"in i){const g=i.endpoint;if(g&&"endpoint_type"in g)return g.endpoint_type||null}return"github"}async function tr(){if(e(f))try{switch(d(ve,!0),d(H,[]),e(f)){case"repository":d(H,await D.listRepositories());break;case"organization":d(H,await D.listOrganizations());break;case"enterprise":d(H,await D.listEnterprises());break}}catch(i){d(O,le(i))}finally{d(ve,!1)}}function we(i){e(f)!==i&&(d(f,i),d(m,""),d(I,void 0),tr())}function ar(){e(J).trim()&&!e(z).includes(e(J).trim())&&(d(z,[...e(z),e(J).trim()]),d(J,""))}function Lr(i){d(z,e(z).filter((g,L)=>L!==i))}function qr(i){i.key==="Enter"&&(i.preventDefault(),ar())}async function Br(){if(!e(f)||!e(m)||!e(G)||!e(V)||!e(F)){d(O,"Please fill in all required fields");return}try{d(ee,!0),d(O,"");let i={};if(e(K).trim())try{i=JSON.parse(e(K))}catch{throw new Error("Invalid JSON in extra specs")}const g={provider_name:e(G),image:e(V),flavor:e(F),max_runners:e(pe)||10,min_idle_runners:e(fe)||0,runner_bootstrap_timeout:e(me)||20,priority:e(ye),runner_prefix:e(xe),os_type:e(T),os_arch:e(re),"github-runner-group":e(_e)||void 0,enabled:e(he),tags:e(z),extra_specs:e(K).trim()?i:void 0,template_id:e(I)};if(ue()&&er())Z("submit",g);else{switch(e(f)){case"repository":await D.createRepositoryPool(e(m),g);break;case"organization":await D.createOrganizationPool(e(m),g);break;case"enterprise":await D.createEnterprisePool(e(m),g);break;default:throw new Error("Invalid entity level")}Z("submit",g)}}catch(i){d(O,le(i))}finally{d(ee,!1)}}nt(()=>{Hr(),ue()&&tr()}),zr(()=>(e(m),e(T)),()=>{e(m)&&e(T)&&rr()}),zr(()=>(e(T),e(m)),()=>{e(T)&&e(m)&&rr()}),ut(),it(),pt(Or,{$$events:{close:()=>Z("close")},children:(i,g)=>{var L=At(),Ee=r(o(L),2),or=o(Ee);{var Dr=k=>{var R=mt(),N=o(R),te=o(N,!0);a(N),a(R),p(()=>M(te,e(O))),u(k,R)};E(or,k=>{e(O)&&k(Dr)})}var Te=r(or,2),dr=r(o(Te),2),Me=o(dr),Pe=r(Me,2),ir=r(Pe,2);a(dr),a(Te);var sr=r(Te,2);{var Gr=k=>{var R=zt(),N=de(R),te=r(o(N),2),Se=o(te),Ce=o(Se),Fr=o(Ce);Ye(),a(Ce);var Kr=r(Ce,2);{var Ur=t=>{var b=yt();u(t,b)},Wr=t=>{var b=_t();p(()=>{e(m),Q(()=>{e(f),e(H)})});var w=o(b),q=o(w);a(w),w.value=w.__value="";var A=r(w);ie(A,1,()=>e(H),se,(c,s)=>{var y=xt(),j=o(y);{var U=l=>{var h=X();p(()=>M(h,`${e(s),v(()=>e(s).owner)??""}/${e(s),v(()=>e(s).name)??""} (${e(s),v(()=>e(s).endpoint?.name)??""})`)),u(l,h)},S=l=>{var h=X();p(()=>M(h,`${e(s),v(()=>e(s).name)??""} (${e(s),v(()=>e(s).endpoint?.name)??""})`)),u(l,h)};E(j,l=>{e(f)==="repository"?l(U):l(S,!1)})}a(y);var _={};p(()=>{_!==(_=(e(s),v(()=>e(s).id)))&&(y.value=(y.__value=(e(s),v(()=>e(s).id)))??"")}),u(c,y)}),a(b),p(()=>M(q,`Select a ${e(f)??""}`)),Y(b,()=>e(m),c=>d(m,c)),u(t,b)};E(Kr,t=>{e(ve)?t(Ur):t(Wr,!1)})}a(Se);var ur=r(Se,2),Qr=r(o(ur),2);{var Xr=t=>{var b=ht();u(t,b)},Yr=t=>{var b=wt();p(()=>{e(G),Q(()=>{e(be)})});var w=o(b);w.value=w.__value="";var q=r(w);ie(q,1,()=>e(be),se,(A,c)=>{var s=kt(),y=o(s,!0);a(s);var j={};p(()=>{M(y,(e(c),v(()=>e(c).name))),j!==(j=(e(c),v(()=>e(c).name)))&&(s.value=(s.__value=(e(c),v(()=>e(c).name)))??"")}),u(A,s)}),a(b),Y(b,()=>e(G),A=>d(G,A)),u(t,b)};E(Qr,t=>{e(ce)?t(Xr):t(Yr,!1)})}a(ur),a(te),a(N);var ze=r(N,2),Ie=r(o(ze),2),Ae=o(Ie),br=r(o(Ae),2);C(br),a(Ae);var je=r(Ae,2),vr=r(o(je),2);C(vr),a(je);var $e=r(je,2),Oe=r(o($e),2);p(()=>{e(T),Q(()=>{})});var He=o(Oe);He.value=He.__value="linux";var cr=r(He);cr.value=cr.__value="windows",a(Oe),a($e);var gr=r($e,2),Le=r(o(gr),2);p(()=>{e(re),Q(()=>{})});var qe=o(Le);qe.value=qe.__value="amd64";var pr=r(qe);pr.value=pr.__value="arm64",a(Le),a(gr),a(Ie);var fr=r(Ie,2),Zr=r(o(fr),2);{var et=t=>{var b=Et();u(t,b)},rt=t=>{var b=Ir(),w=de(b);{var q=c=>{var s=Mt(),y=de(s);p(()=>{e(I),Q(()=>{e(P)})}),ie(y,5,()=>e(P),se,(_,l)=>{var h=Tt(),W=o(h),We=r(W);{var Qe=Xe=>{var Cr=X();p(()=>M(Cr,`- ${e(l),v(()=>e(l).description)??""}`)),u(Xe,Cr)};E(We,Xe=>{e(l),v(()=>e(l).description)&&Xe(Qe)})}a(h);var oe={};p(()=>{M(W,`${e(l),v(()=>e(l).name)??""} ${e(l),v(()=>e(l).owner_id==="system"?"(System)":"")??""} `),oe!==(oe=(e(l),v(()=>e(l).id)))&&(h.value=(h.__value=(e(l),v(()=>e(l).id)))??"")}),u(_,h)}),a(y);var j=r(y,2),U=r(o(j));{var S=_=>{var l=X();p(h=>M(l,`Showing templates for ${h??""} ${e(T)??""}.`),[()=>v(ke)]),u(_,l)};E(U,_=>{e(m)&&_(S)})}a(j),Y(y,()=>e(I),_=>d(I,_)),u(c,s)},A=c=>{var s=Ir(),y=de(s);{var j=S=>{var _=Pt(),l=o(_),h=o(l);a(l);var W=r(l,2),We=o(W);Ye(),a(W),a(_),p((Qe,oe)=>{M(h,`No templates found for ${Qe??""} ${e(T)??""}.`),jr(We,"href",oe)},[()=>v(ke),()=>(vt($r),v(()=>$r("/templates")))]),u(S,_)},U=S=>{var _=Rt();u(S,_)};E(y,S=>{e(m)?S(j):S(U,!1)},!0)}u(c,s)};E(w,c=>{e(P),v(()=>e(P).length>0)?c(q):c(A,!1)},!0)}u(t,b)};E(Zr,t=>{e(ge)?t(et):t(rt,!1)})}a(fr),a(ze);var Be=r(ze,2),mr=r(o(Be),2),De=o(mr),yr=r(o(De),2);C(yr),a(De);var Ge=r(De,2),xr=r(o(Ge),2);C(xr),a(Ge);var _r=r(Ge,2),hr=r(o(_r),2);C(hr),a(_r),a(mr),a(Be);var kr=r(Be,2),Je=r(o(kr),2),Ne=o(Je),wr=r(o(Ne),2);C(wr),a(Ne);var Ve=r(Ne,2),Er=r(o(Ve),2);C(Er),a(Ve);var Tr=r(Ve,2),Mr=r(o(Tr),2);C(Mr),a(Tr),a(Je);var Fe=r(Je,2),Pr=r(o(Fe),2),Ke=o(Pr),ae=o(Ke);C(ae);var tt=r(ae,2);a(Ke);var at=r(Ke,2);{var ot=t=>{var b=Ct();ie(b,5,()=>e(z),se,(w,q,A)=>{var c=St(),s=o(c),y=r(s);a(c),p(()=>{M(s,`${e(q)??""} `),jr(y,"aria-label",`Remove tag ${e(q)}`)}),B("click",y,()=>Lr(A)),u(w,c)}),a(b),u(t,b)};E(at,t=>{e(z),v(()=>e(z).length>0)&&t(ot)})}a(Pr),a(Fe);var Ue=r(Fe,2),dt=r(o(Ue),2);ft(dt,{rows:4,placeholder:"{}",get value(){return e(K)},set value(t){d(K,t)},$$legacy:!0}),a(Ue);var Rr=r(Ue,2),Sr=o(Rr);C(Sr),Ye(2),a(Rr),a(kr),p(t=>M(Fr,`${t??""} `),[()=>(e(f),v(()=>e(f).charAt(0).toUpperCase()+e(f).slice(1)))]),$(br,()=>e(V),t=>d(V,t)),$(vr,()=>e(F),t=>d(F,t)),Y(Oe,()=>e(T),t=>d(T,t)),Y(Le,()=>e(re),t=>d(re,t)),$(yr,()=>e(fe),t=>d(fe,t)),$(xr,()=>e(pe),t=>d(pe,t)),$(hr,()=>e(me),t=>d(me,t)),$(wr,()=>e(xe),t=>d(xe,t)),$(Er,()=>e(ye),t=>d(ye,t)),$(Mr,()=>e(_e),t=>d(_e,t)),$(ae,()=>e(J),t=>d(J,t)),B("keydown",ae,qr),B("click",tt,ar),ct(Sr,()=>e(he),t=>d(he,t)),u(k,R)};E(sr,k=>{e(f)&&k(Gr)})}var lr=r(sr,2),nr=o(lr),Re=r(nr,2),Jr=o(Re);{var Nr=k=>{var R=It();u(k,R)},Vr=k=>{var R=X("Create Pool");u(k,R)};E(Jr,k=>{e(ee)?k(Nr):k(Vr,!1)})}a(Re),a(lr),a(Ee),a(L),p(()=>{Ze(Me,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(f)==="repository"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),Ze(Pe,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(f)==="organization"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),Ze(ir,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(f)==="enterprise"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),Re.disabled=e(ee)||!e(f)||!e(m)||!e(G)||!e(V)||!e(F)}),B("click",Me,()=>we("repository")),B("click",Pe,()=>we("organization")),B("click",ir,()=>we("enterprise")),B("click",nr,()=>Z("close")),B("submit",Ee,gt(Br)),u(i,L)},$$slots:{default:!0}}),bt()}export{Vt as C}; +import"./DsnmJJEf.js";import{i as it}from"./TJn6xDN9.js";import{p as st,E as lt,m as n,o as nt,l as zr,g as e,h as ut,f as x,s as r,d as o,r as a,t as p,i as B,b as u,e as M,a as de,z as Ye,y as Q,u as v,k as d,D as X,c as bt,A as Ir,q as vt}from"./DniTuB_0.js";import{p as Ar,i as E}from"./DbNhg6mG.js";import{e as ie,i as se}from"./Ck5PkeSc.js";import{s as Ze,r as C,b as Y,g as D,c as jr,d as $r}from"./DSfKzFV1.js";import{b as $,a as ct}from"./CCQwxxp9.js";import{p as gt}from"./D4Caz1gY.js";import{M as pt}from"./l9U2NoST.js";import{e as le}from"./BZiHL9L3.js";import{J as ft}from"./DoxpoDLH.js";var mt=x('

'),yt=x('
'),xt=x(""),_t=x(''),ht=x('
'),kt=x(""),wt=x(''),Et=x('
Loading templates...
'),Tt=x(""),Mt=x('

Templates define how the runner software is installed and configured.

',1),Pt=x('

Create a template first or proceed without a template to use default behavior.

'),Rt=x('

Select an entity first to see available templates

'),St=x(' '),Ct=x('
'),zt=x('

Entity & Provider Configuration

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Extra Specs (JSON)
',1),It=x('
Creating...
'),At=x('

Create New Pool

Entity Level *
');function Vt(Or,ne){st(ne,!1);const Z=lt();let ue=Ar(ne,"initialEntityType",8,""),er=Ar(ne,"initialEntityId",8,""),ee=n(!1),O=n(""),f=n(ue()),H=n([]),be=n([]),P=n([]),ve=n(!1),ce=n(!1),ge=n(!1),m=n(er()),G=n(""),V=n(""),F=n(""),pe=n(void 0),fe=n(void 0),me=n(void 0),ye=n(100),xe=n("garm"),T=n("linux"),re=n("amd64"),_e=n(""),he=n(!0),z=n([]),J=n(""),K=n("{}"),I=n(void 0);async function Hr(){try{d(ce,!0),d(be,await D.listProviders())}catch(i){d(O,le(i))}finally{d(ce,!1)}}async function rr(){try{d(ge,!0);const i=ke();if(!i){d(P,[]);return}if(d(P,await D.listTemplates(e(T),void 0,i)),!e(I)||!e(P).find(g=>g.id===e(I))){const g=e(P).find(L=>L.owner_id==="system");g?d(I,g.id):e(P).length>0&&d(I,e(P)[0].id)}}catch(i){d(O,le(i))}finally{d(ge,!1)}}function ke(){if(!e(m)||!e(H))return null;const i=e(H).find(g=>g.id===e(m));if(!i)return null;if("forge_type"in i)return i.forge_type;if("endpoint"in i){const g=i.endpoint;if(g&&"endpoint_type"in g)return g.endpoint_type||null}return"github"}async function tr(){if(e(f))try{switch(d(ve,!0),d(H,[]),e(f)){case"repository":d(H,await D.listRepositories());break;case"organization":d(H,await D.listOrganizations());break;case"enterprise":d(H,await D.listEnterprises());break}}catch(i){d(O,le(i))}finally{d(ve,!1)}}function we(i){e(f)!==i&&(d(f,i),d(m,""),d(I,void 0),tr())}function ar(){e(J).trim()&&!e(z).includes(e(J).trim())&&(d(z,[...e(z),e(J).trim()]),d(J,""))}function Lr(i){d(z,e(z).filter((g,L)=>L!==i))}function qr(i){i.key==="Enter"&&(i.preventDefault(),ar())}async function Br(){if(!e(f)||!e(m)||!e(G)||!e(V)||!e(F)){d(O,"Please fill in all required fields");return}try{d(ee,!0),d(O,"");let i={};if(e(K).trim())try{i=JSON.parse(e(K))}catch{throw new Error("Invalid JSON in extra specs")}const g={provider_name:e(G),image:e(V),flavor:e(F),max_runners:e(pe)||10,min_idle_runners:e(fe)||0,runner_bootstrap_timeout:e(me)||20,priority:e(ye),runner_prefix:e(xe),os_type:e(T),os_arch:e(re),"github-runner-group":e(_e)||void 0,enabled:e(he),tags:e(z),extra_specs:e(K).trim()?i:void 0,template_id:e(I)};if(ue()&&er())Z("submit",g);else{switch(e(f)){case"repository":await D.createRepositoryPool(e(m),g);break;case"organization":await D.createOrganizationPool(e(m),g);break;case"enterprise":await D.createEnterprisePool(e(m),g);break;default:throw new Error("Invalid entity level")}Z("submit",g)}}catch(i){d(O,le(i))}finally{d(ee,!1)}}nt(()=>{Hr(),ue()&&tr()}),zr(()=>(e(m),e(T)),()=>{e(m)&&e(T)&&rr()}),zr(()=>(e(T),e(m)),()=>{e(T)&&e(m)&&rr()}),ut(),it(),pt(Or,{$$events:{close:()=>Z("close")},children:(i,g)=>{var L=At(),Ee=r(o(L),2),or=o(Ee);{var Dr=k=>{var R=mt(),N=o(R),te=o(N,!0);a(N),a(R),p(()=>M(te,e(O))),u(k,R)};E(or,k=>{e(O)&&k(Dr)})}var Te=r(or,2),dr=r(o(Te),2),Me=o(dr),Pe=r(Me,2),ir=r(Pe,2);a(dr),a(Te);var sr=r(Te,2);{var Gr=k=>{var R=zt(),N=de(R),te=r(o(N),2),Se=o(te),Ce=o(Se),Fr=o(Ce);Ye(),a(Ce);var Kr=r(Ce,2);{var Ur=t=>{var b=yt();u(t,b)},Wr=t=>{var b=_t();p(()=>{e(m),Q(()=>{e(f),e(H)})});var w=o(b),q=o(w);a(w),w.value=w.__value="";var A=r(w);ie(A,1,()=>e(H),se,(c,s)=>{var y=xt(),j=o(y);{var U=l=>{var h=X();p(()=>M(h,`${e(s),v(()=>e(s).owner)??""}/${e(s),v(()=>e(s).name)??""} (${e(s),v(()=>e(s).endpoint?.name)??""})`)),u(l,h)},S=l=>{var h=X();p(()=>M(h,`${e(s),v(()=>e(s).name)??""} (${e(s),v(()=>e(s).endpoint?.name)??""})`)),u(l,h)};E(j,l=>{e(f)==="repository"?l(U):l(S,!1)})}a(y);var _={};p(()=>{_!==(_=(e(s),v(()=>e(s).id)))&&(y.value=(y.__value=(e(s),v(()=>e(s).id)))??"")}),u(c,y)}),a(b),p(()=>M(q,`Select a ${e(f)??""}`)),Y(b,()=>e(m),c=>d(m,c)),u(t,b)};E(Kr,t=>{e(ve)?t(Ur):t(Wr,!1)})}a(Se);var ur=r(Se,2),Qr=r(o(ur),2);{var Xr=t=>{var b=ht();u(t,b)},Yr=t=>{var b=wt();p(()=>{e(G),Q(()=>{e(be)})});var w=o(b);w.value=w.__value="";var q=r(w);ie(q,1,()=>e(be),se,(A,c)=>{var s=kt(),y=o(s,!0);a(s);var j={};p(()=>{M(y,(e(c),v(()=>e(c).name))),j!==(j=(e(c),v(()=>e(c).name)))&&(s.value=(s.__value=(e(c),v(()=>e(c).name)))??"")}),u(A,s)}),a(b),Y(b,()=>e(G),A=>d(G,A)),u(t,b)};E(Qr,t=>{e(ce)?t(Xr):t(Yr,!1)})}a(ur),a(te),a(N);var ze=r(N,2),Ie=r(o(ze),2),Ae=o(Ie),br=r(o(Ae),2);C(br),a(Ae);var je=r(Ae,2),vr=r(o(je),2);C(vr),a(je);var $e=r(je,2),Oe=r(o($e),2);p(()=>{e(T),Q(()=>{})});var He=o(Oe);He.value=He.__value="linux";var cr=r(He);cr.value=cr.__value="windows",a(Oe),a($e);var gr=r($e,2),Le=r(o(gr),2);p(()=>{e(re),Q(()=>{})});var qe=o(Le);qe.value=qe.__value="amd64";var pr=r(qe);pr.value=pr.__value="arm64",a(Le),a(gr),a(Ie);var fr=r(Ie,2),Zr=r(o(fr),2);{var et=t=>{var b=Et();u(t,b)},rt=t=>{var b=Ir(),w=de(b);{var q=c=>{var s=Mt(),y=de(s);p(()=>{e(I),Q(()=>{e(P)})}),ie(y,5,()=>e(P),se,(_,l)=>{var h=Tt(),W=o(h),We=r(W);{var Qe=Xe=>{var Cr=X();p(()=>M(Cr,`- ${e(l),v(()=>e(l).description)??""}`)),u(Xe,Cr)};E(We,Xe=>{e(l),v(()=>e(l).description)&&Xe(Qe)})}a(h);var oe={};p(()=>{M(W,`${e(l),v(()=>e(l).name)??""} ${e(l),v(()=>e(l).owner_id==="system"?"(System)":"")??""} `),oe!==(oe=(e(l),v(()=>e(l).id)))&&(h.value=(h.__value=(e(l),v(()=>e(l).id)))??"")}),u(_,h)}),a(y);var j=r(y,2),U=r(o(j));{var S=_=>{var l=X();p(h=>M(l,`Showing templates for ${h??""} ${e(T)??""}.`),[()=>v(ke)]),u(_,l)};E(U,_=>{e(m)&&_(S)})}a(j),Y(y,()=>e(I),_=>d(I,_)),u(c,s)},A=c=>{var s=Ir(),y=de(s);{var j=S=>{var _=Pt(),l=o(_),h=o(l);a(l);var W=r(l,2),We=o(W);Ye(),a(W),a(_),p((Qe,oe)=>{M(h,`No templates found for ${Qe??""} ${e(T)??""}.`),jr(We,"href",oe)},[()=>v(ke),()=>(vt($r),v(()=>$r("/templates")))]),u(S,_)},U=S=>{var _=Rt();u(S,_)};E(y,S=>{e(m)?S(j):S(U,!1)},!0)}u(c,s)};E(w,c=>{e(P),v(()=>e(P).length>0)?c(q):c(A,!1)},!0)}u(t,b)};E(Zr,t=>{e(ge)?t(et):t(rt,!1)})}a(fr),a(ze);var Be=r(ze,2),mr=r(o(Be),2),De=o(mr),yr=r(o(De),2);C(yr),a(De);var Ge=r(De,2),xr=r(o(Ge),2);C(xr),a(Ge);var _r=r(Ge,2),hr=r(o(_r),2);C(hr),a(_r),a(mr),a(Be);var kr=r(Be,2),Je=r(o(kr),2),Ne=o(Je),wr=r(o(Ne),2);C(wr),a(Ne);var Ve=r(Ne,2),Er=r(o(Ve),2);C(Er),a(Ve);var Tr=r(Ve,2),Mr=r(o(Tr),2);C(Mr),a(Tr),a(Je);var Fe=r(Je,2),Pr=r(o(Fe),2),Ke=o(Pr),ae=o(Ke);C(ae);var tt=r(ae,2);a(Ke);var at=r(Ke,2);{var ot=t=>{var b=Ct();ie(b,5,()=>e(z),se,(w,q,A)=>{var c=St(),s=o(c),y=r(s);a(c),p(()=>{M(s,`${e(q)??""} `),jr(y,"aria-label",`Remove tag ${e(q)}`)}),B("click",y,()=>Lr(A)),u(w,c)}),a(b),u(t,b)};E(at,t=>{e(z),v(()=>e(z).length>0)&&t(ot)})}a(Pr),a(Fe);var Ue=r(Fe,2),dt=r(o(Ue),2);ft(dt,{rows:4,placeholder:"{}",get value(){return e(K)},set value(t){d(K,t)},$$legacy:!0}),a(Ue);var Rr=r(Ue,2),Sr=o(Rr);C(Sr),Ye(2),a(Rr),a(kr),p(t=>M(Fr,`${t??""} `),[()=>(e(f),v(()=>e(f).charAt(0).toUpperCase()+e(f).slice(1)))]),$(br,()=>e(V),t=>d(V,t)),$(vr,()=>e(F),t=>d(F,t)),Y(Oe,()=>e(T),t=>d(T,t)),Y(Le,()=>e(re),t=>d(re,t)),$(yr,()=>e(fe),t=>d(fe,t)),$(xr,()=>e(pe),t=>d(pe,t)),$(hr,()=>e(me),t=>d(me,t)),$(wr,()=>e(xe),t=>d(xe,t)),$(Er,()=>e(ye),t=>d(ye,t)),$(Mr,()=>e(_e),t=>d(_e,t)),$(ae,()=>e(J),t=>d(J,t)),B("keydown",ae,qr),B("click",tt,ar),ct(Sr,()=>e(he),t=>d(he,t)),u(k,R)};E(sr,k=>{e(f)&&k(Gr)})}var lr=r(sr,2),nr=o(lr),Re=r(nr,2),Jr=o(Re);{var Nr=k=>{var R=It();u(k,R)},Vr=k=>{var R=X("Create Pool");u(k,R)};E(Jr,k=>{e(ee)?k(Nr):k(Vr,!1)})}a(Re),a(lr),a(Ee),a(L),p(()=>{Ze(Me,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(f)==="repository"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),Ze(Pe,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(f)==="organization"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),Ze(ir,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(f)==="enterprise"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),Re.disabled=e(ee)||!e(f)||!e(m)||!e(G)||!e(V)||!e(F)}),B("click",Me,()=>we("repository")),B("click",Pe,()=>we("organization")),B("click",ir,()=>we("enterprise")),B("click",nr,()=>Z("close")),B("submit",Ee,gt(Br)),u(i,L)},$$slots:{default:!0}}),bt()}export{Vt as C}; diff --git a/webapp/assets/_app/immutable/chunks/BaeBx81k.js b/webapp/assets/_app/immutable/chunks/CQIRreSz.js similarity index 92% rename from webapp/assets/_app/immutable/chunks/BaeBx81k.js rename to webapp/assets/_app/immutable/chunks/CQIRreSz.js index f1ee4fdc..8adc8d82 100644 --- a/webapp/assets/_app/immutable/chunks/BaeBx81k.js +++ b/webapp/assets/_app/immutable/chunks/CQIRreSz.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as j}from"./TJn6xDN9.js";import{p as E,E as G,f as S,d as t,r,s as g,u,q as p,z as m,t as q,e as z,i as f,b as D,c as H}from"./DniTuB_0.js";import{h as y,s as h}from"./BZ2rxtTc.js";import{p as v}from"./DbNhg6mG.js";import{g as o}from"./CTcPpzia.js";var I=S('
');function M(x,s){E(s,!1);const k=G();let i=v(s,"selectedForgeType",12,""),_=v(s,"label",8,"Select Forge Type");function n(c){i(c),k("select",c)}j();var d=I(),l=t(d),F=t(l,!0);r(l);var b=g(l,2),e=t(b),w=t(e);y(w,()=>(p(o),u(()=>o("github","w-8 h-8")))),m(2),r(e);var a=g(e,2),T=t(a);y(T,()=>(p(o),u(()=>o("gitea","w-8 h-8")))),m(2),r(a),r(b),r(d),q(()=>{z(F,_()),h(e,1,`flex flex-col items-center justify-center p-6 border-2 rounded-lg transition-colors cursor-pointer ${i()==="github"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),h(a,1,`flex flex-col items-center justify-center p-6 border-2 rounded-lg transition-colors cursor-pointer ${i()==="gitea"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`)}),f("click",e,()=>n("github")),f("click",a,()=>n("gitea")),D(x,d),H()}export{M as F}; +import"./DsnmJJEf.js";import{i as j}from"./TJn6xDN9.js";import{p as E,E as G,f as S,d as t,r,s as g,u,q as p,z as m,t as q,e as z,i as f,b as D,c as H}from"./DniTuB_0.js";import{h as y,s as h}from"./DSfKzFV1.js";import{p as v}from"./DbNhg6mG.js";import{g as o}from"./BC4TpgBU.js";var I=S('
');function M(x,s){E(s,!1);const k=G();let i=v(s,"selectedForgeType",12,""),_=v(s,"label",8,"Select Forge Type");function n(c){i(c),k("select",c)}j();var d=I(),l=t(d),F=t(l,!0);r(l);var b=g(l,2),e=t(b),w=t(e);y(w,()=>(p(o),u(()=>o("github","w-8 h-8")))),m(2),r(e);var a=g(e,2),T=t(a);y(T,()=>(p(o),u(()=>o("gitea","w-8 h-8")))),m(2),r(a),r(b),r(d),q(()=>{z(F,_()),h(e,1,`flex flex-col items-center justify-center p-6 border-2 rounded-lg transition-colors cursor-pointer ${i()==="github"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),h(a,1,`flex flex-col items-center justify-center p-6 border-2 rounded-lg transition-colors cursor-pointer ${i()==="gitea"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`)}),f("click",e,()=>n("github")),f("click",a,()=>n("gitea")),D(x,d),H()}export{M as F}; diff --git a/webapp/assets/_app/immutable/chunks/CGAsTaG2.js b/webapp/assets/_app/immutable/chunks/CRDKDqj5.js similarity index 93% rename from webapp/assets/_app/immutable/chunks/CGAsTaG2.js rename to webapp/assets/_app/immutable/chunks/CRDKDqj5.js index db110eec..726a9c75 100644 --- a/webapp/assets/_app/immutable/chunks/CGAsTaG2.js +++ b/webapp/assets/_app/immutable/chunks/CRDKDqj5.js @@ -1 +1 @@ -const w=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function x(t){const s=[];return{pattern:t==="/"?/^\/$/:new RegExp(`^${_(t).map(a=>{const i=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(i)return s.push({name:i[1],matcher:i[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const c=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(c)return s.push({name:c[1],matcher:c[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const n=a.split(/\[(.+?)\](?!\])/);return"/"+n.map((e,u)=>{if(u%2){if(e.startsWith("x+"))return h(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith("u+"))return h(String.fromCharCode(...e.slice(2).split("-").map(g=>parseInt(g,16))));const o=w.exec(e),[,l,p,m,d]=o;return s.push({name:m,matcher:d,optional:!!l,rest:!!p,chained:p?u===1&&n[0]==="":!1}),p?"([^]*?)":l?"([^/]*)?":"([^/]+?)"}return h(e)}).join("")}).join("")}/?$`),params:s}}function $(t){return t!==""&&!/^\([^)]+\)$/.test(t)}function _(t){return t.slice(1).split("/").filter($)}function j(t,s,f){const a={},i=t.slice(1),c=i.filter(r=>r!==void 0);let n=0;for(let r=0;ro).join("/"),n=0),u===void 0){e.rest&&(a[e.name]="");continue}if(!e.matcher||f[e.matcher](u)){a[e.name]=u;const o=s[r+1],l=i[r+1];o&&!o.rest&&o.optional&&l&&e.chained&&(n=0),!o&&!l&&Object.keys(a).length===c.length&&(n=0);continue}if(e.optional&&e.chained){n++;continue}return}if(!n)return a}function h(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}const b=/\[(\[)?(\.\.\.)?(\w+?)(?:=(\w+))?\]\]?/g;function k(t,s){return"/"+_(t).map(a=>a.replace(b,(i,c,n,r)=>{const e=s[r];if(!e){if(c||n&&e!==void 0)return"";throw new Error(`Missing parameter '${r}' in route ${t}`)}if(e.startsWith("/")||e.endsWith("/"))throw new Error(`Parameter '${r}' in route ${t} cannot start or end with a slash -- this would cause an invalid route like foo//bar`);return e})).filter(Boolean).join("/")}const v=globalThis.__sveltekit_1odpo7n?.base??"/ui",C=globalThis.__sveltekit_1odpo7n?.assets??v;export{C as a,v as b,j as e,x as p,k as r}; +const w=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function x(t){const s=[];return{pattern:t==="/"?/^\/$/:new RegExp(`^${_(t).map(a=>{const i=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(i)return s.push({name:i[1],matcher:i[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const c=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(c)return s.push({name:c[1],matcher:c[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const n=a.split(/\[(.+?)\](?!\])/);return"/"+n.map((e,u)=>{if(u%2){if(e.startsWith("x+"))return h(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith("u+"))return h(String.fromCharCode(...e.slice(2).split("-").map(g=>parseInt(g,16))));const o=w.exec(e),[,l,p,m,d]=o;return s.push({name:m,matcher:d,optional:!!l,rest:!!p,chained:p?u===1&&n[0]==="":!1}),p?"([^]*?)":l?"([^/]*)?":"([^/]+?)"}return h(e)}).join("")}).join("")}/?$`),params:s}}function $(t){return t!==""&&!/^\([^)]+\)$/.test(t)}function _(t){return t.slice(1).split("/").filter($)}function j(t,s,f){const a={},i=t.slice(1),c=i.filter(r=>r!==void 0);let n=0;for(let r=0;ro).join("/"),n=0),u===void 0){e.rest&&(a[e.name]="");continue}if(!e.matcher||f[e.matcher](u)){a[e.name]=u;const o=s[r+1],l=i[r+1];o&&!o.rest&&o.optional&&l&&e.chained&&(n=0),!o&&!l&&Object.keys(a).length===c.length&&(n=0);continue}if(e.optional&&e.chained){n++;continue}return}if(!n)return a}function h(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}const b=/\[(\[)?(\.\.\.)?(\w+?)(?:=(\w+))?\]\]?/g;function k(t,s){return"/"+_(t).map(a=>a.replace(b,(i,c,n,r)=>{const e=s[r];if(!e){if(c||n&&e!==void 0)return"";throw new Error(`Missing parameter '${r}' in route ${t}`)}if(e.startsWith("/")||e.endsWith("/"))throw new Error(`Parameter '${r}' in route ${t} cannot start or end with a slash -- this would cause an invalid route like foo//bar`);return e})).filter(Boolean).join("/")}const v=globalThis.__sveltekit_2i6bzq?.base??"/ui",C=globalThis.__sveltekit_2i6bzq?.assets??v;export{C as a,v as b,j as e,x as p,k as r}; diff --git a/webapp/assets/_app/immutable/chunks/Byy0srta.js b/webapp/assets/_app/immutable/chunks/CRtXxCw0.js similarity index 99% rename from webapp/assets/_app/immutable/chunks/Byy0srta.js rename to webapp/assets/_app/immutable/chunks/CRtXxCw0.js index 5b225bd4..98012fbf 100644 --- a/webapp/assets/_app/immutable/chunks/Byy0srta.js +++ b/webapp/assets/_app/immutable/chunks/CRtXxCw0.js @@ -1,4 +1,4 @@ -import"./DsnmJJEf.js";import{i as Vh}from"./TJn6xDN9.js";import{ay as ud,aw as dd,p as Nh,E as Fh,o as pd,B as md,g as j,m as Wi,l as Wt,k as zi,q as zt,h as Xh,f as _h,b as St,c as Uh,d as $t,r as Bt,s as Sn,z as Cl,D as Pl,t as ti,e as kn,v as gd,C as $o,A as Od,a as yd}from"./DniTuB_0.js";import{b as bd}from"./C-xTH-sp.js";import{p as Be,a as xd,s as Sd,i as Ql}from"./DbNhg6mG.js";import{t as kd}from"./2CDqnvrp.js";import{B as Al,s as wn}from"./BZ2rxtTc.js";import{M as wd}from"./CHjY0Kaf.js";function vd(n,e,t){var i=ud(n,e);i&&i.set&&(n[e]=t,dd(()=>{n[e]=null}))}let qr=[],Hh=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=Hh[i])e=i+1;else return!0;if(e==t)return!1}}function Ml(n){return n>=127462&&n<=127487}const Rl=8205;function Cd(n,e,t=!0,i=!0){return(t?jh:Pd)(n,e,i)}function jh(n,e,t){if(e==n.length)return e;e&&Gh(n.charCodeAt(e))&&Zh(n.charCodeAt(e-1))&&e--;let i=Js(n,e);for(e+=Dl(i);e=0&&Ml(Js(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Pd(n,e,t){for(;e>0;){let i=jh(n,e-2,t);if(i=56320&&n<57344}function Zh(n){return n>=55296&&n<56320}function Dl(n){return n<65536?1:2}class V{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=pi(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),Ye.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=pi(this,e,t);let i=[];return this.decompose(e,t,i,0),Ye.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Ii(this),r=new Ii(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Ii(this,e)}iterRange(e,t=this.length){return new Yh(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Kh(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?V.empty:e.length<=32?new J(e):Ye.from(J.split(e,[]))}}class J extends V{constructor(e,t=Qd(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Ad(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new J(El(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=Gn(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new J(l,o.length+r.length));else{let a=l.length>>1;i.push(new J(l.slice(0,a)),new J(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof J))return super.replace(e,t,i);[e,t]=pi(this,e,t);let s=Gn(this.text,Gn(i.text,El(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new J(s,r):Ye.from(J.split(s,[]),r)}sliceString(e,t=this.length,i=` +import"./DsnmJJEf.js";import{i as Vh}from"./TJn6xDN9.js";import{ay as ud,aw as dd,p as Nh,E as Fh,o as pd,B as md,g as j,m as Wi,l as Wt,k as zi,q as zt,h as Xh,f as _h,b as St,c as Uh,d as $t,r as Bt,s as Sn,z as Cl,D as Pl,t as ti,e as kn,v as gd,C as $o,A as Od,a as yd}from"./DniTuB_0.js";import{b as bd}from"./C-xTH-sp.js";import{p as Be,a as xd,s as Sd,i as Ql}from"./DbNhg6mG.js";import{t as kd}from"./2CDqnvrp.js";import{B as Al,s as wn}from"./DSfKzFV1.js";import{M as wd}from"./l9U2NoST.js";function vd(n,e,t){var i=ud(n,e);i&&i.set&&(n[e]=t,dd(()=>{n[e]=null}))}let qr=[],Hh=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=Hh[i])e=i+1;else return!0;if(e==t)return!1}}function Ml(n){return n>=127462&&n<=127487}const Rl=8205;function Cd(n,e,t=!0,i=!0){return(t?jh:Pd)(n,e,i)}function jh(n,e,t){if(e==n.length)return e;e&&Gh(n.charCodeAt(e))&&Zh(n.charCodeAt(e-1))&&e--;let i=Js(n,e);for(e+=Dl(i);e=0&&Ml(Js(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Pd(n,e,t){for(;e>0;){let i=jh(n,e-2,t);if(i=56320&&n<57344}function Zh(n){return n>=55296&&n<56320}function Dl(n){return n<65536?1:2}class V{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=pi(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),Ye.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=pi(this,e,t);let i=[];return this.decompose(e,t,i,0),Ye.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Ii(this),r=new Ii(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Ii(this,e)}iterRange(e,t=this.length){return new Yh(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Kh(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?V.empty:e.length<=32?new J(e):Ye.from(J.split(e,[]))}}class J extends V{constructor(e,t=Qd(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Ad(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new J(El(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=Gn(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new J(l,o.length+r.length));else{let a=l.length>>1;i.push(new J(l.slice(0,a)),new J(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof J))return super.replace(e,t,i);[e,t]=pi(this,e,t);let s=Gn(this.text,Gn(i.text,El(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new J(s,r):Ye.from(J.split(s,[]),r)}sliceString(e,t=this.length,i=` `){[e,t]=pi(this,e,t);let s="";for(let r=0,o=0;r<=t&&oe&&o&&(s+=i),er&&(s+=l.slice(Math.max(0,e-r),t-r)),r=a+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new J(i,s)),i=[],s=-1);return s>-1&&t.push(new J(i,s)),t}}class Ye extends V{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],l=s+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,s);s=l+1,i=a+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r=o){let h=s&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!h?i.push(l):l.decompose(e-o,t-o,i,h)}o=a+1}}replace(e,t,i){if([e,t]=pi(this,e,t),i.lines=r&&t<=l){let a=o.replace(e-r,t-r,i),h=this.lines-o.lines+a.lines;if(a.lines>4&&a.lines>h>>6){let c=this.children.slice();return c[s]=a,new Ye(c,this.length-(t-e)+i.length)}return super.replace(r,l,a)}r=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=` `){[e,t]=pi(this,e,t);let s="";for(let r=0,o=0;re&&r&&(s+=i),eo&&(s+=l.sliceString(e-o,t-o,i)),o=a+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof Ye))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let a=this.children[s],h=e.children[r];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new J(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,c=[];function f(d){let p;if(d.lines>r&&d instanceof Ye)for(let m of d.children)f(m);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof J&&a&&(p=c[c.length-1])instanceof J&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,c[c.length-1]=new J(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>s&&u(),a+=d.lines,h+=d.length+1,c.push(d))}function u(){a!=0&&(l.push(c.length==1?c[0]:Ye.from(c,h)),h=-1,a=c.length=0)}for(let d of e)f(d);return u(),l.length==1?l[0]:new Ye(l,t)}}V.empty=new J([""],0);function Qd(n){let e=-1;for(let t of n)e+=t.length+1;return e}function Gn(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r=t&&(a>i&&(l=l.slice(0,i-s)),s0?1:(e instanceof J?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof J?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` `,this;e--}else if(s instanceof J){let a=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=s.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof J?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Yh{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new Ii(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class Kh{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(V.prototype[Symbol.iterator]=function(){return this.iter()},Ii.prototype[Symbol.iterator]=Yh.prototype[Symbol.iterator]=Kh.prototype[Symbol.iterator]=function(){return this});class Ad{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}}function pi(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function Oe(n,e,t=!0,i=!0){return Cd(n,e,t,i)}function Md(n){return n>=56320&&n<57344}function Rd(n){return n>=55296&&n<56320}function Ce(n,e){let t=n.charCodeAt(e);if(!Rd(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return Md(i)?(t-55296<<10)+(i-56320)+65536:t}function Bo(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function Ke(n){return n<65536?1:2}const $r=/\r\n?|\n/;var ge=function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n}(ge||(ge={}));class st{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return r+(e-s);r+=l}else{if(i!=ge.Simple&&h>=e&&(i==ge.TrackDel&&se||i==ge.TrackBefore&&se))return null;if(h>e||h==e&&t<0&&!l)return e==s||t<0?r:r+a;r+=a}s=h}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i=0&&s<=t&&l>=e)return st?"cover":!0;s=l}return!1}toString(){let e="";for(let t=0;t=0?":"+s:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new st(e)}static create(e){return new st(e)}}class ae extends st{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Br(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return Lr(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s=0){t[s]=l,t[s+1]=o;let a=s>>1;for(;i.length0&&Tt(i,t,r.text),r.forward(c),l+=c}let h=e[o++];for(;l>1].toJSON()))}return e}static of(e,t,i){let s=[],r=[],o=0,l=null;function a(c=!1){if(!c&&!s.length)return;ou||f<0||u>t)throw new RangeError(`Invalid change range ${f} to ${u} (in doc of length ${t})`);let p=d?typeof d=="string"?V.of(d.split(i||$r)):d:V.empty,m=p.length;if(f==u&&m==0)return;fo&&ye(s,f-o,-1),ye(s,u-f,m),Tt(r,s,p),o=u}}return h(e),a(!l),l}static empty(e){return new ae(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let s=0;sl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)t.push(r[0],0);else{for(;i.length=0&&t<=0&&t==n[s+1]?n[s]+=e:s>=0&&e==0&&n[s]==0?n[s+1]+=t:i?(n[s]+=e,n[s+1]+=t):n.push(e,t)}function Tt(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(s,h,r,c,f),s=h,r=c}}}function Lr(n,e,t,i=!1){let s=[],r=i?[]:null,o=new Ui(n),l=new Ui(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);ye(s,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let h=0,c=o.len;for(;c;)if(l.ins==-1){let f=Math.min(c,l.len);h+=f,c-=f,l.forward(f)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>h),r.forward2(a),o.forward(a)}}}}class Ui{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?V.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?V.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class Nt{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let i,s;return this.empty?i=s=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),s=e.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new Nt(i,s,this.flags)}extend(e,t=e){if(e<=this.anchor&&t>=this.anchor)return b.range(e,t);let i=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return b.range(this.anchor,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return b.range(e.anchor,e.head)}static create(e,t,i){return new Nt(e,t,i)}}class b{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:b.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new b(e.ranges.map(t=>Nt.fromJSON(t)),e.main)}static single(e,t=e){return new b([b.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;se?8:0)|r)}static normalized(e,t=0){let i=e[t];e.sort((s,r)=>s.from-r.from),t=e.indexOf(i);for(let s=1;sr.head?b.range(a,l):b.range(l,a))}}return new b(e,t)}}function ec(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let Lo=0;class M{constructor(e,t,i,s,r){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=s,this.id=Lo++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(e={}){return new M(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:Wo),!!e.static,e.enables)}of(e){return new Zn([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Zn(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Zn(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}}function Wo(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}class Zn{constructor(e,t,i,s){this.dependencies=e,this.facet=t,this.type=i,this.value=s,this.id=Lo++}dynamicSlot(e){var t;let i=this.value,s=this.facet.compareInput,r=this.id,o=e[r]>>1,l=this.type==2,a=!1,h=!1,c=[];for(let f of this.dependencies)f=="doc"?a=!0:f=="selection"?h=!0:(((t=e[f.id])!==null&&t!==void 0?t:1)&1)==0&&c.push(e[f.id]);return{create(f){return f.values[o]=i(f),1},update(f,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||Wr(f,c)){let d=i(f);if(l?!ql(d,f.values[o],s):!s(d,f.values[o]))return f.values[o]=d,1}return 0},reconfigure:(f,u)=>{let d,p=u.config.address[r];if(p!=null){let m=cs(u,p);if(this.dependencies.every(g=>g instanceof M?u.facet(g)===f.facet(g):g instanceof ue?u.field(g,!1)==f.field(g,!1):!0)||(l?ql(d=i(f),m,s):s(d=i(f),m)))return f.values[o]=m,0}else d=i(f);return f.values[o]=d,1}}}}function ql(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[a.id]),s=t.map(a=>a.type),r=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let h=[];for(let c=0;ci===s),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(vn).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,s)=>{let r=i.values[t],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[t]=o,1)},reconfigure:(i,s)=>{let r=i.facet(vn),o=s.facet(vn),l;return(l=r.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):s.config.address[this.id]!=null?(i.values[t]=s.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,vn.of({field:this,create:e})]}get extension(){return this}}const It={lowest:4,low:3,default:2,high:1,highest:0};function Qi(n){return e=>new tc(e,n)}const Et={highest:Qi(It.highest),high:Qi(It.high),default:Qi(It.default),low:Qi(It.low),lowest:Qi(It.lowest)};class tc{constructor(e,t){this.inner=e,this.prec=t}}class $s{of(e){return new zr(this,e)}reconfigure(e){return $s.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class zr{constructor(e,t){this.compartment=e,this.inner=t}}class hs{constructor(e,t,i,s,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let s=[],r=Object.create(null),o=new Map;for(let u of Ed(e,t,o))u instanceof ue?s.push(u):(r[u.facet.id]||(r[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of s)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let c=i?.config.facets;for(let u in r){let d=r[u],p=d[0].facet,m=c&&c[u]||[];if(d.every(g=>g.type==0))if(l[p.id]=a.length<<1|1,Wo(m,d))a.push(i.facet(p));else{let g=p.combine(d.map(y=>y.value));a.push(i&&p.compare(g,i.facet(p))?i.facet(p):g)}else{for(let g of d)g.type==0?(l[g.id]=a.length<<1|1,a.push(g.value)):(l[g.id]=h.length<<1,h.push(y=>g.dynamicSlot(y)));l[p.id]=h.length<<1,h.push(g=>Dd(g,p,d))}}let f=h.map(u=>u(l));return new hs(e,o,f,l,a,r)}}function Ed(n,e,t){let i=[[],[],[],[],[]],s=new Map;function r(o,l){let a=s.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof zr&&t.delete(o.compartment)}if(s.set(o,l),Array.isArray(o))for(let h of o)r(h,l);else if(o instanceof zr){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=e.get(o.compartment)||o.inner;t.set(o.compartment,h),r(h,l)}else if(o instanceof tc)r(o.inner,o.prec);else if(o instanceof ue)i[l].push(o),o.provides&&r(o.provides,l);else if(o instanceof Zn)i[l].push(o),o.facet.extensions&&r(o.facet.extensions,It.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(h,l)}}return r(n,It.default),i.reduce((o,l)=>o.concat(l))}function Vi(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let s=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|s}function cs(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}const ic=M.define(),Ir=M.define({combine:n=>n.some(e=>e),static:!0}),nc=M.define({combine:n=>n.length?n[0]:void 0,static:!0}),sc=M.define(),rc=M.define(),oc=M.define(),lc=M.define({combine:n=>n.length?n[0]:!1});class bt{constructor(e,t){this.type=e,this.value=t}static define(){return new qd}}class qd{of(e){return new bt(this,e)}}class $d{constructor(e){this.map=e}of(e){return new B(this,e)}}class B{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new B(this.type,t)}is(e){return this.type==e}static define(e={}){return new $d(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let s of e){let r=s.map(t);r&&i.push(r)}return i}}B.reconfigure=B.define();B.appendConfig=B.define();class oe{constructor(e,t,i,s,r,o){this.startState=e,this.changes=t,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&ec(i,t.newLength),r.some(l=>l.type==oe.time)||(this.annotations=r.concat(oe.time.of(Date.now())))}static create(e,t,i,s,r,o){return new oe(e,t,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(oe.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}oe.time=bt.define();oe.userEvent=bt.define();oe.addToHistory=bt.define();oe.remote=bt.define();function Bd(n,e){let t=[];for(let i=0,s=0;;){let r,o;if(i=n[i]))r=n[i++],o=n[i++];else if(s=0;s--){let r=i[s](n);r instanceof oe?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof oe?n=r[0]:n=hc(e,ai(r),!1)}return n}function Wd(n){let e=n.startState,t=e.facet(oc),i=n;for(let s=t.length-1;s>=0;s--){let r=t[s](n);r&&Object.keys(r).length&&(i=ac(i,Vr(e,r,n.changes.newLength),!0))}return i==n?n:oe.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}const zd=[];function ai(n){return n==null?zd:Array.isArray(n)?n:[n]}var Y=function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n}(Y||(Y={}));const Id=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let Nr;try{Nr=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function Vd(n){if(Nr)return Nr.test(n);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||Id.test(t)))return!0}return!1}function Nd(n){return e=>{if(!/\S/.test(e))return Y.Space;if(Vd(e))return Y.Word;for(let t=0;t-1)return Y.Word;return Y.Other}}class I{constructor(e,t,i,s,r,o){this.config=e,this.doc=t,this.selection=i,this.values=s,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let l=0;ls.set(h,a)),t=null),s.set(l.value.compartment,l.value.extension)):l.is(B.reconfigure)?(t=null,i=l.value):l.is(B.appendConfig)&&(t=null,i=ai(i).concat(l.value));let r;t?r=e.startState.values.slice():(t=hs.resolve(i,s,this),r=new I(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=e.startState.facet(Ir)?e.newSelection:e.newSelection.asSingle();new I(t,e.newDoc,o,r,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:b.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),s=this.changes(i.changes),r=[i.range],o=ai(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return I.create({doc:e.doc,selection:b.fromJSON(e.selection),extensions:t.extensions?s.concat([t.extensions]):s})}static create(e={}){let t=hs.resolve(e.extensions||[],new Map),i=e.doc instanceof V?e.doc:V.of((e.doc||"").split(t.staticFacet(I.lineSeparator)||$r)),s=e.selection?e.selection instanceof b?e.selection:b.single(e.selection.anchor,e.selection.head):b.single(0);return ec(s,i.length),t.staticFacet(Ir)||(s=s.asSingle()),new I(t,i,s,t.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(I.tabSize)}get lineBreak(){return this.facet(I.lineSeparator)||` diff --git a/webapp/assets/_app/immutable/chunks/CTcPpzia.js b/webapp/assets/_app/immutable/chunks/CTcPpzia.js deleted file mode 100644 index 2e357997..00000000 --- a/webapp/assets/_app/immutable/chunks/CTcPpzia.js +++ /dev/null @@ -1,4 +0,0 @@ -import{d,s as w,f as x}from"./BZ2rxtTc.js";import"./DsnmJJEf.js";import{i as k}from"./TJn6xDN9.js";import{p as b,l as _,q as c,h as v,f as y,t as h,b as E,c as B,k as z,m as L,d as M,r as j,g as T,e as U}from"./DniTuB_0.js";import{p as o}from"./DbNhg6mG.js";function q(e){if(!e)return"N/A";try{return(typeof e=="string"?new Date(e):e).toLocaleString()}catch{return"Invalid Date"}}function A(e,r="w-4 h-4"){return e==="gitea"?``:e==="github"?`
`:` - - - `}function C(e,r){if(e.repo_name)return e.repo_name;if(e.org_name)return e.org_name;if(e.enterprise_name)return e.enterprise_name;if(e.repo_id&&!e.repo_name&&r?.repositories){const n=r.repositories.find(t=>t.id===e.repo_id);return n?`${n.owner}/${n.name}`:"Unknown Entity"}if(e.org_id&&!e.org_name&&r?.organizations){const n=r.organizations.find(t=>t.id===e.org_id);return n&&n.name?n.name:"Unknown Entity"}if(e.enterprise_id&&!e.enterprise_name&&r?.enterprises){const n=r.enterprises.find(t=>t.id===e.enterprise_id);return n&&n.name?n.name:"Unknown Entity"}return"Unknown Entity"}function H(e){return e.repo_id?"repository":e.org_id?"organization":e.enterprise_id?"enterprise":"unknown"}function P(e){return e.repo_id?d(`/repositories/${e.repo_id}`):e.org_id?d(`/organizations/${e.org_id}`):e.enterprise_id?d(`/enterprises/${e.enterprise_id}`):"#"}function V(e){e&&(e.scrollTop=e.scrollHeight)}function W(e){return{newPerPage:e,newCurrentPage:1}}function G(e){return e.pool_manager_status?.running?{text:"Running",variant:"success"}:{text:"Stopped",variant:"error"}}function J(e){switch(e.toLowerCase()){case"error":return{text:"Error",variant:"error"};case"warning":return{text:"Warning",variant:"warning"};case"info":return{text:"Info",variant:"info"};default:return{text:e,variant:"info"}}}function l(e,r,n){if(!r.trim())return e;const t=r.toLowerCase();return e.filter(a=>typeof n=="function"?n(a).toLowerCase().includes(t):n.some(i=>a[i]?.toString().toLowerCase().includes(t)))}function K(e,r){return l(e,r,["name","owner"])}function O(e,r){return l(e,r,["name"])}function Q(e,r){return l(e,r,n=>[n.name||"",n.description||"",n.endpoint?.name||""].join(" "))}function X(e,r){return l(e,r,["name","description","base_url","api_base_url"])}function Y(e,r,n){return e.slice((r-1)*n,r*n)}var I=y(" ");function Z(e,r){b(r,!1);const n=L();let t=o(r,"variant",8,"gray"),a=o(r,"size",8,"sm"),i=o(r,"text",8),g=o(r,"ring",8,!1);const u={success:"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200",error:"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200",warning:"bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",info:"bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200",gray:"bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200",blue:"bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200",green:"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200",red:"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200",yellow:"bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",secondary:"bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200"},f={success:"ring-green-600/20 dark:ring-green-400/30",error:"ring-red-600/20 dark:ring-red-400/30",warning:"ring-yellow-600/20 dark:ring-yellow-400/30",info:"ring-blue-600/20 dark:ring-blue-400/30",gray:"ring-gray-500/20 dark:ring-gray-400/30",blue:"ring-blue-600/20 dark:ring-blue-400/30",green:"ring-green-600/20 dark:ring-green-400/30",red:"ring-red-600/20 dark:ring-red-400/30",yellow:"ring-yellow-600/20 dark:ring-yellow-400/30",secondary:"ring-gray-500/20 dark:ring-gray-400/30"},p={sm:"px-2 py-1 text-xs",md:"px-2.5 py-0.5 text-xs"};_(()=>(c(t()),c(a()),c(g())),()=>{z(n,["inline-flex items-center rounded-full font-semibold",u[t()],p[a()],g()?`ring-1 ring-inset ${f[t()]}`:""].filter(Boolean).join(" "))}),v(),k();var s=I(),m=M(s,!0);j(s),h(()=>{w(s,1,x(T(n))),U(m,i())}),E(e,s),B()}export{Z as B,X as a,q as b,W as c,J as d,C as e,Q as f,A as g,l as h,H as i,P as j,G as k,O as l,K as m,Y as p,V as s}; diff --git a/webapp/assets/_app/immutable/chunks/CuYqFPEA.js b/webapp/assets/_app/immutable/chunks/CuYqFPEA.js deleted file mode 100644 index 5269fe81..00000000 --- a/webapp/assets/_app/immutable/chunks/CuYqFPEA.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as E}from"./TJn6xDN9.js";import{p as H,E as L,f as h,t as f,b as c,c as z,d as e,r as a,s as x,e as d,z as M,D as q}from"./DniTuB_0.js";import{p as i,i as C}from"./DbNhg6mG.js";import{B as F}from"./BZ2rxtTc.js";var G=h('
'),I=h('

');function S(u,t){H(t,!1);const _=L();let b=i(t,"title",8),k=i(t,"description",8),v=i(t,"actionLabel",8,null),g=i(t,"showAction",8,!0);function w(){_("action")}E();var r=I(),s=e(r),o=e(s),y=e(o,!0);a(o);var m=x(o,2),A=e(m,!0);a(m),a(s);var P=x(s,2);{var j=n=>{var l=G(),B=e(l);F(B,{variant:"primary",icon:'',$$events:{click:w},children:(D,J)=>{M();var p=q();f(()=>d(p,v())),c(D,p)},$$slots:{default:!0}}),a(l),c(n,l)};C(P,n=>{g()&&v()&&n(j)})}a(r),f(()=>{d(y,b()),d(A,k())}),c(u,r),z()}export{S as P}; diff --git a/webapp/assets/_app/immutable/chunks/CWdSRFlF.js b/webapp/assets/_app/immutable/chunks/Cv3bKZ1_.js similarity index 98% rename from webapp/assets/_app/immutable/chunks/CWdSRFlF.js rename to webapp/assets/_app/immutable/chunks/Cv3bKZ1_.js index 0190827f..0dd2aa6e 100644 --- a/webapp/assets/_app/immutable/chunks/CWdSRFlF.js +++ b/webapp/assets/_app/immutable/chunks/Cv3bKZ1_.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as ae}from"./TJn6xDN9.js";import{p as se,E as re,l as M,q as ie,k as r,g as t,m as k,h as le,f as p,d as v,s as A,r as f,b as l,c as oe,A as T,a as B,z as q,D as V,t as E,e as F,u as ne}from"./DniTuB_0.js";import{p as N,i as m}from"./DbNhg6mG.js";import{g as h,B as G}from"./BZ2rxtTc.js";import{t as y}from"./CBJzOE8U.js";import{e as de}from"./BZiHL9L3.js";var ce=p('
Checking...
'),ve=p('
'),fe=p('
Webhook installed
',1),he=p('
No webhook installed
'),ue=p('

Webhook Status

');function _e(H,g){se(g,!1);const x=k();let u=N(g,"entityType",8),s=N(g,"entityId",8),R=N(g,"entityName",8),i=k(null),o=k(!1),b=k(!0);const O=re();async function _(){if(s())try{r(b,!0),u()==="repository"?r(i,await h.getRepositoryWebhookInfo(s())):r(i,await h.getOrganizationWebhookInfo(s()))}catch(e){e&&typeof e=="object"&&"response"in e&&e.response?.status===404?r(i,null):(console.warn("Failed to check webhook status:",e),r(i,null))}finally{r(b,!1)}}async function J(){if(s())try{r(o,!0),u()==="repository"?await h.installRepositoryWebhook(s()):await h.installOrganizationWebhook(s()),y.success("Webhook Installed",`Webhook for ${u()} ${R()} has been installed successfully.`),await _(),O("webhookStatusChanged",{installed:!0})}catch(e){y.error("Webhook Installation Failed",e instanceof Error?e.message:"Failed to install webhook.")}finally{r(o,!1)}}async function K(){if(s())try{r(o,!0),u()==="repository"?await h.uninstallRepositoryWebhook(s()):await h.uninstallOrganizationWebhook(s()),y.success("Webhook Uninstalled",`Webhook for ${u()} ${R()} has been uninstalled successfully.`),await _(),O("webhookStatusChanged",{installed:!1})}catch(e){y.error("Webhook Uninstall Failed",de(e))}finally{r(o,!1)}}M(()=>ie(s()),()=>{s()&&_()}),M(()=>t(i),()=>{r(x,t(i)&&t(i).active)}),le(),ae();var w=ue(),P=v(w),j=v(P),W=v(j),D=A(v(W),2),Q=v(D);{var X=e=>{var d=ce();l(e,d)},Y=e=>{var d=T(),z=B(d);{var I=a=>{var n=fe(),C=A(B(n),2);{var c=U=>{var $=ve(),te=v($);f($),E(()=>F(te,`URL: ${t(i),ne(()=>t(i).url||"N/A")??""}`)),l(U,$)};m(C,U=>{t(i)&&U(c)})}l(a,n)},S=a=>{var n=he();l(a,n)};m(z,a=>{t(x)?a(I):a(S,!1)},!0)}l(e,d)};m(Q,e=>{t(b)?e(X):e(Y,!1)})}f(D),f(W);var L=A(W,2),Z=v(L);{var ee=e=>{var d=T(),z=B(d);{var I=a=>{G(a,{variant:"danger",size:"sm",get disabled(){return t(o)},$$events:{click:K},children:(n,C)=>{q();var c=V();E(()=>F(c,t(o)?"Uninstalling...":"Uninstall")),l(n,c)},$$slots:{default:!0}})},S=a=>{G(a,{variant:"primary",size:"sm",get disabled(){return t(o)},$$events:{click:J},children:(n,C)=>{q();var c=V();E(()=>F(c,t(o)?"Installing...":"Install Webhook")),l(n,c)},$$slots:{default:!0}})};m(z,a=>{t(x)?a(I):a(S,!1)})}l(e,d)};m(Z,e=>{t(b)||e(ee)})}f(L),f(j),f(P),f(w),l(H,w),oe()}export{_e as W}; +import"./DsnmJJEf.js";import{i as ae}from"./TJn6xDN9.js";import{p as se,E as re,l as M,q as ie,k as r,g as t,m as k,h as le,f as p,d as v,s as A,r as f,b as l,c as oe,A as T,a as B,z as q,D as V,t as E,e as F,u as ne}from"./DniTuB_0.js";import{p as N,i as m}from"./DbNhg6mG.js";import{g as h,B as G}from"./DSfKzFV1.js";import{t as y}from"./CBJzOE8U.js";import{e as de}from"./BZiHL9L3.js";var ce=p('
Checking...
'),ve=p('
'),fe=p('
Webhook installed
',1),he=p('
No webhook installed
'),ue=p('

Webhook Status

');function _e(H,g){se(g,!1);const x=k();let u=N(g,"entityType",8),s=N(g,"entityId",8),R=N(g,"entityName",8),i=k(null),o=k(!1),b=k(!0);const O=re();async function _(){if(s())try{r(b,!0),u()==="repository"?r(i,await h.getRepositoryWebhookInfo(s())):r(i,await h.getOrganizationWebhookInfo(s()))}catch(e){e&&typeof e=="object"&&"response"in e&&e.response?.status===404?r(i,null):(console.warn("Failed to check webhook status:",e),r(i,null))}finally{r(b,!1)}}async function J(){if(s())try{r(o,!0),u()==="repository"?await h.installRepositoryWebhook(s()):await h.installOrganizationWebhook(s()),y.success("Webhook Installed",`Webhook for ${u()} ${R()} has been installed successfully.`),await _(),O("webhookStatusChanged",{installed:!0})}catch(e){y.error("Webhook Installation Failed",e instanceof Error?e.message:"Failed to install webhook.")}finally{r(o,!1)}}async function K(){if(s())try{r(o,!0),u()==="repository"?await h.uninstallRepositoryWebhook(s()):await h.uninstallOrganizationWebhook(s()),y.success("Webhook Uninstalled",`Webhook for ${u()} ${R()} has been uninstalled successfully.`),await _(),O("webhookStatusChanged",{installed:!1})}catch(e){y.error("Webhook Uninstall Failed",de(e))}finally{r(o,!1)}}M(()=>ie(s()),()=>{s()&&_()}),M(()=>t(i),()=>{r(x,t(i)&&t(i).active)}),le(),ae();var w=ue(),P=v(w),j=v(P),W=v(j),D=A(v(W),2),Q=v(D);{var X=e=>{var d=ce();l(e,d)},Y=e=>{var d=T(),z=B(d);{var I=a=>{var n=fe(),C=A(B(n),2);{var c=U=>{var $=ve(),te=v($);f($),E(()=>F(te,`URL: ${t(i),ne(()=>t(i).url||"N/A")??""}`)),l(U,$)};m(C,U=>{t(i)&&U(c)})}l(a,n)},S=a=>{var n=he();l(a,n)};m(z,a=>{t(x)?a(I):a(S,!1)},!0)}l(e,d)};m(Q,e=>{t(b)?e(X):e(Y,!1)})}f(D),f(W);var L=A(W,2),Z=v(L);{var ee=e=>{var d=T(),z=B(d);{var I=a=>{G(a,{variant:"danger",size:"sm",get disabled(){return t(o)},$$events:{click:K},children:(n,C)=>{q();var c=V();E(()=>F(c,t(o)?"Uninstalling...":"Uninstall")),l(n,c)},$$slots:{default:!0}})},S=a=>{G(a,{variant:"primary",size:"sm",get disabled(){return t(o)},$$events:{click:J},children:(n,C)=>{q();var c=V();E(()=>F(c,t(o)?"Installing...":"Install Webhook")),l(n,c)},$$slots:{default:!0}})};m(z,a=>{t(x)?a(I):a(S,!1)})}l(e,d)};m(Z,e=>{t(b)||e(ee)})}f(L),f(j),f(P),f(w),l(H,w),oe()}export{_e as W}; diff --git a/webapp/assets/_app/immutable/chunks/DUI-G4vy.js b/webapp/assets/_app/immutable/chunks/CwLZz6xi.js similarity index 93% rename from webapp/assets/_app/immutable/chunks/DUI-G4vy.js rename to webapp/assets/_app/immutable/chunks/CwLZz6xi.js index f5c81253..26681ee5 100644 --- a/webapp/assets/_app/immutable/chunks/DUI-G4vy.js +++ b/webapp/assets/_app/immutable/chunks/CwLZz6xi.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import"./TJn6xDN9.js";import{f as l,s as h,d as n,r as f,t as N,e as w,b as r,A as x,a as y}from"./DniTuB_0.js";import{p,i as b}from"./DbNhg6mG.js";import{s as O}from"./BZ2rxtTc.js";var P=l('
'),Q=l('
'),R=l('
'),S=l('
'),U=l('
');function $(k,s){let z=p(s,"title",8),M=p(s,"content",8),t=p(s,"position",8,"top"),T=p(s,"width",8,"w-80");var m=U(),u=h(n(m),2),_=n(u),j=n(_,!0);f(_);var c=h(_,2),A=n(c,!0);f(c);var B=h(c,2);{var C=a=>{var i=P();r(a,i)},q=a=>{var i=x(),D=y(i);{var E=o=>{var v=Q();r(o,v)},F=o=>{var v=x(),G=y(v);{var H=e=>{var d=R();r(e,d)},I=e=>{var d=x(),J=y(d);{var K=g=>{var L=S();r(g,L)};b(J,g=>{t()==="right"&&g(K)},!0)}r(e,d)};b(G,e=>{t()==="left"?e(H):e(I,!1)},!0)}r(o,v)};b(D,o=>{t()==="bottom"?o(E):o(F,!1)},!0)}r(a,i)};b(B,a=>{t()==="top"?a(C):a(q,!1)})}f(u),f(m),N(()=>{O(u,1,`absolute ${t()==="top"?"bottom-full":t()==="bottom"?"top-full":t()==="left"?"right-full top-1/2 -translate-y-1/2":"left-full top-1/2 -translate-y-1/2"} left-1/2 transform -translate-x-1/2 ${t()==="top"?"mb-2":t()==="bottom"?"mt-2":"mx-2"} ${T()??""} p-3 bg-gray-900 text-white text-xs rounded-lg shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 z-50`),w(j,z()),w(A,M())}),r(k,m)}export{$ as T}; +import"./DsnmJJEf.js";import"./TJn6xDN9.js";import{f as l,s as h,d as n,r as f,t as N,e as w,b as r,A as x,a as y}from"./DniTuB_0.js";import{p,i as b}from"./DbNhg6mG.js";import{s as O}from"./DSfKzFV1.js";var P=l('
'),Q=l('
'),R=l('
'),S=l('
'),U=l('
');function $(k,s){let z=p(s,"title",8),M=p(s,"content",8),t=p(s,"position",8,"top"),T=p(s,"width",8,"w-80");var m=U(),u=h(n(m),2),_=n(u),j=n(_,!0);f(_);var c=h(_,2),A=n(c,!0);f(c);var B=h(c,2);{var C=a=>{var i=P();r(a,i)},q=a=>{var i=x(),D=y(i);{var E=o=>{var v=Q();r(o,v)},F=o=>{var v=x(),G=y(v);{var H=e=>{var d=R();r(e,d)},I=e=>{var d=x(),J=y(d);{var K=g=>{var L=S();r(g,L)};b(J,g=>{t()==="right"&&g(K)},!0)}r(e,d)};b(G,e=>{t()==="left"?e(H):e(I,!1)},!0)}r(o,v)};b(D,o=>{t()==="bottom"?o(E):o(F,!1)},!0)}r(a,i)};b(B,a=>{t()==="top"?a(C):a(q,!1)})}f(u),f(m),N(()=>{O(u,1,`absolute ${t()==="top"?"bottom-full":t()==="bottom"?"top-full":t()==="left"?"right-full top-1/2 -translate-y-1/2":"left-full top-1/2 -translate-y-1/2"} left-1/2 transform -translate-x-1/2 ${t()==="top"?"mb-2":t()==="bottom"?"mt-2":"mx-2"} ${T()??""} p-3 bg-gray-900 text-white text-xs rounded-lg shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 z-50`),w(j,z()),w(A,M())}),r(k,m)}export{$ as T}; diff --git a/webapp/assets/_app/immutable/chunks/DZ5U-N28.js b/webapp/assets/_app/immutable/chunks/D44hH3AJ.js similarity index 98% rename from webapp/assets/_app/immutable/chunks/DZ5U-N28.js rename to webapp/assets/_app/immutable/chunks/D44hH3AJ.js index 60fc8e01..01464e62 100644 --- a/webapp/assets/_app/immutable/chunks/DZ5U-N28.js +++ b/webapp/assets/_app/immutable/chunks/D44hH3AJ.js @@ -1,2 +1,2 @@ -import"./DsnmJJEf.js";import{i as Ir}from"./TJn6xDN9.js";import{p as Jr,E as Mr,m as u,o as Nr,k as s,l as or,g as e,h as Pr,f as M,d,r as a,s as o,q as R,u as p,t as f,y as Re,z as sr,e as y,i as ir,b,D,A as Ee,a as Q,c as Cr}from"./DniTuB_0.js";import{p as Ur,i as E,s as Dr,a as Gr}from"./DbNhg6mG.js";import{e as jr,i as zr}from"./Ck5PkeSc.js";import{r as $,s as nr,b as $e,g as Lr,d as lr,c as Br}from"./BZ2rxtTc.js";import{b as J,a as Fr}from"./CCQwxxp9.js";import{p as qr}from"./D4Caz1gY.js";import{M as Hr}from"./CHjY0Kaf.js";import{e as ur}from"./BZiHL9L3.js";import{J as Wr}from"./C-CyTC2O.js";import{e as Kr}from"./DKJ_c8yL.js";var Qr=M('

'),Vr=M('

'),Xr=M('
Loading templates...
'),Yr=M(""),Zr=M('

',1),et=M('

Create a template first or proceed without a template to use default behavior.

'),rt=M('
Updating...
'),tt=M('

Scale Set Information

Provider:
Entity:

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Extra Specs (JSON)
');function vt(pr,Oe){Jr(Oe,!1);const[br,cr]=Dr(),V=()=>Gr(Kr,"$eagerCache",br);let r=Ur(Oe,"scaleSet",8);const X=Mr();let z=u(!1),G=u(""),k=u(""),x=u([]),Y=u(!1),L=u(r().name||""),B=u(r().image||""),F=u(r().flavor||""),O=u(r().max_runners),A=u(r().min_idle_runners),q=u(r().runner_bootstrap_timeout),H=u(r().runner_prefix||""),_=u(r().os_type||"linux"),j=u(r().os_arch||"amd64"),W=u(r()["github-runner-group"]||""),K=u(r().enabled),I=u("{}"),w=u(r().template_id);function Z(){if(r().endpoint?.endpoint_type)return r().endpoint.endpoint_type;if(r().repo_id){const i=V().repositories.find(c=>c.id===r().repo_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}if(r().org_id){const i=V().organizations.find(c=>c.id===r().org_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}if(r().enterprise_id){const i=V().enterprises.find(c=>c.id===r().enterprise_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}return null}async function Ae(){try{s(Y,!0);const i=Z();if(!i){s(x,[]);return}if(s(x,await Lr.listTemplates(e(_),void 0,i)),!e(w)||!e(x).find(c=>c.id===e(w))){const c=e(x).find(S=>S.owner_id==="system");c?s(w,c.id):e(x).length>0&&s(w,e(x)[0].id)}}catch(i){s(G,ur(i))}finally{s(Y,!1)}}Nr(()=>{if(r().extra_specs)try{if(typeof r().extra_specs=="object")s(I,JSON.stringify(r().extra_specs,null,2));else{const i=JSON.parse(r().extra_specs);s(I,JSON.stringify(i,null,2))}}catch{s(I,r().extra_specs||"{}")}Ae()});async function gr(){try{if(s(z,!0),s(G,""),e(k))throw new Error(e(k));let i={};if(e(I).trim())try{i=JSON.parse(e(I))}catch{throw new Error("Invalid JSON in extra specs")}const c={name:e(L)!==r().name?e(L):void 0,image:e(B)!==r().image?e(B):void 0,flavor:e(F)!==r().flavor?e(F):void 0,max_runners:e(O)!==r().max_runners?e(O):void 0,min_idle_runners:e(A)!==r().min_idle_runners?e(A):void 0,runner_bootstrap_timeout:e(q)!==r().runner_bootstrap_timeout?e(q):void 0,runner_prefix:e(H)!==r().runner_prefix?e(H):void 0,os_type:e(_)!==r().os_type?e(_):void 0,os_arch:e(j)!==r().os_arch?e(j):void 0,"github-runner-group":e(W)!==r()["github-runner-group"]&&e(W)||void 0,enabled:e(K)!==r().enabled?e(K):void 0,extra_specs:e(I).trim()!==JSON.stringify(r().extra_specs||{},null,2).trim()?i:void 0,template_id:e(w)!==r().template_id?e(w):void 0};Object.keys(c).forEach(S=>{c[S]===void 0&&delete c[S]}),X("submit",c)}catch(i){s(G,ur(i))}finally{s(z,!1)}}or(()=>e(_),()=>{e(_)&&Ae()}),or(()=>(e(A),e(O)),()=>{e(A)!==null&&e(A)!==void 0&&e(O)!==null&&e(O)!==void 0&&e(A)>e(O)?s(k,"Min idle runners cannot be greater than max runners"):s(k,"")}),Pr(),Ir(),Hr(pr,{$$events:{close:()=>X("close")},children:(i,c)=>{var S=tt(),ee=d(S),Ie=d(ee),vr=d(Ie);a(Ie),a(ee);var re=o(ee,2),Je=d(re);{var fr=t=>{var n=Qr(),T=d(n),N=d(T,!0);a(T),a(n),f(()=>y(N,e(G))),b(t,n)};E(Je,t=>{e(G)&&t(fr)})}var Me=o(Je,2);{var mr=t=>{var n=Vr(),T=d(n),N=d(T,!0);a(T),a(n),f(()=>y(N,e(k))),b(t,n)};E(Me,t=>{e(k)&&t(mr)})}var te=o(Me,2),Ne=o(d(te),2),ae=d(Ne),Pe=o(d(ae),2),yr=d(Pe,!0);a(Pe),a(ae);var Ce=o(ae,2),Ue=o(d(Ce),2),xr=d(Ue);{var _r=t=>{var n=D();f(()=>y(n,`Repository: ${R(r()),p(()=>r().repo_name)??""}`)),b(t,n)},hr=t=>{var n=Ee(),T=Q(n);{var N=v=>{var m=D();f(()=>y(m,`Organization: ${R(r()),p(()=>r().org_name)??""}`)),b(v,m)},Se=v=>{var m=Ee(),h=Q(m);{var C=g=>{var l=D();f(()=>y(l,`Enterprise: ${R(r()),p(()=>r().enterprise_name)??""}`)),b(g,l)},U=g=>{var l=D("Unknown Entity");b(g,l)};E(h,g=>{R(r()),p(()=>r().enterprise_name)?g(C):g(U,!1)},!0)}b(v,m)};E(T,v=>{R(r()),p(()=>r().org_name)?v(N):v(Se,!1)},!0)}b(t,n)};E(xr,t=>{R(r()),p(()=>r().repo_name)?t(_r):t(hr,!1)})}a(Ue),a(Ce),a(Ne),a(te);var de=o(te,2),De=o(d(de),2);$(De),a(de);var oe=o(de,2),Ge=o(d(oe),2),se=d(Ge),je=o(d(se),2);$(je),a(se);var ie=o(se,2),ze=o(d(ie),2);$(ze),a(ie);var ne=o(ie,2),le=o(d(ne),2);f(()=>{e(_),Re(()=>{})});var ue=d(le);ue.value=ue.__value="linux";var Le=o(ue);Le.value=Le.__value="windows",a(le),a(ne);var pe=o(ne,2),be=o(d(pe),2);f(()=>{e(j),Re(()=>{})});var ce=d(be);ce.value=ce.__value="amd64";var Be=o(ce);Be.value=Be.__value="arm64",a(be),a(pe);var Fe=o(pe,2),kr=o(d(Fe),2);{var wr=t=>{var n=Xr();b(t,n)},Sr=t=>{var n=Ee(),T=Q(n);{var N=v=>{var m=Zr(),h=Q(m);f(()=>{e(w),Re(()=>{e(x)})}),jr(h,5,()=>e(x),zr,(g,l)=>{var P=Yr(),tr=d(P),Or=o(tr);{var Ar=Te=>{var dr=D();f(()=>y(dr,`- ${e(l),p(()=>e(l).description)??""}`)),b(Te,dr)};E(Or,Te=>{e(l),p(()=>e(l).description)&&Te(Ar)})}a(P);var ar={};f(()=>{y(tr,`${e(l),p(()=>e(l).name)??""} ${e(l),p(()=>e(l).owner_id==="system"?"(System)":"")??""} `),ar!==(ar=(e(l),p(()=>e(l).id)))&&(P.value=(P.__value=(e(l),p(()=>e(l).id)))??"")}),b(g,P)}),a(h);var C=o(h,2),U=d(C);a(C),f(g=>y(U,`Templates define how the runner software is installed and configured. +import"./DsnmJJEf.js";import{i as Ir}from"./TJn6xDN9.js";import{p as Jr,E as Mr,m as u,o as Nr,k as s,l as or,g as e,h as Pr,f as M,d,r as a,s as o,q as R,u as p,t as f,y as Re,z as sr,e as y,i as ir,b,D,A as Ee,a as Q,c as Cr}from"./DniTuB_0.js";import{p as Ur,i as E,s as Dr,a as Gr}from"./DbNhg6mG.js";import{e as jr,i as zr}from"./Ck5PkeSc.js";import{r as $,s as nr,b as $e,g as Lr,d as lr,c as Br}from"./DSfKzFV1.js";import{b as J,a as Fr}from"./CCQwxxp9.js";import{p as qr}from"./D4Caz1gY.js";import{M as Hr}from"./l9U2NoST.js";import{e as ur}from"./BZiHL9L3.js";import{J as Wr}from"./DoxpoDLH.js";import{e as Kr}from"./BE9PkXKz.js";var Qr=M('

'),Vr=M('

'),Xr=M('
Loading templates...
'),Yr=M(""),Zr=M('

',1),et=M('

Create a template first or proceed without a template to use default behavior.

'),rt=M('
Updating...
'),tt=M('

Scale Set Information

Provider:
Entity:

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Extra Specs (JSON)
');function vt(pr,Oe){Jr(Oe,!1);const[br,cr]=Dr(),V=()=>Gr(Kr,"$eagerCache",br);let r=Ur(Oe,"scaleSet",8);const X=Mr();let z=u(!1),G=u(""),k=u(""),x=u([]),Y=u(!1),L=u(r().name||""),B=u(r().image||""),F=u(r().flavor||""),O=u(r().max_runners),A=u(r().min_idle_runners),q=u(r().runner_bootstrap_timeout),H=u(r().runner_prefix||""),_=u(r().os_type||"linux"),j=u(r().os_arch||"amd64"),W=u(r()["github-runner-group"]||""),K=u(r().enabled),I=u("{}"),w=u(r().template_id);function Z(){if(r().endpoint?.endpoint_type)return r().endpoint.endpoint_type;if(r().repo_id){const i=V().repositories.find(c=>c.id===r().repo_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}if(r().org_id){const i=V().organizations.find(c=>c.id===r().org_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}if(r().enterprise_id){const i=V().enterprises.find(c=>c.id===r().enterprise_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}return null}async function Ae(){try{s(Y,!0);const i=Z();if(!i){s(x,[]);return}if(s(x,await Lr.listTemplates(e(_),void 0,i)),!e(w)||!e(x).find(c=>c.id===e(w))){const c=e(x).find(S=>S.owner_id==="system");c?s(w,c.id):e(x).length>0&&s(w,e(x)[0].id)}}catch(i){s(G,ur(i))}finally{s(Y,!1)}}Nr(()=>{if(r().extra_specs)try{if(typeof r().extra_specs=="object")s(I,JSON.stringify(r().extra_specs,null,2));else{const i=JSON.parse(r().extra_specs);s(I,JSON.stringify(i,null,2))}}catch{s(I,r().extra_specs||"{}")}Ae()});async function gr(){try{if(s(z,!0),s(G,""),e(k))throw new Error(e(k));let i={};if(e(I).trim())try{i=JSON.parse(e(I))}catch{throw new Error("Invalid JSON in extra specs")}const c={name:e(L)!==r().name?e(L):void 0,image:e(B)!==r().image?e(B):void 0,flavor:e(F)!==r().flavor?e(F):void 0,max_runners:e(O)!==r().max_runners?e(O):void 0,min_idle_runners:e(A)!==r().min_idle_runners?e(A):void 0,runner_bootstrap_timeout:e(q)!==r().runner_bootstrap_timeout?e(q):void 0,runner_prefix:e(H)!==r().runner_prefix?e(H):void 0,os_type:e(_)!==r().os_type?e(_):void 0,os_arch:e(j)!==r().os_arch?e(j):void 0,"github-runner-group":e(W)!==r()["github-runner-group"]&&e(W)||void 0,enabled:e(K)!==r().enabled?e(K):void 0,extra_specs:e(I).trim()!==JSON.stringify(r().extra_specs||{},null,2).trim()?i:void 0,template_id:e(w)!==r().template_id?e(w):void 0};Object.keys(c).forEach(S=>{c[S]===void 0&&delete c[S]}),X("submit",c)}catch(i){s(G,ur(i))}finally{s(z,!1)}}or(()=>e(_),()=>{e(_)&&Ae()}),or(()=>(e(A),e(O)),()=>{e(A)!==null&&e(A)!==void 0&&e(O)!==null&&e(O)!==void 0&&e(A)>e(O)?s(k,"Min idle runners cannot be greater than max runners"):s(k,"")}),Pr(),Ir(),Hr(pr,{$$events:{close:()=>X("close")},children:(i,c)=>{var S=tt(),ee=d(S),Ie=d(ee),vr=d(Ie);a(Ie),a(ee);var re=o(ee,2),Je=d(re);{var fr=t=>{var n=Qr(),T=d(n),N=d(T,!0);a(T),a(n),f(()=>y(N,e(G))),b(t,n)};E(Je,t=>{e(G)&&t(fr)})}var Me=o(Je,2);{var mr=t=>{var n=Vr(),T=d(n),N=d(T,!0);a(T),a(n),f(()=>y(N,e(k))),b(t,n)};E(Me,t=>{e(k)&&t(mr)})}var te=o(Me,2),Ne=o(d(te),2),ae=d(Ne),Pe=o(d(ae),2),yr=d(Pe,!0);a(Pe),a(ae);var Ce=o(ae,2),Ue=o(d(Ce),2),xr=d(Ue);{var _r=t=>{var n=D();f(()=>y(n,`Repository: ${R(r()),p(()=>r().repo_name)??""}`)),b(t,n)},hr=t=>{var n=Ee(),T=Q(n);{var N=v=>{var m=D();f(()=>y(m,`Organization: ${R(r()),p(()=>r().org_name)??""}`)),b(v,m)},Se=v=>{var m=Ee(),h=Q(m);{var C=g=>{var l=D();f(()=>y(l,`Enterprise: ${R(r()),p(()=>r().enterprise_name)??""}`)),b(g,l)},U=g=>{var l=D("Unknown Entity");b(g,l)};E(h,g=>{R(r()),p(()=>r().enterprise_name)?g(C):g(U,!1)},!0)}b(v,m)};E(T,v=>{R(r()),p(()=>r().org_name)?v(N):v(Se,!1)},!0)}b(t,n)};E(xr,t=>{R(r()),p(()=>r().repo_name)?t(_r):t(hr,!1)})}a(Ue),a(Ce),a(Ne),a(te);var de=o(te,2),De=o(d(de),2);$(De),a(de);var oe=o(de,2),Ge=o(d(oe),2),se=d(Ge),je=o(d(se),2);$(je),a(se);var ie=o(se,2),ze=o(d(ie),2);$(ze),a(ie);var ne=o(ie,2),le=o(d(ne),2);f(()=>{e(_),Re(()=>{})});var ue=d(le);ue.value=ue.__value="linux";var Le=o(ue);Le.value=Le.__value="windows",a(le),a(ne);var pe=o(ne,2),be=o(d(pe),2);f(()=>{e(j),Re(()=>{})});var ce=d(be);ce.value=ce.__value="amd64";var Be=o(ce);Be.value=Be.__value="arm64",a(be),a(pe);var Fe=o(pe,2),kr=o(d(Fe),2);{var wr=t=>{var n=Xr();b(t,n)},Sr=t=>{var n=Ee(),T=Q(n);{var N=v=>{var m=Zr(),h=Q(m);f(()=>{e(w),Re(()=>{e(x)})}),jr(h,5,()=>e(x),zr,(g,l)=>{var P=Yr(),tr=d(P),Or=o(tr);{var Ar=Te=>{var dr=D();f(()=>y(dr,`- ${e(l),p(()=>e(l).description)??""}`)),b(Te,dr)};E(Or,Te=>{e(l),p(()=>e(l).description)&&Te(Ar)})}a(P);var ar={};f(()=>{y(tr,`${e(l),p(()=>e(l).name)??""} ${e(l),p(()=>e(l).owner_id==="system"?"(System)":"")??""} `),ar!==(ar=(e(l),p(()=>e(l).id)))&&(P.value=(P.__value=(e(l),p(()=>e(l).id)))??"")}),b(g,P)}),a(h);var C=o(h,2),U=d(C);a(C),f(g=>y(U,`Templates define how the runner software is installed and configured. Showing templates for ${g??""} ${e(_)??""}.`),[()=>p(Z)]),$e(h,()=>e(w),g=>s(w,g)),b(v,m)},Se=v=>{var m=et(),h=d(m),C=d(h);a(h);var U=o(h,2),g=d(U);sr(),a(U),a(m),f((l,P)=>{y(C,`No templates found for ${l??""} ${e(_)??""}.`),Br(g,"href",P)},[()=>p(Z),()=>(R(lr),p(()=>lr("/templates")))]),b(v,m)};E(T,v=>{e(x),p(()=>e(x).length>0)?v(N):v(Se,!1)},!0)}b(t,n)};E(kr,t=>{e(Y)?t(wr):t(Sr,!1)})}a(Fe),a(Ge),a(oe);var ge=o(oe,2),qe=o(d(ge),2),ve=d(qe),fe=o(d(ve),2);$(fe),a(ve);var me=o(ve,2),ye=o(d(me),2);$(ye),a(me);var He=o(me,2),We=o(d(He),2);$(We),a(He),a(qe),a(ge);var xe=o(ge,2),_e=o(d(xe),2),he=d(_e),Ke=o(d(he),2);$(Ke),a(he);var Qe=o(he,2),Ve=o(d(Qe),2);$(Ve),a(Qe),a(_e);var ke=o(_e,2),Xe=d(ke),Tr=o(d(Xe),2);Wr(Tr,{rows:4,placeholder:"{}",get value(){return e(I)},set value(t){s(I,t)},$$legacy:!0}),a(Xe),a(ke);var Ye=o(ke,2),Ze=d(Ye);$(Ze),sr(2),a(Ye),a(xe);var er=o(xe,2),rr=d(er),we=o(rr,2),Rr=d(we);{var Er=t=>{var n=rt();b(t,n)},$r=t=>{var n=D("Update Scale Set");b(t,n)};E(Rr,t=>{e(z)?t(Er):t($r,!1)})}a(we),a(er),a(re),a(S),f(()=>{y(vr,`Update Scale Set ${R(r()),p(()=>r().name)??""}`),y(yr,(R(r()),p(()=>r().provider_name))),nr(fe,1,`w-full px-3 py-2 border ${e(k)?"border-red-300 dark:border-red-500":"border-gray-300 dark:border-gray-600"} rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white`),nr(ye,1,`w-full px-3 py-2 border ${e(k)?"border-red-300 dark:border-red-500":"border-gray-300 dark:border-gray-600"} rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white`),we.disabled=e(z)||e(k)!==""}),J(De,()=>e(L),t=>s(L,t)),J(je,()=>e(B),t=>s(B,t)),J(ze,()=>e(F),t=>s(F,t)),$e(le,()=>e(_),t=>s(_,t)),$e(be,()=>e(j),t=>s(j,t)),J(fe,()=>e(A),t=>s(A,t)),J(ye,()=>e(O),t=>s(O,t)),J(We,()=>e(q),t=>s(q,t)),J(Ke,()=>e(H),t=>s(H,t)),J(Ve,()=>e(W),t=>s(W,t)),Fr(Ze,()=>e(K),t=>s(K,t)),ir("click",rr,()=>X("close")),ir("submit",re,qr(gr)),b(i,S)},$$slots:{default:!0}}),Cr(),cr()}export{vt as U}; diff --git a/webapp/assets/_app/immutable/chunks/DGZKesLN.js b/webapp/assets/_app/immutable/chunks/DGZKesLN.js new file mode 100644 index 00000000..3473f39d --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/DGZKesLN.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as D}from"./TJn6xDN9.js";import{p as E,E as B,l as t,q as s,g as e,m as o,h as P,f as T,t as q,i as S,b as F,c as G,u as I,d as _,k as a,r as z}from"./DniTuB_0.js";import{i as J,h as K,s as N,j as O}from"./DSfKzFV1.js";import{l as j,p as l}from"./DbNhg6mG.js";var Q=T('');function Z(C,i){const M=j(i,["children","$$slots","$$events","$$legacy"]),L=j(M,["action","disabled","title","ariaLabel","size"]);E(i,!1);const u=o(),h=o(),k=o(),f=o(),g=o(),v=o(),n=o(),m=o(),b=o(),A=B();let r=l(i,"action",8,"edit"),x=l(i,"disabled",8,!1),w=l(i,"title",8,""),y=l(i,"ariaLabel",8,""),c=l(i,"size",8,"md");function H(){x()||A("click")}t(()=>{},()=>{a(u,"transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-gray-900 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50")}),t(()=>s(c()),()=>{a(h,{sm:"p-1",md:"p-2"}[c()])}),t(()=>s(r()),()=>{a(k,{edit:"text-indigo-600 dark:text-indigo-400 hover:text-indigo-900 dark:hover:text-indigo-300 focus:ring-indigo-500",delete:"text-red-600 dark:text-red-400 hover:text-red-900 dark:hover:text-red-300 focus:ring-red-500",view:"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-300 focus:ring-gray-500",add:"text-green-600 dark:text-green-400 hover:text-green-900 dark:hover:text-green-300 focus:ring-green-500",copy:"text-blue-600 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 focus:ring-blue-500",download:"text-blue-600 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 focus:ring-blue-500"}[r()])}),t(()=>s(c()),()=>{a(f,c()==="sm"?"h-4 w-4":"h-5 w-5")}),t(()=>(e(u),e(h),e(k)),()=>{a(g,[e(u),e(h),e(k)].join(" "))}),t(()=>{},()=>{a(v,{edit:'',delete:'',view:'',add:'',copy:'',download:''})}),t(()=>{},()=>{a(n,{edit:"Edit",delete:"Delete",view:"View",add:"Add",copy:"Clone",download:"Download"})}),t(()=>(s(w()),e(n),s(r())),()=>{a(m,w()||e(n)[r()])}),t(()=>(s(y()),e(n),s(r())),()=>{a(b,y()||`${e(n)[r()]} item`)}),P(),D();var d=Q();J(d,()=>({type:"button",class:e(g),disabled:x(),title:e(m),"aria-label":e(b),...L}));var p=_(d),V=_(p);K(V,()=>(e(v),s(r()),I(()=>e(v)[r()])),!0),z(p),z(d),q(()=>N(p,0,O(e(f)))),S("click",d,H),F(C,d),G()}export{Z as A}; diff --git a/webapp/assets/_app/immutable/chunks/DSfKzFV1.js b/webapp/assets/_app/immutable/chunks/DSfKzFV1.js new file mode 100644 index 00000000..c7349eb9 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/DSfKzFV1.js @@ -0,0 +1,7 @@ +import{b as Gr,r as _r}from"./CRDKDqj5.js";import"./DsnmJJEf.js";import{i as qr}from"./TJn6xDN9.js";import{t as ze,H as ee,I as nt,ac as Hr,aW as $r,P as yt,X as Nr,a8 as Wr,aX as Qr,aY as Mr,aZ as Rt,R as Jr,a_ as Kr,S as je,J as lr,a7 as lt,M as ir,ag as Ot,a1 as Xr,a$ as Yr,b0 as Zr,aw as es,ak as ts,b1 as rs,b2 as ss,b3 as as,b4 as os,g as z,b5 as ns,b6 as ls,W as ft,b7 as is,b8 as cs,b9 as ps,ba as ds,bb as hs,at as us,bc as Os,bd as Ps,be as ms,p as bs,E as Vs,l as se,h as Ss,f as As,i as ys,b as Re,c as Rs,q as ce,m as ae,k as oe,d as Ye,s as wt,r as Ze,C as Pt,A as fs,a as ws}from"./DniTuB_0.js";import{l as It,p as ne,i as et}from"./DbNhg6mG.js";function Et(r,e,t=!1,s=!1,o=!1){var a=r,n="";ze(()=>{var l=Hr;if(n===(n=e()??"")){ee&&nt();return}if(l.nodes_start!==null&&($r(l.nodes_start,l.nodes_end),l.nodes_start=l.nodes_end=null),n!==""){if(ee){yt.data;for(var i=nt(),c=i;i!==null&&(i.nodeType!==Nr||i.data!=="");)c=i,i=Wr(i);if(i===null)throw Qr(),Mr;Rt(yt,c),a=Jr(i);return}var p=n+"";t?p=`${p}`:s&&(p=`${p}`);var y=Kr(p);if((t||s)&&(y=je(y)),Rt(je(y),y.lastChild),t||s)for(;je(y);)a.before(je(y));else a.before(y)}})}function Is(r,e,t,s,o){ee&&nt();var a=e.$$slots?.[t],n=!1;a===!0&&(a=e[t==="default"?"children":t],n=!0),a===void 0||a(r,n?()=>s:s)}function $o(r){const e={};r.children&&(e.default=!0);for(const t in r.$$slots)e[t]=!0;return e}function Es(r,e){var t=void 0,s;lr(()=>{t!==(t=e())&&(s&&(lt(s),s=null),t&&(s=ir(()=>{Ot(()=>t(r))})))})}function cr(r){var e,t,s="";if(typeof r=="string"||typeof r=="number")s+=r;else if(typeof r=="object")if(Array.isArray(r)){var o=r.length;for(e=0;e=0;){var l=n+a;(n===0||xt.includes(s[n-1]))&&(l===s.length||xt.includes(s[l]))?s=(n===0?"":s.substring(0,n))+s.substring(l+1):n=l}}return s===""?null:s}function gt(r,e=!1){var t=e?" !important;":";",s="";for(var o in r){var a=r[o];a!=null&&a!==""&&(s+=" "+o+": "+a+t)}return s}function tt(r){return r[0]!=="-"||r[1]!=="-"?r.toLowerCase():r}function Us(r,e){if(e){var t="",s,o;if(Array.isArray(e)?(s=e[0],o=e[1]):s=e,r){r=String(r).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var a=!1,n=0,l=!1,i=[];s&&i.push(...Object.keys(s).map(tt)),o&&i.push(...Object.keys(o).map(tt));var c=0,p=-1;const f=r.length;for(var y=0;y{He(r,r.__value)});e.observe(r,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),es(()=>{e.disconnect()})}function No(r,e,t=e){var s=!0;ts(r,"change",o=>{var a=o?"[selected]":":checked",n;if(r.multiple)n=[].map.call(r.querySelectorAll(a),xe);else{var l=r.querySelector(a)??r.querySelector("option:not([disabled])");n=l&&xe(l)}t(n)}),Ot(()=>{var o=e();if(He(r,o,s),s&&o===void 0){var a=r.querySelector(":checked");a!==null&&(o=xe(a),t(o))}r.__value=o,s=!1}),pr(r)}function xe(r){return"__value"in r?r.__value:r.value}const fe=Symbol("class"),we=Symbol("style"),dr=Symbol("is custom element"),hr=Symbol("is html");function Wo(r){if(ee){var e=!1,t=()=>{if(!e){if(e=!0,r.hasAttribute("value")){var s=r.value;$e(r,"value",null),r.value=s}if(r.hasAttribute("checked")){var o=r.checked;$e(r,"checked",null),r.checked=o}}};r.__on_r=t,Os(t),Ps()}}function Qo(r,e){var t=mt(r);t.value===(t.value=e??void 0)||r.value===e&&(e!==0||r.nodeName!=="PROGRESS")||(r.value=e??"")}function Ts(r,e){e?r.hasAttribute("selected")||r.setAttribute("selected",""):r.removeAttribute("selected")}function $e(r,e,t,s){var o=mt(r);ee&&(o[e]=r.getAttribute(e),e==="src"||e==="srcset"||e==="href"&&r.nodeName==="LINK")||o[e]!==(o[e]=t)&&(e==="loading"&&(r[ss]=t),t==null?r.removeAttribute(e):typeof t!="string"&&ur(r).includes(e)?r[e]=t:r.setAttribute(e,t))}function Bs(r,e,t,s,o=!1){var a=mt(r),n=a[dr],l=!a[hr];let i=ee&&n;i&&ft(!1);var c=e||{},p=r.tagName==="OPTION";for(var y in e)y in t||(t[y]=null);t.class?t.class=gs(t.class):t[fe]&&(t.class=null),t[we]&&(t.style??=null);var I=ur(r);for(const E in t){let x=t[E];if(p&&E==="value"&&x==null){r.value=r.__value="",c[E]=x;continue}if(E==="class"){var B=r.namespaceURI==="http://www.w3.org/1999/xhtml";ke(r,B,x,s,e?.[fe],t[fe]),c[E]=x,c[fe]=t[fe];continue}if(E==="style"){Cs(r,x,e?.[we],t[we]),c[E]=x,c[we]=t[we];continue}var R=c[E];if(!(x===R&&!(x===void 0&&r.hasAttribute(E)))){c[E]=x;var f=E[0]+E[1];if(f!=="$$")if(f==="on"){const T={},D="$$"+E;let C=E.slice(2);var w=ms(C);if(is(C)&&(C=C.slice(0,-7),T.capture=!0),!w&&R){if(x!=null)continue;r.removeEventListener(C,c[D],T),c[D]=null}if(x!=null)if(w)r[`__${C}`]=x,ps([C]);else{let ie=function(te){c[E].call(this,te)};c[D]=cs(C,r,ie,T)}else w&&(r[`__${C}`]=void 0)}else if(E==="style")$e(r,E,x);else if(E==="autofocus")ds(r,!!x);else if(!n&&(E==="__value"||E==="value"&&x!=null))r.value=r.__value=x;else if(E==="selected"&&p)Ts(r,x);else{var U=E;l||(U=hs(U));var F=U==="defaultValue"||U==="defaultChecked";if(x==null&&!n&&!F)if(a[E]=null,U==="value"||U==="checked"){let T=r;const D=e===void 0;if(U==="value"){let C=T.defaultValue;T.removeAttribute(U),T.defaultValue=C,T.value=T.__value=D?C:null}else{let C=T.defaultChecked;T.removeAttribute(U),T.defaultChecked=C,T.checked=D?C:!1}}else r.removeAttribute(E);else F||I.includes(U)&&(n||typeof x!="string")?(r[U]=x,U in a&&(a[U]=us)):typeof x!="function"&&$e(r,U,x)}}}return i&&ft(!0),c}function Ds(r,e,t=[],s=[],o,a=!1){rs(t,s,n=>{var l=void 0,i={},c=r.nodeName==="SELECT",p=!1;if(lr(()=>{var I=e(...n.map(z)),B=Bs(r,l,I,o,a);p&&c&&"value"in I&&He(r,I.value);for(let f of Object.getOwnPropertySymbols(i))I[f]||lt(i[f]);for(let f of Object.getOwnPropertySymbols(I)){var R=I[f];f.description===ns&&(!l||R!==l[f])&&(i[f]&<(i[f]),i[f]=ir(()=>Es(r,()=>R))),B[f]=R}l=B}),c){var y=r;Ot(()=>{He(y,l.value,!0),pr(y)})}p=!0})}function mt(r){return r.__attributes??={[dr]:r.nodeName.includes("-"),[hr]:r.namespaceURI===as}}var vt=new Map;function ur(r){var e=vt.get(r.nodeName);if(e)return e;vt.set(r.nodeName,e=[]);for(var t,s=r,o=Element.prototype;o!==s;){t=ls(s);for(var a in t)t[a].set&&e.push(a);s=os(s)}return e}function Mo(r,e){return Gr+_r(r,e)}function Or(r,e){return function(){return r.apply(e,arguments)}}const{toString:js}=Object.prototype,{getPrototypeOf:bt}=Object,{iterator:We,toStringTag:Pr}=Symbol,Qe=(r=>e=>{const t=js.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())})(Object.create(null)),J=r=>(r=r.toLowerCase(),e=>Qe(e)===r),Me=r=>e=>typeof e===r,{isArray:Se}=Array,Ve=Me("undefined");function ge(r){return r!==null&&!Ve(r)&&r.constructor!==null&&!Ve(r.constructor)&&$(r.constructor.isBuffer)&&r.constructor.isBuffer(r)}const mr=J("ArrayBuffer");function Fs(r){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(r):e=r&&r.buffer&&mr(r.buffer),e}const Ls=Me("string"),$=Me("function"),br=Me("number"),ve=r=>r!==null&&typeof r=="object",zs=r=>r===!0||r===!1,Ge=r=>{if(Qe(r)!=="object")return!1;const e=bt(r);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Pr in r)&&!(We in r)},ks=r=>{if(!ve(r)||ge(r))return!1;try{return Object.keys(r).length===0&&Object.getPrototypeOf(r)===Object.prototype}catch{return!1}},Gs=J("Date"),_s=J("File"),qs=J("Blob"),Hs=J("FileList"),$s=r=>ve(r)&&$(r.pipe),Ns=r=>{let e;return r&&(typeof FormData=="function"&&r instanceof FormData||$(r.append)&&((e=Qe(r))==="formdata"||e==="object"&&$(r.toString)&&r.toString()==="[object FormData]"))},Ws=J("URLSearchParams"),[Qs,Ms,Js,Ks]=["ReadableStream","Request","Response","Headers"].map(J),Xs=r=>r.trim?r.trim():r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Ue(r,e,{allOwnKeys:t=!1}={}){if(r===null||typeof r>"u")return;let s,o;if(typeof r!="object"&&(r=[r]),Se(r))for(s=0,o=r.length;s0;)if(o=t[s],e===o.toLowerCase())return o;return null}const pe=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Sr=r=>!Ve(r)&&r!==pe;function it(){const{caseless:r,skipUndefined:e}=Sr(this)&&this||{},t={},s=(o,a)=>{const n=r&&Vr(t,a)||a;Ge(t[n])&&Ge(o)?t[n]=it(t[n],o):Ge(o)?t[n]=it({},o):Se(o)?t[n]=o.slice():(!e||!Ve(o))&&(t[n]=o)};for(let o=0,a=arguments.length;o(Ue(e,(o,a)=>{t&&$(o)?r[a]=Or(o,t):r[a]=o},{allOwnKeys:s}),r),Zs=r=>(r.charCodeAt(0)===65279&&(r=r.slice(1)),r),ea=(r,e,t,s)=>{r.prototype=Object.create(e.prototype,s),r.prototype.constructor=r,Object.defineProperty(r,"super",{value:e.prototype}),t&&Object.assign(r.prototype,t)},ta=(r,e,t,s)=>{let o,a,n;const l={};if(e=e||{},r==null)return e;do{for(o=Object.getOwnPropertyNames(r),a=o.length;a-- >0;)n=o[a],(!s||s(n,r,e))&&!l[n]&&(e[n]=r[n],l[n]=!0);r=t!==!1&&bt(r)}while(r&&(!t||t(r,e))&&r!==Object.prototype);return e},ra=(r,e,t)=>{r=String(r),(t===void 0||t>r.length)&&(t=r.length),t-=e.length;const s=r.indexOf(e,t);return s!==-1&&s===t},sa=r=>{if(!r)return null;if(Se(r))return r;let e=r.length;if(!br(e))return null;const t=new Array(e);for(;e-- >0;)t[e]=r[e];return t},aa=(r=>e=>r&&e instanceof r)(typeof Uint8Array<"u"&&bt(Uint8Array)),oa=(r,e)=>{const s=(r&&r[We]).call(r);let o;for(;(o=s.next())&&!o.done;){const a=o.value;e.call(r,a[0],a[1])}},na=(r,e)=>{let t;const s=[];for(;(t=r.exec(e))!==null;)s.push(t);return s},la=J("HTMLFormElement"),ia=r=>r.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,s,o){return s.toUpperCase()+o}),Ut=(({hasOwnProperty:r})=>(e,t)=>r.call(e,t))(Object.prototype),ca=J("RegExp"),Ar=(r,e)=>{const t=Object.getOwnPropertyDescriptors(r),s={};Ue(t,(o,a)=>{let n;(n=e(o,a,r))!==!1&&(s[a]=n||o)}),Object.defineProperties(r,s)},pa=r=>{Ar(r,(e,t)=>{if($(r)&&["arguments","caller","callee"].indexOf(t)!==-1)return!1;const s=r[t];if($(s)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+t+"'")})}})},da=(r,e)=>{const t={},s=o=>{o.forEach(a=>{t[a]=!0})};return Se(r)?s(r):s(String(r).split(e)),t},ha=()=>{},ua=(r,e)=>r!=null&&Number.isFinite(r=+r)?r:e;function Oa(r){return!!(r&&$(r.append)&&r[Pr]==="FormData"&&r[We])}const Pa=r=>{const e=new Array(10),t=(s,o)=>{if(ve(s)){if(e.indexOf(s)>=0)return;if(ge(s))return s;if(!("toJSON"in s)){e[o]=s;const a=Se(s)?[]:{};return Ue(s,(n,l)=>{const i=t(n,o+1);!Ve(i)&&(a[l]=i)}),e[o]=void 0,a}}return s};return t(r,0)},ma=J("AsyncFunction"),ba=r=>r&&(ve(r)||$(r))&&$(r.then)&&$(r.catch),yr=((r,e)=>r?setImmediate:e?((t,s)=>(pe.addEventListener("message",({source:o,data:a})=>{o===pe&&a===t&&s.length&&s.shift()()},!1),o=>{s.push(o),pe.postMessage(t,"*")}))(`axios@${Math.random()}`,[]):t=>setTimeout(t))(typeof setImmediate=="function",$(pe.postMessage)),Va=typeof queueMicrotask<"u"?queueMicrotask.bind(pe):typeof process<"u"&&process.nextTick||yr,Sa=r=>r!=null&&$(r[We]),u={isArray:Se,isArrayBuffer:mr,isBuffer:ge,isFormData:Ns,isArrayBufferView:Fs,isString:Ls,isNumber:br,isBoolean:zs,isObject:ve,isPlainObject:Ge,isEmptyObject:ks,isReadableStream:Qs,isRequest:Ms,isResponse:Js,isHeaders:Ks,isUndefined:Ve,isDate:Gs,isFile:_s,isBlob:qs,isRegExp:ca,isFunction:$,isStream:$s,isURLSearchParams:Ws,isTypedArray:aa,isFileList:Hs,forEach:Ue,merge:it,extend:Ys,trim:Xs,stripBOM:Zs,inherits:ea,toFlatObject:ta,kindOf:Qe,kindOfTest:J,endsWith:ra,toArray:sa,forEachEntry:oa,matchAll:na,isHTMLForm:la,hasOwnProperty:Ut,hasOwnProp:Ut,reduceDescriptors:Ar,freezeMethods:pa,toObjectSet:da,toCamelCase:ia,noop:ha,toFiniteNumber:ua,findKey:Vr,global:pe,isContextDefined:Sr,isSpecCompliantForm:Oa,toJSONObject:Pa,isAsyncFn:ma,isThenable:ba,setImmediate:yr,asap:Va,isIterable:Sa};function v(r,e,t,s,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=r,this.name="AxiosError",e&&(this.code=e),t&&(this.config=t),s&&(this.request=s),o&&(this.response=o,this.status=o.status?o.status:null)}u.inherits(v,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:u.toJSONObject(this.config),code:this.code,status:this.status}}});const Rr=v.prototype,fr={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(r=>{fr[r]={value:r}});Object.defineProperties(v,fr);Object.defineProperty(Rr,"isAxiosError",{value:!0});v.from=(r,e,t,s,o,a)=>{const n=Object.create(Rr);u.toFlatObject(r,n,function(p){return p!==Error.prototype},c=>c!=="isAxiosError");const l=r&&r.message?r.message:"Error",i=e==null&&r?r.code:e;return v.call(n,l,i,t,s,o),r&&n.cause==null&&Object.defineProperty(n,"cause",{value:r,configurable:!0}),n.name=r&&r.name||"Error",a&&Object.assign(n,a),n};const Aa=null;function ct(r){return u.isPlainObject(r)||u.isArray(r)}function wr(r){return u.endsWith(r,"[]")?r.slice(0,-2):r}function Ct(r,e,t){return r?r.concat(e).map(function(o,a){return o=wr(o),!t&&a?"["+o+"]":o}).join(t?".":""):e}function ya(r){return u.isArray(r)&&!r.some(ct)}const Ra=u.toFlatObject(u,{},null,function(e){return/^is[A-Z]/.test(e)});function Je(r,e,t){if(!u.isObject(r))throw new TypeError("target must be an object");e=e||new FormData,t=u.toFlatObject(t,{metaTokens:!0,dots:!1,indexes:!1},!1,function(f,w){return!u.isUndefined(w[f])});const s=t.metaTokens,o=t.visitor||p,a=t.dots,n=t.indexes,i=(t.Blob||typeof Blob<"u"&&Blob)&&u.isSpecCompliantForm(e);if(!u.isFunction(o))throw new TypeError("visitor must be a function");function c(R){if(R===null)return"";if(u.isDate(R))return R.toISOString();if(u.isBoolean(R))return R.toString();if(!i&&u.isBlob(R))throw new v("Blob is not supported. Use a Buffer instead.");return u.isArrayBuffer(R)||u.isTypedArray(R)?i&&typeof Blob=="function"?new Blob([R]):Buffer.from(R):R}function p(R,f,w){let U=R;if(R&&!w&&typeof R=="object"){if(u.endsWith(f,"{}"))f=s?f:f.slice(0,-2),R=JSON.stringify(R);else if(u.isArray(R)&&ya(R)||(u.isFileList(R)||u.endsWith(f,"[]"))&&(U=u.toArray(R)))return f=wr(f),U.forEach(function(E,x){!(u.isUndefined(E)||E===null)&&e.append(n===!0?Ct([f],x,a):n===null?f:f+"[]",c(E))}),!1}return ct(R)?!0:(e.append(Ct(w,f,a),c(R)),!1)}const y=[],I=Object.assign(Ra,{defaultVisitor:p,convertValue:c,isVisitable:ct});function B(R,f){if(!u.isUndefined(R)){if(y.indexOf(R)!==-1)throw Error("Circular reference detected in "+f.join("."));y.push(R),u.forEach(R,function(U,F){(!(u.isUndefined(U)||U===null)&&o.call(e,U,u.isString(F)?F.trim():F,f,I))===!0&&B(U,f?f.concat(F):[F])}),y.pop()}}if(!u.isObject(r))throw new TypeError("data must be an object");return B(r),e}function Tt(r){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(r).replace(/[!'()~]|%20|%00/g,function(s){return e[s]})}function Vt(r,e){this._pairs=[],r&&Je(r,this,e)}const Ir=Vt.prototype;Ir.append=function(e,t){this._pairs.push([e,t])};Ir.toString=function(e){const t=e?function(s){return e.call(this,s,Tt)}:Tt;return this._pairs.map(function(o){return t(o[0])+"="+t(o[1])},"").join("&")};function fa(r){return encodeURIComponent(r).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Er(r,e,t){if(!e)return r;const s=t&&t.encode||fa;u.isFunction(t)&&(t={serialize:t});const o=t&&t.serialize;let a;if(o?a=o(e,t):a=u.isURLSearchParams(e)?e.toString():new Vt(e,t).toString(s),a){const n=r.indexOf("#");n!==-1&&(r=r.slice(0,n)),r+=(r.indexOf("?")===-1?"?":"&")+a}return r}class Bt{constructor(){this.handlers=[]}use(e,t,s){return this.handlers.push({fulfilled:e,rejected:t,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){u.forEach(this.handlers,function(s){s!==null&&e(s)})}}const xr={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},wa=typeof URLSearchParams<"u"?URLSearchParams:Vt,Ia=typeof FormData<"u"?FormData:null,Ea=typeof Blob<"u"?Blob:null,xa={isBrowser:!0,classes:{URLSearchParams:wa,FormData:Ia,Blob:Ea},protocols:["http","https","file","blob","url","data"]},St=typeof window<"u"&&typeof document<"u",pt=typeof navigator=="object"&&navigator||void 0,ga=St&&(!pt||["ReactNative","NativeScript","NS"].indexOf(pt.product)<0),va=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Ua=St&&window.location.href||"http://localhost",Ca=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:St,hasStandardBrowserEnv:ga,hasStandardBrowserWebWorkerEnv:va,navigator:pt,origin:Ua},Symbol.toStringTag,{value:"Module"})),q={...Ca,...xa};function Ta(r,e){return Je(r,new q.classes.URLSearchParams,{visitor:function(t,s,o,a){return q.isNode&&u.isBuffer(t)?(this.append(s,t.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)},...e})}function Ba(r){return u.matchAll(/\w+|\[(\w*)]/g,r).map(e=>e[0]==="[]"?"":e[1]||e[0])}function Da(r){const e={},t=Object.keys(r);let s;const o=t.length;let a;for(s=0;s=t.length;return n=!n&&u.isArray(o)?o.length:n,i?(u.hasOwnProp(o,n)?o[n]=[o[n],s]:o[n]=s,!l):((!o[n]||!u.isObject(o[n]))&&(o[n]=[]),e(t,s,o[n],a)&&u.isArray(o[n])&&(o[n]=Da(o[n])),!l)}if(u.isFormData(r)&&u.isFunction(r.entries)){const t={};return u.forEachEntry(r,(s,o)=>{e(Ba(s),o,t,0)}),t}return null}function ja(r,e,t){if(u.isString(r))try{return(e||JSON.parse)(r),u.trim(r)}catch(s){if(s.name!=="SyntaxError")throw s}return(t||JSON.stringify)(r)}const Ce={transitional:xr,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const s=t.getContentType()||"",o=s.indexOf("application/json")>-1,a=u.isObject(e);if(a&&u.isHTMLForm(e)&&(e=new FormData(e)),u.isFormData(e))return o?JSON.stringify(gr(e)):e;if(u.isArrayBuffer(e)||u.isBuffer(e)||u.isStream(e)||u.isFile(e)||u.isBlob(e)||u.isReadableStream(e))return e;if(u.isArrayBufferView(e))return e.buffer;if(u.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let l;if(a){if(s.indexOf("application/x-www-form-urlencoded")>-1)return Ta(e,this.formSerializer).toString();if((l=u.isFileList(e))||s.indexOf("multipart/form-data")>-1){const i=this.env&&this.env.FormData;return Je(l?{"files[]":e}:e,i&&new i,this.formSerializer)}}return a||o?(t.setContentType("application/json",!1),ja(e)):e}],transformResponse:[function(e){const t=this.transitional||Ce.transitional,s=t&&t.forcedJSONParsing,o=this.responseType==="json";if(u.isResponse(e)||u.isReadableStream(e))return e;if(e&&u.isString(e)&&(s&&!this.responseType||o)){const n=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e,this.parseReviver)}catch(l){if(n)throw l.name==="SyntaxError"?v.from(l,v.ERR_BAD_RESPONSE,this,null,this.response):l}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:q.classes.FormData,Blob:q.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};u.forEach(["delete","get","head","post","put","patch"],r=>{Ce.headers[r]={}});const Fa=u.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),La=r=>{const e={};let t,s,o;return r&&r.split(` +`).forEach(function(n){o=n.indexOf(":"),t=n.substring(0,o).trim().toLowerCase(),s=n.substring(o+1).trim(),!(!t||e[t]&&Fa[t])&&(t==="set-cookie"?e[t]?e[t].push(s):e[t]=[s]:e[t]=e[t]?e[t]+", "+s:s)}),e},Dt=Symbol("internals");function Ie(r){return r&&String(r).trim().toLowerCase()}function _e(r){return r===!1||r==null?r:u.isArray(r)?r.map(_e):String(r)}function za(r){const e=Object.create(null),t=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=t.exec(r);)e[s[1]]=s[2];return e}const ka=r=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(r.trim());function st(r,e,t,s,o){if(u.isFunction(s))return s.call(this,e,t);if(o&&(e=t),!!u.isString(e)){if(u.isString(s))return e.indexOf(s)!==-1;if(u.isRegExp(s))return s.test(e)}}function Ga(r){return r.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,s)=>t.toUpperCase()+s)}function _a(r,e){const t=u.toCamelCase(" "+e);["get","set","has"].forEach(s=>{Object.defineProperty(r,s+t,{value:function(o,a,n){return this[s].call(this,e,o,a,n)},configurable:!0})})}let N=class{constructor(e){e&&this.set(e)}set(e,t,s){const o=this;function a(l,i,c){const p=Ie(i);if(!p)throw new Error("header name must be a non-empty string");const y=u.findKey(o,p);(!y||o[y]===void 0||c===!0||c===void 0&&o[y]!==!1)&&(o[y||i]=_e(l))}const n=(l,i)=>u.forEach(l,(c,p)=>a(c,p,i));if(u.isPlainObject(e)||e instanceof this.constructor)n(e,t);else if(u.isString(e)&&(e=e.trim())&&!ka(e))n(La(e),t);else if(u.isObject(e)&&u.isIterable(e)){let l={},i,c;for(const p of e){if(!u.isArray(p))throw TypeError("Object iterator must return a key-value pair");l[c=p[0]]=(i=l[c])?u.isArray(i)?[...i,p[1]]:[i,p[1]]:p[1]}n(l,t)}else e!=null&&a(t,e,s);return this}get(e,t){if(e=Ie(e),e){const s=u.findKey(this,e);if(s){const o=this[s];if(!t)return o;if(t===!0)return za(o);if(u.isFunction(t))return t.call(this,o,s);if(u.isRegExp(t))return t.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Ie(e),e){const s=u.findKey(this,e);return!!(s&&this[s]!==void 0&&(!t||st(this,this[s],s,t)))}return!1}delete(e,t){const s=this;let o=!1;function a(n){if(n=Ie(n),n){const l=u.findKey(s,n);l&&(!t||st(s,s[l],l,t))&&(delete s[l],o=!0)}}return u.isArray(e)?e.forEach(a):a(e),o}clear(e){const t=Object.keys(this);let s=t.length,o=!1;for(;s--;){const a=t[s];(!e||st(this,this[a],a,e,!0))&&(delete this[a],o=!0)}return o}normalize(e){const t=this,s={};return u.forEach(this,(o,a)=>{const n=u.findKey(s,a);if(n){t[n]=_e(o),delete t[a];return}const l=e?Ga(a):String(a).trim();l!==a&&delete t[a],t[l]=_e(o),s[l]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return u.forEach(this,(s,o)=>{s!=null&&s!==!1&&(t[o]=e&&u.isArray(s)?s.join(", "):s)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const s=new this(e);return t.forEach(o=>s.set(o)),s}static accessor(e){const s=(this[Dt]=this[Dt]={accessors:{}}).accessors,o=this.prototype;function a(n){const l=Ie(n);s[l]||(_a(o,n),s[l]=!0)}return u.isArray(e)?e.forEach(a):a(e),this}};N.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);u.reduceDescriptors(N.prototype,({value:r},e)=>{let t=e[0].toUpperCase()+e.slice(1);return{get:()=>r,set(s){this[t]=s}}});u.freezeMethods(N);function at(r,e){const t=this||Ce,s=e||t,o=N.from(s.headers);let a=s.data;return u.forEach(r,function(l){a=l.call(t,a,o.normalize(),e?e.status:void 0)}),o.normalize(),a}function vr(r){return!!(r&&r.__CANCEL__)}function Ae(r,e,t){v.call(this,r??"canceled",v.ERR_CANCELED,e,t),this.name="CanceledError"}u.inherits(Ae,v,{__CANCEL__:!0});function Ur(r,e,t){const s=t.config.validateStatus;!t.status||!s||s(t.status)?r(t):e(new v("Request failed with status code "+t.status,[v.ERR_BAD_REQUEST,v.ERR_BAD_RESPONSE][Math.floor(t.status/100)-4],t.config,t.request,t))}function qa(r){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(r);return e&&e[1]||""}function Ha(r,e){r=r||10;const t=new Array(r),s=new Array(r);let o=0,a=0,n;return e=e!==void 0?e:1e3,function(i){const c=Date.now(),p=s[a];n||(n=c),t[o]=i,s[o]=c;let y=a,I=0;for(;y!==o;)I+=t[y++],y=y%r;if(o=(o+1)%r,o===a&&(a=(a+1)%r),c-n{t=p,o=null,a&&(clearTimeout(a),a=null),r(...c)};return[(...c)=>{const p=Date.now(),y=p-t;y>=s?n(c,p):(o=c,a||(a=setTimeout(()=>{a=null,n(o)},s-y)))},()=>o&&n(o)]}const Ne=(r,e,t=3)=>{let s=0;const o=Ha(50,250);return $a(a=>{const n=a.loaded,l=a.lengthComputable?a.total:void 0,i=n-s,c=o(i),p=n<=l;s=n;const y={loaded:n,total:l,progress:l?n/l:void 0,bytes:i,rate:c||void 0,estimated:c&&l&&p?(l-n)/c:void 0,event:a,lengthComputable:l!=null,[e?"download":"upload"]:!0};r(y)},t)},jt=(r,e)=>{const t=r!=null;return[s=>e[0]({lengthComputable:t,total:r,loaded:s}),e[1]]},Ft=r=>(...e)=>u.asap(()=>r(...e)),Na=q.hasStandardBrowserEnv?((r,e)=>t=>(t=new URL(t,q.origin),r.protocol===t.protocol&&r.host===t.host&&(e||r.port===t.port)))(new URL(q.origin),q.navigator&&/(msie|trident)/i.test(q.navigator.userAgent)):()=>!0,Wa=q.hasStandardBrowserEnv?{write(r,e,t,s,o,a){const n=[r+"="+encodeURIComponent(e)];u.isNumber(t)&&n.push("expires="+new Date(t).toGMTString()),u.isString(s)&&n.push("path="+s),u.isString(o)&&n.push("domain="+o),a===!0&&n.push("secure"),document.cookie=n.join("; ")},read(r){const e=document.cookie.match(new RegExp("(^|;\\s*)("+r+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(r){this.write(r,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Qa(r){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(r)}function Ma(r,e){return e?r.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):r}function Cr(r,e,t){let s=!Qa(e);return r&&(s||t==!1)?Ma(r,e):e}const Lt=r=>r instanceof N?{...r}:r;function he(r,e){e=e||{};const t={};function s(c,p,y,I){return u.isPlainObject(c)&&u.isPlainObject(p)?u.merge.call({caseless:I},c,p):u.isPlainObject(p)?u.merge({},p):u.isArray(p)?p.slice():p}function o(c,p,y,I){if(u.isUndefined(p)){if(!u.isUndefined(c))return s(void 0,c,y,I)}else return s(c,p,y,I)}function a(c,p){if(!u.isUndefined(p))return s(void 0,p)}function n(c,p){if(u.isUndefined(p)){if(!u.isUndefined(c))return s(void 0,c)}else return s(void 0,p)}function l(c,p,y){if(y in e)return s(c,p);if(y in r)return s(void 0,c)}const i={url:a,method:a,data:a,baseURL:n,transformRequest:n,transformResponse:n,paramsSerializer:n,timeout:n,timeoutMessage:n,withCredentials:n,withXSRFToken:n,adapter:n,responseType:n,xsrfCookieName:n,xsrfHeaderName:n,onUploadProgress:n,onDownloadProgress:n,decompress:n,maxContentLength:n,maxBodyLength:n,beforeRedirect:n,transport:n,httpAgent:n,httpsAgent:n,cancelToken:n,socketPath:n,responseEncoding:n,validateStatus:l,headers:(c,p,y)=>o(Lt(c),Lt(p),y,!0)};return u.forEach(Object.keys({...r,...e}),function(p){const y=i[p]||o,I=y(r[p],e[p],p);u.isUndefined(I)&&y!==l||(t[p]=I)}),t}const Tr=r=>{const e=he({},r);let{data:t,withXSRFToken:s,xsrfHeaderName:o,xsrfCookieName:a,headers:n,auth:l}=e;if(e.headers=n=N.from(n),e.url=Er(Cr(e.baseURL,e.url,e.allowAbsoluteUrls),r.params,r.paramsSerializer),l&&n.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),u.isFormData(t)){if(q.hasStandardBrowserEnv||q.hasStandardBrowserWebWorkerEnv)n.setContentType(void 0);else if(u.isFunction(t.getHeaders)){const i=t.getHeaders(),c=["content-type","content-length"];Object.entries(i).forEach(([p,y])=>{c.includes(p.toLowerCase())&&n.set(p,y)})}}if(q.hasStandardBrowserEnv&&(s&&u.isFunction(s)&&(s=s(e)),s||s!==!1&&Na(e.url))){const i=o&&a&&Wa.read(a);i&&n.set(o,i)}return e},Ja=typeof XMLHttpRequest<"u",Ka=Ja&&function(r){return new Promise(function(t,s){const o=Tr(r);let a=o.data;const n=N.from(o.headers).normalize();let{responseType:l,onUploadProgress:i,onDownloadProgress:c}=o,p,y,I,B,R;function f(){B&&B(),R&&R(),o.cancelToken&&o.cancelToken.unsubscribe(p),o.signal&&o.signal.removeEventListener("abort",p)}let w=new XMLHttpRequest;w.open(o.method.toUpperCase(),o.url,!0),w.timeout=o.timeout;function U(){if(!w)return;const E=N.from("getAllResponseHeaders"in w&&w.getAllResponseHeaders()),T={data:!l||l==="text"||l==="json"?w.responseText:w.response,status:w.status,statusText:w.statusText,headers:E,config:r,request:w};Ur(function(C){t(C),f()},function(C){s(C),f()},T),w=null}"onloadend"in w?w.onloadend=U:w.onreadystatechange=function(){!w||w.readyState!==4||w.status===0&&!(w.responseURL&&w.responseURL.indexOf("file:")===0)||setTimeout(U)},w.onabort=function(){w&&(s(new v("Request aborted",v.ECONNABORTED,r,w)),w=null)},w.onerror=function(x){const T=x&&x.message?x.message:"Network Error",D=new v(T,v.ERR_NETWORK,r,w);D.event=x||null,s(D),w=null},w.ontimeout=function(){let x=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const T=o.transitional||xr;o.timeoutErrorMessage&&(x=o.timeoutErrorMessage),s(new v(x,T.clarifyTimeoutError?v.ETIMEDOUT:v.ECONNABORTED,r,w)),w=null},a===void 0&&n.setContentType(null),"setRequestHeader"in w&&u.forEach(n.toJSON(),function(x,T){w.setRequestHeader(T,x)}),u.isUndefined(o.withCredentials)||(w.withCredentials=!!o.withCredentials),l&&l!=="json"&&(w.responseType=o.responseType),c&&([I,R]=Ne(c,!0),w.addEventListener("progress",I)),i&&w.upload&&([y,B]=Ne(i),w.upload.addEventListener("progress",y),w.upload.addEventListener("loadend",B)),(o.cancelToken||o.signal)&&(p=E=>{w&&(s(!E||E.type?new Ae(null,r,w):E),w.abort(),w=null)},o.cancelToken&&o.cancelToken.subscribe(p),o.signal&&(o.signal.aborted?p():o.signal.addEventListener("abort",p)));const F=qa(o.url);if(F&&q.protocols.indexOf(F)===-1){s(new v("Unsupported protocol "+F+":",v.ERR_BAD_REQUEST,r));return}w.send(a||null)})},Xa=(r,e)=>{const{length:t}=r=r?r.filter(Boolean):[];if(e||t){let s=new AbortController,o;const a=function(c){if(!o){o=!0,l();const p=c instanceof Error?c:this.reason;s.abort(p instanceof v?p:new Ae(p instanceof Error?p.message:p))}};let n=e&&setTimeout(()=>{n=null,a(new v(`timeout ${e} of ms exceeded`,v.ETIMEDOUT))},e);const l=()=>{r&&(n&&clearTimeout(n),n=null,r.forEach(c=>{c.unsubscribe?c.unsubscribe(a):c.removeEventListener("abort",a)}),r=null)};r.forEach(c=>c.addEventListener("abort",a));const{signal:i}=s;return i.unsubscribe=()=>u.asap(l),i}},Ya=function*(r,e){let t=r.byteLength;if(t{const o=Za(r,e);let a=0,n,l=i=>{n||(n=!0,s&&s(i))};return new ReadableStream({async pull(i){try{const{done:c,value:p}=await o.next();if(c){l(),i.close();return}let y=p.byteLength;if(t){let I=a+=y;t(I)}i.enqueue(new Uint8Array(p))}catch(c){throw l(c),c}},cancel(i){return l(i),o.return()}},{highWaterMark:2})},kt=64*1024,{isFunction:Fe}=u,to=(({Request:r,Response:e})=>({Request:r,Response:e}))(u.global),{ReadableStream:Gt,TextEncoder:_t}=u.global,qt=(r,...e)=>{try{return!!r(...e)}catch{return!1}},ro=r=>{r=u.merge.call({skipUndefined:!0},to,r);const{fetch:e,Request:t,Response:s}=r,o=e?Fe(e):typeof fetch=="function",a=Fe(t),n=Fe(s);if(!o)return!1;const l=o&&Fe(Gt),i=o&&(typeof _t=="function"?(R=>f=>R.encode(f))(new _t):async R=>new Uint8Array(await new t(R).arrayBuffer())),c=a&&l&&qt(()=>{let R=!1;const f=new t(q.origin,{body:new Gt,method:"POST",get duplex(){return R=!0,"half"}}).headers.has("Content-Type");return R&&!f}),p=n&&l&&qt(()=>u.isReadableStream(new s("").body)),y={stream:p&&(R=>R.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach(R=>{!y[R]&&(y[R]=(f,w)=>{let U=f&&f[R];if(U)return U.call(f);throw new v(`Response type '${R}' is not supported`,v.ERR_NOT_SUPPORT,w)})});const I=async R=>{if(R==null)return 0;if(u.isBlob(R))return R.size;if(u.isSpecCompliantForm(R))return(await new t(q.origin,{method:"POST",body:R}).arrayBuffer()).byteLength;if(u.isArrayBufferView(R)||u.isArrayBuffer(R))return R.byteLength;if(u.isURLSearchParams(R)&&(R=R+""),u.isString(R))return(await i(R)).byteLength},B=async(R,f)=>{const w=u.toFiniteNumber(R.getContentLength());return w??I(f)};return async R=>{let{url:f,method:w,data:U,signal:F,cancelToken:E,timeout:x,onDownloadProgress:T,onUploadProgress:D,responseType:C,headers:ie,withCredentials:te="same-origin",fetchOptions:ye}=Tr(R),Te=e||fetch;C=C?(C+"").toLowerCase():"text";let ue=Xa([F,E&&E.toAbortSignal()],x),k=null;const L=ue&&ue.unsubscribe&&(()=>{ue.unsubscribe()});let Oe;try{if(D&&c&&w!=="get"&&w!=="head"&&(Oe=await B(ie,U))!==0){let re=new t(f,{method:"POST",body:U,duplex:"half"}),me;if(u.isFormData(U)&&(me=re.headers.get("content-type"))&&ie.setContentType(me),re.body){const[Xe,De]=jt(Oe,Ne(Ft(D)));U=zt(re.body,kt,Xe,De)}}u.isString(te)||(te=te?"include":"omit");const M=a&&"credentials"in t.prototype,Pe={...ye,signal:ue,method:w.toUpperCase(),headers:ie.normalize().toJSON(),body:U,duplex:"half",credentials:M?te:void 0};k=a&&new t(f,Pe);let W=await(a?Te(k,ye):Te(f,Pe));const Be=p&&(C==="stream"||C==="response");if(p&&(T||Be&&L)){const re={};["status","statusText","headers"].forEach(At=>{re[At]=W[At]});const me=u.toFiniteNumber(W.headers.get("content-length")),[Xe,De]=T&&jt(me,Ne(Ft(T),!0))||[];W=new s(zt(W.body,kt,Xe,()=>{De&&De(),L&&L()}),re)}C=C||"text";let kr=await y[u.findKey(y,C)||"text"](W,R);return!Be&&L&&L(),await new Promise((re,me)=>{Ur(re,me,{data:kr,headers:N.from(W.headers),status:W.status,statusText:W.statusText,config:R,request:k})})}catch(M){throw L&&L(),M&&M.name==="TypeError"&&/Load failed|fetch/i.test(M.message)?Object.assign(new v("Network Error",v.ERR_NETWORK,R,k),{cause:M.cause||M}):v.from(M,M&&M.code,R,k)}}},so=new Map,Br=r=>{let e=r?r.env:{};const{fetch:t,Request:s,Response:o}=e,a=[s,o,t];let n=a.length,l=n,i,c,p=so;for(;l--;)i=a[l],c=p.get(i),c===void 0&&p.set(i,c=l?new Map:ro(e)),p=c;return c};Br();const dt={http:Aa,xhr:Ka,fetch:{get:Br}};u.forEach(dt,(r,e)=>{if(r){try{Object.defineProperty(r,"name",{value:e})}catch{}Object.defineProperty(r,"adapterName",{value:e})}});const Ht=r=>`- ${r}`,ao=r=>u.isFunction(r)||r===null||r===!1,Dr={getAdapter:(r,e)=>{r=u.isArray(r)?r:[r];const{length:t}=r;let s,o;const a={};for(let n=0;n`adapter ${i} `+(c===!1?"is not supported by the environment":"is not available in the build"));let l=t?n.length>1?`since : +`+n.map(Ht).join(` +`):" "+Ht(n[0]):"as no adapter specified";throw new v("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return o},adapters:dt};function ot(r){if(r.cancelToken&&r.cancelToken.throwIfRequested(),r.signal&&r.signal.aborted)throw new Ae(null,r)}function $t(r){return ot(r),r.headers=N.from(r.headers),r.data=at.call(r,r.transformRequest),["post","put","patch"].indexOf(r.method)!==-1&&r.headers.setContentType("application/x-www-form-urlencoded",!1),Dr.getAdapter(r.adapter||Ce.adapter,r)(r).then(function(s){return ot(r),s.data=at.call(r,r.transformResponse,s),s.headers=N.from(s.headers),s},function(s){return vr(s)||(ot(r),s&&s.response&&(s.response.data=at.call(r,r.transformResponse,s.response),s.response.headers=N.from(s.response.headers))),Promise.reject(s)})}const jr="1.12.2",Ke={};["object","boolean","number","function","string","symbol"].forEach((r,e)=>{Ke[r]=function(s){return typeof s===r||"a"+(e<1?"n ":" ")+r}});const Nt={};Ke.transitional=function(e,t,s){function o(a,n){return"[Axios v"+jr+"] Transitional option '"+a+"'"+n+(s?". "+s:"")}return(a,n,l)=>{if(e===!1)throw new v(o(n," has been removed"+(t?" in "+t:"")),v.ERR_DEPRECATED);return t&&!Nt[n]&&(Nt[n]=!0,console.warn(o(n," has been deprecated since v"+t+" and will be removed in the near future"))),e?e(a,n,l):!0}};Ke.spelling=function(e){return(t,s)=>(console.warn(`${s} is likely a misspelling of ${e}`),!0)};function oo(r,e,t){if(typeof r!="object")throw new v("options must be an object",v.ERR_BAD_OPTION_VALUE);const s=Object.keys(r);let o=s.length;for(;o-- >0;){const a=s[o],n=e[a];if(n){const l=r[a],i=l===void 0||n(l,a,r);if(i!==!0)throw new v("option "+a+" must be "+i,v.ERR_BAD_OPTION_VALUE);continue}if(t!==!0)throw new v("Unknown option "+a,v.ERR_BAD_OPTION)}}const qe={assertOptions:oo,validators:Ke},K=qe.validators;let de=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Bt,response:new Bt}}async request(e,t){try{return await this._request(e,t)}catch(s){if(s instanceof Error){let o={};Error.captureStackTrace?Error.captureStackTrace(o):o=new Error;const a=o.stack?o.stack.replace(/^.+\n/,""):"";try{s.stack?a&&!String(s.stack).endsWith(a.replace(/^.+\n.+\n/,""))&&(s.stack+=` +`+a):s.stack=a}catch{}}throw s}}_request(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=he(this.defaults,t);const{transitional:s,paramsSerializer:o,headers:a}=t;s!==void 0&&qe.assertOptions(s,{silentJSONParsing:K.transitional(K.boolean),forcedJSONParsing:K.transitional(K.boolean),clarifyTimeoutError:K.transitional(K.boolean)},!1),o!=null&&(u.isFunction(o)?t.paramsSerializer={serialize:o}:qe.assertOptions(o,{encode:K.function,serialize:K.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),qe.assertOptions(t,{baseUrl:K.spelling("baseURL"),withXsrfToken:K.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let n=a&&u.merge(a.common,a[t.method]);a&&u.forEach(["delete","get","head","post","put","patch","common"],R=>{delete a[R]}),t.headers=N.concat(n,a);const l=[];let i=!0;this.interceptors.request.forEach(function(f){typeof f.runWhen=="function"&&f.runWhen(t)===!1||(i=i&&f.synchronous,l.unshift(f.fulfilled,f.rejected))});const c=[];this.interceptors.response.forEach(function(f){c.push(f.fulfilled,f.rejected)});let p,y=0,I;if(!i){const R=[$t.bind(this),void 0];for(R.unshift(...l),R.push(...c),I=R.length,p=Promise.resolve(t);y{if(!s._listeners)return;let a=s._listeners.length;for(;a-- >0;)s._listeners[a](o);s._listeners=null}),this.promise.then=o=>{let a;const n=new Promise(l=>{s.subscribe(l),a=l}).then(o);return n.cancel=function(){s.unsubscribe(a)},n},e(function(a,n,l){s.reason||(s.reason=new Ae(a,n,l),t(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=s=>{e.abort(s)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new Fr(function(o){e=o}),cancel:e}}};function lo(r){return function(t){return r.apply(null,t)}}function io(r){return u.isObject(r)&&r.isAxiosError===!0}const ht={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(ht).forEach(([r,e])=>{ht[e]=r});function Lr(r){const e=new de(r),t=Or(de.prototype.request,e);return u.extend(t,de.prototype,e,{allOwnKeys:!0}),u.extend(t,e,null,{allOwnKeys:!0}),t.create=function(o){return Lr(he(r,o))},t}const h=Lr(Ce);h.Axios=de;h.CanceledError=Ae;h.CancelToken=no;h.isCancel=vr;h.VERSION=jr;h.toFormData=Je;h.AxiosError=v;h.Cancel=h.CanceledError;h.all=function(e){return Promise.all(e)};h.spread=lo;h.isAxiosError=io;h.mergeConfig=he;h.AxiosHeaders=N;h.formToJSON=r=>gr(u.isHTMLForm(r)?new FormData(r):r);h.getAdapter=Dr.getAdapter;h.HttpStatusCode=ht;h.default=h;const{Axios:Xo,AxiosError:Yo,CanceledError:Zo,isCancel:en,CancelToken:tn,VERSION:rn,all:sn,Cancel:an,isAxiosError:on,spread:nn,toFormData:ln,AxiosHeaders:cn,HttpStatusCode:pn,formToJSON:dn,getAdapter:hn,mergeConfig:un}=h,O="/api/v1".replace(/\/+$/,"");class H{constructor(e,t=O,s=h){this.basePath=t,this.axios=s,e&&(this.configuration=e,this.basePath=e.basePath??t)}configuration}class co extends Error{constructor(e,t){super(t),this.field=e,this.name="RequiredError"}}const P={},m="https://example.com",d=function(r,e,t){if(t==null)throw new co(e,`Required parameter ${e} was null or undefined when calling ${r}.`)},b=async function(r,e,t){if(t&&t.apiKey){const s=typeof t.apiKey=="function"?await t.apiKey(e):await t.apiKey;r[e]=s}};function ut(r,e,t=""){e!=null&&(typeof e=="object"?Array.isArray(e)?e.forEach(s=>ut(r,s,t)):Object.keys(e).forEach(s=>ut(r,e[s],`${t}${t!==""?".":""}${s}`)):r.has(t)?r.append(t,e):r.set(t,e))}const V=function(r,...e){const t=new URLSearchParams(r.search);ut(t,e),r.search=t.toString()},g=function(r,e,t){const s=typeof r!="string";return(s&&t&&t.isJsonMime?t.isJsonMime(e.headers["Content-Type"]):s)?JSON.stringify(r!==void 0?r:{}):r||""},S=function(r){return r.pathname+r.search+r.hash},A=function(r,e,t,s){return(o=e,a=t)=>{const n={...r.options,url:(o.defaults.baseURL?"":s?.basePath??a)+r.url};return o.request(n)}},po=function(r){return{updateController:async(e,t={})=>{d("updateController","body",e);const s="/controller",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"PUT",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}}}},ho=function(r){const e=po(r);return{async updateController(t,s){const o=await e.updateController(t,s),a=r?.serverIndex??0,n=P["ControllerApi.updateController"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class Wt extends H{updateController(e,t){return ho(this.configuration).updateController(e,t).then(s=>s(this.axios,this.basePath))}}const uo=function(r){return{controllerInfo:async(e={})=>{const t="/controller-info",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}}}},Oo=function(r){const e=uo(r);return{async controllerInfo(t){const s=await e.controllerInfo(t),o=r?.serverIndex??0,a=P["ControllerInfoApi.controllerInfo"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)}}};class Qt extends H{controllerInfo(e){return Oo(this.configuration).controllerInfo(e).then(t=>t(this.axios,this.basePath))}}const Po=function(r){return{createCredentials:async(e,t={})=>{d("createCredentials","body",e);const s="/github/credentials",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createGiteaCredentials:async(e,t={})=>{d("createGiteaCredentials","body",e);const s="/gitea/credentials",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},deleteCredentials:async(e,t={})=>{d("deleteCredentials","id",e);const s="/github/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteGiteaCredentials:async(e,t={})=>{d("deleteGiteaCredentials","id",e);const s="/gitea/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getCredentials:async(e,t={})=>{d("getCredentials","id",e);const s="/github/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getGiteaCredentials:async(e,t={})=>{d("getGiteaCredentials","id",e);const s="/gitea/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listCredentials:async(e={})=>{const t="/github/credentials",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listGiteaCredentials:async(e={})=>{const t="/gitea/credentials",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},updateCredentials:async(e,t,s={})=>{d("updateCredentials","id",e),d("updateCredentials","body",t);const o="/github/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateGiteaCredentials:async(e,t,s={})=>{d("updateGiteaCredentials","id",e),d("updateGiteaCredentials","body",t);const o="/gitea/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},X=function(r){const e=Po(r);return{async createCredentials(t,s){const o=await e.createCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.createCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createGiteaCredentials(t,s){const o=await e.createGiteaCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.createGiteaCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteCredentials(t,s){const o=await e.deleteCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.deleteCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteGiteaCredentials(t,s){const o=await e.deleteGiteaCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.deleteGiteaCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getCredentials(t,s){const o=await e.getCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.getCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getGiteaCredentials(t,s){const o=await e.getGiteaCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.getGiteaCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listCredentials(t){const s=await e.listCredentials(t),o=r?.serverIndex??0,a=P["CredentialsApi.listCredentials"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async listGiteaCredentials(t){const s=await e.listGiteaCredentials(t),o=r?.serverIndex??0,a=P["CredentialsApi.listGiteaCredentials"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async updateCredentials(t,s,o){const a=await e.updateCredentials(t,s,o),n=r?.serverIndex??0,l=P["CredentialsApi.updateCredentials"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateGiteaCredentials(t,s,o){const a=await e.updateGiteaCredentials(t,s,o),n=r?.serverIndex??0,l=P["CredentialsApi.updateGiteaCredentials"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class Mt extends H{createCredentials(e,t){return X(this.configuration).createCredentials(e,t).then(s=>s(this.axios,this.basePath))}createGiteaCredentials(e,t){return X(this.configuration).createGiteaCredentials(e,t).then(s=>s(this.axios,this.basePath))}deleteCredentials(e,t){return X(this.configuration).deleteCredentials(e,t).then(s=>s(this.axios,this.basePath))}deleteGiteaCredentials(e,t){return X(this.configuration).deleteGiteaCredentials(e,t).then(s=>s(this.axios,this.basePath))}getCredentials(e,t){return X(this.configuration).getCredentials(e,t).then(s=>s(this.axios,this.basePath))}getGiteaCredentials(e,t){return X(this.configuration).getGiteaCredentials(e,t).then(s=>s(this.axios,this.basePath))}listCredentials(e){return X(this.configuration).listCredentials(e).then(t=>t(this.axios,this.basePath))}listGiteaCredentials(e){return X(this.configuration).listGiteaCredentials(e).then(t=>t(this.axios,this.basePath))}updateCredentials(e,t,s){return X(this.configuration).updateCredentials(e,t,s).then(o=>o(this.axios,this.basePath))}updateGiteaCredentials(e,t,s){return X(this.configuration).updateGiteaCredentials(e,t,s).then(o=>o(this.axios,this.basePath))}}const mo=function(r){return{createGiteaEndpoint:async(e,t={})=>{d("createGiteaEndpoint","body",e);const s="/gitea/endpoints",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createGithubEndpoint:async(e,t={})=>{d("createGithubEndpoint","body",e);const s="/github/endpoints",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},deleteGiteaEndpoint:async(e,t={})=>{d("deleteGiteaEndpoint","name",e);const s="/gitea/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteGithubEndpoint:async(e,t={})=>{d("deleteGithubEndpoint","name",e);const s="/github/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getGiteaEndpoint:async(e,t={})=>{d("getGiteaEndpoint","name",e);const s="/gitea/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getGithubEndpoint:async(e,t={})=>{d("getGithubEndpoint","name",e);const s="/github/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listGiteaEndpoints:async(e={})=>{const t="/gitea/endpoints",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listGithubEndpoints:async(e={})=>{const t="/github/endpoints",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},updateGiteaEndpoint:async(e,t,s={})=>{d("updateGiteaEndpoint","name",e),d("updateGiteaEndpoint","body",t);const o="/gitea/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateGithubEndpoint:async(e,t,s={})=>{d("updateGithubEndpoint","name",e),d("updateGithubEndpoint","body",t);const o="/github/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},Y=function(r){const e=mo(r);return{async createGiteaEndpoint(t,s){const o=await e.createGiteaEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.createGiteaEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createGithubEndpoint(t,s){const o=await e.createGithubEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.createGithubEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteGiteaEndpoint(t,s){const o=await e.deleteGiteaEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.deleteGiteaEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteGithubEndpoint(t,s){const o=await e.deleteGithubEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.deleteGithubEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getGiteaEndpoint(t,s){const o=await e.getGiteaEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.getGiteaEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getGithubEndpoint(t,s){const o=await e.getGithubEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.getGithubEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listGiteaEndpoints(t){const s=await e.listGiteaEndpoints(t),o=r?.serverIndex??0,a=P["EndpointsApi.listGiteaEndpoints"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async listGithubEndpoints(t){const s=await e.listGithubEndpoints(t),o=r?.serverIndex??0,a=P["EndpointsApi.listGithubEndpoints"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async updateGiteaEndpoint(t,s,o){const a=await e.updateGiteaEndpoint(t,s,o),n=r?.serverIndex??0,l=P["EndpointsApi.updateGiteaEndpoint"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateGithubEndpoint(t,s,o){const a=await e.updateGithubEndpoint(t,s,o),n=r?.serverIndex??0,l=P["EndpointsApi.updateGithubEndpoint"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class Jt extends H{createGiteaEndpoint(e,t){return Y(this.configuration).createGiteaEndpoint(e,t).then(s=>s(this.axios,this.basePath))}createGithubEndpoint(e,t){return Y(this.configuration).createGithubEndpoint(e,t).then(s=>s(this.axios,this.basePath))}deleteGiteaEndpoint(e,t){return Y(this.configuration).deleteGiteaEndpoint(e,t).then(s=>s(this.axios,this.basePath))}deleteGithubEndpoint(e,t){return Y(this.configuration).deleteGithubEndpoint(e,t).then(s=>s(this.axios,this.basePath))}getGiteaEndpoint(e,t){return Y(this.configuration).getGiteaEndpoint(e,t).then(s=>s(this.axios,this.basePath))}getGithubEndpoint(e,t){return Y(this.configuration).getGithubEndpoint(e,t).then(s=>s(this.axios,this.basePath))}listGiteaEndpoints(e){return Y(this.configuration).listGiteaEndpoints(e).then(t=>t(this.axios,this.basePath))}listGithubEndpoints(e){return Y(this.configuration).listGithubEndpoints(e).then(t=>t(this.axios,this.basePath))}updateGiteaEndpoint(e,t,s){return Y(this.configuration).updateGiteaEndpoint(e,t,s).then(o=>o(this.axios,this.basePath))}updateGithubEndpoint(e,t,s){return Y(this.configuration).updateGithubEndpoint(e,t,s).then(o=>o(this.axios,this.basePath))}}const bo=function(r){return{createEnterprise:async(e,t={})=>{d("createEnterprise","body",e);const s="/enterprises",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createEnterprisePool:async(e,t,s={})=>{d("createEnterprisePool","enterpriseID",e),d("createEnterprisePool","body",t);const o="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createEnterpriseScaleSet:async(e,t,s={})=>{d("createEnterpriseScaleSet","enterpriseID",e),d("createEnterpriseScaleSet","body",t);const o="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteEnterprise:async(e,t={})=>{d("deleteEnterprise","enterpriseID",e);const s="/enterprises/{enterpriseID}".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteEnterprisePool:async(e,t,s={})=>{d("deleteEnterprisePool","enterpriseID",e),d("deleteEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getEnterprise:async(e,t={})=>{d("getEnterprise","enterpriseID",e);const s="/enterprises/{enterpriseID}".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getEnterprisePool:async(e,t,s={})=>{d("getEnterprisePool","enterpriseID",e),d("getEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},listEnterpriseInstances:async(e,t={})=>{d("listEnterpriseInstances","enterpriseID",e);const s="/enterprises/{enterpriseID}/instances".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterprisePools:async(e,t={})=>{d("listEnterprisePools","enterpriseID",e);const s="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterpriseScaleSets:async(e,t={})=>{d("listEnterpriseScaleSets","enterpriseID",e);const s="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterprises:async(e,t,s={})=>{const o="/enterprises",a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),e!==void 0&&(c.name=e),t!==void 0&&(c.endpoint=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},updateEnterprise:async(e,t,s={})=>{d("updateEnterprise","enterpriseID",e),d("updateEnterprise","body",t);const o="/enterprises/{enterpriseID}".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateEnterprisePool:async(e,t,s,o={})=>{d("updateEnterprisePool","enterpriseID",e),d("updateEnterprisePool","poolID",t),d("updateEnterprisePool","body",s);const a="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}}}},Q=function(r){const e=bo(r);return{async createEnterprise(t,s){const o=await e.createEnterprise(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.createEnterprise"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createEnterprisePool(t,s,o){const a=await e.createEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.createEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createEnterpriseScaleSet(t,s,o){const a=await e.createEnterpriseScaleSet(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.createEnterpriseScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteEnterprise(t,s){const o=await e.deleteEnterprise(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.deleteEnterprise"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteEnterprisePool(t,s,o){const a=await e.deleteEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.deleteEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getEnterprise(t,s){const o=await e.getEnterprise(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.getEnterprise"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getEnterprisePool(t,s,o){const a=await e.getEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.getEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async listEnterpriseInstances(t,s){const o=await e.listEnterpriseInstances(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.listEnterpriseInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterprisePools(t,s){const o=await e.listEnterprisePools(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.listEnterprisePools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterpriseScaleSets(t,s){const o=await e.listEnterpriseScaleSets(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.listEnterpriseScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterprises(t,s,o){const a=await e.listEnterprises(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.listEnterprises"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateEnterprise(t,s,o){const a=await e.updateEnterprise(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.updateEnterprise"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateEnterprisePool(t,s,o,a){const n=await e.updateEnterprisePool(t,s,o,a),l=r?.serverIndex??0,i=P["EnterprisesApi.updateEnterprisePool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)}}};class Kt extends H{createEnterprise(e,t){return Q(this.configuration).createEnterprise(e,t).then(s=>s(this.axios,this.basePath))}createEnterprisePool(e,t,s){return Q(this.configuration).createEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}createEnterpriseScaleSet(e,t,s){return Q(this.configuration).createEnterpriseScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteEnterprise(e,t){return Q(this.configuration).deleteEnterprise(e,t).then(s=>s(this.axios,this.basePath))}deleteEnterprisePool(e,t,s){return Q(this.configuration).deleteEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}getEnterprise(e,t){return Q(this.configuration).getEnterprise(e,t).then(s=>s(this.axios,this.basePath))}getEnterprisePool(e,t,s){return Q(this.configuration).getEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}listEnterpriseInstances(e,t){return Q(this.configuration).listEnterpriseInstances(e,t).then(s=>s(this.axios,this.basePath))}listEnterprisePools(e,t){return Q(this.configuration).listEnterprisePools(e,t).then(s=>s(this.axios,this.basePath))}listEnterpriseScaleSets(e,t){return Q(this.configuration).listEnterpriseScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listEnterprises(e,t,s){return Q(this.configuration).listEnterprises(e,t,s).then(o=>o(this.axios,this.basePath))}updateEnterprise(e,t,s){return Q(this.configuration).updateEnterprise(e,t,s).then(o=>o(this.axios,this.basePath))}updateEnterprisePool(e,t,s,o){return Q(this.configuration).updateEnterprisePool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const Vo=function(r){return{firstRun:async(e,t={})=>{d("firstRun","body",e);const s="/first-run",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}}}},So=function(r){const e=Vo(r);return{async firstRun(t,s){const o=await e.firstRun(t,s),a=r?.serverIndex??0,n=P["FirstRunApi.firstRun"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class Xt extends H{firstRun(e,t){return So(this.configuration).firstRun(e,t).then(s=>s(this.axios,this.basePath))}}const Ao=function(r){return{getOrgWebhookInfo:async(e,t={})=>{d("getOrgWebhookInfo","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getRepoWebhookInfo:async(e,t={})=>{d("getRepoWebhookInfo","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},installOrgWebhook:async(e,t,s={})=>{d("installOrgWebhook","orgID",e),d("installOrgWebhook","body",t);const o="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},installRepoWebhook:async(e,t,s={})=>{d("installRepoWebhook","repoID",e),d("installRepoWebhook","body",t);const o="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},uninstallOrgWebhook:async(e,t={})=>{d("uninstallOrgWebhook","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},uninstallRepoWebhook:async(e,t={})=>{d("uninstallRepoWebhook","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}}}},be=function(r){const e=Ao(r);return{async getOrgWebhookInfo(t,s){const o=await e.getOrgWebhookInfo(t,s),a=r?.serverIndex??0,n=P["HooksApi.getOrgWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getRepoWebhookInfo(t,s){const o=await e.getRepoWebhookInfo(t,s),a=r?.serverIndex??0,n=P["HooksApi.getRepoWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async installOrgWebhook(t,s,o){const a=await e.installOrgWebhook(t,s,o),n=r?.serverIndex??0,l=P["HooksApi.installOrgWebhook"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async installRepoWebhook(t,s,o){const a=await e.installRepoWebhook(t,s,o),n=r?.serverIndex??0,l=P["HooksApi.installRepoWebhook"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async uninstallOrgWebhook(t,s){const o=await e.uninstallOrgWebhook(t,s),a=r?.serverIndex??0,n=P["HooksApi.uninstallOrgWebhook"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async uninstallRepoWebhook(t,s){const o=await e.uninstallRepoWebhook(t,s),a=r?.serverIndex??0,n=P["HooksApi.uninstallRepoWebhook"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class Yt extends H{getOrgWebhookInfo(e,t){return be(this.configuration).getOrgWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}getRepoWebhookInfo(e,t){return be(this.configuration).getRepoWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}installOrgWebhook(e,t,s){return be(this.configuration).installOrgWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}installRepoWebhook(e,t,s){return be(this.configuration).installRepoWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}uninstallOrgWebhook(e,t){return be(this.configuration).uninstallOrgWebhook(e,t).then(s=>s(this.axios,this.basePath))}uninstallRepoWebhook(e,t){return be(this.configuration).uninstallRepoWebhook(e,t).then(s=>s(this.axios,this.basePath))}}const yo=function(r){return{deleteInstance:async(e,t,s,o={})=>{d("deleteInstance","instanceName",e);const a="/instances/{instanceName}".replace("{instanceName}",encodeURIComponent(String(e))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"DELETE",...l,...o},c={},p={};await b(c,"Authorization",r),t!==void 0&&(p.forceRemove=t),s!==void 0&&(p.bypassGHUnauthorized=s),V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},{url:S(n),options:i}},getInstance:async(e,t={})=>{d("getInstance","instanceName",e);const s="/instances/{instanceName}".replace("{instanceName}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterpriseInstances:async(e,t={})=>{d("listEnterpriseInstances","enterpriseID",e);const s="/enterprises/{enterpriseID}/instances".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listInstances:async(e={})=>{const t="/instances",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listOrgInstances:async(e,t={})=>{d("listOrgInstances","orgID",e);const s="/organizations/{orgID}/instances".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listPoolInstances:async(e,t={})=>{d("listPoolInstances","poolID",e);const s="/pools/{poolID}/instances".replace("{poolID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoInstances:async(e,t={})=>{d("listRepoInstances","repoID",e);const s="/repositories/{repoID}/instances".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listScaleSetInstances:async(e,t={})=>{d("listScaleSetInstances","scalesetID",e);const s="/scalesets/{scalesetID}/instances".replace("{scalesetID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}}}},le=function(r){const e=yo(r);return{async deleteInstance(t,s,o,a){const n=await e.deleteInstance(t,s,o,a),l=r?.serverIndex??0,i=P["InstancesApi.deleteInstance"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async getInstance(t,s){const o=await e.getInstance(t,s),a=r?.serverIndex??0,n=P["InstancesApi.getInstance"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterpriseInstances(t,s){const o=await e.listEnterpriseInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listEnterpriseInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listInstances(t){const s=await e.listInstances(t),o=r?.serverIndex??0,a=P["InstancesApi.listInstances"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async listOrgInstances(t,s){const o=await e.listOrgInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listOrgInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listPoolInstances(t,s){const o=await e.listPoolInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listPoolInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepoInstances(t,s){const o=await e.listRepoInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listRepoInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listScaleSetInstances(t,s){const o=await e.listScaleSetInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listScaleSetInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class Zt extends H{deleteInstance(e,t,s,o){return le(this.configuration).deleteInstance(e,t,s,o).then(a=>a(this.axios,this.basePath))}getInstance(e,t){return le(this.configuration).getInstance(e,t).then(s=>s(this.axios,this.basePath))}listEnterpriseInstances(e,t){return le(this.configuration).listEnterpriseInstances(e,t).then(s=>s(this.axios,this.basePath))}listInstances(e){return le(this.configuration).listInstances(e).then(t=>t(this.axios,this.basePath))}listOrgInstances(e,t){return le(this.configuration).listOrgInstances(e,t).then(s=>s(this.axios,this.basePath))}listPoolInstances(e,t){return le(this.configuration).listPoolInstances(e,t).then(s=>s(this.axios,this.basePath))}listRepoInstances(e,t){return le(this.configuration).listRepoInstances(e,t).then(s=>s(this.axios,this.basePath))}listScaleSetInstances(e,t){return le(this.configuration).listScaleSetInstances(e,t).then(s=>s(this.axios,this.basePath))}}const Ro=function(r){return{login:async(e,t={})=>{d("login","body",e);const s="/auth/login",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}}}},fo=function(r){const e=Ro(r);return{async login(t,s){const o=await e.login(t,s),a=r?.serverIndex??0,n=P["LoginApi.login"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class er extends H{login(e,t){return fo(this.configuration).login(e,t).then(s=>s(this.axios,this.basePath))}}const wo=function(r){return{deleteFileObject:async(e,t={})=>{d("deleteFileObject","objectID",e);const s="/objects/{objectID}".replace("{objectID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getFileObject:async(e,t={})=>{d("getFileObject","objectID",e);const s="/objects/{objectID}".replace("{objectID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listFileObjects:async(e,t,s,o={})=>{const a="/objects",n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"GET",...l,...o},c={},p={};await b(c,"Authorization",r),e!==void 0&&(p.tags=e),t!==void 0&&(p.page=t),s!==void 0&&(p.pageSize=s),V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},{url:S(n),options:i}},updateFileObject:async(e,t,s={})=>{d("updateFileObject","objectID",e),d("updateFileObject","body",t);const o="/objects/{objectID}".replace("{objectID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},Le=function(r){const e=wo(r);return{async deleteFileObject(t,s){const o=await e.deleteFileObject(t,s),a=r?.serverIndex??0,n=P["ObjectsApi.deleteFileObject"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getFileObject(t,s){const o=await e.getFileObject(t,s),a=r?.serverIndex??0,n=P["ObjectsApi.getFileObject"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listFileObjects(t,s,o,a){const n=await e.listFileObjects(t,s,o,a),l=r?.serverIndex??0,i=P["ObjectsApi.listFileObjects"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async updateFileObject(t,s,o){const a=await e.updateFileObject(t,s,o),n=r?.serverIndex??0,l=P["ObjectsApi.updateFileObject"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class Io extends H{deleteFileObject(e,t){return Le(this.configuration).deleteFileObject(e,t).then(s=>s(this.axios,this.basePath))}getFileObject(e,t){return Le(this.configuration).getFileObject(e,t).then(s=>s(this.axios,this.basePath))}listFileObjects(e,t,s,o){return Le(this.configuration).listFileObjects(e,t,s,o).then(a=>a(this.axios,this.basePath))}updateFileObject(e,t,s){return Le(this.configuration).updateFileObject(e,t,s).then(o=>o(this.axios,this.basePath))}}const Eo=function(r){return{createOrg:async(e,t={})=>{d("createOrg","body",e);const s="/organizations",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createOrgPool:async(e,t,s={})=>{d("createOrgPool","orgID",e),d("createOrgPool","body",t);const o="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createOrgScaleSet:async(e,t,s={})=>{d("createOrgScaleSet","orgID",e),d("createOrgScaleSet","body",t);const o="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteOrg:async(e,t,s={})=>{d("deleteOrg","orgID",e);const o="/organizations/{orgID}".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),t!==void 0&&(c.keepWebhook=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deleteOrgPool:async(e,t,s={})=>{d("deleteOrgPool","orgID",e),d("deleteOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getOrg:async(e,t={})=>{d("getOrg","orgID",e);const s="/organizations/{orgID}".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getOrgPool:async(e,t,s={})=>{d("getOrgPool","orgID",e),d("getOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getOrgWebhookInfo:async(e,t={})=>{d("getOrgWebhookInfo","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},installOrgWebhook:async(e,t,s={})=>{d("installOrgWebhook","orgID",e),d("installOrgWebhook","body",t);const o="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},listOrgInstances:async(e,t={})=>{d("listOrgInstances","orgID",e);const s="/organizations/{orgID}/instances".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgPools:async(e,t={})=>{d("listOrgPools","orgID",e);const s="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgScaleSets:async(e,t={})=>{d("listOrgScaleSets","orgID",e);const s="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgs:async(e,t,s={})=>{const o="/organizations",a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),e!==void 0&&(c.name=e),t!==void 0&&(c.endpoint=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},uninstallOrgWebhook:async(e,t={})=>{d("uninstallOrgWebhook","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},updateOrg:async(e,t,s={})=>{d("updateOrg","orgID",e),d("updateOrg","body",t);const o="/organizations/{orgID}".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateOrgPool:async(e,t,s,o={})=>{d("updateOrgPool","orgID",e),d("updateOrgPool","poolID",t),d("updateOrgPool","body",s);const a="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}}}},G=function(r){const e=Eo(r);return{async createOrg(t,s){const o=await e.createOrg(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.createOrg"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createOrgPool(t,s,o){const a=await e.createOrgPool(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.createOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createOrgScaleSet(t,s,o){const a=await e.createOrgScaleSet(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.createOrgScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteOrg(t,s,o){const a=await e.deleteOrg(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.deleteOrg"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteOrgPool(t,s,o){const a=await e.deleteOrgPool(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.deleteOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getOrg(t,s){const o=await e.getOrg(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.getOrg"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getOrgPool(t,s,o){const a=await e.getOrgPool(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.getOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getOrgWebhookInfo(t,s){const o=await e.getOrgWebhookInfo(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.getOrgWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async installOrgWebhook(t,s,o){const a=await e.installOrgWebhook(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.installOrgWebhook"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async listOrgInstances(t,s){const o=await e.listOrgInstances(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.listOrgInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgPools(t,s){const o=await e.listOrgPools(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.listOrgPools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgScaleSets(t,s){const o=await e.listOrgScaleSets(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.listOrgScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgs(t,s,o){const a=await e.listOrgs(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.listOrgs"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async uninstallOrgWebhook(t,s){const o=await e.uninstallOrgWebhook(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.uninstallOrgWebhook"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async updateOrg(t,s,o){const a=await e.updateOrg(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.updateOrg"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateOrgPool(t,s,o,a){const n=await e.updateOrgPool(t,s,o,a),l=r?.serverIndex??0,i=P["OrganizationsApi.updateOrgPool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)}}};class tr extends H{createOrg(e,t){return G(this.configuration).createOrg(e,t).then(s=>s(this.axios,this.basePath))}createOrgPool(e,t,s){return G(this.configuration).createOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}createOrgScaleSet(e,t,s){return G(this.configuration).createOrgScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteOrg(e,t,s){return G(this.configuration).deleteOrg(e,t,s).then(o=>o(this.axios,this.basePath))}deleteOrgPool(e,t,s){return G(this.configuration).deleteOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}getOrg(e,t){return G(this.configuration).getOrg(e,t).then(s=>s(this.axios,this.basePath))}getOrgPool(e,t,s){return G(this.configuration).getOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}getOrgWebhookInfo(e,t){return G(this.configuration).getOrgWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}installOrgWebhook(e,t,s){return G(this.configuration).installOrgWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}listOrgInstances(e,t){return G(this.configuration).listOrgInstances(e,t).then(s=>s(this.axios,this.basePath))}listOrgPools(e,t){return G(this.configuration).listOrgPools(e,t).then(s=>s(this.axios,this.basePath))}listOrgScaleSets(e,t){return G(this.configuration).listOrgScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listOrgs(e,t,s){return G(this.configuration).listOrgs(e,t,s).then(o=>o(this.axios,this.basePath))}uninstallOrgWebhook(e,t){return G(this.configuration).uninstallOrgWebhook(e,t).then(s=>s(this.axios,this.basePath))}updateOrg(e,t,s){return G(this.configuration).updateOrg(e,t,s).then(o=>o(this.axios,this.basePath))}updateOrgPool(e,t,s,o){return G(this.configuration).updateOrgPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const xo=function(r){return{createEnterprisePool:async(e,t,s={})=>{d("createEnterprisePool","enterpriseID",e),d("createEnterprisePool","body",t);const o="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createOrgPool:async(e,t,s={})=>{d("createOrgPool","orgID",e),d("createOrgPool","body",t);const o="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createRepoPool:async(e,t,s={})=>{d("createRepoPool","repoID",e),d("createRepoPool","body",t);const o="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteEnterprisePool:async(e,t,s={})=>{d("deleteEnterprisePool","enterpriseID",e),d("deleteEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deleteOrgPool:async(e,t,s={})=>{d("deleteOrgPool","orgID",e),d("deleteOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deletePool:async(e,t={})=>{d("deletePool","poolID",e);const s="/pools/{poolID}".replace("{poolID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteRepoPool:async(e,t,s={})=>{d("deleteRepoPool","repoID",e),d("deleteRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getEnterprisePool:async(e,t,s={})=>{d("getEnterprisePool","enterpriseID",e),d("getEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getOrgPool:async(e,t,s={})=>{d("getOrgPool","orgID",e),d("getOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getPool:async(e,t={})=>{d("getPool","poolID",e);const s="/pools/{poolID}".replace("{poolID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getRepoPool:async(e,t,s={})=>{d("getRepoPool","repoID",e),d("getRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},listEnterprisePools:async(e,t={})=>{d("listEnterprisePools","enterpriseID",e);const s="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgPools:async(e,t={})=>{d("listOrgPools","orgID",e);const s="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listPools:async(e={})=>{const t="/pools",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listRepoPools:async(e,t={})=>{d("listRepoPools","repoID",e);const s="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},updateEnterprisePool:async(e,t,s,o={})=>{d("updateEnterprisePool","enterpriseID",e),d("updateEnterprisePool","poolID",t),d("updateEnterprisePool","body",s);const a="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}},updateOrgPool:async(e,t,s,o={})=>{d("updateOrgPool","orgID",e),d("updateOrgPool","poolID",t),d("updateOrgPool","body",s);const a="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}},updatePool:async(e,t,s={})=>{d("updatePool","poolID",e),d("updatePool","body",t);const o="/pools/{poolID}".replace("{poolID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateRepoPool:async(e,t,s,o={})=>{d("updateRepoPool","repoID",e),d("updateRepoPool","poolID",t),d("updateRepoPool","body",s);const a="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}}}},j=function(r){const e=xo(r);return{async createEnterprisePool(t,s,o){const a=await e.createEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.createEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createOrgPool(t,s,o){const a=await e.createOrgPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.createOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createRepoPool(t,s,o){const a=await e.createRepoPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.createRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteEnterprisePool(t,s,o){const a=await e.deleteEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.deleteEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteOrgPool(t,s,o){const a=await e.deleteOrgPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.deleteOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deletePool(t,s){const o=await e.deletePool(t,s),a=r?.serverIndex??0,n=P["PoolsApi.deletePool"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteRepoPool(t,s,o){const a=await e.deleteRepoPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.deleteRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getEnterprisePool(t,s,o){const a=await e.getEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.getEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getOrgPool(t,s,o){const a=await e.getOrgPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.getOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getPool(t,s){const o=await e.getPool(t,s),a=r?.serverIndex??0,n=P["PoolsApi.getPool"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getRepoPool(t,s,o){const a=await e.getRepoPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.getRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async listEnterprisePools(t,s){const o=await e.listEnterprisePools(t,s),a=r?.serverIndex??0,n=P["PoolsApi.listEnterprisePools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgPools(t,s){const o=await e.listOrgPools(t,s),a=r?.serverIndex??0,n=P["PoolsApi.listOrgPools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listPools(t){const s=await e.listPools(t),o=r?.serverIndex??0,a=P["PoolsApi.listPools"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async listRepoPools(t,s){const o=await e.listRepoPools(t,s),a=r?.serverIndex??0,n=P["PoolsApi.listRepoPools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async updateEnterprisePool(t,s,o,a){const n=await e.updateEnterprisePool(t,s,o,a),l=r?.serverIndex??0,i=P["PoolsApi.updateEnterprisePool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async updateOrgPool(t,s,o,a){const n=await e.updateOrgPool(t,s,o,a),l=r?.serverIndex??0,i=P["PoolsApi.updateOrgPool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async updatePool(t,s,o){const a=await e.updatePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.updatePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateRepoPool(t,s,o,a){const n=await e.updateRepoPool(t,s,o,a),l=r?.serverIndex??0,i=P["PoolsApi.updateRepoPool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)}}};class rr extends H{createEnterprisePool(e,t,s){return j(this.configuration).createEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}createOrgPool(e,t,s){return j(this.configuration).createOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}createRepoPool(e,t,s){return j(this.configuration).createRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}deleteEnterprisePool(e,t,s){return j(this.configuration).deleteEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}deleteOrgPool(e,t,s){return j(this.configuration).deleteOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}deletePool(e,t){return j(this.configuration).deletePool(e,t).then(s=>s(this.axios,this.basePath))}deleteRepoPool(e,t,s){return j(this.configuration).deleteRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}getEnterprisePool(e,t,s){return j(this.configuration).getEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}getOrgPool(e,t,s){return j(this.configuration).getOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}getPool(e,t){return j(this.configuration).getPool(e,t).then(s=>s(this.axios,this.basePath))}getRepoPool(e,t,s){return j(this.configuration).getRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}listEnterprisePools(e,t){return j(this.configuration).listEnterprisePools(e,t).then(s=>s(this.axios,this.basePath))}listOrgPools(e,t){return j(this.configuration).listOrgPools(e,t).then(s=>s(this.axios,this.basePath))}listPools(e){return j(this.configuration).listPools(e).then(t=>t(this.axios,this.basePath))}listRepoPools(e,t){return j(this.configuration).listRepoPools(e,t).then(s=>s(this.axios,this.basePath))}updateEnterprisePool(e,t,s,o){return j(this.configuration).updateEnterprisePool(e,t,s,o).then(a=>a(this.axios,this.basePath))}updateOrgPool(e,t,s,o){return j(this.configuration).updateOrgPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}updatePool(e,t,s){return j(this.configuration).updatePool(e,t,s).then(o=>o(this.axios,this.basePath))}updateRepoPool(e,t,s,o){return j(this.configuration).updateRepoPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const go=function(r){return{listProviders:async(e={})=>{const t="/providers",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}}}},vo=function(r){const e=go(r);return{async listProviders(t){const s=await e.listProviders(t),o=r?.serverIndex??0,a=P["ProvidersApi.listProviders"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)}}};class sr extends H{listProviders(e){return vo(this.configuration).listProviders(e).then(t=>t(this.axios,this.basePath))}}const Uo=function(r){return{createRepo:async(e,t={})=>{d("createRepo","body",e);const s="/repositories",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createRepoPool:async(e,t,s={})=>{d("createRepoPool","repoID",e),d("createRepoPool","body",t);const o="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createRepoScaleSet:async(e,t,s={})=>{d("createRepoScaleSet","repoID",e),d("createRepoScaleSet","body",t);const o="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteRepo:async(e,t,s={})=>{d("deleteRepo","repoID",e);const o="/repositories/{repoID}".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),t!==void 0&&(c.keepWebhook=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deleteRepoPool:async(e,t,s={})=>{d("deleteRepoPool","repoID",e),d("deleteRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getRepo:async(e,t={})=>{d("getRepo","repoID",e);const s="/repositories/{repoID}".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getRepoPool:async(e,t,s={})=>{d("getRepoPool","repoID",e),d("getRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getRepoWebhookInfo:async(e,t={})=>{d("getRepoWebhookInfo","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},installRepoWebhook:async(e,t,s={})=>{d("installRepoWebhook","repoID",e),d("installRepoWebhook","body",t);const o="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},listRepoInstances:async(e,t={})=>{d("listRepoInstances","repoID",e);const s="/repositories/{repoID}/instances".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoPools:async(e,t={})=>{d("listRepoPools","repoID",e);const s="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoScaleSets:async(e,t={})=>{d("listRepoScaleSets","repoID",e);const s="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepos:async(e,t,s,o={})=>{const a="/repositories",n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"GET",...l,...o},c={},p={};await b(c,"Authorization",r),e!==void 0&&(p.owner=e),t!==void 0&&(p.name=t),s!==void 0&&(p.endpoint=s),V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},{url:S(n),options:i}},uninstallRepoWebhook:async(e,t={})=>{d("uninstallRepoWebhook","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},updateRepo:async(e,t,s={})=>{d("updateRepo","repoID",e),d("updateRepo","body",t);const o="/repositories/{repoID}".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateRepoPool:async(e,t,s,o={})=>{d("updateRepoPool","repoID",e),d("updateRepoPool","poolID",t),d("updateRepoPool","body",s);const a="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}}}},_=function(r){const e=Uo(r);return{async createRepo(t,s){const o=await e.createRepo(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.createRepo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createRepoPool(t,s,o){const a=await e.createRepoPool(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.createRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createRepoScaleSet(t,s,o){const a=await e.createRepoScaleSet(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.createRepoScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteRepo(t,s,o){const a=await e.deleteRepo(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.deleteRepo"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteRepoPool(t,s,o){const a=await e.deleteRepoPool(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.deleteRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getRepo(t,s){const o=await e.getRepo(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.getRepo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getRepoPool(t,s,o){const a=await e.getRepoPool(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.getRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getRepoWebhookInfo(t,s){const o=await e.getRepoWebhookInfo(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.getRepoWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async installRepoWebhook(t,s,o){const a=await e.installRepoWebhook(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.installRepoWebhook"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async listRepoInstances(t,s){const o=await e.listRepoInstances(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.listRepoInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepoPools(t,s){const o=await e.listRepoPools(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.listRepoPools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepoScaleSets(t,s){const o=await e.listRepoScaleSets(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.listRepoScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepos(t,s,o,a){const n=await e.listRepos(t,s,o,a),l=r?.serverIndex??0,i=P["RepositoriesApi.listRepos"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async uninstallRepoWebhook(t,s){const o=await e.uninstallRepoWebhook(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.uninstallRepoWebhook"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async updateRepo(t,s,o){const a=await e.updateRepo(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.updateRepo"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateRepoPool(t,s,o,a){const n=await e.updateRepoPool(t,s,o,a),l=r?.serverIndex??0,i=P["RepositoriesApi.updateRepoPool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)}}};class ar extends H{createRepo(e,t){return _(this.configuration).createRepo(e,t).then(s=>s(this.axios,this.basePath))}createRepoPool(e,t,s){return _(this.configuration).createRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}createRepoScaleSet(e,t,s){return _(this.configuration).createRepoScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteRepo(e,t,s){return _(this.configuration).deleteRepo(e,t,s).then(o=>o(this.axios,this.basePath))}deleteRepoPool(e,t,s){return _(this.configuration).deleteRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}getRepo(e,t){return _(this.configuration).getRepo(e,t).then(s=>s(this.axios,this.basePath))}getRepoPool(e,t,s){return _(this.configuration).getRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}getRepoWebhookInfo(e,t){return _(this.configuration).getRepoWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}installRepoWebhook(e,t,s){return _(this.configuration).installRepoWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}listRepoInstances(e,t){return _(this.configuration).listRepoInstances(e,t).then(s=>s(this.axios,this.basePath))}listRepoPools(e,t){return _(this.configuration).listRepoPools(e,t).then(s=>s(this.axios,this.basePath))}listRepoScaleSets(e,t){return _(this.configuration).listRepoScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listRepos(e,t,s,o){return _(this.configuration).listRepos(e,t,s,o).then(a=>a(this.axios,this.basePath))}uninstallRepoWebhook(e,t){return _(this.configuration).uninstallRepoWebhook(e,t).then(s=>s(this.axios,this.basePath))}updateRepo(e,t,s){return _(this.configuration).updateRepo(e,t,s).then(o=>o(this.axios,this.basePath))}updateRepoPool(e,t,s,o){return _(this.configuration).updateRepoPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const Co=function(r){return{createEnterpriseScaleSet:async(e,t,s={})=>{d("createEnterpriseScaleSet","enterpriseID",e),d("createEnterpriseScaleSet","body",t);const o="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createOrgScaleSet:async(e,t,s={})=>{d("createOrgScaleSet","orgID",e),d("createOrgScaleSet","body",t);const o="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createRepoScaleSet:async(e,t,s={})=>{d("createRepoScaleSet","repoID",e),d("createRepoScaleSet","body",t);const o="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteScaleSet:async(e,t={})=>{d("deleteScaleSet","scalesetID",e);const s="/scalesets/{scalesetID}".replace("{scalesetID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getScaleSet:async(e,t={})=>{d("getScaleSet","scalesetID",e);const s="/scalesets/{scalesetID}".replace("{scalesetID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterpriseScaleSets:async(e,t={})=>{d("listEnterpriseScaleSets","enterpriseID",e);const s="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgScaleSets:async(e,t={})=>{d("listOrgScaleSets","orgID",e);const s="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoScaleSets:async(e,t={})=>{d("listRepoScaleSets","repoID",e);const s="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listScalesets:async(e={})=>{const t="/scalesets",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},updateScaleSet:async(e,t,s={})=>{d("updateScaleSet","scalesetID",e),d("updateScaleSet","body",t);const o="/scalesets/{scalesetID}".replace("{scalesetID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},Z=function(r){const e=Co(r);return{async createEnterpriseScaleSet(t,s,o){const a=await e.createEnterpriseScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.createEnterpriseScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createOrgScaleSet(t,s,o){const a=await e.createOrgScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.createOrgScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createRepoScaleSet(t,s,o){const a=await e.createRepoScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.createRepoScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteScaleSet(t,s){const o=await e.deleteScaleSet(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.deleteScaleSet"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getScaleSet(t,s){const o=await e.getScaleSet(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.getScaleSet"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterpriseScaleSets(t,s){const o=await e.listEnterpriseScaleSets(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.listEnterpriseScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgScaleSets(t,s){const o=await e.listOrgScaleSets(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.listOrgScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepoScaleSets(t,s){const o=await e.listRepoScaleSets(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.listRepoScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listScalesets(t){const s=await e.listScalesets(t),o=r?.serverIndex??0,a=P["ScalesetsApi.listScalesets"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async updateScaleSet(t,s,o){const a=await e.updateScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.updateScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class or extends H{createEnterpriseScaleSet(e,t,s){return Z(this.configuration).createEnterpriseScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}createOrgScaleSet(e,t,s){return Z(this.configuration).createOrgScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}createRepoScaleSet(e,t,s){return Z(this.configuration).createRepoScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteScaleSet(e,t){return Z(this.configuration).deleteScaleSet(e,t).then(s=>s(this.axios,this.basePath))}getScaleSet(e,t){return Z(this.configuration).getScaleSet(e,t).then(s=>s(this.axios,this.basePath))}listEnterpriseScaleSets(e,t){return Z(this.configuration).listEnterpriseScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listOrgScaleSets(e,t){return Z(this.configuration).listOrgScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listRepoScaleSets(e,t){return Z(this.configuration).listRepoScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listScalesets(e){return Z(this.configuration).listScalesets(e).then(t=>t(this.axios,this.basePath))}updateScaleSet(e,t,s){return Z(this.configuration).updateScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}}const To=function(r){return{createTemplate:async(e,t={})=>{d("createTemplate","body",e);const s="/templates",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},deleteTemplate:async(e,t={})=>{d("deleteTemplate","templateID",e);const s="/templates/{templateID}".replace("{templateID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getTemplate:async(e,t={})=>{d("getTemplate","templateID",e);const s="/templates/{templateID}".replace("{templateID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listTemplates:async(e,t,s,o={})=>{const a="/templates",n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"GET",...l,...o},c={},p={};await b(c,"Authorization",r),e!==void 0&&(p.osType=e),t!==void 0&&(p.partialName=t),s!==void 0&&(p.forgeType=s),V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},{url:S(n),options:i}},updateTemplate:async(e,t,s={})=>{d("updateTemplate","templateID",e),d("updateTemplate","body",t);const o="/templates/{templateID}".replace("{templateID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},Ee=function(r){const e=To(r);return{async createTemplate(t,s){const o=await e.createTemplate(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.createTemplate"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteTemplate(t,s){const o=await e.deleteTemplate(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.deleteTemplate"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getTemplate(t,s){const o=await e.getTemplate(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.getTemplate"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listTemplates(t,s,o,a){const n=await e.listTemplates(t,s,o,a),l=r?.serverIndex??0,i=P["TemplatesApi.listTemplates"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async updateTemplate(t,s,o){const a=await e.updateTemplate(t,s,o),n=r?.serverIndex??0,l=P["TemplatesApi.updateTemplate"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class Bo extends H{createTemplate(e,t){return Ee(this.configuration).createTemplate(e,t).then(s=>s(this.axios,this.basePath))}deleteTemplate(e,t){return Ee(this.configuration).deleteTemplate(e,t).then(s=>s(this.axios,this.basePath))}getTemplate(e,t){return Ee(this.configuration).getTemplate(e,t).then(s=>s(this.axios,this.basePath))}listTemplates(e,t,s,o){return Ee(this.configuration).listTemplates(e,t,s,o).then(a=>a(this.axios,this.basePath))}updateTemplate(e,t,s){return Ee(this.configuration).updateTemplate(e,t,s).then(o=>o(this.axios,this.basePath))}}class nr{apiKey;username;password;accessToken;basePath;serverIndex;baseOptions;formDataCtor;constructor(e={}){this.apiKey=e.apiKey,this.username=e.username,this.password=e.password,this.accessToken=e.accessToken,this.basePath=e.basePath,this.serverIndex=e.serverIndex,this.baseOptions={...e.baseOptions,headers:{...e.baseOptions?.headers}},this.formDataCtor=e.formDataCtor}isJsonMime(e){const t=new RegExp("^(application/json|[^;/ ]+/[^;/ ]+[+]json)[ ]*(;.*)?$","i");return e!==null&&(t.test(e)||e.toLowerCase()==="application/json-patch+json")}}class zr{baseUrl;token;config;isDevelopmentMode(){return typeof window>"u"?!1:window.location.port==="5173"}loginApi;controllerInfoApi;controllerApi;endpointsApi;credentialsApi;repositoriesApi;organizationsApi;enterprisesApi;poolsApi;scaleSetsApi;instancesApi;providersApi;firstRunApi;hooksApi;templatesApi;objectsApi;constructor(e=""){this.baseUrl=e||window.location.origin;const t=this.isDevelopmentMode();this.config=new nr({basePath:`${this.baseUrl}/api/v1`,accessToken:()=>this.token||"",baseOptions:{withCredentials:!t}}),this.loginApi=new er(this.config),this.controllerInfoApi=new Qt(this.config),this.controllerApi=new Wt(this.config),this.endpointsApi=new Jt(this.config),this.credentialsApi=new Mt(this.config),this.repositoriesApi=new ar(this.config),this.organizationsApi=new tr(this.config),this.enterprisesApi=new Kt(this.config),this.poolsApi=new rr(this.config),this.scaleSetsApi=new or(this.config),this.instancesApi=new Zt(this.config),this.providersApi=new sr(this.config),this.firstRunApi=new Xt(this.config),this.hooksApi=new Yt(this.config),this.templatesApi=new Bo(this.config),this.objectsApi=new Io(this.config)}setToken(e){this.token=e;const t=this.isDevelopmentMode();this.config=new nr({basePath:`${this.baseUrl}/api/v1`,accessToken:()=>e,baseOptions:{withCredentials:!t}}),this.loginApi=new er(this.config),this.controllerInfoApi=new Qt(this.config),this.controllerApi=new Wt(this.config),this.endpointsApi=new Jt(this.config),this.credentialsApi=new Mt(this.config),this.repositoriesApi=new ar(this.config),this.organizationsApi=new tr(this.config),this.enterprisesApi=new Kt(this.config),this.poolsApi=new rr(this.config),this.scaleSetsApi=new or(this.config),this.instancesApi=new Zt(this.config),this.providersApi=new sr(this.config),this.firstRunApi=new Xt(this.config),this.hooksApi=new Yt(this.config)}async login(e){const t={username:e.username,password:e.password},o=(await this.loginApi.login(t)).data.token;if(o)return this.setToken(o),{token:o};throw new Error("Login failed")}async getControllerInfo(){return(await this.controllerInfoApi.controllerInfo()).data}async listGithubEndpoints(){return(await this.endpointsApi.listGithubEndpoints()).data||[]}async getGithubEndpoint(e){return(await this.endpointsApi.getGithubEndpoint(e)).data}async createGithubEndpoint(e){return(await this.endpointsApi.createGithubEndpoint(e)).data}async updateGithubEndpoint(e,t){return(await this.endpointsApi.updateGithubEndpoint(e,t)).data}async deleteGithubEndpoint(e){await this.endpointsApi.deleteGithubEndpoint(e)}async listGiteaEndpoints(){return(await this.endpointsApi.listGiteaEndpoints()).data||[]}async getGiteaEndpoint(e){return(await this.endpointsApi.getGiteaEndpoint(e)).data}async createGiteaEndpoint(e){return(await this.endpointsApi.createGiteaEndpoint(e)).data}async updateGiteaEndpoint(e,t){return(await this.endpointsApi.updateGiteaEndpoint(e,t)).data}async deleteGiteaEndpoint(e){await this.endpointsApi.deleteGiteaEndpoint(e)}async listAllEndpoints(){const[e,t]=await Promise.all([this.listGithubEndpoints().catch(()=>[]),this.listGiteaEndpoints().catch(()=>[])]);return[...e.map(s=>({...s,endpoint_type:"github"})),...t.map(s=>({...s,endpoint_type:"gitea"}))]}async listGithubCredentials(){return(await this.credentialsApi.listCredentials()).data||[]}async getGithubCredentials(e){return(await this.credentialsApi.getCredentials(e)).data}async createGithubCredentials(e){return(await this.credentialsApi.createCredentials(e)).data}async updateGithubCredentials(e,t){return(await this.credentialsApi.updateCredentials(e,t)).data}async deleteGithubCredentials(e){await this.credentialsApi.deleteCredentials(e)}async listGiteaCredentials(){return(await this.credentialsApi.listGiteaCredentials()).data||[]}async getGiteaCredentials(e){return(await this.credentialsApi.getGiteaCredentials(e)).data}async createGiteaCredentials(e){return(await this.credentialsApi.createGiteaCredentials(e)).data}async updateGiteaCredentials(e,t){return(await this.credentialsApi.updateGiteaCredentials(e,t)).data}async deleteGiteaCredentials(e){await this.credentialsApi.deleteGiteaCredentials(e)}async listAllCredentials(){const[e,t]=await Promise.all([this.listGithubCredentials().catch(()=>[]),this.listGiteaCredentials().catch(()=>[])]);return[...e,...t]}async installRepositoryWebhook(e,t={}){await this.repositoriesApi.installRepoWebhook(e,t)}async uninstallRepositoryWebhook(e){await this.hooksApi.uninstallRepoWebhook(e)}async getRepositoryWebhookInfo(e){return(await this.hooksApi.getRepoWebhookInfo(e)).data}async listRepositories(){return(await this.repositoriesApi.listRepos()).data||[]}async getRepository(e){return(await this.repositoriesApi.getRepo(e)).data}async createRepository(e){return(await this.repositoriesApi.createRepo(e)).data}async updateRepository(e,t){return(await this.repositoriesApi.updateRepo(e,t)).data}async deleteRepository(e){await this.repositoriesApi.deleteRepo(e)}async installRepoWebhook(e){await this.repositoriesApi.installRepoWebhook(e,{})}async listRepositoryPools(e){return(await this.repositoriesApi.listRepoPools(e)).data||[]}async listRepositoryInstances(e){return(await this.repositoriesApi.listRepoInstances(e)).data||[]}async createRepositoryPool(e,t){return(await this.repositoriesApi.createRepoPool(e,t)).data}async installOrganizationWebhook(e,t={}){await this.organizationsApi.installOrgWebhook(e,t)}async uninstallOrganizationWebhook(e){await this.hooksApi.uninstallOrgWebhook(e)}async getOrganizationWebhookInfo(e){return(await this.hooksApi.getOrgWebhookInfo(e)).data}async listOrganizations(){return(await this.organizationsApi.listOrgs()).data||[]}async getOrganization(e){return(await this.organizationsApi.getOrg(e)).data}async createOrganization(e){return(await this.organizationsApi.createOrg(e)).data}async updateOrganization(e,t){return(await this.organizationsApi.updateOrg(e,t)).data}async deleteOrganization(e){await this.organizationsApi.deleteOrg(e)}async listOrganizationPools(e){return(await this.organizationsApi.listOrgPools(e)).data||[]}async listOrganizationInstances(e){return(await this.organizationsApi.listOrgInstances(e)).data||[]}async createOrganizationPool(e,t){return(await this.organizationsApi.createOrgPool(e,t)).data}async listEnterprises(){return(await this.enterprisesApi.listEnterprises()).data||[]}async getEnterprise(e){return(await this.enterprisesApi.getEnterprise(e)).data}async createEnterprise(e){return(await this.enterprisesApi.createEnterprise(e)).data}async updateEnterprise(e,t){return(await this.enterprisesApi.updateEnterprise(e,t)).data}async deleteEnterprise(e){await this.enterprisesApi.deleteEnterprise(e)}async listEnterprisePools(e){return(await this.enterprisesApi.listEnterprisePools(e)).data||[]}async listEnterpriseInstances(e){return(await this.enterprisesApi.listEnterpriseInstances(e)).data||[]}async createEnterprisePool(e,t){return(await this.enterprisesApi.createEnterprisePool(e,t)).data}async createRepositoryScaleSet(e,t){return(await this.repositoriesApi.createRepoScaleSet(e,t)).data}async listRepositoryScaleSets(e){return(await this.repositoriesApi.listRepoScaleSets(e)).data||[]}async createOrganizationScaleSet(e,t){return(await this.organizationsApi.createOrgScaleSet(e,t)).data}async listOrganizationScaleSets(e){return(await this.organizationsApi.listOrgScaleSets(e)).data||[]}async createEnterpriseScaleSet(e,t){return(await this.enterprisesApi.createEnterpriseScaleSet(e,t)).data}async listEnterpriseScaleSets(e){return(await this.enterprisesApi.listEnterpriseScaleSets(e)).data||[]}async listPools(){return(await this.poolsApi.listPools()).data||[]}async listAllPools(){return this.listPools()}async getPool(e){return(await this.poolsApi.getPool(e)).data}async updatePool(e,t){return(await this.poolsApi.updatePool(e,t)).data}async deletePool(e){await this.poolsApi.deletePool(e)}async listScaleSets(){return(await this.scaleSetsApi.listScalesets()).data||[]}async getScaleSet(e){return(await this.scaleSetsApi.getScaleSet(e.toString())).data}async updateScaleSet(e,t){return(await this.scaleSetsApi.updateScaleSet(e.toString(),t)).data}async deleteScaleSet(e){await this.scaleSetsApi.deleteScaleSet(e.toString())}async listInstances(){return(await this.instancesApi.listInstances()).data||[]}async getInstance(e){return(await this.instancesApi.getInstance(e)).data}async deleteInstance(e){await this.instancesApi.deleteInstance(e)}async listProviders(){return(await this.providersApi.listProviders()).data||[]}async listCredentials(){return this.listAllCredentials()}async listEndpoints(){return this.listAllEndpoints()}async firstRun(e){return(await this.firstRunApi.firstRun(e)).data}async updateController(e){return(await this.controllerApi.updateController(e)).data}async listTemplates(e,t,s){return(await this.templatesApi.listTemplates(e,t,s)).data||[]}async getTemplate(e){return(await this.templatesApi.getTemplate(e)).data}async createTemplate(e){return(await this.templatesApi.createTemplate(e)).data}async updateTemplate(e,t){return(await this.templatesApi.updateTemplate(e.toString(),t)).data}async deleteTemplate(e){await this.templatesApi.deleteTemplate(e)}async listFileObjects(e,t,s){return(await this.objectsApi.listFileObjects(e,t,s)).data}async getFileObject(e){return(await this.objectsApi.getFileObject(e)).data}async updateFileObject(e,t){return(await this.objectsApi.updateFileObject(e,t)).data}async deleteFileObject(e){await this.objectsApi.deleteFileObject(e)}}new zr;class Do extends zr{constructor(e=""){super(e)}}const On=new Do;var jo=Pt(''),Fo=Pt(''),Lo=Pt(''),zo=As("");function Pn(r,e){const t=It(e,["children","$$slots","$$events","$$legacy"]),s=It(t,["variant","size","disabled","loading","type","fullWidth","icon","iconPosition"]);bs(e,!1);const o=ae(),a=ae(),n=ae(),l=ae(),i=ae(),c=ae(),p=ae(),y=ae(),I=Vs();let B=ne(e,"variant",8,"primary"),R=ne(e,"size",8,"md"),f=ne(e,"disabled",8,!1),w=ne(e,"loading",8,!1),U=ne(e,"type",8,"button"),F=ne(e,"fullWidth",8,!1),E=ne(e,"icon",8,null),x=ne(e,"iconPosition",8,"left");function T(){!f()&&!w()&&I("click")}se(()=>{},()=>{oe(o,"inline-flex items-center justify-center font-medium rounded-md transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-gray-900 cursor-pointer disabled:cursor-not-allowed")}),se(()=>ce(R()),()=>{oe(a,{sm:"px-3 py-2 text-sm",md:"px-4 py-2 text-sm",lg:"px-6 py-3 text-base"}[R()])}),se(()=>ce(B()),()=>{oe(n,{primary:"text-white bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 disabled:bg-gray-400 disabled:hover:bg-gray-400",secondary:"text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600 focus:ring-blue-500",danger:"text-white bg-red-600 hover:bg-red-700 focus:ring-red-500 disabled:bg-gray-400 disabled:hover:bg-gray-400",ghost:"text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 focus:ring-blue-500"}[B()])}),se(()=>ce(F()),()=>{oe(l,F()?"w-full":"")}),se(()=>ce(f()),()=>{oe(i,f()?"opacity-50":"")}),se(()=>(z(o),z(a),z(n),z(l),z(i)),()=>{oe(c,[z(o),z(a),z(n),z(l),z(i)].filter(Boolean).join(" "))}),se(()=>ce(R()),()=>{oe(p,{sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6"}[R()])}),se(()=>(ce(x()),ce(R())),()=>{oe(y,{sm:x()==="left"?"-ml-0.5 mr-2":"ml-2 -mr-0.5",md:x()==="left"?"-ml-1 mr-2":"ml-2 -mr-1",lg:x()==="left"?"-ml-1 mr-3":"ml-3 -mr-1"}[R()])}),Ss(),qr();var D=zo();Ds(D,()=>({type:U(),disabled:f(),class:z(c),...s}));var C=Ye(D);{var ie=k=>{var L=jo();ze(()=>ke(L,0,`animate-spin ${z(p)??""} ${x()==="left"?"-ml-1 mr-2":"ml-2 -mr-1"}`)),Re(k,L)},te=k=>{var L=fs(),Oe=ws(L);{var M=Pe=>{var W=Fo(),Be=Ye(W);Et(Be,E,!0),Ze(W),ze(()=>ke(W,0,`${z(p)??""} ${z(y)??""}`)),Re(Pe,W)};et(Oe,Pe=>{E()&&x()==="left"&&Pe(M)},!0)}Re(k,L)};et(C,k=>{w()?k(ie):k(te,!1)})}var ye=wt(C,2);Is(ye,e,"default",{});var Te=wt(ye,2);{var ue=k=>{var L=Lo(),Oe=Ye(L);Et(Oe,E,!0),Ze(L),ze(()=>ke(L,0,`${z(p)??""} ${z(y)??""}`)),Re(k,L)};et(Te,k=>{E()&&x()==="right"&&!w()&&k(ue)})}Ze(D),ys("click",D,T),Re(r,D),Rs()}export{Pn as B,Qo as a,No as b,$e as c,Mo as d,$o as e,Is as f,On as g,Et as h,Ds as i,gs as j,Cs as k,Wo as r,ke as s}; diff --git a/webapp/assets/_app/immutable/chunks/Dh8uHEF5.js b/webapp/assets/_app/immutable/chunks/Dh8uHEF5.js deleted file mode 100644 index 3dffddb4..00000000 --- a/webapp/assets/_app/immutable/chunks/Dh8uHEF5.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as R}from"./TJn6xDN9.js";import{p as j,l as w,h as A,f as g,t as k,b as v,c as B,s as D,d as u,k as _,m as y,r as m,q as f,u as h,g as d,e as U}from"./DniTuB_0.js";import{p as o,i as F}from"./DbNhg6mG.js";import{c as b,s as G,d as n}from"./BZ2rxtTc.js";var H=g('
'),J=g('');function V(x,a){j(a,!1);const i=y(),p=y();let e=o(a,"item",8),s=o(a,"entityType",8,"repository"),E=o(a,"showOwner",8,!1),I=o(a,"showId",8,!1),z=o(a,"fontMono",8,!1);function C(){if(!e())return"Unknown";switch(s()){case"repository":return E()?`${e().owner||"Unknown"}/${e().name||"Unknown"}`:e().name||"Unknown";case"organization":case"enterprise":return e().name||"Unknown";case"pool":return I()?e().id||"Unknown":e().name||"Unknown";case"scaleset":return e().name||"Unknown";case"instance":return e().name||"Unknown";case"template":return e().name||"Unknown";default:return e().name||e().id||"Unknown"}}function M(){if(!e())return"#";let t;switch(s()){case"instance":t=e().name;break;default:t=e().id||e().name;break}if(!t)return"#";switch(s()){case"repository":return n(`/repositories/${t}`);case"organization":return n(`/organizations/${t}`);case"enterprise":return n(`/enterprises/${t}`);case"pool":return n(`/pools/${t}`);case"scaleset":return n(`/scalesets/${t}`);case"instance":return n(`/instances/${encodeURIComponent(t)}`);case"template":return n(`/templates/${t}`);default:return"#"}}w(()=>{},()=>{_(i,C())}),w(()=>{},()=>{_(p,M())}),A(),R();var c=J(),r=u(c),N=u(r,!0);m(r);var O=D(r);{var T=t=>{var l=H(),q=u(l,!0);m(l),k(()=>U(q,(f(e()),h(()=>e().provider_id)))),v(t,l)};F(O,t=>{f(s()),f(e()),h(()=>s()==="instance"&&e()?.provider_id)&&t(T)})}m(c),k(()=>{b(r,"href",d(p)),G(r,1,`block w-full truncate text-blue-600 dark:text-blue-400 hover:text-blue-500 dark:hover:text-blue-300 ${z()?"font-mono":""}`),b(r,"title",d(i)),U(N,d(i))}),v(x,c),B()}export{V as E}; diff --git a/webapp/assets/_app/immutable/chunks/C-CyTC2O.js b/webapp/assets/_app/immutable/chunks/DoxpoDLH.js similarity index 95% rename from webapp/assets/_app/immutable/chunks/C-CyTC2O.js rename to webapp/assets/_app/immutable/chunks/DoxpoDLH.js index 31086df8..7653b5f4 100644 --- a/webapp/assets/_app/immutable/chunks/C-CyTC2O.js +++ b/webapp/assets/_app/immutable/chunks/DoxpoDLH.js @@ -1,4 +1,4 @@ -import"./DsnmJJEf.js";import{i as g}from"./TJn6xDN9.js";import{p as x,l as k,k as d,m as w,q as y,h as J,f as b,d as z,x as L,s as j,g as c,r as q,t as B,b as f,c as C}from"./DniTuB_0.js";import{p as o,i as E}from"./DbNhg6mG.js";import{c as n,s as M}from"./BZ2rxtTc.js";import{b as N}from"./CCQwxxp9.js";var O=b('
'),S=b('
');function I(m,r){x(r,!1);let t=o(r,"value",12,""),p=o(r,"placeholder",8,"{}"),u=o(r,"rows",8,4),i=o(r,"disabled",8,!1),a=w(!0);k(()=>y(t()),()=>{if(t().trim())try{JSON.parse(t()),d(a,!0)}catch{d(a,!1)}else d(a,!0)}),J(),g();var l=S(),e=z(l);L(e);var v=j(e,2);{var h=s=>{var _=O();f(s,_)};E(v,s=>{c(a)||s(h)})}q(l),B(()=>{n(e,"placeholder",p()),n(e,"rows",u()),e.disabled=i(),M(e,1,`w-full px-3 py-2 border rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 font-mono text-sm resize-none +import"./DsnmJJEf.js";import{i as g}from"./TJn6xDN9.js";import{p as x,l as k,k as d,m as w,q as y,h as J,f as b,d as z,x as L,s as j,g as c,r as q,t as B,b as f,c as C}from"./DniTuB_0.js";import{p as o,i as E}from"./DbNhg6mG.js";import{c as n,s as M}from"./DSfKzFV1.js";import{b as N}from"./CCQwxxp9.js";var O=b('
'),S=b('
');function I(m,r){x(r,!1);let t=o(r,"value",12,""),p=o(r,"placeholder",8,"{}"),u=o(r,"rows",8,4),i=o(r,"disabled",8,!1),a=w(!0);k(()=>y(t()),()=>{if(t().trim())try{JSON.parse(t()),d(a,!0)}catch{d(a,!1)}else d(a,!0)}),J(),g();var l=S(),e=z(l);L(e);var v=j(e,2);{var h=s=>{var _=O();f(s,_)};E(v,s=>{c(a)||s(h)})}q(l),B(()=>{n(e,"placeholder",p()),n(e,"rows",u()),e.disabled=i(),M(e,1,`w-full px-3 py-2 border rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 font-mono text-sm resize-none ${c(a)?"border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-white":"border-red-300 dark:border-red-600 bg-red-50 dark:bg-red-900/20 text-red-900 dark:text-red-100"} ${i()?"opacity-50 cursor-not-allowed":""} `)}),N(e,t),f(m,l),C()}export{I as J}; diff --git a/webapp/assets/_app/immutable/chunks/J4QHiesY.js b/webapp/assets/_app/immutable/chunks/DsCgpFQt.js similarity index 97% rename from webapp/assets/_app/immutable/chunks/J4QHiesY.js rename to webapp/assets/_app/immutable/chunks/DsCgpFQt.js index da7b7d89..6df24c95 100644 --- a/webapp/assets/_app/immutable/chunks/J4QHiesY.js +++ b/webapp/assets/_app/immutable/chunks/DsCgpFQt.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import"./TJn6xDN9.js";import{f as k,d as a,s as m,r as i,t as g,e as f,b as v,z as p,D as z}from"./DniTuB_0.js";import{p as t,i as u}from"./DbNhg6mG.js";import{s as Y,h as Z,B as H}from"./BZ2rxtTc.js";var $=k('
'),ee=k('
'),te=k('

');function se(j,e){let E=t(e,"title",8),M=t(e,"subtitle",8),D=t(e,"forgeIcon",8,""),h=t(e,"onEdit",8,null),x=t(e,"onDelete",8,null),B=t(e,"editLabel",8,"Edit"),C=t(e,"deleteLabel",8,"Delete"),P=t(e,"editVariant",8,"secondary"),A=t(e,"deleteVariant",8,"danger"),q=t(e,"editDisabled",8,!1),F=t(e,"deleteDisabled",8,!1),G=t(e,"editIcon",8,""),J=t(e,"deleteIcon",8,""),K=t(e,"titleClass",8,"");var _=te(),y=a(_),w=a(y),b=a(w),I=a(b);{var N=l=>{var d=$(),c=a(d);Z(c,D),i(d),v(l,d)};u(I,l=>{D()&&l(N)})}var L=m(I,2),o=a(L),O=a(o,!0);i(o);var V=m(o,2),Q=a(V,!0);i(V),i(L),i(b);var R=m(b,2);{var S=l=>{var d=ee(),c=a(d);{var T=r=>{H(r,{get variant(){return P()},size:"md",get disabled(){return q()},get icon(){return G()},$$events:{click(...s){h()?.apply(this,s)}},children:(s,X)=>{p();var n=z();g(()=>f(n,B())),v(s,n)},$$slots:{default:!0}})};u(c,r=>{h()&&r(T)})}var U=m(c,2);{var W=r=>{H(r,{get variant(){return A()},size:"md",get disabled(){return F()},get icon(){return J()},$$events:{click(...s){x()?.apply(this,s)}},children:(s,X)=>{p();var n=z();g(()=>f(n,C())),v(s,n)},$$slots:{default:!0}})};u(U,r=>{x()&&r(W)})}i(d),v(l,d)};u(R,l=>{(h()||x())&&l(S)})}i(w),i(y),i(_),g(()=>{Y(o,1,`text-2xl font-bold text-gray-900 dark:text-white ${K()??""}`),f(O,E()),f(Q,M())}),v(j,_)}export{se as D}; +import"./DsnmJJEf.js";import"./TJn6xDN9.js";import{f as k,d as a,s as m,r as i,t as g,e as f,b as v,z as p,D as z}from"./DniTuB_0.js";import{p as t,i as u}from"./DbNhg6mG.js";import{s as Y,h as Z,B as H}from"./DSfKzFV1.js";var $=k('
'),ee=k('
'),te=k('

');function se(j,e){let E=t(e,"title",8),M=t(e,"subtitle",8),D=t(e,"forgeIcon",8,""),h=t(e,"onEdit",8,null),x=t(e,"onDelete",8,null),B=t(e,"editLabel",8,"Edit"),C=t(e,"deleteLabel",8,"Delete"),P=t(e,"editVariant",8,"secondary"),A=t(e,"deleteVariant",8,"danger"),q=t(e,"editDisabled",8,!1),F=t(e,"deleteDisabled",8,!1),G=t(e,"editIcon",8,""),J=t(e,"deleteIcon",8,""),K=t(e,"titleClass",8,"");var _=te(),y=a(_),w=a(y),b=a(w),I=a(b);{var N=l=>{var d=$(),c=a(d);Z(c,D),i(d),v(l,d)};u(I,l=>{D()&&l(N)})}var L=m(I,2),o=a(L),O=a(o,!0);i(o);var V=m(o,2),Q=a(V,!0);i(V),i(L),i(b);var R=m(b,2);{var S=l=>{var d=ee(),c=a(d);{var T=r=>{H(r,{get variant(){return P()},size:"md",get disabled(){return q()},get icon(){return G()},$$events:{click(...s){h()?.apply(this,s)}},children:(s,X)=>{p();var n=z();g(()=>f(n,B())),v(s,n)},$$slots:{default:!0}})};u(c,r=>{h()&&r(T)})}var U=m(c,2);{var W=r=>{H(r,{get variant(){return A()},size:"md",get disabled(){return F()},get icon(){return J()},$$events:{click(...s){x()?.apply(this,s)}},children:(s,X)=>{p();var n=z();g(()=>f(n,C())),v(s,n)},$$slots:{default:!0}})};u(U,r=>{x()&&r(W)})}i(d),v(l,d)};u(R,l=>{(h()||x())&&l(S)})}i(w),i(y),i(_),g(()=>{Y(o,1,`text-2xl font-bold text-gray-900 dark:text-white ${K()??""}`),f(O,E()),f(Q,M())}),v(j,_)}export{se as D}; diff --git a/webapp/assets/_app/immutable/chunks/1biM6o9g.js b/webapp/assets/_app/immutable/chunks/Dt70yZzL.js similarity index 97% rename from webapp/assets/_app/immutable/chunks/1biM6o9g.js rename to webapp/assets/_app/immutable/chunks/Dt70yZzL.js index 8effdfad..dd4cb106 100644 --- a/webapp/assets/_app/immutable/chunks/1biM6o9g.js +++ b/webapp/assets/_app/immutable/chunks/Dt70yZzL.js @@ -1 +1 @@ -import{F as w}from"./DniTuB_0.js";import{g as r}from"./BZ2rxtTc.js";const m=!0,z=m,I=()=>window.location.port==="5173",b={isAuthenticated:!1,user:null,loading:!0,needsInitialization:!1},n=w(b);function f(t,a,e=7){const i=new Date;i.setTime(i.getTime()+e*24*60*60*1e3),document.cookie=`${t}=${a};expires=${i.toUTCString()};path=/;SameSite=Lax`}function d(t){const a=t+"=",e=document.cookie.split(";");for(let i=0;i({...i,loading:!0}));const e=await r.login({username:t,password:a});z&&(f("garm_token",e.token),f("garm_user",t)),r.setToken(e.token),n.set({isAuthenticated:!0,user:t,loading:!1,needsInitialization:!1})}catch(e){throw n.update(i=>({...i,loading:!1})),e}},logout(){g("garm_token"),g("garm_user"),n.set({isAuthenticated:!1,user:null,loading:!1,needsInitialization:!1})},async init(){try{n.update(e=>({...e,loading:!0})),await c.checkInitializationStatus();const t=d("garm_token"),a=d("garm_user");if(t&&a&&(r.setToken(t),await c.checkAuth())){n.set({isAuthenticated:!0,user:a,loading:!1,needsInitialization:!1});return}n.update(e=>({...e,loading:!1,needsInitialization:!1}))}catch{n.update(a=>({...a,loading:!1}))}},async checkInitializationStatus(){try{const t={Accept:"application/json"},a=d("garm_token"),e=I();e&&a&&(t.Authorization=`Bearer ${a}`);const i=await fetch("/api/v1/login",{method:"GET",headers:t,credentials:e?"omit":"include"});if(!i.ok){if(i.status===409&&(await i.json()).error==="init_required")throw n.update(s=>({...s,needsInitialization:!0,loading:!1})),new Error("Initialization required");return}return}catch(t){if(t instanceof Error&&t.message==="Initialization required")throw t;return}},async checkAuth(){try{return await c.checkInitializationStatus(),await r.getControllerInfo(),!0}catch(t){return t instanceof Error&&t.message==="Initialization required"?!1:t?.response?.status===409&&t?.response?.data?.error==="init_required"?(n.update(a=>({...a,needsInitialization:!0,loading:!1})),!1):(c.logout(),!1)}},async initialize(t,a,e,i,o){try{n.update(u=>({...u,loading:!0}));const s=await r.firstRun({username:t,email:a,password:e,full_name:i||t});await c.login(t,e);const l=window.location.origin,h=o?.metadataUrl||`${l}/api/v1/metadata`,p=o?.callbackUrl||`${l}/api/v1/callbacks`,k=o?.webhookUrl||`${l}/webhooks`;await r.updateController({metadata_url:h,callback_url:p,webhook_url:k}),n.update(u=>({...u,needsInitialization:!1}))}catch(s){throw n.update(l=>({...l,loading:!1})),s}}};export{n as a,c as b}; +import{F as w}from"./DniTuB_0.js";import{g as r}from"./DSfKzFV1.js";const m=!0,z=m,I=()=>window.location.port==="5173",b={isAuthenticated:!1,user:null,loading:!0,needsInitialization:!1},n=w(b);function f(t,a,e=7){const i=new Date;i.setTime(i.getTime()+e*24*60*60*1e3),document.cookie=`${t}=${a};expires=${i.toUTCString()};path=/;SameSite=Lax`}function d(t){const a=t+"=",e=document.cookie.split(";");for(let i=0;i({...i,loading:!0}));const e=await r.login({username:t,password:a});z&&(f("garm_token",e.token),f("garm_user",t)),r.setToken(e.token),n.set({isAuthenticated:!0,user:t,loading:!1,needsInitialization:!1})}catch(e){throw n.update(i=>({...i,loading:!1})),e}},logout(){g("garm_token"),g("garm_user"),n.set({isAuthenticated:!1,user:null,loading:!1,needsInitialization:!1})},async init(){try{n.update(e=>({...e,loading:!0})),await c.checkInitializationStatus();const t=d("garm_token"),a=d("garm_user");if(t&&a&&(r.setToken(t),await c.checkAuth())){n.set({isAuthenticated:!0,user:a,loading:!1,needsInitialization:!1});return}n.update(e=>({...e,loading:!1,needsInitialization:!1}))}catch{n.update(a=>({...a,loading:!1}))}},async checkInitializationStatus(){try{const t={Accept:"application/json"},a=d("garm_token"),e=I();e&&a&&(t.Authorization=`Bearer ${a}`);const i=await fetch("/api/v1/login",{method:"GET",headers:t,credentials:e?"omit":"include"});if(!i.ok){if(i.status===409&&(await i.json()).error==="init_required")throw n.update(s=>({...s,needsInitialization:!0,loading:!1})),new Error("Initialization required");return}return}catch(t){if(t instanceof Error&&t.message==="Initialization required")throw t;return}},async checkAuth(){try{return await c.checkInitializationStatus(),await r.getControllerInfo(),!0}catch(t){return t instanceof Error&&t.message==="Initialization required"?!1:t?.response?.status===409&&t?.response?.data?.error==="init_required"?(n.update(a=>({...a,needsInitialization:!0,loading:!1})),!1):(c.logout(),!1)}},async initialize(t,a,e,i,o){try{n.update(u=>({...u,loading:!0}));const s=await r.firstRun({username:t,email:a,password:e,full_name:i||t});await c.login(t,e);const l=window.location.origin,h=o?.metadataUrl||`${l}/api/v1/metadata`,p=o?.callbackUrl||`${l}/api/v1/callbacks`,k=o?.webhookUrl||`${l}/webhooks`;await r.updateController({metadata_url:h,callback_url:p,webhook_url:k}),n.update(u=>({...u,needsInitialization:!1}))}catch(s){throw n.update(l=>({...l,loading:!1})),s}}};export{n as a,c as b}; diff --git a/webapp/assets/_app/immutable/chunks/DQE8oq0R.js b/webapp/assets/_app/immutable/chunks/Dt7jKcR8.js similarity index 71% rename from webapp/assets/_app/immutable/chunks/DQE8oq0R.js rename to webapp/assets/_app/immutable/chunks/Dt7jKcR8.js index 0b8535a2..03cf0a88 100644 --- a/webapp/assets/_app/immutable/chunks/DQE8oq0R.js +++ b/webapp/assets/_app/immutable/chunks/Dt7jKcR8.js @@ -1 +1 @@ -import{s as e}from"./HMJxCnAR.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p}; +import{s as e}from"./kW9-6GPQ.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p}; diff --git a/webapp/assets/_app/immutable/chunks/Dyp1NLoF.js b/webapp/assets/_app/immutable/chunks/Dyp1NLoF.js new file mode 100644 index 00000000..1617c569 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/Dyp1NLoF.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as k}from"./TJn6xDN9.js";import{p as c,l as u,q as g,h as f,f as m,t as p,b as w,c as _,k as v,m as h,d as z,r as B,g as j,e as q}from"./DniTuB_0.js";import{s as V,j as A}from"./DSfKzFV1.js";import{p as a}from"./DbNhg6mG.js";var C=m(" ");function I(d,e){c(e,!1);const n=h();let t=a(e,"variant",8,"gray"),l=a(e,"size",8,"sm"),i=a(e,"text",8),s=a(e,"ring",8,!1);const o={success:"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200",error:"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200",warning:"bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",info:"bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200",gray:"bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200",blue:"bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200",green:"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200",red:"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200",yellow:"bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",secondary:"bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200"},b={success:"ring-green-600/20 dark:ring-green-400/30",error:"ring-red-600/20 dark:ring-red-400/30",warning:"ring-yellow-600/20 dark:ring-yellow-400/30",info:"ring-blue-600/20 dark:ring-blue-400/30",gray:"ring-gray-500/20 dark:ring-gray-400/30",blue:"ring-blue-600/20 dark:ring-blue-400/30",green:"ring-green-600/20 dark:ring-green-400/30",red:"ring-red-600/20 dark:ring-red-400/30",yellow:"ring-yellow-600/20 dark:ring-yellow-400/30",secondary:"ring-gray-500/20 dark:ring-gray-400/30"},y={sm:"px-2 py-1 text-xs",md:"px-2.5 py-0.5 text-xs"};u(()=>(g(t()),g(l()),g(s())),()=>{v(n,["inline-flex items-center rounded-full font-semibold",o[t()],y[l()],s()?`ring-1 ring-inset ${b[t()]}`:""].filter(Boolean).join(" "))}),f(),k();var r=C(),x=z(r,!0);B(r),p(()=>{V(r,1,A(j(n))),q(x,i())}),w(d,r),_()}export{I as B}; diff --git a/webapp/assets/_app/immutable/chunks/DSRJryIz.js b/webapp/assets/_app/immutable/chunks/DzXPCUia.js similarity index 84% rename from webapp/assets/_app/immutable/chunks/DSRJryIz.js rename to webapp/assets/_app/immutable/chunks/DzXPCUia.js index 37e09995..305a89e6 100644 --- a/webapp/assets/_app/immutable/chunks/DSRJryIz.js +++ b/webapp/assets/_app/immutable/chunks/DzXPCUia.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as _}from"./TJn6xDN9.js";import{p as k,f as E,t as C,u as i,q as t,e as f,b as P,c as j,s as q,d as l,r as o}from"./DniTuB_0.js";import{c as z}from"./BZ2rxtTc.js";import{p as n}from"./DbNhg6mG.js";import{j as x,e as c,i as u}from"./CTcPpzia.js";var N=E('');function F(d,r){k(r,!1);let e=n(r,"item",8),m=n(r,"eagerCache",8,null);_();var s=N(),a=l(s),v=l(a,!0);o(a);var p=q(a,2),g=l(p,!0);o(p),o(s),C((h,b,y)=>{z(a,"href",h),f(v,b),f(g,y)},[()=>(t(x),t(e()),i(()=>x(e()))),()=>(t(c),t(e()),t(m()),i(()=>c(e(),m()))),()=>(t(u),t(e()),i(()=>u(e())))]),P(d,s),j()}export{F as P}; +import"./DsnmJJEf.js";import{i as _}from"./TJn6xDN9.js";import{p as k,f as E,t as C,u as i,q as t,e as f,b as P,c as j,s as q,d as l,r as o}from"./DniTuB_0.js";import{c as z}from"./DSfKzFV1.js";import{p as n}from"./DbNhg6mG.js";import{j as x,e as c,i as u}from"./BC4TpgBU.js";var N=E('');function F(d,r){k(r,!1);let e=n(r,"item",8),m=n(r,"eagerCache",8,null);_();var s=N(),a=l(s),v=l(a,!0);o(a);var p=q(a,2),g=l(p,!0);o(p),o(s),C((h,b,y)=>{z(a,"href",h),f(v,b),f(g,y)},[()=>(t(x),t(e()),i(()=>x(e()))),()=>(t(c),t(e()),t(m()),i(()=>c(e(),m()))),()=>(t(u),t(e()),i(()=>u(e())))]),P(d,s),j()}export{F as P}; diff --git a/webapp/assets/_app/immutable/chunks/HMJxCnAR.js b/webapp/assets/_app/immutable/chunks/HMJxCnAR.js deleted file mode 100644 index d974960c..00000000 --- a/webapp/assets/_app/immutable/chunks/HMJxCnAR.js +++ /dev/null @@ -1,3 +0,0 @@ -import{F as Ae,o as De,aR as L,g as P,k as N,bf as mt,aS as $e}from"./DniTuB_0.js";import{p as _t,e as yt,a as wt,b as I}from"./CGAsTaG2.js";class le{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Ee{constructor(t,n){this.status=t,this.location=n}}class Se extends Error{constructor(t,n,r){super(r),this.status=t,this.text=n}}new URL("sveltekit-internal://");function vt(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function bt(e){return e.split("%25").map(decodeURI).join("%25")}function kt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function me({href:e}){return e.split("#")[0]}function At(e,t,n,r=!1){const a=new URL(e);Object.defineProperty(a,"searchParams",{value:new Proxy(a.searchParams,{get(i,o){if(o==="get"||o==="getAll"||o==="has")return f=>(n(f),i[o](f));t();const l=Reflect.get(i,o);return typeof l=="function"?l.bind(i):l}}),enumerable:!0,configurable:!0});const s=["href","pathname","search","toString","toJSON"];r&&s.push("hash");for(const i of s)Object.defineProperty(a,i,{get(){return t(),e[i]},enumerable:!0,configurable:!0});return a}function Et(...e){let t=5381;for(const n of e)if(typeof n=="string"){let r=n.length;for(;r;)t=t*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let a=r.length;for(;a;)t=t*33^r[--a]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}function St(e){const t=atob(e),n=new Uint8Array(t.length);for(let r=0;r((e instanceof Request?e.method:t?.method||"GET")!=="GET"&&G.delete(Re(e)),Rt(e,t));const G=new Map;function Tt(e,t){const n=Re(e,t),r=document.querySelector(n);if(r?.textContent){let{body:a,...s}=JSON.parse(r.textContent);const i=r.getAttribute("data-ttl");return i&&G.set(n,{body:a,init:s,ttl:1e3*Number(i)}),r.getAttribute("data-b64")!==null&&(a=St(a)),Promise.resolve(new Response(a,s))}return window.fetch(e,t)}function Ut(e,t,n){if(G.size>0){const r=Re(e,n),a=G.get(r);if(a){if(performance.now(){const{pattern:g,params:u}=_t(o),c={id:o,exec:h=>{const _=g.exec(h);if(_)return yt(_,u,r)},errors:[1,...d||[]].map(h=>e[h]),layouts:[0,...f||[]].map(i),leaf:s(l)};return c.errors.length=c.layouts.length=Math.max(c.errors.length,c.layouts.length),c});function s(o){const l=o<0;return l&&(o=~o),[l,e[o]]}function i(o){return o===void 0?o:[a.has(o),e[o]]}}function Je(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function Be(e,t,n=JSON.stringify){const r=n(t);try{sessionStorage[e]=r}catch{}}const Lt="1758898720212",We="sveltekit:snapshot",ze="sveltekit:scroll",Xe="sveltekit:states",Pt="sveltekit:pageurl",V="sveltekit:history",J="sveltekit:navigation",j={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Z=location.origin;function Te(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function fe(){return{x:pageXOffset,y:pageYOffset}}function B(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const Ve={...j,"":j.hover};function Ze(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function Qe(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=Ze(e)}}function we(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){const o=location.hash.split("#")[1]||"/";r.hash=`#${o}${r.hash}`}}catch{}const a=e instanceof SVGAElement?e.target.baseVal:e.target,s=!r||!!a||ue(r,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),i=r?.origin===Z&&e.hasAttribute("download");return{url:r,external:s,target:a,download:i}}function te(e){let t=null,n=null,r=null,a=null,s=null,i=null,o=e;for(;o&&o!==document.documentElement;)r===null&&(r=B(o,"preload-code")),a===null&&(a=B(o,"preload-data")),t===null&&(t=B(o,"keepfocus")),n===null&&(n=B(o,"noscroll")),s===null&&(s=B(o,"reload")),i===null&&(i=B(o,"replacestate")),o=Ze(o);function l(f){switch(f){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:Ve[r??"off"],preload_data:Ve[a??"off"],keepfocus:l(t),noscroll:l(n),reload:l(s),replace_state:l(i)}}function Fe(e){const t=Ae(e);let n=!0;function r(){n=!0,t.update(i=>i)}function a(i){n=!1,t.set(i)}function s(i){let o;return t.subscribe(l=>{(o===void 0||n&&l!==o)&&i(o=l)})}return{notify:r,set:a,subscribe:s}}const et={v:()=>{}};function Nt(){const{set:e,subscribe:t}=Ae(!1);let n;async function r(){clearTimeout(n);try{const a=await fetch(`${wt}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!a.ok)return!1;const i=(await a.json()).version!==Lt;return i&&(e(!0),et.v(),clearTimeout(n)),i}catch{return!1}}return{subscribe:t,check:r}}function ue(e,t,n){return e.origin!==Z||!e.pathname.startsWith(t)?!0:n?!(e.pathname===t+"/"||e.pathname===t+"/index.html"||e.protocol==="file:"&&e.pathname.replace(/\/[^/]+\.html?$/,"")===t):!1}function yn(e){}function Ot(e){const t=xt(e),n=new ArrayBuffer(t.length),r=new DataView(n);for(let a=0;a>16),t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255),n=r=0);return r===12?(n>>=4,t+=String.fromCharCode(n)):r===18&&(n>>=2,t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255)),t}const jt=-1,Dt=-2,$t=-3,Bt=-4,Vt=-5,Ft=-6;function Mt(e,t){if(typeof e=="number")return a(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const n=e,r=Array(n.length);function a(s,i=!1){if(s===jt)return;if(s===$t)return NaN;if(s===Bt)return 1/0;if(s===Vt)return-1/0;if(s===Ft)return-0;if(i||typeof s!="number")throw new Error("Invalid input");if(s in r)return r[s];const o=n[s];if(!o||typeof o!="object")r[s]=o;else if(Array.isArray(o))if(typeof o[0]=="string"){const l=o[0],f=t?.[l];if(f)return r[s]=f(a(o[1]));switch(l){case"Date":r[s]=new Date(o[1]);break;case"Set":const d=new Set;r[s]=d;for(let c=1;ct!=null)}const Ht="x-sveltekit-invalidated",Kt="x-sveltekit-trailing-slash";function ne(e){return e instanceof le||e instanceof Se?e.status:500}function Yt(e){return e instanceof Se?e.text:"Internal Error"}let E,W,_e;const Jt=De.toString().includes("$$")||/function \w+\(\) \{\}/.test(De.toString());Jt?(E={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},W={current:null},_e={current:!1}):(E=new class{#e=L({});get data(){return P(this.#e)}set data(t){N(this.#e,t)}#t=L(null);get form(){return P(this.#t)}set form(t){N(this.#t,t)}#n=L(null);get error(){return P(this.#n)}set error(t){N(this.#n,t)}#r=L({});get params(){return P(this.#r)}set params(t){N(this.#r,t)}#a=L({id:null});get route(){return P(this.#a)}set route(t){N(this.#a,t)}#o=L({});get state(){return P(this.#o)}set state(t){N(this.#o,t)}#s=L(-1);get status(){return P(this.#s)}set status(t){N(this.#s,t)}#i=L(new URL("https://example.com"));get url(){return P(this.#i)}set url(t){N(this.#i,t)}},W=new class{#e=L(null);get current(){return P(this.#e)}set current(t){N(this.#e,t)}},_e=new class{#e=L(!1);get current(){return P(this.#e)}set current(t){N(this.#e,t)}},et.v=()=>_e.current=!0);function Wt(e){Object.assign(E,e)}const zt="/__data.json",Xt=".html__data.json";function Zt(e){return e.endsWith(".html")?e.replace(/\.html$/,Xt):e.replace(/\/$/,"")+zt}const{tick:Qt}=mt,en=new Set(["icon","shortcut icon","apple-touch-icon"]),$=Je(ze)??{},z=Je(We)??{},x={url:Fe({}),page:Fe({}),navigating:Ae(null),updated:Nt()};function Ue(e){$[e]=fe()}function tn(e,t){let n=e+1;for(;$[n];)delete $[n],n+=1;for(n=t+1;z[n];)delete z[n],n+=1}function M(e){return location.href=e.href,new Promise(()=>{})}async function nt(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(I||"/");e&&await e.update()}}function Me(){}let Ie,ve,re,O,be,v;globalThis.__sveltekit_1odpo7n.data;const ae=[],oe=[];let C=null;const ee=new Map,rt=new Set,nn=new Set,H=new Set;let w={branch:[],error:null,url:null},Le=!1,se=!1,qe=!0,X=!1,q=!1,at=!1,Pe=!1,ot,k,T,D;const K=new Set,Ge=new Map;async function kn(e,t,n){document.URL!==location.href&&(location.href=location.href),v=e,await e.hooks.init?.(),Ie=It(e),O=document.documentElement,be=t,ve=e.nodes[0],re=e.nodes[1],ve(),re(),k=history.state?.[V],T=history.state?.[J],k||(k=T=Date.now(),history.replaceState({...history.state,[V]:k,[J]:T},""));const r=$[k];function a(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}n?(a(),await hn(be,n)):(await Y({type:"enter",url:Te(v.hash?gn(new URL(location.href)):location.href),replace_state:!0}),a()),dn()}function rn(){ae.length=0,Pe=!1}function st(e){oe.some(t=>t?.snapshot)&&(z[e]=oe.map(t=>t?.snapshot?.capture()))}function it(e){z[e]?.forEach((t,n)=>{oe[n]?.snapshot?.restore(t)})}function He(){Ue(k),Be(ze,$),st(T),Be(We,z)}async function Ne(e,t,n,r){let a;const s=await Y({type:"goto",url:Te(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:r,accept:()=>{t.invalidateAll&&(Pe=!0,a=[...Ge.keys()]),t.invalidate&&t.invalidate.forEach(un)}});return t.invalidateAll&&$e().then($e).then(()=>{Ge.forEach(({resource:i},o)=>{a?.includes(o)&&i.refresh?.()})}),s}async function an(e){if(e.id!==C?.id){const t={};K.add(t),C={id:e.id,token:t,promise:ft({...e,preload:t}).then(n=>(K.delete(t),n.type==="loaded"&&n.state.error&&(C=null),n))}}return C.promise}async function ye(e){const t=(await he(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].map(n=>n?.[1]()))}function ct(e,t,n){w=e.state;const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(E,e.props.page),ot=new v.root({target:t,props:{...e.props,stores:x,components:oe},hydrate:n,sync:!1}),it(T),n){const a={from:null,to:{params:w.params,route:{id:w.route?.id??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};H.forEach(s=>s(a))}se=!0}function ie({url:e,params:t,branch:n,status:r,error:a,route:s,form:i}){let o="never";if(I&&(e.pathname===I||e.pathname===I+"/"))o="always";else for(const c of n)c?.slash!==void 0&&(o=c.slash);e.pathname=vt(e.pathname,o),e.search=e.search;const l={type:"loaded",state:{url:e,params:t,branch:n,error:a,route:s},props:{constructors:Gt(n).map(c=>c.node.component),page:je(E)}};i!==void 0&&(l.props.form=i);let f={},d=!E,g=0;for(let c=0;c(o&&(l.route=!0),u[c])}),params:new Proxy(r,{get:(u,c)=>(o&&l.params.add(c),u[c])}),data:s?.data??null,url:At(n,()=>{o&&(l.url=!0)},u=>{o&&l.search_params.add(u)},v.hash),async fetch(u,c){u instanceof Request&&(c={body:u.method==="GET"||u.method==="HEAD"?void 0:await u.blob(),cache:u.cache,credentials:u.credentials,headers:[...u.headers].length>0?u?.headers:void 0,integrity:u.integrity,keepalive:u.keepalive,method:u.method,mode:u.mode,redirect:u.redirect,referrer:u.referrer,referrerPolicy:u.referrerPolicy,signal:u.signal,...c});const{resolved:h,promise:_}=lt(u,c,n);return o&&d(h.href),_},setHeaders:()=>{},depends:d,parent(){return o&&(l.parent=!0),t()},untrack(u){o=!1;try{return u()}finally{o=!0}}};i=await f.universal.load.call(null,g)??null}return{node:f,loader:e,server:s,universal:f.universal?.load?{type:"data",data:i,uses:l}:null,data:i??s?.data??null,slash:f.universal?.trailingSlash??s?.slash}}function lt(e,t,n){let r=e instanceof Request?e.url:e;const a=new URL(r,n);a.origin===n.origin&&(r=a.href.slice(n.origin.length));const s=se?Ut(r,a.href,t):Tt(r,t);return{resolved:a,promise:s}}function Ke(e,t,n,r,a,s){if(Pe)return!0;if(!a)return!1;if(a.parent&&e||a.route&&t||a.url&&n)return!0;for(const i of a.search_params)if(r.has(i))return!0;for(const i of a.params)if(s[i]!==w.params[i])return!0;for(const i of a.dependencies)if(ae.some(o=>o(new URL(i))))return!0;return!1}function Ce(e,t){return e?.type==="data"?e:e?.type==="skip"?t??null:null}function on(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const r of n){const a=e.searchParams.getAll(r),s=t.searchParams.getAll(r);a.every(i=>s.includes(i))&&s.every(i=>a.includes(i))&&n.delete(r)}return n}function Ye({error:e,url:t,route:n,params:r}){return{type:"loaded",state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:je(E),constructors:[]}}}async function ft({id:e,invalidating:t,url:n,params:r,route:a,preload:s}){if(C?.id===e)return K.delete(C.token),C.promise;const{errors:i,layouts:o,leaf:l}=a,f=[...o,l];i.forEach(p=>p?.().catch(()=>{})),f.forEach(p=>p?.[1]().catch(()=>{}));let d=null;const g=w.url?e!==ce(w.url):!1,u=w.route?a.id!==w.route.id:!1,c=on(w.url,n);let h=!1;const _=f.map((p,y)=>{const b=w.branch[y],A=!!p?.[0]&&(b?.loader!==p[1]||Ke(h,u,g,c,b.server?.uses,r));return A&&(h=!0),A});if(_.some(Boolean)){try{d=await ht(n,_)}catch(p){const y=await F(p,{url:n,params:r,route:{id:e}});return K.has(s)?Ye({error:y,url:n,params:r,route:a}):de({status:ne(p),error:y,url:n,route:a})}if(d.type==="redirect")return d}const m=d?.nodes;let R=!1;const S=f.map(async(p,y)=>{if(!p)return;const b=w.branch[y],A=m?.[y];if((!A||A.type==="skip")&&p[1]===b?.loader&&!Ke(R,u,g,c,b.universal?.uses,r))return b;if(R=!0,A?.type==="error")throw A;return Oe({loader:p[1],url:n,params:r,route:a,parent:async()=>{const pe={};for(let ge=0;ge{});const U=[];for(let p=0;pPromise.resolve({}),server_data_node:Ce(s)}),l={node:await re(),loader:re,universal:null,server:null,data:null};return ie({url:n,params:a,branch:[o,l],status:e,error:t,route:null})}catch(o){if(o instanceof Ee)return Ne(new URL(o.location,location.href),{},0);throw o}}async function cn(e){const t=e.href;if(ee.has(t))return ee.get(t);let n;try{const r=(async()=>{let a=await v.hooks.reroute({url:new URL(e),fetch:async(s,i)=>lt(s,i,e).promise})??e;if(typeof a=="string"){const s=new URL(e);v.hash?s.hash=a:s.pathname=a,a=s}return a})();ee.set(t,r),n=await r}catch{ee.delete(t);return}return n}async function he(e,t){if(e&&!ue(e,I,v.hash)){const n=await cn(e);if(!n)return;const r=ln(n);for(const a of Ie){const s=a.exec(r);if(s)return{id:ce(e),invalidating:t,route:a,params:kt(s),url:e}}}}function ln(e){return bt(v.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(I.length))||"/"}function ce(e){return(v.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function ut({url:e,type:t,intent:n,delta:r}){let a=!1;const s=xe(w,n,e,t);r!==void 0&&(s.navigation.delta=r);const i={...s.navigation,cancel:()=>{a=!0,s.reject(new Error("navigation cancelled"))}};return X||rt.forEach(o=>o(i)),a?null:s}async function Y({type:e,url:t,popped:n,keepfocus:r,noscroll:a,replace_state:s,state:i={},redirect_count:o=0,nav_token:l={},accept:f=Me,block:d=Me}){const g=D;D=l;const u=await he(t,!1),c=e==="enter"?xe(w,u,t,e):ut({url:t,type:e,delta:n?.delta,intent:u});if(!c){d(),D===l&&(D=g);return}const h=k,_=T;f(),X=!0,se&&c.navigation.type!=="enter"&&x.navigating.set(W.current=c.navigation);let m=u&&await ft(u);if(!m){if(ue(t,I,v.hash))return await M(t);m=await dt(t,{id:null},await F(new Se(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404)}if(t=u?.url||t,D!==l)return c.reject(new Error("navigation aborted")),!1;if(m.type==="redirect")if(o>=20)m=await de({status:500,error:await F(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}});else return await Ne(new URL(m.location,t).href,{},o+1,l),!1;else m.props.page.status>=400&&await x.updated.check()&&(await nt(),await M(t));if(rn(),Ue(h),st(_),m.props.page.url.pathname!==t.pathname&&(t.pathname=m.props.page.url.pathname),i=n?n.state:i,!n){const p=s?0:1,y={[V]:k+=p,[J]:T+=p,[Xe]:i};(s?history.replaceState:history.pushState).call(history,y,"",t),s||tn(k,T)}if(C=null,m.props.page.state=i,se){const p=(await Promise.all(Array.from(nn,y=>y(c.navigation)))).filter(y=>typeof y=="function");if(p.length>0){let y=function(){p.forEach(b=>{H.delete(b)})};p.push(y),p.forEach(b=>{H.add(b)})}w=m.state,m.props.page&&(m.props.page.url=t),ot.$set(m.props),Wt(m.props.page),at=!0}else ct(m,be,!1);const{activeElement:R}=document;await Qt();const S=n?n.scroll:a?fe():null;if(qe){const p=t.hash&&document.getElementById(gt(t));S?scrollTo(S.x,S.y):p?p.scrollIntoView():scrollTo(0,0)}const U=document.activeElement!==R&&document.activeElement!==document.body;!r&&!U&&pn(t),qe=!0,m.props.page&&Object.assign(E,m.props.page),X=!1,e==="popstate"&&it(T),c.fulfil(void 0),H.forEach(p=>p(c.navigation)),x.navigating.set(W.current=null)}async function dt(e,t,n,r){return e.origin===Z&&e.pathname===location.pathname&&!Le?await de({status:r,error:n,url:e,route:t}):await M(e)}function fn(){let e,t,n;O.addEventListener("mousemove",o=>{const l=o.target;clearTimeout(e),e=setTimeout(()=>{s(l,j.hover)},20)});function r(o){o.defaultPrevented||s(o.composedPath()[0],j.tap)}O.addEventListener("mousedown",r),O.addEventListener("touchstart",r,{passive:!0});const a=new IntersectionObserver(o=>{for(const l of o)l.isIntersecting&&(ye(new URL(l.target.href)),a.unobserve(l.target))},{threshold:0});async function s(o,l){const f=Qe(o,O),d=f===t&&l>=n;if(!f||d)return;const{url:g,external:u,download:c}=we(f,I,v.hash);if(u||c)return;const h=te(f),_=g&&ce(w.url)===ce(g);if(!(h.reload||_))if(l<=h.preload_data){t=f,n=j.tap;const m=await he(g,!1);if(!m)return;an(m)}else l<=h.preload_code&&(t=f,n=l,ye(g))}function i(){a.disconnect();for(const o of O.querySelectorAll("a")){const{url:l,external:f,download:d}=we(o,I,v.hash);if(f||d)continue;const g=te(o);g.reload||(g.preload_code===j.viewport&&a.observe(o),g.preload_code===j.eager&&ye(l))}}H.add(i),i()}function F(e,t){if(e instanceof le)return e.body;const n=ne(e),r=Yt(e);return v.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function An(e,t={}){return e=new URL(Te(e)),e.origin!==Z?Promise.reject(new Error("goto: invalid URL")):Ne(e,t,0)}function un(e){if(typeof e=="function")ae.push(e);else{const{href:t}=new URL(e,location.href);ae.push(n=>n.href===t)}}function dn(){history.scrollRestoration="manual",addEventListener("beforeunload",t=>{let n=!1;if(He(),!X){const r=xe(w,void 0,null,"leave"),a={...r.navigation,cancel:()=>{n=!0,r.reject(new Error("navigation cancelled"))}};rt.forEach(s=>s(a))}n?(t.preventDefault(),t.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&He()}),navigator.connection?.saveData||fn(),O.addEventListener("click",async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const n=Qe(t.composedPath()[0],O);if(!n)return;const{url:r,external:a,target:s,download:i}=we(n,I,v.hash);if(!r)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const o=te(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||i)return;const[f,d]=(v.hash?r.hash.replace(/^#/,""):r.href).split("#"),g=f===me(location);if(a||o.reload&&(!g||!d)){ut({url:r,type:"link"})?X=!0:t.preventDefault();return}if(d!==void 0&&g){const[,u]=w.url.href.split("#");if(u===d){if(t.preventDefault(),d===""||d==="top"&&n.ownerDocument.getElementById("top")===null)window.scrollTo({top:0});else{const c=n.ownerDocument.getElementById(decodeURIComponent(d));c&&(c.scrollIntoView(),c.focus())}return}if(q=!0,Ue(k),e(r),!o.replace_state)return;q=!1}t.preventDefault(),await new Promise(u=>{requestAnimationFrame(()=>{setTimeout(u,0)}),setTimeout(u,100)}),await Y({type:"link",url:r,keepfocus:o.keepfocus,noscroll:o.noscroll,replace_state:o.replace_state??r.href===location.href})}),O.addEventListener("submit",t=>{if(t.defaultPrevented)return;const n=HTMLFormElement.prototype.cloneNode.call(t.target),r=t.submitter;if((r?.formTarget||n.target)==="_blank"||(r?.formMethod||n.method)!=="get")return;const i=new URL(r?.hasAttribute("formaction")&&r?.formAction||n.action);if(ue(i,I,!1))return;const o=t.target,l=te(o);if(l.reload)return;t.preventDefault(),t.stopPropagation();const f=new FormData(o),d=r?.getAttribute("name");d&&f.append(d,r?.getAttribute("value")??""),i.search=new URLSearchParams(f).toString(),Y({type:"form",url:i,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??i.href===location.href})}),addEventListener("popstate",async t=>{if(!ke){if(t.state?.[V]){const n=t.state[V];if(D={},n===k)return;const r=$[n],a=t.state[Xe]??{},s=new URL(t.state[Pt]??location.href),i=t.state[J],o=w.url?me(location)===me(w.url):!1;if(i===T&&(at||o)){a!==E.state&&(E.state=a),e(s),$[k]=fe(),r&&scrollTo(r.x,r.y),k=n;return}const f=n-k;await Y({type:"popstate",url:s,popped:{state:a,scroll:r,delta:f},accept:()=>{k=n,T=i},block:()=>{history.go(-f)},nav_token:D})}else if(!q){const n=new URL(location.href);e(n),v.hash&&location.reload()}}}),addEventListener("hashchange",()=>{q&&(q=!1,history.replaceState({...history.state,[V]:++k,[J]:T},"",location.href))});for(const t of document.querySelectorAll("link"))en.has(t.rel)&&(t.href=t.href);addEventListener("pageshow",t=>{t.persisted&&x.navigating.set(W.current=null)});function e(t){w.url=E.url=t,x.page.set(je(E)),x.page.notify()}}async function hn(e,{status:t=200,error:n,node_ids:r,params:a,route:s,server_route:i,data:o,form:l}){Le=!0;const f=new URL(location.href);let d;({params:a={},route:s={id:null}}=await he(f,!1)||{}),d=Ie.find(({id:c})=>c===s.id);let g,u=!0;try{const c=r.map(async(_,m)=>{const R=o[m];return R?.uses&&(R.uses=pt(R.uses)),Oe({loader:v.nodes[_],url:f,params:a,route:s,parent:async()=>{const S={};for(let U=0;Us?"1":"0").join(""));const r=window.fetch,a=await r(n.href,{});if(!a.ok){let s;throw a.headers.get("content-type")?.includes("application/json")?s=await a.json():a.status===404?s="Not Found":a.status===500&&(s="Internal Error"),new le(a.status,s)}return new Promise(async s=>{const i=new Map,o=a.body.getReader(),l=new TextDecoder;function f(g){return Mt(g,{...v.decoders,Promise:u=>new Promise((c,h)=>{i.set(u,{fulfil:c,reject:h})})})}let d="";for(;;){const{done:g,value:u}=await o.read();if(g&&!d)break;for(d+=!u&&d?` -`:l.decode(u,{stream:!0});;){const c=d.indexOf(` -`);if(c===-1)break;const h=JSON.parse(d.slice(0,c));if(d=d.slice(c+1),h.type==="redirect")return s(h);if(h.type==="data")h.nodes?.forEach(_=>{_?.type==="data"&&(_.uses=pt(_.uses),_.data=f(_.data))}),s(h);else if(h.type==="chunk"){const{id:_,data:m,error:R}=h,S=i.get(_);i.delete(_),R?S.reject(f(R)):S.fulfil(f(m))}}}})}function pt(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}let ke=!1;function pn(e){const t=document.querySelector("[autofocus]");if(t)t.focus();else{const n=gt(e);if(n&&document.getElementById(n)){const{x:a,y:s}=fe();setTimeout(()=>{const i=history.state;ke=!0,location.replace(`#${n}`),v.hash&&location.replace(e.hash),history.replaceState(i,"",e.hash),scrollTo(a,s),ke=!1})}else{const a=document.body,s=a.getAttribute("tabindex");a.tabIndex=-1,a.focus({preventScroll:!0,focusVisible:!1}),s!==null?a.setAttribute("tabindex",s):a.removeAttribute("tabindex")}const r=getSelection();if(r&&r.type!=="None"){const a=[];for(let s=0;s{if(r.rangeCount===a.length){for(let s=0;s{a=l,s=f});return i.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n},willUnload:!t,type:r,complete:i},fulfil:a,reject:s}}function je(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function gn(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function gt(e){let t;if(v.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{kn as a,An as g,yn as l,E as p,x as s}; diff --git a/webapp/assets/_app/immutable/chunks/BWuIa3ut.js b/webapp/assets/_app/immutable/chunks/KogAzbD4.js similarity index 98% rename from webapp/assets/_app/immutable/chunks/BWuIa3ut.js rename to webapp/assets/_app/immutable/chunks/KogAzbD4.js index f61f7684..9a503a60 100644 --- a/webapp/assets/_app/immutable/chunks/BWuIa3ut.js +++ b/webapp/assets/_app/immutable/chunks/KogAzbD4.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as Oe}from"./TJn6xDN9.js";import{p as Fe,E as Ke,o as Ge,f as x,d as t,r,s,g as e,m,z as B,t as y,y as ue,u as l,e as v,q as T,k as i,i as be,b as u,D as He,c as Je}from"./DniTuB_0.js";import{p as ge,i as U}from"./DbNhg6mG.js";import{e as Qe,i as Ve}from"./Ck5PkeSc.js";import{r as me,b as ye,g as Xe}from"./BZ2rxtTc.js";import{a as Ye,b as Ze}from"./CCQwxxp9.js";import{p as ea}from"./D4Caz1gY.js";import{e as xe}from"./BZiHL9L3.js";import{M as aa}from"./CHjY0Kaf.js";var ta=x('

'),ra=x('
Owner:
'),oa=x('
'),sa=x(""),na=x(''),ia=x('

Leave empty to auto-generate a new secret

'),da=x('
Updating...
'),la=x('

Name:
Endpoint:
Current Credentials:
Current Pool Balancer:

Leave unchanged to keep current credentials

Round Robin distributes jobs evenly across pools, Pack fills pools in order

');function _a(fe,D){Fe(D,!1);let d=ge(D,"entity",8),w=ge(D,"entityType",8);const $=Ke();let C=m(!1),k=m(""),M=m([]),R=m(!1),f=m(""),_=m(""),h=m(""),b=m(!1);function _e(){if(w()==="repository"){const c=d();return`${c.owner}/${c.name}`}return d().name||""}function W(){return w().charAt(0).toUpperCase()+w().slice(1)}function he(){return w()==="repository"&&d().owner||""}async function ke(){try{i(R,!0),i(M,await Xe.listCredentials())}catch(c){i(k,xe(c))}finally{i(R,!1)}}function we(){i(f,d().credentials_name||""),i(_,d().pool_balancing_type||"roundrobin"),i(h,""),i(b,!1)}async function Ce(){try{i(C,!0),i(k,"");const c={};let E=!1;if(e(f)&&e(f)!==d().credentials_name&&(c.credentials_name=e(f),E=!0),e(_)&&e(_)!==d().pool_balancing_type&&(c.pool_balancer_type=e(_),E=!0),e(b)){if(!e(h).trim()){i(k,"Please enter a webhook secret or uncheck the option to change it");return}c.webhook_secret=e(h),E=!0}if(!E){$("close");return}$("submit",c)}catch(c){i(k,xe(c))}finally{i(C,!1)}}Ge(()=>{ke(),we()}),Oe(),aa(fe,{$$events:{close:()=>$("close")},children:(c,E)=>{var A=la(),N=t(A),j=t(N),Ee=t(j);r(j);var Y=s(j,2),Se=t(Y,!0);r(Y),r(N);var q=s(N,2),Z=t(q);{var Pe=a=>{var o=ta(),n=t(o),p=t(n,!0);r(n),r(o),y(()=>v(p,e(k))),u(a,o)};U(Z,a=>{e(k)&&a(Pe)})}var z=s(Z,2),I=t(z),Ue=t(I);r(I);var ee=s(I,2),ae=t(ee);{var $e=a=>{var o=ra(),n=s(t(o),2),p=t(n,!0);r(n),r(o),y(S=>v(p,S),[()=>l(he)]),u(a,o)};U(ae,a=>{w()==="repository"&&a($e)})}var L=s(ae,2),te=s(t(L),2),Be=t(te,!0);r(te),r(L);var O=s(L,2),re=s(t(O),2),Te=t(re,!0);r(re),r(O);var F=s(O,2),oe=s(t(F),2),De=t(oe,!0);r(oe),r(F);var se=s(F,2),ne=s(t(se),2),Me=t(ne,!0);r(ne),r(se),r(ee),r(z);var K=s(z,2),G=t(K),Re=s(t(G),2);{var We=a=>{var o=oa();u(a,o)},Ae=a=>{var o=na();y(()=>{e(f),ue(()=>{e(M)})});var n=t(o);n.value=n.__value="";var p=s(n);Qe(p,1,()=>e(M),Ve,(S,g)=>{var P=sa(),Le=t(P);r(P);var pe={};y(()=>{v(Le,`${e(g),l(()=>e(g).name)??""} (${e(g),l(()=>e(g).endpoint?.name||"Unknown")??""})`),pe!==(pe=(e(g),l(()=>e(g).name)))&&(P.value=(P.__value=(e(g),l(()=>e(g).name)))??"")}),u(S,P)}),r(o),ye(o,()=>e(f),S=>i(f,S)),u(a,o)};U(Re,a=>{e(R)?a(We):a(Ae,!1)})}B(2),r(G);var H=s(G,2),J=s(t(H),2);y(()=>{e(_),ue(()=>{})});var Q=t(J);Q.value=Q.__value="roundrobin";var ie=s(Q);ie.value=ie.__value="pack",r(J),B(2),r(H);var de=s(H,2),V=t(de),le=t(V);me(le),B(2),r(V);var Ne=s(V,2);{var je=a=>{var o=ia(),n=s(t(o),2);me(n),B(2),r(o),y(()=>n.required=e(b)),Ze(n,()=>e(h),p=>i(h,p)),u(a,o)};U(Ne,a=>{e(b)&&a(je)})}r(de),r(K);var ce=s(K,2),ve=t(ce),X=s(ve,2),qe=t(X);{var ze=a=>{var o=da();u(a,o)},Ie=a=>{var o=He();y(n=>v(o,`Update ${n??""}`),[()=>l(W)]),u(a,o)};U(qe,a=>{e(C)?a(ze):a(Ie,!1)})}r(X),r(ce),r(q),r(A),y((a,o,n,p)=>{v(Ee,`Update ${a??""}`),v(Se,o),v(Ue,`${n??""} Information`),v(Be,(T(d()),l(()=>d().name))),v(Te,(T(d()),l(()=>d().endpoint?.name))),v(De,(T(d()),l(()=>d().credentials_name))),v(Me,(T(d()),l(()=>d().pool_balancing_type||"roundrobin"))),X.disabled=p},[()=>l(W),()=>l(_e),()=>l(W),()=>(e(C),e(b),e(h),l(()=>e(C)||e(b)&&!e(h).trim()))]),ye(J,()=>e(_),a=>i(_,a)),Ye(le,()=>e(b),a=>i(b,a)),be("click",ve,()=>$("close")),be("submit",q,ea(Ce)),u(c,A)},$$slots:{default:!0}}),Je()}export{_a as U}; +import"./DsnmJJEf.js";import{i as Oe}from"./TJn6xDN9.js";import{p as Fe,E as Ke,o as Ge,f as x,d as t,r,s,g as e,m,z as B,t as y,y as ue,u as l,e as v,q as T,k as i,i as be,b as u,D as He,c as Je}from"./DniTuB_0.js";import{p as ge,i as U}from"./DbNhg6mG.js";import{e as Qe,i as Ve}from"./Ck5PkeSc.js";import{r as me,b as ye,g as Xe}from"./DSfKzFV1.js";import{a as Ye,b as Ze}from"./CCQwxxp9.js";import{p as ea}from"./D4Caz1gY.js";import{e as xe}from"./BZiHL9L3.js";import{M as aa}from"./l9U2NoST.js";var ta=x('

'),ra=x('
Owner:
'),oa=x('
'),sa=x(""),na=x(''),ia=x('

Leave empty to auto-generate a new secret

'),da=x('
Updating...
'),la=x('

Name:
Endpoint:
Current Credentials:
Current Pool Balancer:

Leave unchanged to keep current credentials

Round Robin distributes jobs evenly across pools, Pack fills pools in order

');function _a(fe,D){Fe(D,!1);let d=ge(D,"entity",8),w=ge(D,"entityType",8);const $=Ke();let C=m(!1),k=m(""),M=m([]),R=m(!1),f=m(""),_=m(""),h=m(""),b=m(!1);function _e(){if(w()==="repository"){const c=d();return`${c.owner}/${c.name}`}return d().name||""}function W(){return w().charAt(0).toUpperCase()+w().slice(1)}function he(){return w()==="repository"&&d().owner||""}async function ke(){try{i(R,!0),i(M,await Xe.listCredentials())}catch(c){i(k,xe(c))}finally{i(R,!1)}}function we(){i(f,d().credentials_name||""),i(_,d().pool_balancing_type||"roundrobin"),i(h,""),i(b,!1)}async function Ce(){try{i(C,!0),i(k,"");const c={};let E=!1;if(e(f)&&e(f)!==d().credentials_name&&(c.credentials_name=e(f),E=!0),e(_)&&e(_)!==d().pool_balancing_type&&(c.pool_balancer_type=e(_),E=!0),e(b)){if(!e(h).trim()){i(k,"Please enter a webhook secret or uncheck the option to change it");return}c.webhook_secret=e(h),E=!0}if(!E){$("close");return}$("submit",c)}catch(c){i(k,xe(c))}finally{i(C,!1)}}Ge(()=>{ke(),we()}),Oe(),aa(fe,{$$events:{close:()=>$("close")},children:(c,E)=>{var A=la(),N=t(A),j=t(N),Ee=t(j);r(j);var Y=s(j,2),Se=t(Y,!0);r(Y),r(N);var q=s(N,2),Z=t(q);{var Pe=a=>{var o=ta(),n=t(o),p=t(n,!0);r(n),r(o),y(()=>v(p,e(k))),u(a,o)};U(Z,a=>{e(k)&&a(Pe)})}var z=s(Z,2),I=t(z),Ue=t(I);r(I);var ee=s(I,2),ae=t(ee);{var $e=a=>{var o=ra(),n=s(t(o),2),p=t(n,!0);r(n),r(o),y(S=>v(p,S),[()=>l(he)]),u(a,o)};U(ae,a=>{w()==="repository"&&a($e)})}var L=s(ae,2),te=s(t(L),2),Be=t(te,!0);r(te),r(L);var O=s(L,2),re=s(t(O),2),Te=t(re,!0);r(re),r(O);var F=s(O,2),oe=s(t(F),2),De=t(oe,!0);r(oe),r(F);var se=s(F,2),ne=s(t(se),2),Me=t(ne,!0);r(ne),r(se),r(ee),r(z);var K=s(z,2),G=t(K),Re=s(t(G),2);{var We=a=>{var o=oa();u(a,o)},Ae=a=>{var o=na();y(()=>{e(f),ue(()=>{e(M)})});var n=t(o);n.value=n.__value="";var p=s(n);Qe(p,1,()=>e(M),Ve,(S,g)=>{var P=sa(),Le=t(P);r(P);var pe={};y(()=>{v(Le,`${e(g),l(()=>e(g).name)??""} (${e(g),l(()=>e(g).endpoint?.name||"Unknown")??""})`),pe!==(pe=(e(g),l(()=>e(g).name)))&&(P.value=(P.__value=(e(g),l(()=>e(g).name)))??"")}),u(S,P)}),r(o),ye(o,()=>e(f),S=>i(f,S)),u(a,o)};U(Re,a=>{e(R)?a(We):a(Ae,!1)})}B(2),r(G);var H=s(G,2),J=s(t(H),2);y(()=>{e(_),ue(()=>{})});var Q=t(J);Q.value=Q.__value="roundrobin";var ie=s(Q);ie.value=ie.__value="pack",r(J),B(2),r(H);var de=s(H,2),V=t(de),le=t(V);me(le),B(2),r(V);var Ne=s(V,2);{var je=a=>{var o=ia(),n=s(t(o),2);me(n),B(2),r(o),y(()=>n.required=e(b)),Ze(n,()=>e(h),p=>i(h,p)),u(a,o)};U(Ne,a=>{e(b)&&a(je)})}r(de),r(K);var ce=s(K,2),ve=t(ce),X=s(ve,2),qe=t(X);{var ze=a=>{var o=da();u(a,o)},Ie=a=>{var o=He();y(n=>v(o,`Update ${n??""}`),[()=>l(W)]),u(a,o)};U(qe,a=>{e(C)?a(ze):a(Ie,!1)})}r(X),r(ce),r(q),r(A),y((a,o,n,p)=>{v(Ee,`Update ${a??""}`),v(Se,o),v(Ue,`${n??""} Information`),v(Be,(T(d()),l(()=>d().name))),v(Te,(T(d()),l(()=>d().endpoint?.name))),v(De,(T(d()),l(()=>d().credentials_name))),v(Me,(T(d()),l(()=>d().pool_balancing_type||"roundrobin"))),X.disabled=p},[()=>l(W),()=>l(_e),()=>l(W),()=>(e(C),e(b),e(h),l(()=>e(C)||e(b)&&!e(h).trim()))]),ye(J,()=>e(_),a=>i(_,a)),Ye(le,()=>e(b),a=>i(b,a)),be("click",ve,()=>$("close")),be("submit",q,ea(Ce)),u(c,A)},$$slots:{default:!0}}),Je()}export{_a as U}; diff --git a/webapp/assets/_app/immutable/chunks/Ok63PiOl.js b/webapp/assets/_app/immutable/chunks/Ok63PiOl.js deleted file mode 100644 index b54b1de6..00000000 --- a/webapp/assets/_app/immutable/chunks/Ok63PiOl.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as V}from"./TJn6xDN9.js";import{p as B,E as D,l as t,q as s,g as e,m as a,h as P,f as T,t as q,i as S,b as F,c as G,u as I,d as w,k as o,r as z}from"./DniTuB_0.js";import{e as J,h as K,s as N,f as O}from"./BZ2rxtTc.js";import{l as C,p as l}from"./DbNhg6mG.js";var Q=T('');function Z(j,i){const M=C(i,["children","$$slots","$$events","$$legacy"]),L=C(M,["action","disabled","title","ariaLabel","size"]);B(i,!1);const u=a(),h=a(),p=a(),v=a(),g=a(),f=a(),n=a(),m=a(),b=a(),A=D();let r=l(i,"action",8,"edit"),x=l(i,"disabled",8,!1),y=l(i,"title",8,""),_=l(i,"ariaLabel",8,""),c=l(i,"size",8,"md");function H(){x()||A("click")}t(()=>{},()=>{o(u,"transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-gray-900 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50")}),t(()=>s(c()),()=>{o(h,{sm:"p-1",md:"p-2"}[c()])}),t(()=>s(r()),()=>{o(p,{edit:"text-indigo-600 dark:text-indigo-400 hover:text-indigo-900 dark:hover:text-indigo-300 focus:ring-indigo-500",delete:"text-red-600 dark:text-red-400 hover:text-red-900 dark:hover:text-red-300 focus:ring-red-500",view:"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-300 focus:ring-gray-500",add:"text-green-600 dark:text-green-400 hover:text-green-900 dark:hover:text-green-300 focus:ring-green-500",copy:"text-blue-600 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 focus:ring-blue-500"}[r()])}),t(()=>s(c()),()=>{o(v,c()==="sm"?"h-4 w-4":"h-5 w-5")}),t(()=>(e(u),e(h),e(p)),()=>{o(g,[e(u),e(h),e(p)].join(" "))}),t(()=>{},()=>{o(f,{edit:'',delete:'',view:'',add:'',copy:''})}),t(()=>{},()=>{o(n,{edit:"Edit",delete:"Delete",view:"View",add:"Add",copy:"Clone"})}),t(()=>(s(y()),e(n),s(r())),()=>{o(m,y()||e(n)[r()])}),t(()=>(s(_()),e(n),s(r())),()=>{o(b,_()||`${e(n)[r()]} item`)}),P(),V();var d=Q();J(d,()=>({type:"button",class:e(g),disabled:x(),title:e(m),"aria-label":e(b),...L}));var k=w(d),E=w(k);K(E,()=>(e(f),s(r()),I(()=>e(f)[r()])),!0),z(k),z(d),q(()=>N(k,0,O(e(v)))),S("click",d,H),F(j,d),G()}export{Z as A}; diff --git a/webapp/assets/_app/immutable/chunks/RtJp4Ifn.js b/webapp/assets/_app/immutable/chunks/RtJp4Ifn.js new file mode 100644 index 00000000..60fa3f6a --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/RtJp4Ifn.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as F}from"./TJn6xDN9.js";import{p as G,E as I,f as x,t as _,b as r,c as J,d as s,r as i,s as k,u as K,e as f,A as N,a as O,z as Q,D as R}from"./DniTuB_0.js";import{p as o,i as b}from"./DbNhg6mG.js";import{e as S,f as T,B as U}from"./DSfKzFV1.js";var V=x('
'),W=x('
'),X=x('

');function st(g,t){const w=S(t);G(t,!1);const y=I();let A=o(t,"title",8),P=o(t,"description",8),h=o(t,"actionLabel",8,null),j=o(t,"showAction",8,!0);function z(){y("action")}F();var n=X(),l=s(n),c=s(l),B=s(c,!0);i(c);var p=k(c,2),D=s(p,!0);i(p),i(l);var E=k(l,2);{var H=e=>{var a=V(),v=s(a);T(v,t,"actions",{}),i(a),r(e,a)},L=e=>{var a=N(),v=O(a);{var M=d=>{var m=W(),q=s(m);U(q,{variant:"primary",icon:'',$$events:{click:z},children:(C,Y)=>{Q();var u=R();_(()=>f(u,h())),r(C,u)},$$slots:{default:!0}}),i(m),r(d,m)};b(v,d=>{j()&&h()&&d(M)},!0)}r(e,a)};b(E,e=>{K(()=>w.actions)?e(H):e(L,!1)})}i(n),_(()=>{f(B,A()),f(D,P())}),r(g,n),J()}export{st as P}; diff --git a/webapp/assets/_app/immutable/chunks/aK-A9Gop.js b/webapp/assets/_app/immutable/chunks/aK-A9Gop.js new file mode 100644 index 00000000..17b7cd12 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/aK-A9Gop.js @@ -0,0 +1 @@ +function i(t){const n=["B","KB","MB","GB","TB"];let r=t,e=0;for(;r>=1024&&e

'),lt=w('

'),ut=w('
Loading templates...
'),pt=w(""),bt=w('

',1),gt=w('

Create a template first or proceed without a template to use default behavior.

'),ct=w(' '),ft=w('
'),vt=w('
Updating...
'),mt=w('

Pool Information (Read-only)

Provider:
Entity:

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Tags
Extra Specs (JSON)
');function Pt(hr,Je){Kr(Je,!1);const[kr,wr]=et(),U=()=>rt(nt,"$eagerCache",kr);let a=Zr(Je,"pool",8);const Z=Wr();let z=u(!1),D=u(""),T=u(""),m=u([]),ee=u(!1),L=u(a().image||""),F=u(a().flavor||""),O=u(a().max_runners),P=u(a().min_idle_runners),q=u(a().runner_bootstrap_timeout),H=u(a().priority),K=u(a().runner_prefix||""),y=u(a().os_type||"linux"),j=u(a().os_arch||"amd64"),W=u(a()["github-runner-group"]||""),Q=u(a().enabled),x=u((a().tags||[]).map(i=>i.name||"").filter(Boolean)),C=u(""),A=u("{}"),$=u(a().template_id);function Tr(i){if(i.repo_id){const s=U().repositories.find(p=>p.id===i.repo_id);return s?`${s.owner}/${s.name}`:"Unknown Entity"}if(i.org_id){const s=U().organizations.find(p=>p.id===i.org_id);return s&&s.name?s.name:"Unknown Entity"}if(i.enterprise_id){const s=U().enterprises.find(p=>p.id===i.enterprise_id);return s&&s.name?s.name:"Unknown Entity"}return"Unknown Entity"}function $r(i){return i.repo_id?"Repository":i.org_id?"Organization":i.enterprise_id?"Enterprise":"Unknown"}function re(){if(a().endpoint?.endpoint_type)return a().endpoint.endpoint_type;if(a().repo_id){const i=U().repositories.find(s=>s.id===a().repo_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}if(a().org_id){const i=U().organizations.find(s=>s.id===a().org_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}if(a().enterprise_id){const i=U().enterprises.find(s=>s.id===a().enterprise_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}return null}async function Me(){try{n(ee,!0);const i=re();if(!i){n(m,[]);return}if(n(m,await tt.listTemplates(e(y),void 0,i)),!e($)||!e(m).find(s=>s.id===e($))){const s=e(m).find(p=>p.owner_id==="system");s?n($,s.id):e(m).length>0&&n($,e(m)[0].id)}}catch(i){n(D,_r(i))}finally{n(ee,!1)}}Qr(()=>{if(a().extra_specs)try{if(typeof a().extra_specs=="object")n(A,JSON.stringify(a().extra_specs,null,2));else{const i=JSON.parse(a().extra_specs);n(A,JSON.stringify(i,null,2))}}catch{n(A,a().extra_specs||"{}")}Me()});function Ne(){e(C).trim()&&!e(x).includes(e(C).trim())&&(n(x,[...e(x),e(C).trim()]),n(C,""))}function Er(i){n(x,e(x).filter((s,p)=>p!==i))}function Rr(i){i.key==="Enter"&&(i.preventDefault(),Ne())}async function Sr(){try{if(n(z,!0),n(D,""),e(T))throw new Error(e(T));let i={};if(e(A).trim())try{i=JSON.parse(e(A))}catch{throw new Error("Invalid JSON in extra specs")}const s={image:e(L)!==a().image?e(L):void 0,flavor:e(F)!==a().flavor?e(F):void 0,max_runners:e(O)!==a().max_runners?e(O):void 0,min_idle_runners:e(P)!==a().min_idle_runners?e(P):void 0,runner_bootstrap_timeout:e(q)!==a().runner_bootstrap_timeout?e(q):void 0,priority:e(H)!==a().priority?e(H):void 0,runner_prefix:e(K)!==a().runner_prefix?e(K):void 0,os_type:e(y)!==a().os_type?e(y):void 0,os_arch:e(j)!==a().os_arch?e(j):void 0,"github-runner-group":e(W)!==a()["github-runner-group"]&&e(W)||void 0,enabled:e(Q)!==a().enabled?e(Q):void 0,tags:JSON.stringify(e(x))!==JSON.stringify((a().tags||[]).map(p=>p.name||"").filter(Boolean))?e(x):void 0,extra_specs:e(A).trim()!==JSON.stringify(a().extra_specs||{},null,2).trim()?i:void 0,template_id:e($)!==a().template_id?e($):void 0};Object.keys(s).forEach(p=>{s[p]===void 0&&delete s[p]}),Z("submit",s)}catch(i){n(D,_r(i))}finally{n(z,!1)}}pr(()=>e(y),()=>{e(y)&&Me()}),pr(()=>(e(P),e(O)),()=>{e(P)!==null&&e(P)!==void 0&&e(O)!==null&&e(O)!==void 0&&e(P)>e(O)?n(T,"Min idle runners cannot be greater than max runners"):n(T,"")}),Vr(),Hr(),ot(hr,{$$events:{close:()=>Z("close")},children:(i,s)=>{var p=mt(),te=d(p),Ie=d(te),Or=d(Ie);t(Ie),t(te);var ae=o(te,2),Ue=d(ae);{var Pr=r=>{var l=st(),E=d(l),J=d(E,!0);t(E),t(l),v(()=>h(J,e(D))),c(r,l)};I(Ue,r=>{e(D)&&r(Pr)})}var Ce=o(Ue,2);{var Ar=r=>{var l=lt(),E=d(l),J=d(E,!0);t(E),t(l),v(()=>h(J,e(T))),c(r,l)};I(Ce,r=>{e(T)&&r(Ar)})}var de=o(Ce,2),De=o(d(de),2),oe=d(De),je=o(d(oe),2),Jr=d(je,!0);t(je),t(oe);var Be=o(oe,2),Ge=o(d(Be),2),Mr=d(Ge);t(Ge),t(Be),t(De),t(de);var ie=o(de,2),ze=o(d(ie),2),ne=d(ze),Le=o(d(ne),2);k(Le),t(ne);var se=o(ne,2),Fe=o(d(se),2);k(Fe),t(se);var le=o(se,2),ue=o(d(le),2);v(()=>{e(y),Pe(()=>{})});var pe=d(ue);pe.value=pe.__value="linux";var qe=o(pe);qe.value=qe.__value="windows",t(ue),t(le);var be=o(le,2),ge=o(d(be),2);v(()=>{e(j),Pe(()=>{})});var ce=d(ge);ce.value=ce.__value="amd64";var He=o(ce);He.value=He.__value="arm64",t(ge),t(be);var Ke=o(be,2),Nr=o(d(Ke),2);{var Ir=r=>{var l=ut();c(r,l)},Ur=r=>{var l=Xr(),E=gr(l);{var J=_=>{var R=bt(),f=gr(R);v(()=>{e($),Pe(()=>{e(m)})}),fr(f,5,()=>e(m),vr,(M,g)=>{var N=pt(),sr=d(N),Fr=o(sr);{var qr=Oe=>{var ur=cr();v(()=>h(ur,`- ${e(g),b(()=>e(g).description)??""}`)),c(Oe,ur)};I(Fr,Oe=>{e(g),b(()=>e(g).description)&&Oe(qr)})}t(N);var lr={};v(()=>{h(sr,`${e(g),b(()=>e(g).name)??""} ${e(g),b(()=>e(g).owner_id==="system"?"(System)":"")??""} `),lr!==(lr=(e(g),b(()=>e(g).id)))&&(N.value=(N.__value=(e(g),b(()=>e(g).id)))??"")}),c(M,N)}),t(f);var X=o(f,2),Y=d(X);t(X),v(M=>h(Y,`Templates define how the runner software is installed and configured. +import"./DsnmJJEf.js";import{i as Hr}from"./TJn6xDN9.js";import{p as Kr,E as Wr,m as u,o as Qr,k as n,l as pr,g as e,h as Vr,f as w,d,r as t,s as o,t as v,y as Pe,u as b,z as br,q as B,e as h,i as G,b as c,A as Xr,a as gr,D as cr,c as Yr}from"./DniTuB_0.js";import{p as Zr,i as I,s as et,a as rt}from"./DbNhg6mG.js";import{e as fr,i as vr}from"./Ck5PkeSc.js";import{r as k,s as mr,b as Ae,c as yr,g as tt,d as xr}from"./DSfKzFV1.js";import{b as S,a as at}from"./CCQwxxp9.js";import{p as dt}from"./D4Caz1gY.js";import{M as ot}from"./l9U2NoST.js";import{J as it}from"./DoxpoDLH.js";import{e as _r}from"./BZiHL9L3.js";import{e as nt}from"./BE9PkXKz.js";var st=w('

'),lt=w('

'),ut=w('
Loading templates...
'),pt=w(""),bt=w('

',1),gt=w('

Create a template first or proceed without a template to use default behavior.

'),ct=w(' '),ft=w('
'),vt=w('
Updating...
'),mt=w('

Pool Information (Read-only)

Provider:
Entity:

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Tags
Extra Specs (JSON)
');function Pt(hr,Je){Kr(Je,!1);const[kr,wr]=et(),U=()=>rt(nt,"$eagerCache",kr);let a=Zr(Je,"pool",8);const Z=Wr();let z=u(!1),D=u(""),T=u(""),m=u([]),ee=u(!1),L=u(a().image||""),F=u(a().flavor||""),O=u(a().max_runners),P=u(a().min_idle_runners),q=u(a().runner_bootstrap_timeout),H=u(a().priority),K=u(a().runner_prefix||""),y=u(a().os_type||"linux"),j=u(a().os_arch||"amd64"),W=u(a()["github-runner-group"]||""),Q=u(a().enabled),x=u((a().tags||[]).map(i=>i.name||"").filter(Boolean)),C=u(""),A=u("{}"),$=u(a().template_id);function Tr(i){if(i.repo_id){const s=U().repositories.find(p=>p.id===i.repo_id);return s?`${s.owner}/${s.name}`:"Unknown Entity"}if(i.org_id){const s=U().organizations.find(p=>p.id===i.org_id);return s&&s.name?s.name:"Unknown Entity"}if(i.enterprise_id){const s=U().enterprises.find(p=>p.id===i.enterprise_id);return s&&s.name?s.name:"Unknown Entity"}return"Unknown Entity"}function $r(i){return i.repo_id?"Repository":i.org_id?"Organization":i.enterprise_id?"Enterprise":"Unknown"}function re(){if(a().endpoint?.endpoint_type)return a().endpoint.endpoint_type;if(a().repo_id){const i=U().repositories.find(s=>s.id===a().repo_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}if(a().org_id){const i=U().organizations.find(s=>s.id===a().org_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}if(a().enterprise_id){const i=U().enterprises.find(s=>s.id===a().enterprise_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}return null}async function Me(){try{n(ee,!0);const i=re();if(!i){n(m,[]);return}if(n(m,await tt.listTemplates(e(y),void 0,i)),!e($)||!e(m).find(s=>s.id===e($))){const s=e(m).find(p=>p.owner_id==="system");s?n($,s.id):e(m).length>0&&n($,e(m)[0].id)}}catch(i){n(D,_r(i))}finally{n(ee,!1)}}Qr(()=>{if(a().extra_specs)try{if(typeof a().extra_specs=="object")n(A,JSON.stringify(a().extra_specs,null,2));else{const i=JSON.parse(a().extra_specs);n(A,JSON.stringify(i,null,2))}}catch{n(A,a().extra_specs||"{}")}Me()});function Ne(){e(C).trim()&&!e(x).includes(e(C).trim())&&(n(x,[...e(x),e(C).trim()]),n(C,""))}function Er(i){n(x,e(x).filter((s,p)=>p!==i))}function Rr(i){i.key==="Enter"&&(i.preventDefault(),Ne())}async function Sr(){try{if(n(z,!0),n(D,""),e(T))throw new Error(e(T));let i={};if(e(A).trim())try{i=JSON.parse(e(A))}catch{throw new Error("Invalid JSON in extra specs")}const s={image:e(L)!==a().image?e(L):void 0,flavor:e(F)!==a().flavor?e(F):void 0,max_runners:e(O)!==a().max_runners?e(O):void 0,min_idle_runners:e(P)!==a().min_idle_runners?e(P):void 0,runner_bootstrap_timeout:e(q)!==a().runner_bootstrap_timeout?e(q):void 0,priority:e(H)!==a().priority?e(H):void 0,runner_prefix:e(K)!==a().runner_prefix?e(K):void 0,os_type:e(y)!==a().os_type?e(y):void 0,os_arch:e(j)!==a().os_arch?e(j):void 0,"github-runner-group":e(W)!==a()["github-runner-group"]&&e(W)||void 0,enabled:e(Q)!==a().enabled?e(Q):void 0,tags:JSON.stringify(e(x))!==JSON.stringify((a().tags||[]).map(p=>p.name||"").filter(Boolean))?e(x):void 0,extra_specs:e(A).trim()!==JSON.stringify(a().extra_specs||{},null,2).trim()?i:void 0,template_id:e($)!==a().template_id?e($):void 0};Object.keys(s).forEach(p=>{s[p]===void 0&&delete s[p]}),Z("submit",s)}catch(i){n(D,_r(i))}finally{n(z,!1)}}pr(()=>e(y),()=>{e(y)&&Me()}),pr(()=>(e(P),e(O)),()=>{e(P)!==null&&e(P)!==void 0&&e(O)!==null&&e(O)!==void 0&&e(P)>e(O)?n(T,"Min idle runners cannot be greater than max runners"):n(T,"")}),Vr(),Hr(),ot(hr,{$$events:{close:()=>Z("close")},children:(i,s)=>{var p=mt(),te=d(p),Ie=d(te),Or=d(Ie);t(Ie),t(te);var ae=o(te,2),Ue=d(ae);{var Pr=r=>{var l=st(),E=d(l),J=d(E,!0);t(E),t(l),v(()=>h(J,e(D))),c(r,l)};I(Ue,r=>{e(D)&&r(Pr)})}var Ce=o(Ue,2);{var Ar=r=>{var l=lt(),E=d(l),J=d(E,!0);t(E),t(l),v(()=>h(J,e(T))),c(r,l)};I(Ce,r=>{e(T)&&r(Ar)})}var de=o(Ce,2),De=o(d(de),2),oe=d(De),je=o(d(oe),2),Jr=d(je,!0);t(je),t(oe);var Be=o(oe,2),Ge=o(d(Be),2),Mr=d(Ge);t(Ge),t(Be),t(De),t(de);var ie=o(de,2),ze=o(d(ie),2),ne=d(ze),Le=o(d(ne),2);k(Le),t(ne);var se=o(ne,2),Fe=o(d(se),2);k(Fe),t(se);var le=o(se,2),ue=o(d(le),2);v(()=>{e(y),Pe(()=>{})});var pe=d(ue);pe.value=pe.__value="linux";var qe=o(pe);qe.value=qe.__value="windows",t(ue),t(le);var be=o(le,2),ge=o(d(be),2);v(()=>{e(j),Pe(()=>{})});var ce=d(ge);ce.value=ce.__value="amd64";var He=o(ce);He.value=He.__value="arm64",t(ge),t(be);var Ke=o(be,2),Nr=o(d(Ke),2);{var Ir=r=>{var l=ut();c(r,l)},Ur=r=>{var l=Xr(),E=gr(l);{var J=_=>{var R=bt(),f=gr(R);v(()=>{e($),Pe(()=>{e(m)})}),fr(f,5,()=>e(m),vr,(M,g)=>{var N=pt(),sr=d(N),Fr=o(sr);{var qr=Oe=>{var ur=cr();v(()=>h(ur,`- ${e(g),b(()=>e(g).description)??""}`)),c(Oe,ur)};I(Fr,Oe=>{e(g),b(()=>e(g).description)&&Oe(qr)})}t(N);var lr={};v(()=>{h(sr,`${e(g),b(()=>e(g).name)??""} ${e(g),b(()=>e(g).owner_id==="system"?"(System)":"")??""} `),lr!==(lr=(e(g),b(()=>e(g).id)))&&(N.value=(N.__value=(e(g),b(()=>e(g).id)))??"")}),c(M,N)}),t(f);var X=o(f,2),Y=d(X);t(X),v(M=>h(Y,`Templates define how the runner software is installed and configured. Showing templates for ${M??""} ${e(y)??""}.`),[()=>b(re)]),Ae(f,()=>e($),M=>n($,M)),c(_,R)},Se=_=>{var R=gt(),f=d(R),X=d(f);t(f);var Y=o(f,2),M=d(Y);br(),t(Y),t(R),v((g,N)=>{h(X,`No templates found for ${g??""} ${e(y)??""}.`),yr(M,"href",N)},[()=>b(re),()=>(B(xr),b(()=>xr("/templates")))]),c(_,R)};I(E,_=>{e(m),b(()=>e(m).length>0)?_(J):_(Se,!1)},!0)}c(r,l)};I(Nr,r=>{e(ee)?r(Ir):r(Ur,!1)})}t(Ke),t(ze),t(ie);var fe=o(ie,2),We=o(d(fe),2),ve=d(We),me=o(d(ve),2);k(me),t(ve);var ye=o(ve,2),xe=o(d(ye),2);k(xe),t(ye);var Qe=o(ye,2),Ve=o(d(Qe),2);k(Ve),t(Qe),t(We),t(fe);var _e=o(fe,2),he=o(d(_e),2),ke=d(he),Xe=o(d(ke),2);k(Xe),t(ke);var we=o(ke,2),Ye=o(d(we),2);k(Ye),t(we);var Ze=o(we,2),er=o(d(Ze),2);k(er),t(Ze),t(he);var Te=o(he,2),rr=d(Te),tr=o(d(rr),2),$e=d(tr),V=d($e);k(V);var Cr=o(V,2);t($e);var Dr=o($e,2);{var jr=r=>{var l=ft();fr(l,5,()=>e(x),vr,(E,J,Se)=>{var _=ct(),R=d(_),f=o(R);t(_),v(()=>{h(R,`${e(J)??""} `),yr(f,"aria-label",`Remove tag ${e(J)??""}`)}),G("click",f,()=>Er(Se)),c(E,_)}),t(l),c(r,l)};I(Dr,r=>{e(x),b(()=>e(x).length>0)&&r(jr)})}t(tr),t(rr),t(Te);var Ee=o(Te,2),ar=d(Ee),Br=o(d(ar),2);it(Br,{rows:4,placeholder:"{}",get value(){return e(A)},set value(r){n(A,r)},$$legacy:!0}),t(ar),t(Ee);var dr=o(Ee,2),or=d(dr);k(or),br(2),t(dr),t(_e);var ir=o(_e,2),nr=d(ir),Re=o(nr,2),Gr=d(Re);{var zr=r=>{var l=vt();c(r,l)},Lr=r=>{var l=cr("Update Pool");c(r,l)};I(Gr,r=>{e(z)?r(zr):r(Lr,!1)})}t(Re),t(ir),t(ae),t(p),v((r,l)=>{h(Or,`Update Pool ${B(a()),b(()=>a().id)??""}`),h(Jr,(B(a()),b(()=>a().provider_name))),h(Mr,`${r??""}: ${l??""}`),mr(me,1,`w-full px-3 py-2 border ${e(T)?"border-red-300 dark:border-red-500":"border-gray-300 dark:border-gray-600"} rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white`),mr(xe,1,`w-full px-3 py-2 border ${e(T)?"border-red-300 dark:border-red-500":"border-gray-300 dark:border-gray-600"} rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white`),Re.disabled=e(z)||e(T)!==""},[()=>(B(a()),b(()=>$r(a()))),()=>(B(a()),b(()=>Tr(a())))]),S(Le,()=>e(L),r=>n(L,r)),S(Fe,()=>e(F),r=>n(F,r)),Ae(ue,()=>e(y),r=>n(y,r)),Ae(ge,()=>e(j),r=>n(j,r)),S(me,()=>e(P),r=>n(P,r)),S(xe,()=>e(O),r=>n(O,r)),S(Ve,()=>e(q),r=>n(q,r)),S(Xe,()=>e(K),r=>n(K,r)),S(Ye,()=>e(H),r=>n(H,r)),S(er,()=>e(W),r=>n(W,r)),S(V,()=>e(C),r=>n(C,r)),G("keydown",V,Rr),G("click",Cr,Ne),at(or,()=>e(Q),r=>n(Q,r)),G("click",nr,()=>Z("close")),G("submit",ae,dt(Sr)),c(i,p)},$$slots:{default:!0}}),Yr(),wr()}export{Pt as U}; diff --git a/webapp/assets/_app/immutable/chunks/kW9-6GPQ.js b/webapp/assets/_app/immutable/chunks/kW9-6GPQ.js new file mode 100644 index 00000000..7fefe248 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/kW9-6GPQ.js @@ -0,0 +1,3 @@ +import{F as Ae,o as De,aR as L,g as P,k as N,bf as mt,aS as $e}from"./DniTuB_0.js";import{p as _t,e as yt,a as wt,b as I}from"./CRDKDqj5.js";class le{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Ee{constructor(t,n){this.status=t,this.location=n}}class Se extends Error{constructor(t,n,r){super(r),this.status=t,this.text=n}}new URL("sveltekit-internal://");function vt(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function bt(e){return e.split("%25").map(decodeURI).join("%25")}function kt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function me({href:e}){return e.split("#")[0]}function At(e,t,n,r=!1){const a=new URL(e);Object.defineProperty(a,"searchParams",{value:new Proxy(a.searchParams,{get(i,o){if(o==="get"||o==="getAll"||o==="has")return f=>(n(f),i[o](f));t();const l=Reflect.get(i,o);return typeof l=="function"?l.bind(i):l}}),enumerable:!0,configurable:!0});const s=["href","pathname","search","toString","toJSON"];r&&s.push("hash");for(const i of s)Object.defineProperty(a,i,{get(){return t(),e[i]},enumerable:!0,configurable:!0});return a}function Et(...e){let t=5381;for(const n of e)if(typeof n=="string"){let r=n.length;for(;r;)t=t*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let a=r.length;for(;a;)t=t*33^r[--a]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}function St(e){const t=atob(e),n=new Uint8Array(t.length);for(let r=0;r((e instanceof Request?e.method:t?.method||"GET")!=="GET"&&G.delete(Re(e)),Rt(e,t));const G=new Map;function Tt(e,t){const n=Re(e,t),r=document.querySelector(n);if(r?.textContent){let{body:a,...s}=JSON.parse(r.textContent);const i=r.getAttribute("data-ttl");return i&&G.set(n,{body:a,init:s,ttl:1e3*Number(i)}),r.getAttribute("data-b64")!==null&&(a=St(a)),Promise.resolve(new Response(a,s))}return window.fetch(e,t)}function Ut(e,t,n){if(G.size>0){const r=Re(e,n),a=G.get(r);if(a){if(performance.now(){const{pattern:g,params:u}=_t(o),c={id:o,exec:h=>{const _=g.exec(h);if(_)return yt(_,u,r)},errors:[1,...d||[]].map(h=>e[h]),layouts:[0,...f||[]].map(i),leaf:s(l)};return c.errors.length=c.layouts.length=Math.max(c.errors.length,c.layouts.length),c});function s(o){const l=o<0;return l&&(o=~o),[l,e[o]]}function i(o){return o===void 0?o:[a.has(o),e[o]]}}function Je(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function Be(e,t,n=JSON.stringify){const r=n(t);try{sessionStorage[e]=r}catch{}}const Lt="1759861710563",We="sveltekit:snapshot",ze="sveltekit:scroll",Xe="sveltekit:states",Pt="sveltekit:pageurl",V="sveltekit:history",J="sveltekit:navigation",j={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Z=location.origin;function Te(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function fe(){return{x:pageXOffset,y:pageYOffset}}function B(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const Ve={...j,"":j.hover};function Ze(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function Qe(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=Ze(e)}}function we(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){const o=location.hash.split("#")[1]||"/";r.hash=`#${o}${r.hash}`}}catch{}const a=e instanceof SVGAElement?e.target.baseVal:e.target,s=!r||!!a||ue(r,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),i=r?.origin===Z&&e.hasAttribute("download");return{url:r,external:s,target:a,download:i}}function te(e){let t=null,n=null,r=null,a=null,s=null,i=null,o=e;for(;o&&o!==document.documentElement;)r===null&&(r=B(o,"preload-code")),a===null&&(a=B(o,"preload-data")),t===null&&(t=B(o,"keepfocus")),n===null&&(n=B(o,"noscroll")),s===null&&(s=B(o,"reload")),i===null&&(i=B(o,"replacestate")),o=Ze(o);function l(f){switch(f){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:Ve[r??"off"],preload_data:Ve[a??"off"],keepfocus:l(t),noscroll:l(n),reload:l(s),replace_state:l(i)}}function Fe(e){const t=Ae(e);let n=!0;function r(){n=!0,t.update(i=>i)}function a(i){n=!1,t.set(i)}function s(i){let o;return t.subscribe(l=>{(o===void 0||n&&l!==o)&&i(o=l)})}return{notify:r,set:a,subscribe:s}}const et={v:()=>{}};function Nt(){const{set:e,subscribe:t}=Ae(!1);let n;async function r(){clearTimeout(n);try{const a=await fetch(`${wt}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!a.ok)return!1;const i=(await a.json()).version!==Lt;return i&&(e(!0),et.v(),clearTimeout(n)),i}catch{return!1}}return{subscribe:t,check:r}}function ue(e,t,n){return e.origin!==Z||!e.pathname.startsWith(t)?!0:n?!(e.pathname===t+"/"||e.pathname===t+"/index.html"||e.protocol==="file:"&&e.pathname.replace(/\/[^/]+\.html?$/,"")===t):!1}function yn(e){}function Ot(e){const t=xt(e),n=new ArrayBuffer(t.length),r=new DataView(n);for(let a=0;a>16),t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255),n=r=0);return r===12?(n>>=4,t+=String.fromCharCode(n)):r===18&&(n>>=2,t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255)),t}const jt=-1,Dt=-2,$t=-3,Bt=-4,Vt=-5,Ft=-6;function Mt(e,t){if(typeof e=="number")return a(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const n=e,r=Array(n.length);function a(s,i=!1){if(s===jt)return;if(s===$t)return NaN;if(s===Bt)return 1/0;if(s===Vt)return-1/0;if(s===Ft)return-0;if(i||typeof s!="number")throw new Error("Invalid input");if(s in r)return r[s];const o=n[s];if(!o||typeof o!="object")r[s]=o;else if(Array.isArray(o))if(typeof o[0]=="string"){const l=o[0],f=t?.[l];if(f)return r[s]=f(a(o[1]));switch(l){case"Date":r[s]=new Date(o[1]);break;case"Set":const d=new Set;r[s]=d;for(let c=1;ct!=null)}const Ht="x-sveltekit-invalidated",Kt="x-sveltekit-trailing-slash";function ne(e){return e instanceof le||e instanceof Se?e.status:500}function Yt(e){return e instanceof Se?e.text:"Internal Error"}let E,W,_e;const Jt=De.toString().includes("$$")||/function \w+\(\) \{\}/.test(De.toString());Jt?(E={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},W={current:null},_e={current:!1}):(E=new class{#e=L({});get data(){return P(this.#e)}set data(t){N(this.#e,t)}#t=L(null);get form(){return P(this.#t)}set form(t){N(this.#t,t)}#n=L(null);get error(){return P(this.#n)}set error(t){N(this.#n,t)}#r=L({});get params(){return P(this.#r)}set params(t){N(this.#r,t)}#a=L({id:null});get route(){return P(this.#a)}set route(t){N(this.#a,t)}#o=L({});get state(){return P(this.#o)}set state(t){N(this.#o,t)}#s=L(-1);get status(){return P(this.#s)}set status(t){N(this.#s,t)}#i=L(new URL("https://example.com"));get url(){return P(this.#i)}set url(t){N(this.#i,t)}},W=new class{#e=L(null);get current(){return P(this.#e)}set current(t){N(this.#e,t)}},_e=new class{#e=L(!1);get current(){return P(this.#e)}set current(t){N(this.#e,t)}},et.v=()=>_e.current=!0);function Wt(e){Object.assign(E,e)}const zt="/__data.json",Xt=".html__data.json";function Zt(e){return e.endsWith(".html")?e.replace(/\.html$/,Xt):e.replace(/\/$/,"")+zt}const{tick:Qt}=mt,en=new Set(["icon","shortcut icon","apple-touch-icon"]),$=Je(ze)??{},z=Je(We)??{},x={url:Fe({}),page:Fe({}),navigating:Ae(null),updated:Nt()};function Ue(e){$[e]=fe()}function tn(e,t){let n=e+1;for(;$[n];)delete $[n],n+=1;for(n=t+1;z[n];)delete z[n],n+=1}function M(e){return location.href=e.href,new Promise(()=>{})}async function nt(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(I||"/");e&&await e.update()}}function Me(){}let Ie,ve,re,O,be,v;globalThis.__sveltekit_2i6bzq.data;const ae=[],oe=[];let C=null;const ee=new Map,rt=new Set,nn=new Set,H=new Set;let w={branch:[],error:null,url:null},Le=!1,se=!1,qe=!0,X=!1,q=!1,at=!1,Pe=!1,ot,k,T,D;const K=new Set,Ge=new Map;async function kn(e,t,n){document.URL!==location.href&&(location.href=location.href),v=e,await e.hooks.init?.(),Ie=It(e),O=document.documentElement,be=t,ve=e.nodes[0],re=e.nodes[1],ve(),re(),k=history.state?.[V],T=history.state?.[J],k||(k=T=Date.now(),history.replaceState({...history.state,[V]:k,[J]:T},""));const r=$[k];function a(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}n?(a(),await hn(be,n)):(await Y({type:"enter",url:Te(v.hash?gn(new URL(location.href)):location.href),replace_state:!0}),a()),dn()}function rn(){ae.length=0,Pe=!1}function st(e){oe.some(t=>t?.snapshot)&&(z[e]=oe.map(t=>t?.snapshot?.capture()))}function it(e){z[e]?.forEach((t,n)=>{oe[n]?.snapshot?.restore(t)})}function He(){Ue(k),Be(ze,$),st(T),Be(We,z)}async function Ne(e,t,n,r){let a;const s=await Y({type:"goto",url:Te(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:r,accept:()=>{t.invalidateAll&&(Pe=!0,a=[...Ge.keys()]),t.invalidate&&t.invalidate.forEach(un)}});return t.invalidateAll&&$e().then($e).then(()=>{Ge.forEach(({resource:i},o)=>{a?.includes(o)&&i.refresh?.()})}),s}async function an(e){if(e.id!==C?.id){const t={};K.add(t),C={id:e.id,token:t,promise:ft({...e,preload:t}).then(n=>(K.delete(t),n.type==="loaded"&&n.state.error&&(C=null),n))}}return C.promise}async function ye(e){const t=(await he(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].map(n=>n?.[1]()))}function ct(e,t,n){w=e.state;const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(E,e.props.page),ot=new v.root({target:t,props:{...e.props,stores:x,components:oe},hydrate:n,sync:!1}),it(T),n){const a={from:null,to:{params:w.params,route:{id:w.route?.id??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};H.forEach(s=>s(a))}se=!0}function ie({url:e,params:t,branch:n,status:r,error:a,route:s,form:i}){let o="never";if(I&&(e.pathname===I||e.pathname===I+"/"))o="always";else for(const c of n)c?.slash!==void 0&&(o=c.slash);e.pathname=vt(e.pathname,o),e.search=e.search;const l={type:"loaded",state:{url:e,params:t,branch:n,error:a,route:s},props:{constructors:Gt(n).map(c=>c.node.component),page:je(E)}};i!==void 0&&(l.props.form=i);let f={},d=!E,g=0;for(let c=0;c(o&&(l.route=!0),u[c])}),params:new Proxy(r,{get:(u,c)=>(o&&l.params.add(c),u[c])}),data:s?.data??null,url:At(n,()=>{o&&(l.url=!0)},u=>{o&&l.search_params.add(u)},v.hash),async fetch(u,c){u instanceof Request&&(c={body:u.method==="GET"||u.method==="HEAD"?void 0:await u.blob(),cache:u.cache,credentials:u.credentials,headers:[...u.headers].length>0?u?.headers:void 0,integrity:u.integrity,keepalive:u.keepalive,method:u.method,mode:u.mode,redirect:u.redirect,referrer:u.referrer,referrerPolicy:u.referrerPolicy,signal:u.signal,...c});const{resolved:h,promise:_}=lt(u,c,n);return o&&d(h.href),_},setHeaders:()=>{},depends:d,parent(){return o&&(l.parent=!0),t()},untrack(u){o=!1;try{return u()}finally{o=!0}}};i=await f.universal.load.call(null,g)??null}return{node:f,loader:e,server:s,universal:f.universal?.load?{type:"data",data:i,uses:l}:null,data:i??s?.data??null,slash:f.universal?.trailingSlash??s?.slash}}function lt(e,t,n){let r=e instanceof Request?e.url:e;const a=new URL(r,n);a.origin===n.origin&&(r=a.href.slice(n.origin.length));const s=se?Ut(r,a.href,t):Tt(r,t);return{resolved:a,promise:s}}function Ke(e,t,n,r,a,s){if(Pe)return!0;if(!a)return!1;if(a.parent&&e||a.route&&t||a.url&&n)return!0;for(const i of a.search_params)if(r.has(i))return!0;for(const i of a.params)if(s[i]!==w.params[i])return!0;for(const i of a.dependencies)if(ae.some(o=>o(new URL(i))))return!0;return!1}function Ce(e,t){return e?.type==="data"?e:e?.type==="skip"?t??null:null}function on(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const r of n){const a=e.searchParams.getAll(r),s=t.searchParams.getAll(r);a.every(i=>s.includes(i))&&s.every(i=>a.includes(i))&&n.delete(r)}return n}function Ye({error:e,url:t,route:n,params:r}){return{type:"loaded",state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:je(E),constructors:[]}}}async function ft({id:e,invalidating:t,url:n,params:r,route:a,preload:s}){if(C?.id===e)return K.delete(C.token),C.promise;const{errors:i,layouts:o,leaf:l}=a,f=[...o,l];i.forEach(p=>p?.().catch(()=>{})),f.forEach(p=>p?.[1]().catch(()=>{}));let d=null;const g=w.url?e!==ce(w.url):!1,u=w.route?a.id!==w.route.id:!1,c=on(w.url,n);let h=!1;const _=f.map((p,y)=>{const b=w.branch[y],A=!!p?.[0]&&(b?.loader!==p[1]||Ke(h,u,g,c,b.server?.uses,r));return A&&(h=!0),A});if(_.some(Boolean)){try{d=await ht(n,_)}catch(p){const y=await F(p,{url:n,params:r,route:{id:e}});return K.has(s)?Ye({error:y,url:n,params:r,route:a}):de({status:ne(p),error:y,url:n,route:a})}if(d.type==="redirect")return d}const m=d?.nodes;let R=!1;const S=f.map(async(p,y)=>{if(!p)return;const b=w.branch[y],A=m?.[y];if((!A||A.type==="skip")&&p[1]===b?.loader&&!Ke(R,u,g,c,b.universal?.uses,r))return b;if(R=!0,A?.type==="error")throw A;return Oe({loader:p[1],url:n,params:r,route:a,parent:async()=>{const pe={};for(let ge=0;ge{});const U=[];for(let p=0;pPromise.resolve({}),server_data_node:Ce(s)}),l={node:await re(),loader:re,universal:null,server:null,data:null};return ie({url:n,params:a,branch:[o,l],status:e,error:t,route:null})}catch(o){if(o instanceof Ee)return Ne(new URL(o.location,location.href),{},0);throw o}}async function cn(e){const t=e.href;if(ee.has(t))return ee.get(t);let n;try{const r=(async()=>{let a=await v.hooks.reroute({url:new URL(e),fetch:async(s,i)=>lt(s,i,e).promise})??e;if(typeof a=="string"){const s=new URL(e);v.hash?s.hash=a:s.pathname=a,a=s}return a})();ee.set(t,r),n=await r}catch{ee.delete(t);return}return n}async function he(e,t){if(e&&!ue(e,I,v.hash)){const n=await cn(e);if(!n)return;const r=ln(n);for(const a of Ie){const s=a.exec(r);if(s)return{id:ce(e),invalidating:t,route:a,params:kt(s),url:e}}}}function ln(e){return bt(v.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(I.length))||"/"}function ce(e){return(v.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function ut({url:e,type:t,intent:n,delta:r}){let a=!1;const s=xe(w,n,e,t);r!==void 0&&(s.navigation.delta=r);const i={...s.navigation,cancel:()=>{a=!0,s.reject(new Error("navigation cancelled"))}};return X||rt.forEach(o=>o(i)),a?null:s}async function Y({type:e,url:t,popped:n,keepfocus:r,noscroll:a,replace_state:s,state:i={},redirect_count:o=0,nav_token:l={},accept:f=Me,block:d=Me}){const g=D;D=l;const u=await he(t,!1),c=e==="enter"?xe(w,u,t,e):ut({url:t,type:e,delta:n?.delta,intent:u});if(!c){d(),D===l&&(D=g);return}const h=k,_=T;f(),X=!0,se&&c.navigation.type!=="enter"&&x.navigating.set(W.current=c.navigation);let m=u&&await ft(u);if(!m){if(ue(t,I,v.hash))return await M(t);m=await dt(t,{id:null},await F(new Se(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404)}if(t=u?.url||t,D!==l)return c.reject(new Error("navigation aborted")),!1;if(m.type==="redirect")if(o>=20)m=await de({status:500,error:await F(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}});else return await Ne(new URL(m.location,t).href,{},o+1,l),!1;else m.props.page.status>=400&&await x.updated.check()&&(await nt(),await M(t));if(rn(),Ue(h),st(_),m.props.page.url.pathname!==t.pathname&&(t.pathname=m.props.page.url.pathname),i=n?n.state:i,!n){const p=s?0:1,y={[V]:k+=p,[J]:T+=p,[Xe]:i};(s?history.replaceState:history.pushState).call(history,y,"",t),s||tn(k,T)}if(C=null,m.props.page.state=i,se){const p=(await Promise.all(Array.from(nn,y=>y(c.navigation)))).filter(y=>typeof y=="function");if(p.length>0){let y=function(){p.forEach(b=>{H.delete(b)})};p.push(y),p.forEach(b=>{H.add(b)})}w=m.state,m.props.page&&(m.props.page.url=t),ot.$set(m.props),Wt(m.props.page),at=!0}else ct(m,be,!1);const{activeElement:R}=document;await Qt();const S=n?n.scroll:a?fe():null;if(qe){const p=t.hash&&document.getElementById(gt(t));S?scrollTo(S.x,S.y):p?p.scrollIntoView():scrollTo(0,0)}const U=document.activeElement!==R&&document.activeElement!==document.body;!r&&!U&&pn(t),qe=!0,m.props.page&&Object.assign(E,m.props.page),X=!1,e==="popstate"&&it(T),c.fulfil(void 0),H.forEach(p=>p(c.navigation)),x.navigating.set(W.current=null)}async function dt(e,t,n,r){return e.origin===Z&&e.pathname===location.pathname&&!Le?await de({status:r,error:n,url:e,route:t}):await M(e)}function fn(){let e,t,n;O.addEventListener("mousemove",o=>{const l=o.target;clearTimeout(e),e=setTimeout(()=>{s(l,j.hover)},20)});function r(o){o.defaultPrevented||s(o.composedPath()[0],j.tap)}O.addEventListener("mousedown",r),O.addEventListener("touchstart",r,{passive:!0});const a=new IntersectionObserver(o=>{for(const l of o)l.isIntersecting&&(ye(new URL(l.target.href)),a.unobserve(l.target))},{threshold:0});async function s(o,l){const f=Qe(o,O),d=f===t&&l>=n;if(!f||d)return;const{url:g,external:u,download:c}=we(f,I,v.hash);if(u||c)return;const h=te(f),_=g&&ce(w.url)===ce(g);if(!(h.reload||_))if(l<=h.preload_data){t=f,n=j.tap;const m=await he(g,!1);if(!m)return;an(m)}else l<=h.preload_code&&(t=f,n=l,ye(g))}function i(){a.disconnect();for(const o of O.querySelectorAll("a")){const{url:l,external:f,download:d}=we(o,I,v.hash);if(f||d)continue;const g=te(o);g.reload||(g.preload_code===j.viewport&&a.observe(o),g.preload_code===j.eager&&ye(l))}}H.add(i),i()}function F(e,t){if(e instanceof le)return e.body;const n=ne(e),r=Yt(e);return v.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function An(e,t={}){return e=new URL(Te(e)),e.origin!==Z?Promise.reject(new Error("goto: invalid URL")):Ne(e,t,0)}function un(e){if(typeof e=="function")ae.push(e);else{const{href:t}=new URL(e,location.href);ae.push(n=>n.href===t)}}function dn(){history.scrollRestoration="manual",addEventListener("beforeunload",t=>{let n=!1;if(He(),!X){const r=xe(w,void 0,null,"leave"),a={...r.navigation,cancel:()=>{n=!0,r.reject(new Error("navigation cancelled"))}};rt.forEach(s=>s(a))}n?(t.preventDefault(),t.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&He()}),navigator.connection?.saveData||fn(),O.addEventListener("click",async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const n=Qe(t.composedPath()[0],O);if(!n)return;const{url:r,external:a,target:s,download:i}=we(n,I,v.hash);if(!r)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const o=te(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||i)return;const[f,d]=(v.hash?r.hash.replace(/^#/,""):r.href).split("#"),g=f===me(location);if(a||o.reload&&(!g||!d)){ut({url:r,type:"link"})?X=!0:t.preventDefault();return}if(d!==void 0&&g){const[,u]=w.url.href.split("#");if(u===d){if(t.preventDefault(),d===""||d==="top"&&n.ownerDocument.getElementById("top")===null)window.scrollTo({top:0});else{const c=n.ownerDocument.getElementById(decodeURIComponent(d));c&&(c.scrollIntoView(),c.focus())}return}if(q=!0,Ue(k),e(r),!o.replace_state)return;q=!1}t.preventDefault(),await new Promise(u=>{requestAnimationFrame(()=>{setTimeout(u,0)}),setTimeout(u,100)}),await Y({type:"link",url:r,keepfocus:o.keepfocus,noscroll:o.noscroll,replace_state:o.replace_state??r.href===location.href})}),O.addEventListener("submit",t=>{if(t.defaultPrevented)return;const n=HTMLFormElement.prototype.cloneNode.call(t.target),r=t.submitter;if((r?.formTarget||n.target)==="_blank"||(r?.formMethod||n.method)!=="get")return;const i=new URL(r?.hasAttribute("formaction")&&r?.formAction||n.action);if(ue(i,I,!1))return;const o=t.target,l=te(o);if(l.reload)return;t.preventDefault(),t.stopPropagation();const f=new FormData(o),d=r?.getAttribute("name");d&&f.append(d,r?.getAttribute("value")??""),i.search=new URLSearchParams(f).toString(),Y({type:"form",url:i,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??i.href===location.href})}),addEventListener("popstate",async t=>{if(!ke){if(t.state?.[V]){const n=t.state[V];if(D={},n===k)return;const r=$[n],a=t.state[Xe]??{},s=new URL(t.state[Pt]??location.href),i=t.state[J],o=w.url?me(location)===me(w.url):!1;if(i===T&&(at||o)){a!==E.state&&(E.state=a),e(s),$[k]=fe(),r&&scrollTo(r.x,r.y),k=n;return}const f=n-k;await Y({type:"popstate",url:s,popped:{state:a,scroll:r,delta:f},accept:()=>{k=n,T=i},block:()=>{history.go(-f)},nav_token:D})}else if(!q){const n=new URL(location.href);e(n),v.hash&&location.reload()}}}),addEventListener("hashchange",()=>{q&&(q=!1,history.replaceState({...history.state,[V]:++k,[J]:T},"",location.href))});for(const t of document.querySelectorAll("link"))en.has(t.rel)&&(t.href=t.href);addEventListener("pageshow",t=>{t.persisted&&x.navigating.set(W.current=null)});function e(t){w.url=E.url=t,x.page.set(je(E)),x.page.notify()}}async function hn(e,{status:t=200,error:n,node_ids:r,params:a,route:s,server_route:i,data:o,form:l}){Le=!0;const f=new URL(location.href);let d;({params:a={},route:s={id:null}}=await he(f,!1)||{}),d=Ie.find(({id:c})=>c===s.id);let g,u=!0;try{const c=r.map(async(_,m)=>{const R=o[m];return R?.uses&&(R.uses=pt(R.uses)),Oe({loader:v.nodes[_],url:f,params:a,route:s,parent:async()=>{const S={};for(let U=0;Us?"1":"0").join(""));const r=window.fetch,a=await r(n.href,{});if(!a.ok){let s;throw a.headers.get("content-type")?.includes("application/json")?s=await a.json():a.status===404?s="Not Found":a.status===500&&(s="Internal Error"),new le(a.status,s)}return new Promise(async s=>{const i=new Map,o=a.body.getReader(),l=new TextDecoder;function f(g){return Mt(g,{...v.decoders,Promise:u=>new Promise((c,h)=>{i.set(u,{fulfil:c,reject:h})})})}let d="";for(;;){const{done:g,value:u}=await o.read();if(g&&!d)break;for(d+=!u&&d?` +`:l.decode(u,{stream:!0});;){const c=d.indexOf(` +`);if(c===-1)break;const h=JSON.parse(d.slice(0,c));if(d=d.slice(c+1),h.type==="redirect")return s(h);if(h.type==="data")h.nodes?.forEach(_=>{_?.type==="data"&&(_.uses=pt(_.uses),_.data=f(_.data))}),s(h);else if(h.type==="chunk"){const{id:_,data:m,error:R}=h,S=i.get(_);i.delete(_),R?S.reject(f(R)):S.fulfil(f(m))}}}})}function pt(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}let ke=!1;function pn(e){const t=document.querySelector("[autofocus]");if(t)t.focus();else{const n=gt(e);if(n&&document.getElementById(n)){const{x:a,y:s}=fe();setTimeout(()=>{const i=history.state;ke=!0,location.replace(`#${n}`),v.hash&&location.replace(e.hash),history.replaceState(i,"",e.hash),scrollTo(a,s),ke=!1})}else{const a=document.body,s=a.getAttribute("tabindex");a.tabIndex=-1,a.focus({preventScroll:!0,focusVisible:!1}),s!==null?a.setAttribute("tabindex",s):a.removeAttribute("tabindex")}const r=getSelection();if(r&&r.type!=="None"){const a=[];for(let s=0;s{if(r.rangeCount===a.length){for(let s=0;s{a=l,s=f});return i.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n},willUnload:!t,type:r,complete:i},fulfil:a,reject:s}}function je(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function gn(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function gt(e){let t;if(v.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{kn as a,An as g,yn as l,E as p,x as s}; diff --git a/webapp/assets/_app/immutable/chunks/l9U2NoST.js b/webapp/assets/_app/immutable/chunks/l9U2NoST.js new file mode 100644 index 00000000..15c23737 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/l9U2NoST.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as u}from"./TJn6xDN9.js";import{p as v,E as m,f as h,d as r,r as d,i as t,b as k,c as g}from"./DniTuB_0.js";import{f as b}from"./DSfKzFV1.js";var w=h('');function M(s,i){v(i,!1);const l=m();function n(){l("close")}function c(o){o.stopPropagation()}function f(o){o.key==="Escape"&&l("close")}u();var a=w(),e=r(a),p=r(e);b(p,i,"default",{}),d(e),d(a),t("click",e,c),t("click",a,n),t("keydown",a,f),k(s,a),g()}export{M}; diff --git a/webapp/assets/_app/immutable/chunks/DGVAzkoE.js b/webapp/assets/_app/immutable/chunks/z19xmJI9.js similarity index 93% rename from webapp/assets/_app/immutable/chunks/DGVAzkoE.js rename to webapp/assets/_app/immutable/chunks/z19xmJI9.js index 93a807f4..47ad0358 100644 --- a/webapp/assets/_app/immutable/chunks/DGVAzkoE.js +++ b/webapp/assets/_app/immutable/chunks/z19xmJI9.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as q}from"./TJn6xDN9.js";import{p as A,E as F,f as y,s as l,d as t,r as a,z as $,D as b,b as o,t as p,e as n,c as G}from"./DniTuB_0.js";import{p as v,i as H}from"./DbNhg6mG.js";import{M as I}from"./CHjY0Kaf.js";import{B as w}from"./BZ2rxtTc.js";var J=y('

'),K=y('

');function W(D,s){A(s,!1);let M=v(s,"title",8),j=v(s,"message",8),g=v(s,"itemName",8,""),d=v(s,"loading",8,!1);const c=F();function B(){c("confirm")}q(),I(D,{$$events:{close:()=>c("close")},children:(C,O)=>{var m=K(),f=l(t(m),2),u=t(f),P=t(u,!0);a(u);var h=l(u,2),x=t(h),z=t(x,!0);a(x);var E=l(x,2);{var L=e=>{var i=J(),r=t(i,!0);a(i),p(()=>n(r,g())),o(e,i)};H(E,e=>{g()&&e(L)})}a(h),a(f);var _=l(f,2),k=t(_);w(k,{variant:"secondary",get disabled(){return d()},$$events:{click:()=>c("close")},children:(e,i)=>{$();var r=b("Cancel");o(e,r)},$$slots:{default:!0}});var N=l(k,2);w(N,{variant:"danger",get disabled(){return d()},get loading(){return d()},$$events:{click:B},children:(e,i)=>{$();var r=b();p(()=>n(r,d()?"Deleting...":"Delete")),o(e,r)},$$slots:{default:!0}}),a(_),a(m),p(()=>{n(P,M()),n(z,j())}),o(C,m)},$$slots:{default:!0}}),G()}export{W as D}; +import"./DsnmJJEf.js";import{i as q}from"./TJn6xDN9.js";import{p as A,E as F,f as y,s as l,d as t,r as a,z as $,D as b,b as o,t as p,e as n,c as G}from"./DniTuB_0.js";import{p as v,i as H}from"./DbNhg6mG.js";import{M as I}from"./l9U2NoST.js";import{B as w}from"./DSfKzFV1.js";var J=y('

'),K=y('

');function W(D,s){A(s,!1);let M=v(s,"title",8),j=v(s,"message",8),g=v(s,"itemName",8,""),d=v(s,"loading",8,!1);const c=F();function B(){c("confirm")}q(),I(D,{$$events:{close:()=>c("close")},children:(C,O)=>{var m=K(),f=l(t(m),2),u=t(f),P=t(u,!0);a(u);var h=l(u,2),x=t(h),z=t(x,!0);a(x);var E=l(x,2);{var L=e=>{var i=J(),r=t(i,!0);a(i),p(()=>n(r,g())),o(e,i)};H(E,e=>{g()&&e(L)})}a(h),a(f);var _=l(f,2),k=t(_);w(k,{variant:"secondary",get disabled(){return d()},$$events:{click:()=>c("close")},children:(e,i)=>{$();var r=b("Cancel");o(e,r)},$$slots:{default:!0}});var N=l(k,2);w(N,{variant:"danger",get disabled(){return d()},get loading(){return d()},$$events:{click:B},children:(e,i)=>{$();var r=b();p(()=>n(r,d()?"Deleting...":"Delete")),o(e,r)},$$slots:{default:!0}}),a(_),a(m),p(()=>{n(P,M()),n(z,j())}),o(C,m)},$$slots:{default:!0}}),G()}export{W as D}; diff --git a/webapp/assets/_app/immutable/entry/app.BGzeJotz.js b/webapp/assets/_app/immutable/entry/app.BGzeJotz.js new file mode 100644 index 00000000..a39195c6 --- /dev/null +++ b/webapp/assets/_app/immutable/entry/app.BGzeJotz.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.DbHLqcwc.js","../chunks/DsnmJJEf.js","../chunks/TJn6xDN9.js","../chunks/DniTuB_0.js","../chunks/DbNhg6mG.js","../chunks/DSfKzFV1.js","../chunks/CRDKDqj5.js","../chunks/covROD4j.js","../chunks/kW9-6GPQ.js","../chunks/Dt70yZzL.js","../chunks/2CDqnvrp.js","../chunks/Ck5PkeSc.js","../chunks/Dt7jKcR8.js","../chunks/DmHFwzWx.js","../chunks/CBJzOE8U.js","../assets/0.BSyLSYks.css","../nodes/1.HzNKBJ2O.js","../nodes/2.BmBet37R.js","../chunks/BE9PkXKz.js","../chunks/CCQwxxp9.js","../chunks/D4Caz1gY.js","../chunks/l9U2NoST.js","../chunks/CwLZz6xi.js","../chunks/BZiHL9L3.js","../nodes/3.HdI83u8i.js","../chunks/RtJp4Ifn.js","../chunks/CQIRreSz.js","../chunks/BC4TpgBU.js","../chunks/DGZKesLN.js","../chunks/BlJ06z1t.js","../chunks/BZLWIdPw.js","../chunks/Dyp1NLoF.js","../chunks/CE0C-N9m.js","../chunks/BsX_CrDw.js","../chunks/ow_oMtSd.js","../nodes/4.C1LoDGY5.js","../nodes/5.C8ox5cnK.js","../chunks/KogAzbD4.js","../chunks/z19xmJI9.js","../chunks/30NlHgQ_.js","../nodes/6.DspM8-Gd.js","../chunks/BehbwORU.js","../chunks/C-xTH-sp.js","../chunks/DsCgpFQt.js","../chunks/B3d8BqkX.js","../chunks/CMD3IPWU.js","../chunks/DoxpoDLH.js","../nodes/7.BcY4hrG1.js","../nodes/8.DgZlDX0m.js","../nodes/9.CWuD2pQA.js","../nodes/10.BXBZr9ef.js","../nodes/11.B9eGfscp.js","../chunks/aK-A9Gop.js","../nodes/12.DEH2x_tr.js","../nodes/13.NurrRkua.js","../nodes/14.BzcZF8IN.js","../chunks/Cv3bKZ1_.js","../nodes/15.B9OmKcrm.js","../chunks/fxFZ0i0Q.js","../chunks/DzXPCUia.js","../nodes/16.D2pagW-N.js","../nodes/17.D6aJ6Eno.js","../nodes/18.wCxl2r5C.js","../nodes/19.DSHKyTOS.js","../chunks/D44hH3AJ.js","../nodes/20.CrgpXSxy.js","../nodes/21.Dlw8TYKW.js","../chunks/C98nByjP.js","../nodes/22.HPy9RpzE.js","../chunks/CRtXxCw0.js","../nodes/23.BG2rtdAg.js"])))=>i.map(i=>d[i]); +import{k as y,aL as z,g as f,aN as U,aO as G,aP as Q,ax as W,aQ as Y,m as F,p as H,an as J,ao as K,o as X,aR as T,aS as Z,f as C,a as A,s as $,b as g,c as tt,A as D,d as et,r as rt,aT as I,D as ot,t as st,e as at}from"../chunks/DniTuB_0.js";import"../chunks/DsnmJJEf.js";import{p as V,i as b}from"../chunks/DbNhg6mG.js";import{c as w}from"../chunks/BZLWIdPw.js";import{b as k}from"../chunks/C-xTH-sp.js";function it(_){return class extends nt{constructor(t){super({component:_,...t})}}}class nt{#e;#t;constructor(t){var a=new Map,c=(r,e)=>{var s=F(e,!1,!1);return a.set(r,s),s};const m=new Proxy({...t.props||{},$$events:{}},{get(r,e){return f(a.get(e)??c(e,Reflect.get(r,e)))},has(r,e){return e===z?!0:(f(a.get(e)??c(e,Reflect.get(r,e))),Reflect.has(r,e))},set(r,e,s){return y(a.get(e)??c(e,s),s),Reflect.set(r,e,s)}});this.#t=(t.hydrate?U:G)(t.component,{target:t.target,anchor:t.anchor,props:m,context:t.context,intro:t.intro??!1,recover:t.recover}),(!t?.props?.$$host||t.sync===!1)&&Q(),this.#e=m.$$events;for(const r of Object.keys(this.#t))r==="$set"||r==="$destroy"||r==="$on"||W(this,r,{get(){return this.#t[r]},set(e){this.#t[r]=e},enumerable:!0});this.#t.$set=r=>{Object.assign(m,r)},this.#t.$destroy=()=>{Y(this.#t)}}$set(t){this.#t.$set(t)}$on(t,a){this.#e[t]=this.#e[t]||[];const c=(...m)=>a.call(this,...m);return this.#e[t].push(c),()=>{this.#e[t]=this.#e[t].filter(m=>m!==c)}}$destroy(){this.#t.$destroy()}}const _t="modulepreload",ct=function(_,t){return new URL(_,t).href},j={},o=function(t,a,c){let m=Promise.resolve();if(a&&a.length>0){let L=function(n){return Promise.all(n.map(d=>Promise.resolve(d).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};const e=document.getElementsByTagName("link"),s=document.querySelector("meta[property=csp-nonce]"),O=s?.nonce||s?.getAttribute("nonce");m=L(a.map(n=>{if(n=ct(n,c),n in j)return;j[n]=!0;const d=n.endsWith(".css"),v=d?'[rel="stylesheet"]':"";if(!!c)for(let i=e.length-1;i>=0;i--){const u=e[i];if(u.href===n&&(!d||u.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${n}"]${v}`))return;const l=document.createElement("link");if(l.rel=d?"stylesheet":_t,d||(l.as="script"),l.crossOrigin="",l.href=n,O&&l.setAttribute("nonce",O),document.head.appendChild(l),d)return new Promise((i,u)=>{l.addEventListener("load",i),l.addEventListener("error",()=>u(new Error(`Unable to preload CSS for ${n}`)))})}))}function r(e){const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=e,window.dispatchEvent(s),!s.defaultPrevented)throw e}return m.then(e=>{for(const s of e||[])s.status==="rejected"&&r(s.reason);return t().catch(r)})},Rt={};var mt=C('
'),ut=C(" ",1);function lt(_,t){H(t,!0);let a=V(t,"components",23,()=>[]),c=V(t,"data_0",3,null),m=V(t,"data_1",3,null);J(()=>t.stores.page.set(t.page)),K(()=>{t.stores,t.page,t.constructors,a(),t.form,c(),m(),t.stores.page.notify()});let r=T(!1),e=T(!1),s=T(null);X(()=>{const i=t.stores.page.subscribe(()=>{f(r)&&(y(e,!0),Z().then(()=>{y(s,document.title||"untitled page",!0)}))});return y(r,!0),i});const O=I(()=>t.constructors[1]);var L=ut(),n=A(L);{var d=i=>{const u=I(()=>t.constructors[0]);var h=D(),P=A(h);w(P,()=>f(u),(p,E)=>{k(E(p,{get data(){return c()},get form(){return t.form},get params(){return t.page.params},children:(R,vt)=>{var S=D(),N=A(S);w(N,()=>f(O),(B,M)=>{k(M(B,{get data(){return m()},get form(){return t.form},get params(){return t.page.params}}),q=>a()[1]=q,()=>a()?.[1])}),g(R,S)},$$slots:{default:!0}}),R=>a()[0]=R,()=>a()?.[0])}),g(i,h)},v=i=>{const u=I(()=>t.constructors[0]);var h=D(),P=A(h);w(P,()=>f(u),(p,E)=>{k(E(p,{get data(){return c()},get form(){return t.form},get params(){return t.page.params}}),R=>a()[0]=R,()=>a()?.[0])}),g(i,h)};b(n,i=>{t.constructors[1]?i(d):i(v,!1)})}var x=$(n,2);{var l=i=>{var u=mt(),h=et(u);{var P=p=>{var E=ot();st(()=>at(E,f(s))),g(p,E)};b(h,p=>{f(e)&&p(P)})}rt(u),g(i,u)};b(x,i=>{f(r)&&i(l)})}g(_,L),tt()}const Ot=it(lt),Lt=[()=>o(()=>import("../nodes/0.DbHLqcwc.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),import.meta.url),()=>o(()=>import("../nodes/1.HzNKBJ2O.js"),__vite__mapDeps([16,1,2,3,7,8,6]),import.meta.url),()=>o(()=>import("../nodes/2.BmBet37R.js"),__vite__mapDeps([17,1,2,3,4,11,5,6,13,18,19,20,21,22,14,23]),import.meta.url),()=>o(()=>import("../nodes/3.HdI83u8i.js"),__vite__mapDeps([24,1,2,3,4,11,5,6,19,20,25,26,27,28,29,30,31,18,13,14,23,32,33,34]),import.meta.url),()=>o(()=>import("../nodes/4.C1LoDGY5.js"),__vite__mapDeps([35,1,2,3,4,5,6,19,20,25,26,27,28,18,13,14,23,29,11,30,31,32,22]),import.meta.url),()=>o(()=>import("../nodes/5.C8ox5cnK.js"),__vite__mapDeps([36,1,2,3,4,5,6,25,11,19,20,21,23,18,13,37,38,14,27,31,29,30,28,39,32,33,34]),import.meta.url),()=>o(()=>import("../nodes/6.DspM8-Gd.js"),__vite__mapDeps([40,1,2,3,4,5,6,12,8,37,11,19,20,23,21,38,41,27,31,18,13,29,30,28,39,33,34,42,43,44,14,45,46]),import.meta.url),()=>o(()=>import("../nodes/7.BcY4hrG1.js"),__vite__mapDeps([47,1,2,3,4,5,6,19,20,8,9,14,23]),import.meta.url),()=>o(()=>import("../nodes/8.DgZlDX0m.js"),__vite__mapDeps([48,1,2,3,4,5,6,38,21,25,13,14,29,11,30,19,28,31,27,23,39,33,34]),import.meta.url),()=>o(()=>import("../nodes/9.CWuD2pQA.js"),__vite__mapDeps([49,1,2,3,4,11,5,6,42,12,8,38,21,13,34,27,23,31]),import.meta.url),()=>o(()=>import("../nodes/10.BXBZr9ef.js"),__vite__mapDeps([50,1,2,3,4,5,6,19,20,8,9,23]),import.meta.url),()=>o(()=>import("../nodes/11.B9eGfscp.js"),__vite__mapDeps([51,1,2,3,4,11,5,6,19,20,8,25,29,30,28,31,27,21,14,23,38,39,52,13]),import.meta.url),()=>o(()=>import("../nodes/12.DEH2x_tr.js"),__vite__mapDeps([53,1,2,3,4,11,5,6,19,20,12,8,14,23,52,38,21,31]),import.meta.url),()=>o(()=>import("../nodes/13.NurrRkua.js"),__vite__mapDeps([54,1,2,3,4,5,6,11,19,20,21,26,27,23,18,13,37,38,25,14,31,29,30,28,39,32,33,34]),import.meta.url),()=>o(()=>import("../nodes/14.BzcZF8IN.js"),__vite__mapDeps([55,1,2,3,4,5,6,12,8,37,11,19,20,23,21,38,41,27,31,18,13,29,30,28,39,33,34,42,43,44,56,14,45,46]),import.meta.url),()=>o(()=>import("../nodes/15.B9OmKcrm.js"),__vite__mapDeps([57,1,2,3,4,5,6,25,45,11,19,20,21,23,46,58,18,13,38,29,30,28,31,27,14,39,32,33,34,59]),import.meta.url),()=>o(()=>import("../nodes/16.D2pagW-N.js"),__vite__mapDeps([60,1,2,3,4,11,5,6,7,8,58,19,20,21,46,23,18,13,38,44,29,30,28,31,27,39,33,34,43,14]),import.meta.url),()=>o(()=>import("../nodes/17.D6aJ6Eno.js"),__vite__mapDeps([61,1,2,3,4,5,6,11,19,20,21,23,26,27,18,13,37,38,25,14,29,30,28,31,39,32,33,34]),import.meta.url),()=>o(()=>import("../nodes/18.wCxl2r5C.js"),__vite__mapDeps([62,1,2,3,4,5,6,12,8,37,11,19,20,23,21,38,41,27,31,18,13,29,30,28,39,33,34,42,43,44,56,14,45,46]),import.meta.url),()=>o(()=>import("../nodes/19.DSHKyTOS.js"),__vite__mapDeps([63,1,2,3,4,5,6,25,11,19,20,21,46,23,64,18,13,38,29,30,28,31,27,14,39,32,33,34,59]),import.meta.url),()=>o(()=>import("../nodes/20.CrgpXSxy.js"),__vite__mapDeps([65,1,2,3,4,5,6,7,8,64,11,19,20,21,23,46,18,13,38,44,29,30,28,31,27,39,33,34,43,14]),import.meta.url),()=>o(()=>import("../nodes/21.Dlw8TYKW.js"),__vite__mapDeps([66,1,2,3,4,8,6,5,25,28,29,11,30,19,31,27,14,23,38,21,39,67,18,13]),import.meta.url),()=>o(()=>import("../nodes/22.HPy9RpzE.js"),__vite__mapDeps([68,1,2,3,4,5,6,19,20,7,8,28,14,23,31,43,69,42,10,21,38,67,27,13]),import.meta.url),()=>o(()=>import("../nodes/23.BG2rtdAg.js"),__vite__mapDeps([70,1,2,3,4,5,6,19,42,20,8,7,14,23,43,69,10,21]),import.meta.url)],At=[],yt={"/":[2],"/credentials":[3],"/endpoints":[4],"/enterprises":[5],"/enterprises/[id]":[6],"/init":[7],"/instances":[8],"/instances/[id]":[9],"/login":[10],"/objects":[11],"/objects/[id]":[12],"/organizations":[13],"/organizations/[id]":[14],"/pools":[15],"/pools/[id]":[16],"/repositories":[17],"/repositories/[id]":[18],"/scalesets":[19],"/scalesets/[id]":[20],"/templates":[21],"/templates/create":[23],"/templates/[id]":[22]},dt={handleError:({error:_})=>{console.error(_)},reroute:()=>{},transport:{}},ft=Object.fromEntries(Object.entries(dt.transport).map(([_,t])=>[_,t.decode])),Tt=!1,Dt=(_,t)=>ft[_](t);export{Dt as decode,ft as decoders,yt as dictionary,Tt as hash,dt as hooks,Rt as matchers,Lt as nodes,Ot as root,At as server_loads}; diff --git a/webapp/assets/_app/immutable/entry/app.G6LK5zv-.js b/webapp/assets/_app/immutable/entry/app.G6LK5zv-.js deleted file mode 100644 index 5390cf1c..00000000 --- a/webapp/assets/_app/immutable/entry/app.G6LK5zv-.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.DEPK4pU9.js","../chunks/DsnmJJEf.js","../chunks/TJn6xDN9.js","../chunks/DniTuB_0.js","../chunks/DbNhg6mG.js","../chunks/BZ2rxtTc.js","../chunks/CGAsTaG2.js","../chunks/Hb0uuDRx.js","../chunks/HMJxCnAR.js","../chunks/1biM6o9g.js","../chunks/2CDqnvrp.js","../chunks/Ck5PkeSc.js","../chunks/DQE8oq0R.js","../chunks/DmHFwzWx.js","../chunks/CBJzOE8U.js","../assets/0.BIzx0g6N.css","../nodes/1.D8aO3kxo.js","../nodes/2.DePCP1xr.js","../chunks/DKJ_c8yL.js","../chunks/CCQwxxp9.js","../chunks/D4Caz1gY.js","../chunks/CHjY0Kaf.js","../chunks/DUI-G4vy.js","../chunks/BZiHL9L3.js","../nodes/3.DmBkFzct.js","../chunks/CuYqFPEA.js","../chunks/BaeBx81k.js","../chunks/CTcPpzia.js","../chunks/Ok63PiOl.js","../chunks/CKaB5fL4.js","../chunks/BZLWIdPw.js","../chunks/Bz3T1MM4.js","../chunks/C1GM4Goa.js","../chunks/ow_oMtSd.js","../nodes/4.CjsS-n1C.js","../nodes/5.COovtNXp.js","../chunks/BWuIa3ut.js","../chunks/DGVAzkoE.js","../chunks/Dh8uHEF5.js","../nodes/6.DKl0DvPr.js","../chunks/BZ_AecKg.js","../chunks/C-xTH-sp.js","../chunks/J4QHiesY.js","../chunks/d1ceLqrJ.js","../chunks/mwBQAfJV.js","../chunks/C-CyTC2O.js","../nodes/7.B3JTpaoM.js","../nodes/8.BKBJGVMe.js","../nodes/9.DexPXc_f.js","../nodes/10.BaCSALCh.js","../nodes/11.BJZYIyBS.js","../nodes/12.COfe1f2G.js","../chunks/CWdSRFlF.js","../nodes/13.I_oWpCo4.js","../chunks/Cpl8oLXd.js","../chunks/DSRJryIz.js","../nodes/14.Bwt3ck_f.js","../nodes/15.9KeO9SOD.js","../nodes/16.Drkhu5n3.js","../nodes/17.BRdX9TGm.js","../chunks/DZ5U-N28.js","../nodes/18.C2-Tcxvs.js","../nodes/19.WienvNXs.js","../chunks/C98nByjP.js","../nodes/20.CiUKuwkk.js","../chunks/Byy0srta.js","../nodes/21.C8nsoPMT.js"])))=>i.map(i=>d[i]); -import{k as A,aL as z,g as f,aN as U,aO as G,aP as Q,ax as W,aQ as Y,m as F,p as H,an as J,ao as K,o as X,aR as T,aS as Z,f as j,a as y,s as $,b as g,c as tt,A as D,d as et,r as rt,aT as I,D as st,t as ot,e as at}from"../chunks/DniTuB_0.js";import"../chunks/DsnmJJEf.js";import{p as V,i as b}from"../chunks/DbNhg6mG.js";import{c as w}from"../chunks/BZLWIdPw.js";import{b as k}from"../chunks/C-xTH-sp.js";function it(_){return class extends nt{constructor(t){super({component:_,...t})}}}class nt{#e;#t;constructor(t){var a=new Map,c=(r,e)=>{var o=F(e,!1,!1);return a.set(r,o),o};const u=new Proxy({...t.props||{},$$events:{}},{get(r,e){return f(a.get(e)??c(e,Reflect.get(r,e)))},has(r,e){return e===z?!0:(f(a.get(e)??c(e,Reflect.get(r,e))),Reflect.has(r,e))},set(r,e,o){return A(a.get(e)??c(e,o),o),Reflect.set(r,e,o)}});this.#t=(t.hydrate?U:G)(t.component,{target:t.target,anchor:t.anchor,props:u,context:t.context,intro:t.intro??!1,recover:t.recover}),(!t?.props?.$$host||t.sync===!1)&&Q(),this.#e=u.$$events;for(const r of Object.keys(this.#t))r==="$set"||r==="$destroy"||r==="$on"||W(this,r,{get(){return this.#t[r]},set(e){this.#t[r]=e},enumerable:!0});this.#t.$set=r=>{Object.assign(u,r)},this.#t.$destroy=()=>{Y(this.#t)}}$set(t){this.#t.$set(t)}$on(t,a){this.#e[t]=this.#e[t]||[];const c=(...u)=>a.call(this,...u);return this.#e[t].push(c),()=>{this.#e[t]=this.#e[t].filter(u=>u!==c)}}$destroy(){this.#t.$destroy()}}const _t="modulepreload",ct=function(_,t){return new URL(_,t).href},C={},s=function(t,a,c){let u=Promise.resolve();if(a&&a.length>0){let L=function(n){return Promise.all(n.map(d=>Promise.resolve(d).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};const e=document.getElementsByTagName("link"),o=document.querySelector("meta[property=csp-nonce]"),O=o?.nonce||o?.getAttribute("nonce");u=L(a.map(n=>{if(n=ct(n,c),n in C)return;C[n]=!0;const d=n.endsWith(".css"),v=d?'[rel="stylesheet"]':"";if(!!c)for(let i=e.length-1;i>=0;i--){const m=e[i];if(m.href===n&&(!d||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${n}"]${v}`))return;const l=document.createElement("link");if(l.rel=d?"stylesheet":_t,d||(l.as="script"),l.crossOrigin="",l.href=n,O&&l.setAttribute("nonce",O),document.head.appendChild(l),d)return new Promise((i,m)=>{l.addEventListener("load",i),l.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${n}`)))})}))}function r(e){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=e,window.dispatchEvent(o),!o.defaultPrevented)throw e}return u.then(e=>{for(const o of e||[])o.status==="rejected"&&r(o.reason);return t().catch(r)})},Rt={};var ut=j('
'),mt=j(" ",1);function lt(_,t){H(t,!0);let a=V(t,"components",23,()=>[]),c=V(t,"data_0",3,null),u=V(t,"data_1",3,null);J(()=>t.stores.page.set(t.page)),K(()=>{t.stores,t.page,t.constructors,a(),t.form,c(),u(),t.stores.page.notify()});let r=T(!1),e=T(!1),o=T(null);X(()=>{const i=t.stores.page.subscribe(()=>{f(r)&&(A(e,!0),Z().then(()=>{A(o,document.title||"untitled page",!0)}))});return A(r,!0),i});const O=I(()=>t.constructors[1]);var L=mt(),n=y(L);{var d=i=>{const m=I(()=>t.constructors[0]);var h=D(),P=y(h);w(P,()=>f(m),(p,E)=>{k(E(p,{get data(){return c()},get form(){return t.form},get params(){return t.page.params},children:(R,vt)=>{var S=D(),N=y(S);w(N,()=>f(O),(B,M)=>{k(M(B,{get data(){return u()},get form(){return t.form},get params(){return t.page.params}}),q=>a()[1]=q,()=>a()?.[1])}),g(R,S)},$$slots:{default:!0}}),R=>a()[0]=R,()=>a()?.[0])}),g(i,h)},v=i=>{const m=I(()=>t.constructors[0]);var h=D(),P=y(h);w(P,()=>f(m),(p,E)=>{k(E(p,{get data(){return c()},get form(){return t.form},get params(){return t.page.params}}),R=>a()[0]=R,()=>a()?.[0])}),g(i,h)};b(n,i=>{t.constructors[1]?i(d):i(v,!1)})}var x=$(n,2);{var l=i=>{var m=ut(),h=et(m);{var P=p=>{var E=st();ot(()=>at(E,f(o))),g(p,E)};b(h,p=>{f(e)&&p(P)})}rt(m),g(i,m)};b(x,i=>{f(r)&&i(l)})}g(_,L),tt()}const Ot=it(lt),Lt=[()=>s(()=>import("../nodes/0.DEPK4pU9.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),import.meta.url),()=>s(()=>import("../nodes/1.D8aO3kxo.js"),__vite__mapDeps([16,1,2,3,7,8,6]),import.meta.url),()=>s(()=>import("../nodes/2.DePCP1xr.js"),__vite__mapDeps([17,1,2,3,4,11,5,6,13,18,19,20,21,22,14,23]),import.meta.url),()=>s(()=>import("../nodes/3.DmBkFzct.js"),__vite__mapDeps([24,1,2,3,4,11,5,6,19,20,25,26,27,28,29,30,18,13,14,23,31,32,33]),import.meta.url),()=>s(()=>import("../nodes/4.CjsS-n1C.js"),__vite__mapDeps([34,1,2,3,4,5,6,19,20,25,26,27,28,18,13,14,23,29,11,30,31,22]),import.meta.url),()=>s(()=>import("../nodes/5.COovtNXp.js"),__vite__mapDeps([35,1,2,3,4,5,6,25,11,19,20,21,23,18,13,36,37,14,27,29,30,28,38,31,32,33]),import.meta.url),()=>s(()=>import("../nodes/6.DKl0DvPr.js"),__vite__mapDeps([39,1,2,3,4,5,6,12,8,36,11,19,20,23,21,37,40,27,18,13,29,30,28,38,32,33,41,42,43,14,44,45]),import.meta.url),()=>s(()=>import("../nodes/7.B3JTpaoM.js"),__vite__mapDeps([46,1,2,3,4,5,6,19,20,8,9,14,23]),import.meta.url),()=>s(()=>import("../nodes/8.BKBJGVMe.js"),__vite__mapDeps([47,1,2,3,4,5,6,37,21,25,13,14,29,11,30,19,28,27,23,38,32,33]),import.meta.url),()=>s(()=>import("../nodes/9.DexPXc_f.js"),__vite__mapDeps([48,1,2,3,4,11,5,6,41,12,8,37,21,13,33,27,23]),import.meta.url),()=>s(()=>import("../nodes/10.BaCSALCh.js"),__vite__mapDeps([49,1,2,3,4,5,6,19,20,8,9,23]),import.meta.url),()=>s(()=>import("../nodes/11.BJZYIyBS.js"),__vite__mapDeps([50,1,2,3,4,5,6,11,19,20,21,26,27,23,18,13,36,37,25,14,29,30,28,38,31,32,33]),import.meta.url),()=>s(()=>import("../nodes/12.COfe1f2G.js"),__vite__mapDeps([51,1,2,3,4,5,6,12,8,36,11,19,20,23,21,37,40,27,18,13,29,30,28,38,32,33,41,42,43,52,14,44,45]),import.meta.url),()=>s(()=>import("../nodes/13.I_oWpCo4.js"),__vite__mapDeps([53,1,2,3,4,5,6,25,44,11,19,20,21,23,45,54,18,13,37,29,30,28,27,14,38,31,32,33,55]),import.meta.url),()=>s(()=>import("../nodes/14.Bwt3ck_f.js"),__vite__mapDeps([56,1,2,3,4,11,5,6,7,8,54,19,20,21,45,23,18,13,37,43,29,30,28,27,38,32,33,42,14]),import.meta.url),()=>s(()=>import("../nodes/15.9KeO9SOD.js"),__vite__mapDeps([57,1,2,3,4,5,6,11,19,20,21,23,26,27,18,13,36,37,25,14,29,30,28,38,31,32,33]),import.meta.url),()=>s(()=>import("../nodes/16.Drkhu5n3.js"),__vite__mapDeps([58,1,2,3,4,5,6,12,8,36,11,19,20,23,21,37,40,27,18,13,29,30,28,38,32,33,41,42,43,52,14,44,45]),import.meta.url),()=>s(()=>import("../nodes/17.BRdX9TGm.js"),__vite__mapDeps([59,1,2,3,4,5,6,25,11,19,20,21,45,23,60,18,13,37,29,30,28,27,14,38,31,32,33,55]),import.meta.url),()=>s(()=>import("../nodes/18.C2-Tcxvs.js"),__vite__mapDeps([61,1,2,3,4,5,6,7,8,60,11,19,20,21,23,45,18,13,37,43,29,30,28,27,38,32,33,42,14]),import.meta.url),()=>s(()=>import("../nodes/19.WienvNXs.js"),__vite__mapDeps([62,1,2,3,4,8,6,5,25,28,29,11,30,19,27,14,23,37,21,38,63,18,13]),import.meta.url),()=>s(()=>import("../nodes/20.CiUKuwkk.js"),__vite__mapDeps([64,1,2,3,4,5,6,19,20,7,8,28,14,23,27,42,65,41,10,21,37,63,13]),import.meta.url),()=>s(()=>import("../nodes/21.C8nsoPMT.js"),__vite__mapDeps([66,1,2,3,4,5,6,19,41,20,8,7,14,23,42,65,10,21]),import.meta.url)],yt=[],At={"/":[2],"/credentials":[3],"/endpoints":[4],"/enterprises":[5],"/enterprises/[id]":[6],"/init":[7],"/instances":[8],"/instances/[id]":[9],"/login":[10],"/organizations":[11],"/organizations/[id]":[12],"/pools":[13],"/pools/[id]":[14],"/repositories":[15],"/repositories/[id]":[16],"/scalesets":[17],"/scalesets/[id]":[18],"/templates":[19],"/templates/create":[21],"/templates/[id]":[20]},dt={handleError:({error:_})=>{console.error(_)},reroute:()=>{},transport:{}},ft=Object.fromEntries(Object.entries(dt.transport).map(([_,t])=>[_,t.decode])),Tt=!1,Dt=(_,t)=>ft[_](t);export{Dt as decode,ft as decoders,At as dictionary,Tt as hash,dt as hooks,Rt as matchers,Lt as nodes,Ot as root,yt as server_loads}; diff --git a/webapp/assets/_app/immutable/entry/start.C5WiwcG-.js b/webapp/assets/_app/immutable/entry/start.C5WiwcG-.js new file mode 100644 index 00000000..85830b14 --- /dev/null +++ b/webapp/assets/_app/immutable/entry/start.C5WiwcG-.js @@ -0,0 +1 @@ +import{l as o,a as r}from"../chunks/kW9-6GPQ.js";export{o as load_css,r as start}; diff --git a/webapp/assets/_app/immutable/entry/start.CDo6YuQR.js b/webapp/assets/_app/immutable/entry/start.CDo6YuQR.js deleted file mode 100644 index f7636bfc..00000000 --- a/webapp/assets/_app/immutable/entry/start.CDo6YuQR.js +++ /dev/null @@ -1 +0,0 @@ -import{l as o,a as r}from"../chunks/HMJxCnAR.js";export{o as load_css,r as start}; diff --git a/webapp/assets/_app/immutable/nodes/0.DEPK4pU9.js b/webapp/assets/_app/immutable/nodes/0.DbHLqcwc.js similarity index 72% rename from webapp/assets/_app/immutable/nodes/0.DEPK4pU9.js rename to webapp/assets/_app/immutable/nodes/0.DbHLqcwc.js index efb413a3..8bf0e55d 100644 --- a/webapp/assets/_app/immutable/nodes/0.DEPK4pU9.js +++ b/webapp/assets/_app/immutable/nodes/0.DbHLqcwc.js @@ -1,8 +1,8 @@ -import"../chunks/DsnmJJEf.js";import{i as Te}from"../chunks/TJn6xDN9.js";import{p as Ge,o as Ke,l as I,k as f,m as T,h as Oe,f as h,a as P,d as o,s as l,r as a,g as e,u as i,t as U,e as pe,b as s,A as F,C as re,q as ye,i as R,c as De,v as hr,j as ur,$ as fr,D as Qe}from"../chunks/DniTuB_0.js";import{a as _e,i as b,s as Ee}from"../chunks/DbNhg6mG.js";import{d as n,c as w,s as K,h as mr,B as xr,i as Fe}from"../chunks/BZ2rxtTc.js";import{p as je}from"../chunks/Hb0uuDRx.js";import{g as Pe}from"../chunks/HMJxCnAR.js";import{b as We,a as pr}from"../chunks/1biM6o9g.js";import{t as Se}from"../chunks/2CDqnvrp.js";import{e as ve,i as xe}from"../chunks/Ck5PkeSc.js";import{p as br}from"../chunks/DQE8oq0R.js";import{w as kr}from"../chunks/DmHFwzWx.js";import{t as Je}from"../chunks/CBJzOE8U.js";const yr=async({url:ae})=>({url:ae.pathname}),_r=!1,wr=!1,fa=Object.freeze(Object.defineProperty({__proto__:null,load:yr,prerender:_r,ssr:wr},Symbol.toStringTag,{value:"Module"}));var Mr=h('
Live Updates
'),zr=h('
Connecting
'),jr=h('
Updates Unavailable
'),Sr=h('
Manual Refresh
'),Cr=re(''),Hr=re(''),Ar=re(''),Lr=re(''),$r=h(' '),Br=h(' '),Vr=h('
'),Rr=h('
'),Ir=h('
'),Pr=h('
'),Tr=re(''),Gr=re(''),Or=re(''),Dr=re(''),Er=h(' '),Nr=h(' '),Ur=h('
'),qr=h('
'),Qr=h('
GARM GARM

GARM

',1);function Fr(ae,te){Ge(te,!1);const[oe,be]=Ee(),d=()=>_e(kr,"$websocketStore",oe),se=()=>_e(Se,"$themeStore",oe),W=()=>_e(br,"$page",oe),u=T(),j=T(),k=T();let y=T(!1),m=T(!1);Ke(()=>{window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",v)});function v(t){(!localStorage.getItem("theme")||localStorage.getItem("theme")==="system")&&Se.set(t.matches)}function J(){Se.toggle()}function ie(){We.logout(),f(m,!1)}const X=[{href:n("/"),label:"Dashboard",icon:["M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z","M8 5a2 2 0 012-2h4a2 2 0 012 2v2H8V5z"]},{href:n("/repositories"),label:"Repositories",icon:["M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z","M8 5a2 2 0 012-2h4a2 2 0 012 2v2H8V5z"]},{href:n("/organizations"),label:"Organizations",icon:"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"},{href:n("/enterprises"),label:"Enterprises",icon:"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"},{href:n("/pools"),label:"Pools",icon:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"},{href:n("/scalesets"),label:"Scale Sets",icon:"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4"},{href:n("/instances"),label:"Runners",icon:"M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"}],M=[{href:n("/credentials"),label:"Credentials",icon:"M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1721 9z"},{href:n("/endpoints"),label:"Endpoints",icon:"M13 10V3L4 14h7v7l9-11h-7z"},{href:n("/templates"),label:"Runner Install Templates",icon:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"}];I(()=>d(),()=>{f(u,d())}),I(()=>se(),()=>{f(j,se())}),I(()=>W(),()=>{W().url.pathname&&f(y,!1)}),I(()=>W(),()=>{f(k,W().url.pathname)}),Oe(),Te();var S=Qr(),q=P(S),ce=o(q),ne=o(ce),$=o(ne),B=o($),Y=o(B),G=l(Y,2);a(B),a($);var O=l($,2),D=o(O),V=o(D),ge=o(V);{var he=t=>{var r=Mr();s(t,r)},Z=t=>{var r=F(),g=P(r);{var _=x=>{var z=zr();s(x,z)},C=x=>{var z=F(),ee=P(z);{var H=p=>{var N=jr();s(p,N)},A=p=>{var N=Sr();s(p,N)};b(ee,p=>{e(u),i(()=>e(u).error)?p(H):p(A,!1)},!0)}s(x,z)};b(g,x=>{e(u),i(()=>e(u).connecting)?x(_):x(C,!1)},!0)}s(t,r)};b(ge,t=>{e(u),i(()=>e(u).connected)?t(he):t(Z,!1)})}a(V);var E=l(V,2),ue=o(E);{var we=t=>{var r=Cr();s(t,r)},Ce=t=>{var r=Hr();s(t,r)};b(ue,t=>{e(j)?t(we):t(Ce,!1)})}a(E),a(D),a(O),a(ne);var Me=l(ne,2),ze=o(Me);ve(ze,1,()=>X,xe,(t,r)=>{var g=$r(),_=o(g),C=o(_);{var x=H=>{var A=F(),p=P(A);ve(p,1,()=>(e(r),i(()=>e(r).icon)),xe,(N,le)=>{var c=Ar();U(()=>w(c,"d",e(le))),s(N,c)}),s(H,A)},z=H=>{var A=Lr();U(()=>w(A,"d",(e(r),i(()=>e(r).icon)))),s(H,A)};b(C,H=>{e(r),i(()=>Array.isArray(e(r).icon))?H(x):H(z,!1)})}a(_);var ee=l(_);a(g),U(()=>{w(g,"href",(e(r),i(()=>e(r).href))),K(g,1,`group flex items-center px-2 py-2 text-sm font-medium rounded-md transition-colors duration-200 - ${e(k),e(r),i(()=>e(k)===e(r).href?"bg-gray-100 text-gray-900 dark:bg-gray-700 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),pe(ee,` ${e(r),i(()=>e(r).label)??""}`)}),s(t,g)});var Q=l(ze,2);ve(Q,5,()=>M,xe,(t,r)=>{var g=Br(),_=o(g),C=o(_);a(_);var x=l(_);a(g),U(()=>{w(g,"href",(e(r),i(()=>e(r).href))),K(g,1,`group flex items-center px-2 py-2 text-sm font-medium rounded-md transition-colors duration-200 - ${e(k),e(r),i(()=>e(k)===e(r).href?"bg-gray-100 text-gray-900 dark:bg-gray-700 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),w(C,"d",(e(r),i(()=>e(r).icon))),pe(x,` ${e(r),i(()=>e(r).label)??""}`)}),s(t,g)}),a(Q);var fe=l(Q,2),Xe=o(fe);a(fe),a(Me),a(ce),a(q);var He=l(q,2),Ae=o(He),Ne=o(Ae),Le=l(Ne,2),$e=o(Le),Be=l($e,2),Ue=l(Be,4),Ye=o(Ue);{var Ze=t=>{var r=Vr();s(t,r)},er=t=>{var r=F(),g=P(r);{var _=x=>{var z=Rr();s(x,z)},C=x=>{var z=F(),ee=P(z);{var H=p=>{var N=Ir();s(p,N)},A=p=>{var N=Pr();s(p,N)};b(ee,p=>{e(u),i(()=>e(u).error)?p(H):p(A,!1)},!0)}s(x,z)};b(g,x=>{e(u),i(()=>e(u).connecting)?x(_):x(C,!1)},!0)}s(t,r)};b(Ye,t=>{e(u),i(()=>e(u).connected)?t(Ze):t(er,!1)})}a(Ue),a(Le);var Ve=l(Le,2),rr=o(Ve);{var ar=t=>{var r=Tr();s(t,r)},tr=t=>{var r=Gr();s(t,r)};b(rr,t=>{e(j)?t(ar):t(tr,!1)})}a(Ve),a(Ae);var or=l(Ae,2);{var sr=t=>{var r=Ur(),g=o(r),_=l(g,2),C=o(_),x=o(C);a(C);var z=l(C,2),ee=o(z),H=o(ee);ve(H,1,()=>X,xe,(le,c)=>{var L=Er(),de=o(L),Re=o(de);{var Ie=me=>{var ke=F(),vr=P(ke);ve(vr,1,()=>(e(c),i(()=>e(c).icon)),xe,(cr,gr)=>{var qe=Or();U(()=>w(qe,"d",e(gr))),s(cr,qe)}),s(me,ke)},lr=me=>{var ke=Dr();U(()=>w(ke,"d",(e(c),i(()=>e(c).icon)))),s(me,ke)};b(Re,me=>{e(c),i(()=>Array.isArray(e(c).icon))?me(Ie):me(lr,!1)})}a(de);var dr=l(de);a(L),U(()=>{w(L,"href",(e(c),i(()=>e(c).href))),K(L,1,`group flex items-center px-2 py-2 text-base font-medium rounded-md transition-colors duration-200 - ${e(k),e(c),i(()=>e(k)===e(c).href?"bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),pe(dr,` ${e(c),i(()=>e(c).label)??""}`)}),R("click",L,()=>f(y,!1)),s(le,L)});var A=l(H,2);ve(A,5,()=>M,xe,(le,c)=>{var L=Nr(),de=o(L),Re=o(de);a(de);var Ie=l(de);a(L),U(()=>{w(L,"href",(e(c),i(()=>e(c).href))),K(L,1,`group flex items-center px-2 py-2 text-base font-medium rounded-md transition-colors duration-200 - ${e(k),e(c),i(()=>e(k)===e(c).href?"bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),w(Re,"d",(e(c),i(()=>e(c).icon))),pe(Ie,` ${e(c),i(()=>e(c).label)??""}`)}),R("click",L,()=>f(y,!1)),s(le,L)}),a(A);var p=l(A,2),N=o(p);a(p),a(ee),a(z),a(_),a(r),R("click",g,()=>f(y,!1)),R("keydown",g,le=>{le.key==="Escape"&&f(y,!1)}),R("click",x,()=>f(y,!1)),R("click",N,ie),s(t,r)};b(or,t=>{e(y)&&t(sr)})}a(He);var ir=l(He,2);{var nr=t=>{var r=qr();R("click",r,()=>f(m,!1)),R("keydown",r,g=>{g.key==="Escape"&&f(m,!1)}),s(t,r)};b(ir,t=>{e(m)&&t(nr)})}U((t,r,g,_,C)=>{w(B,"href",t),w(Y,"src",r),w(G,"src",g),w(E,"title",e(j)?"Switch to Light Mode":"Switch to Dark Mode"),w($e,"src",_),K($e,1,`${e(j)?"hidden":"block"} h-8 w-8`),w(Be,"src",C),K(Be,1,`${e(j)?"block":"hidden"} h-8 w-8`)},[()=>(ye(n),i(()=>n("/"))),()=>(ye(n),i(()=>n("/assets/garm-light.svg"))),()=>(ye(n),i(()=>n("/assets/garm-dark.svg"))),()=>(ye(n),i(()=>n("/assets/garm-light.svg"))),()=>(ye(n),i(()=>n("/assets/garm-dark.svg")))]),R("click",E,J),R("click",Xe,ie),R("click",Ne,()=>f(y,!e(y))),R("click",Ve,J),s(ae,S),De(),be()}var Jr=h("
"),Kr=h('

'),Wr=h('
');function Xr(ae,te){Ge(te,!1);const[oe,be]=Ee(),d=()=>_e(Je,"$toastStore",oe),se=T();function W(m){switch(m){case"success":return` +import"../chunks/DsnmJJEf.js";import{i as Te}from"../chunks/TJn6xDN9.js";import{p as Ge,o as Ke,l as I,k as f,m as T,h as Oe,f as h,a as P,d as o,s as l,r as a,g as e,u as i,t as U,e as pe,b as s,A as F,C as re,q as ye,i as V,c as De,v as hr,j as ur,$ as fr,D as Qe}from"../chunks/DniTuB_0.js";import{a as _e,i as b,s as Ee}from"../chunks/DbNhg6mG.js";import{d as n,c as w,s as K,h as mr,B as xr,f as Fe}from"../chunks/DSfKzFV1.js";import{p as ze}from"../chunks/covROD4j.js";import{g as Pe}from"../chunks/kW9-6GPQ.js";import{b as We,a as pr}from"../chunks/Dt70yZzL.js";import{t as Se}from"../chunks/2CDqnvrp.js";import{e as ve,i as xe}from"../chunks/Ck5PkeSc.js";import{p as br}from"../chunks/Dt7jKcR8.js";import{w as kr}from"../chunks/DmHFwzWx.js";import{t as Je}from"../chunks/CBJzOE8U.js";const yr=async({url:ae})=>({url:ae.pathname}),_r=!1,wr=!1,fa=Object.freeze(Object.defineProperty({__proto__:null,load:yr,prerender:_r,ssr:wr},Symbol.toStringTag,{value:"Module"}));var Mr=h('
Live Updates
'),jr=h('
Connecting
'),zr=h('
Updates Unavailable
'),Sr=h('
Manual Refresh
'),Cr=re(''),Hr=re(''),Ar=re(''),Lr=re(''),$r=h(' '),Br=h(' '),Rr=h('
'),Vr=h('
'),Ir=h('
'),Pr=h('
'),Tr=re(''),Gr=re(''),Or=re(''),Dr=re(''),Er=h(' '),Nr=h(' '),Ur=h('
'),qr=h('
'),Qr=h('
GARM GARM

GARM

',1);function Fr(ae,te){Ge(te,!1);const[oe,be]=Ee(),d=()=>_e(kr,"$websocketStore",oe),se=()=>_e(Se,"$themeStore",oe),W=()=>_e(br,"$page",oe),u=T(),z=T(),k=T();let y=T(!1),m=T(!1);Ke(()=>{window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",v)});function v(t){(!localStorage.getItem("theme")||localStorage.getItem("theme")==="system")&&Se.set(t.matches)}function J(){Se.toggle()}function ie(){We.logout(),f(m,!1)}const X=[{href:n("/"),label:"Dashboard",icon:"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"},{href:n("/repositories"),label:"Repositories",icon:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"},{href:n("/organizations"),label:"Organizations",icon:"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"},{href:n("/enterprises"),label:"Enterprises",icon:"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"},{href:n("/pools"),label:"Pools",icon:"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"},{href:n("/scalesets"),label:"Scale Sets",icon:"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4"},{href:n("/instances"),label:"Runners",icon:"M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"}],M=[{href:n("/credentials"),label:"Credentials",icon:"M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1721 9z"},{href:n("/endpoints"),label:"Endpoints",icon:"M13 10V3L4 14h7v7l9-11h-7z"},{href:n("/templates"),label:"Runner Install Templates",icon:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"},{href:n("/objects"),label:"Object Storage",icon:"M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4"}];I(()=>d(),()=>{f(u,d())}),I(()=>se(),()=>{f(z,se())}),I(()=>W(),()=>{W().url.pathname&&f(y,!1)}),I(()=>W(),()=>{f(k,W().url.pathname)}),Oe(),Te();var S=Qr(),q=P(S),ce=o(q),ne=o(ce),$=o(ne),B=o($),Y=o(B),G=l(Y,2);a(B),a($);var O=l($,2),D=o(O),R=o(D),ge=o(R);{var he=t=>{var r=Mr();s(t,r)},Z=t=>{var r=F(),g=P(r);{var _=x=>{var j=jr();s(x,j)},C=x=>{var j=F(),ee=P(j);{var H=p=>{var N=zr();s(p,N)},A=p=>{var N=Sr();s(p,N)};b(ee,p=>{e(u),i(()=>e(u).error)?p(H):p(A,!1)},!0)}s(x,j)};b(g,x=>{e(u),i(()=>e(u).connecting)?x(_):x(C,!1)},!0)}s(t,r)};b(ge,t=>{e(u),i(()=>e(u).connected)?t(he):t(Z,!1)})}a(R);var E=l(R,2),ue=o(E);{var we=t=>{var r=Cr();s(t,r)},Ce=t=>{var r=Hr();s(t,r)};b(ue,t=>{e(z)?t(we):t(Ce,!1)})}a(E),a(D),a(O),a(ne);var Me=l(ne,2),je=o(Me);ve(je,1,()=>X,xe,(t,r)=>{var g=$r(),_=o(g),C=o(_);{var x=H=>{var A=F(),p=P(A);ve(p,1,()=>(e(r),i(()=>e(r).icon)),xe,(N,le)=>{var c=Ar();U(()=>w(c,"d",e(le))),s(N,c)}),s(H,A)},j=H=>{var A=Lr();U(()=>w(A,"d",(e(r),i(()=>e(r).icon)))),s(H,A)};b(C,H=>{e(r),i(()=>Array.isArray(e(r).icon))?H(x):H(j,!1)})}a(_);var ee=l(_);a(g),U(()=>{w(g,"href",(e(r),i(()=>e(r).href))),K(g,1,`group flex items-center px-2 py-2 text-sm font-medium rounded-md transition-colors duration-200 + ${e(k),e(r),i(()=>e(k)===e(r).href?"bg-gray-100 text-gray-900 dark:bg-gray-700 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),pe(ee,` ${e(r),i(()=>e(r).label)??""}`)}),s(t,g)});var Q=l(je,2);ve(Q,5,()=>M,xe,(t,r)=>{var g=Br(),_=o(g),C=o(_);a(_);var x=l(_);a(g),U(()=>{w(g,"href",(e(r),i(()=>e(r).href))),K(g,1,`group flex items-center px-2 py-2 text-sm font-medium rounded-md transition-colors duration-200 + ${e(k),e(r),i(()=>e(k)===e(r).href?"bg-gray-100 text-gray-900 dark:bg-gray-700 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),w(C,"d",(e(r),i(()=>e(r).icon))),pe(x,` ${e(r),i(()=>e(r).label)??""}`)}),s(t,g)}),a(Q);var fe=l(Q,2),Xe=o(fe);a(fe),a(Me),a(ce),a(q);var He=l(q,2),Ae=o(He),Ne=o(Ae),Le=l(Ne,2),$e=o(Le),Be=l($e,2),Ue=l(Be,4),Ye=o(Ue);{var Ze=t=>{var r=Rr();s(t,r)},er=t=>{var r=F(),g=P(r);{var _=x=>{var j=Vr();s(x,j)},C=x=>{var j=F(),ee=P(j);{var H=p=>{var N=Ir();s(p,N)},A=p=>{var N=Pr();s(p,N)};b(ee,p=>{e(u),i(()=>e(u).error)?p(H):p(A,!1)},!0)}s(x,j)};b(g,x=>{e(u),i(()=>e(u).connecting)?x(_):x(C,!1)},!0)}s(t,r)};b(Ye,t=>{e(u),i(()=>e(u).connected)?t(Ze):t(er,!1)})}a(Ue),a(Le);var Re=l(Le,2),rr=o(Re);{var ar=t=>{var r=Tr();s(t,r)},tr=t=>{var r=Gr();s(t,r)};b(rr,t=>{e(z)?t(ar):t(tr,!1)})}a(Re),a(Ae);var or=l(Ae,2);{var sr=t=>{var r=Ur(),g=o(r),_=l(g,2),C=o(_),x=o(C);a(C);var j=l(C,2),ee=o(j),H=o(ee);ve(H,1,()=>X,xe,(le,c)=>{var L=Er(),de=o(L),Ve=o(de);{var Ie=me=>{var ke=F(),vr=P(ke);ve(vr,1,()=>(e(c),i(()=>e(c).icon)),xe,(cr,gr)=>{var qe=Or();U(()=>w(qe,"d",e(gr))),s(cr,qe)}),s(me,ke)},lr=me=>{var ke=Dr();U(()=>w(ke,"d",(e(c),i(()=>e(c).icon)))),s(me,ke)};b(Ve,me=>{e(c),i(()=>Array.isArray(e(c).icon))?me(Ie):me(lr,!1)})}a(de);var dr=l(de);a(L),U(()=>{w(L,"href",(e(c),i(()=>e(c).href))),K(L,1,`group flex items-center px-2 py-2 text-base font-medium rounded-md transition-colors duration-200 + ${e(k),e(c),i(()=>e(k)===e(c).href?"bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),pe(dr,` ${e(c),i(()=>e(c).label)??""}`)}),V("click",L,()=>f(y,!1)),s(le,L)});var A=l(H,2);ve(A,5,()=>M,xe,(le,c)=>{var L=Nr(),de=o(L),Ve=o(de);a(de);var Ie=l(de);a(L),U(()=>{w(L,"href",(e(c),i(()=>e(c).href))),K(L,1,`group flex items-center px-2 py-2 text-base font-medium rounded-md transition-colors duration-200 + ${e(k),e(c),i(()=>e(k)===e(c).href?"bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),w(Ve,"d",(e(c),i(()=>e(c).icon))),pe(Ie,` ${e(c),i(()=>e(c).label)??""}`)}),V("click",L,()=>f(y,!1)),s(le,L)}),a(A);var p=l(A,2),N=o(p);a(p),a(ee),a(j),a(_),a(r),V("click",g,()=>f(y,!1)),V("keydown",g,le=>{le.key==="Escape"&&f(y,!1)}),V("click",x,()=>f(y,!1)),V("click",N,ie),s(t,r)};b(or,t=>{e(y)&&t(sr)})}a(He);var ir=l(He,2);{var nr=t=>{var r=qr();V("click",r,()=>f(m,!1)),V("keydown",r,g=>{g.key==="Escape"&&f(m,!1)}),s(t,r)};b(ir,t=>{e(m)&&t(nr)})}U((t,r,g,_,C)=>{w(B,"href",t),w(Y,"src",r),w(G,"src",g),w(E,"title",e(z)?"Switch to Light Mode":"Switch to Dark Mode"),w($e,"src",_),K($e,1,`${e(z)?"hidden":"block"} h-8 w-8`),w(Be,"src",C),K(Be,1,`${e(z)?"block":"hidden"} h-8 w-8`)},[()=>(ye(n),i(()=>n("/"))),()=>(ye(n),i(()=>n("/assets/garm-light.svg"))),()=>(ye(n),i(()=>n("/assets/garm-dark.svg"))),()=>(ye(n),i(()=>n("/assets/garm-light.svg"))),()=>(ye(n),i(()=>n("/assets/garm-dark.svg")))]),V("click",E,J),V("click",Xe,ie),V("click",Ne,()=>f(y,!e(y))),V("click",Re,J),s(ae,S),De(),be()}var Jr=h("
"),Kr=h('

'),Wr=h('
');function Xr(ae,te){Ge(te,!1);const[oe,be]=Ee(),d=()=>_e(Je,"$toastStore",oe),se=T();function W(m){switch(m){case"success":return` `;case"error":return` @@ -10,4 +10,4 @@ import"../chunks/DsnmJJEf.js";import{i as Te}from"../chunks/TJn6xDN9.js";import{ `;case"info":default:return` - `}}function u(m){switch(m){case"success":return"bg-green-50 dark:bg-green-900 border-green-200 dark:border-green-700";case"error":return"bg-red-50 dark:bg-red-900 border-red-200 dark:border-red-700";case"warning":return"bg-yellow-50 dark:bg-yellow-900 border-yellow-200 dark:border-yellow-700";case"info":default:return"bg-blue-50 dark:bg-blue-900 border-blue-200 dark:border-blue-700"}}function j(m){switch(m){case"success":return"text-green-800 dark:text-green-200";case"error":return"text-red-800 dark:text-red-200";case"warning":return"text-yellow-800 dark:text-yellow-200";case"info":default:return"text-blue-800 dark:text-blue-200"}}function k(m){switch(m){case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";case"warning":return"text-yellow-700 dark:text-yellow-300";case"info":default:return"text-blue-700 dark:text-blue-300"}}I(()=>d(),()=>{f(se,d())}),Oe(),Te();var y=Wr();ve(y,5,()=>e(se),m=>m.id,(m,v)=>{var J=Kr(),ie=o(J),X=o(ie),M=o(X);mr(M,()=>(e(v),i(()=>W(e(v).type)))),a(X);var S=l(X,2),q=o(S),ce=o(q,!0);a(q);var ne=l(q,2);{var $=G=>{var O=Jr(),D=o(O,!0);a(O),U(V=>{K(O,1,`mt-1 text-sm ${V??""}`),pe(D,(e(v),i(()=>e(v).message)))},[()=>(e(v),i(()=>k(e(v).type)))]),s(G,O)};b(ne,G=>{e(v),i(()=>e(v).message)&&G($)})}a(S);var B=l(S,2),Y=o(B);{let G=hr(()=>(e(v),i(()=>e(v).type==="success"?"text-green-400 hover:text-green-500 focus:ring-green-500":e(v).type==="error"?"text-red-400 hover:text-red-500 focus:ring-red-500":e(v).type==="warning"?"text-yellow-400 hover:text-yellow-500 focus:ring-yellow-500":"text-blue-400 hover:text-blue-500 focus:ring-blue-500")));xr(Y,{variant:"ghost",size:"sm","aria-label":"Dismiss notification",icon:"",get class(){return e(G)},$$events:{click:()=>Je.remove(e(v).id)}})}a(B),a(ie),a(J),U((G,O)=>{K(J,1,`relative rounded-lg border p-4 shadow-lg transition-all duration-300 ease-in-out ${G??""}`),K(q,1,`text-sm font-medium ${O??""}`),pe(ce,(e(v),i(()=>e(v).title)))},[()=>(e(v),i(()=>u(e(v).type))),()=>(e(v),i(()=>j(e(v).type)))]),s(m,J)}),a(y),s(ae,y),De(),be()}var Yr=h('

Loading...

'),Zr=h('
'),ea=h('

'),ra=h(" ",1);function ma(ae,te){Ge(te,!1);const[oe,be]=Ee(),d=()=>_e(pr,"$authStore",oe),se=T(),W=T(),u=T(),j=T(),k=T(),y=T();Ke(()=>{We.init(),Se.init()}),I(()=>(d(),Pe),()=>{if(!d().loading){const M=je.url.pathname===n("/login"),S=je.url.pathname===n("/init");!M&&!S&&!d().isAuthenticated&&(d().needsInitialization?Pe(n("/init"),{replaceState:!0}):Pe(n("/login"),{replaceState:!0}))}}),I(()=>n,()=>{f(se,je.url.pathname===n("/login"))}),I(()=>n,()=>{f(W,je.url.pathname===n("/init"))}),I(()=>d(),()=>{f(u,d().needsInitialization&&!d().isAuthenticated&&!d().loading)}),I(()=>d(),()=>{f(j,!d().needsInitialization&&!d().isAuthenticated&&!d().loading)}),I(()=>d(),()=>{f(k,d().isAuthenticated&&!d().loading)}),I(()=>(e(u),e(j),e(k)),()=>{f(y,!e(u)&&!e(j)&&!e(k))}),Oe(),Te();var m=ra();ur(M=>{fr.title="GARM - GitHub Actions Runner Manager"});var v=P(m);{var J=M=>{var S=Yr();s(M,S)},ie=M=>{var S=F(),q=P(S);{var ce=$=>{var B=F(),Y=P(B);Fe(Y,te,"default",{}),s($,B)},ne=$=>{var B=F(),Y=P(B);{var G=D=>{var V=Zr(),ge=o(V);Fr(ge,{});var he=l(ge,2),Z=o(he),E=o(Z),ue=o(E);Fe(ue,te,"default",{}),a(E),a(Z),a(he),a(V),s(D,V)},O=D=>{var V=F(),ge=P(V);{var he=Z=>{var E=ea(),ue=o(E),we=l(o(ue),2),Ce=o(we);{var Me=Q=>{var fe=Qe("Redirecting to initialization...");s(Q,fe)},ze=Q=>{var fe=Qe("Redirecting to login...");s(Q,fe)};b(Ce,Q=>{d(),i(()=>d().needsInitialization)?Q(Me):Q(ze,!1)})}a(we),a(ue),a(E),s(Z,E)};b(ge,Z=>{e(y)&&Z(he)},!0)}s(D,V)};b(Y,D=>{e(k)?D(G):D(O,!1)},!0)}s($,B)};b(q,$=>{e(j)||e(u)?$(ce):$(ne,!1)},!0)}s(M,S)};b(v,M=>{d(),i(()=>d().loading)?M(J):M(ie,!1)})}var X=l(v,2);Xr(X,{}),s(ae,m),De(),be()}export{ma as component,fa as universal}; + `}}function u(m){switch(m){case"success":return"bg-green-50 dark:bg-green-900 border-green-200 dark:border-green-700";case"error":return"bg-red-50 dark:bg-red-900 border-red-200 dark:border-red-700";case"warning":return"bg-yellow-50 dark:bg-yellow-900 border-yellow-200 dark:border-yellow-700";case"info":default:return"bg-blue-50 dark:bg-blue-900 border-blue-200 dark:border-blue-700"}}function z(m){switch(m){case"success":return"text-green-800 dark:text-green-200";case"error":return"text-red-800 dark:text-red-200";case"warning":return"text-yellow-800 dark:text-yellow-200";case"info":default:return"text-blue-800 dark:text-blue-200"}}function k(m){switch(m){case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";case"warning":return"text-yellow-700 dark:text-yellow-300";case"info":default:return"text-blue-700 dark:text-blue-300"}}I(()=>d(),()=>{f(se,d())}),Oe(),Te();var y=Wr();ve(y,5,()=>e(se),m=>m.id,(m,v)=>{var J=Kr(),ie=o(J),X=o(ie),M=o(X);mr(M,()=>(e(v),i(()=>W(e(v).type)))),a(X);var S=l(X,2),q=o(S),ce=o(q,!0);a(q);var ne=l(q,2);{var $=G=>{var O=Jr(),D=o(O,!0);a(O),U(R=>{K(O,1,`mt-1 text-sm ${R??""}`),pe(D,(e(v),i(()=>e(v).message)))},[()=>(e(v),i(()=>k(e(v).type)))]),s(G,O)};b(ne,G=>{e(v),i(()=>e(v).message)&&G($)})}a(S);var B=l(S,2),Y=o(B);{let G=hr(()=>(e(v),i(()=>e(v).type==="success"?"text-green-400 hover:text-green-500 focus:ring-green-500":e(v).type==="error"?"text-red-400 hover:text-red-500 focus:ring-red-500":e(v).type==="warning"?"text-yellow-400 hover:text-yellow-500 focus:ring-yellow-500":"text-blue-400 hover:text-blue-500 focus:ring-blue-500")));xr(Y,{variant:"ghost",size:"sm","aria-label":"Dismiss notification",icon:"",get class(){return e(G)},$$events:{click:()=>Je.remove(e(v).id)}})}a(B),a(ie),a(J),U((G,O)=>{K(J,1,`relative rounded-lg border p-4 shadow-lg transition-all duration-300 ease-in-out ${G??""}`),K(q,1,`text-sm font-medium ${O??""}`),pe(ce,(e(v),i(()=>e(v).title)))},[()=>(e(v),i(()=>u(e(v).type))),()=>(e(v),i(()=>z(e(v).type)))]),s(m,J)}),a(y),s(ae,y),De(),be()}var Yr=h('

Loading...

'),Zr=h('
'),ea=h('

'),ra=h(" ",1);function ma(ae,te){Ge(te,!1);const[oe,be]=Ee(),d=()=>_e(pr,"$authStore",oe),se=T(),W=T(),u=T(),z=T(),k=T(),y=T();Ke(()=>{We.init(),Se.init()}),I(()=>(d(),Pe),()=>{if(!d().loading){const M=ze.url.pathname===n("/login"),S=ze.url.pathname===n("/init");!M&&!S&&!d().isAuthenticated&&(d().needsInitialization?Pe(n("/init"),{replaceState:!0}):Pe(n("/login"),{replaceState:!0}))}}),I(()=>n,()=>{f(se,ze.url.pathname===n("/login"))}),I(()=>n,()=>{f(W,ze.url.pathname===n("/init"))}),I(()=>d(),()=>{f(u,d().needsInitialization&&!d().isAuthenticated&&!d().loading)}),I(()=>d(),()=>{f(z,!d().needsInitialization&&!d().isAuthenticated&&!d().loading)}),I(()=>d(),()=>{f(k,d().isAuthenticated&&!d().loading)}),I(()=>(e(u),e(z),e(k)),()=>{f(y,!e(u)&&!e(z)&&!e(k))}),Oe(),Te();var m=ra();ur(M=>{fr.title="GARM - GitHub Actions Runner Manager"});var v=P(m);{var J=M=>{var S=Yr();s(M,S)},ie=M=>{var S=F(),q=P(S);{var ce=$=>{var B=F(),Y=P(B);Fe(Y,te,"default",{}),s($,B)},ne=$=>{var B=F(),Y=P(B);{var G=D=>{var R=Zr(),ge=o(R);Fr(ge,{});var he=l(ge,2),Z=o(he),E=o(Z),ue=o(E);Fe(ue,te,"default",{}),a(E),a(Z),a(he),a(R),s(D,R)},O=D=>{var R=F(),ge=P(R);{var he=Z=>{var E=ea(),ue=o(E),we=l(o(ue),2),Ce=o(we);{var Me=Q=>{var fe=Qe("Redirecting to initialization...");s(Q,fe)},je=Q=>{var fe=Qe("Redirecting to login...");s(Q,fe)};b(Ce,Q=>{d(),i(()=>d().needsInitialization)?Q(Me):Q(je,!1)})}a(we),a(ue),a(E),s(Z,E)};b(ge,Z=>{e(y)&&Z(he)},!0)}s(D,R)};b(Y,D=>{e(k)?D(G):D(O,!1)},!0)}s($,B)};b(q,$=>{e(z)||e(u)?$(ce):$(ne,!1)},!0)}s(M,S)};b(v,M=>{d(),i(()=>d().loading)?M(J):M(ie,!1)})}var X=l(v,2);Xr(X,{}),s(ae,m),De(),be()}export{ma as component,fa as universal}; diff --git a/webapp/assets/_app/immutable/nodes/1.D8aO3kxo.js b/webapp/assets/_app/immutable/nodes/1.HzNKBJ2O.js similarity index 84% rename from webapp/assets/_app/immutable/nodes/1.D8aO3kxo.js rename to webapp/assets/_app/immutable/nodes/1.HzNKBJ2O.js index d9b25440..05d38a90 100644 --- a/webapp/assets/_app/immutable/nodes/1.D8aO3kxo.js +++ b/webapp/assets/_app/immutable/nodes/1.HzNKBJ2O.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as h}from"../chunks/TJn6xDN9.js";import{p as c,f as l,a as v,t as u,b as _,c as d,d as s,r as e,s as g,e as p}from"../chunks/DniTuB_0.js";import{p as o}from"../chunks/Hb0uuDRx.js";var x=l("

",1);function q(i,m){c(m,!1),h();var t=x(),r=v(t),f=s(r,!0);e(r);var a=g(r,2),n=s(a,!0);e(a),u(()=>{p(f,o.status),p(n,o.error?.message)}),_(i,t),d()}export{q as component}; +import"../chunks/DsnmJJEf.js";import{i as h}from"../chunks/TJn6xDN9.js";import{p as c,f as l,a as v,t as u,b as _,c as d,d as s,r as e,s as g,e as p}from"../chunks/DniTuB_0.js";import{p as o}from"../chunks/covROD4j.js";var x=l("

",1);function q(i,m){c(m,!1),h();var t=x(),r=v(t),f=s(r,!0);e(r);var a=g(r,2),n=s(a,!0);e(a),u(()=>{p(f,o.status),p(n,o.error?.message)}),_(i,t),d()}export{q as component}; diff --git a/webapp/assets/_app/immutable/nodes/10.BaCSALCh.js b/webapp/assets/_app/immutable/nodes/10.BXBZr9ef.js similarity index 94% rename from webapp/assets/_app/immutable/nodes/10.BaCSALCh.js rename to webapp/assets/_app/immutable/nodes/10.BXBZr9ef.js index 999043f1..c493f74b 100644 --- a/webapp/assets/_app/immutable/nodes/10.BaCSALCh.js +++ b/webapp/assets/_app/immutable/nodes/10.BXBZr9ef.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as Z}from"../chunks/TJn6xDN9.js";import{p as ee,o as ae,l as re,h as te,f as K,j as se,t as _,g as a,i as k,b as w,c as de,$ as oe,s as d,D as ie,m as f,d as r,u as q,q as B,k as i,r as t,z as D,e as I}from"../chunks/DniTuB_0.js";import{i as le,s as ne,a as ce}from"../chunks/DbNhg6mG.js";import{B as me,d as l,c as T,r as U}from"../chunks/BZ2rxtTc.js";import{b as C}from"../chunks/CCQwxxp9.js";import{p as ue}from"../chunks/D4Caz1gY.js";import{g as H}from"../chunks/HMJxCnAR.js";import{a as pe,b as ve}from"../chunks/1biM6o9g.js";import{e as fe}from"../chunks/BZiHL9L3.js";var ge=K('

'),he=K('
GARM

Sign in to GARM

GitHub Actions Runner Manager

');function Ae(W,F){ee(F,!1);const[J,N]=ne(),$=()=>ce(pe,"$authStore",J);let m=f(""),u=f(""),o=f(!1),n=f("");ae(()=>{O()});function O(){const e=localStorage.getItem("theme");let s=!1;e==="dark"?s=!0:e==="light"?s=!1:s=window.matchMedia("(prefers-color-scheme: dark)").matches,s?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}async function M(){if(!a(m)||!a(u)){i(n,"Please enter both username and password");return}i(o,!0),i(n,"");try{await ve.login(a(m),a(u)),H(l("/"))}catch(e){i(n,fe(e))}finally{i(o,!1)}}function L(e){e.key==="Enter"&&M()}re(()=>($(),l),()=>{$().isAuthenticated&&H(l("/"))}),te(),Z();var g=he();se(e=>{oe.title="Login - GARM"});var z=r(g),h=r(z),A=r(h),S=r(A),Q=d(S,2);t(A),D(4),t(h);var b=d(h,2),x=r(b),y=r(x),p=d(r(y),2);U(p),t(y);var P=d(y,2),v=d(r(P),2);U(v),t(P),t(x);var G=d(x,2);{var V=e=>{var s=ge(),c=r(s),E=d(r(c),2),j=r(E),Y=r(j,!0);t(j),t(E),t(c),t(s),_(()=>I(Y,a(n))),w(e,s)};le(G,e=>{a(n)&&e(V)})}var R=d(G,2),X=r(R);me(X,{type:"submit",variant:"primary",size:"md",fullWidth:!0,get disabled(){return a(o)},get loading(){return a(o)},children:(e,s)=>{D();var c=ie();_(()=>I(c,a(o)?"Signing in...":"Sign in")),w(e,c)},$$slots:{default:!0}}),t(R),t(b),t(z),t(g),_((e,s)=>{T(S,"src",e),T(Q,"src",s),p.disabled=a(o),v.disabled=a(o)},[()=>(B(l),q(()=>l("/assets/garm-light.svg"))),()=>(B(l),q(()=>l("/assets/garm-dark.svg")))]),C(p,()=>a(m),e=>i(m,e)),k("keypress",p,L),C(v,()=>a(u),e=>i(u,e)),k("keypress",v,L),k("submit",b,ue(M)),w(W,g),de(),N()}export{Ae as component}; +import"../chunks/DsnmJJEf.js";import{i as Z}from"../chunks/TJn6xDN9.js";import{p as ee,o as ae,l as re,h as te,f as K,j as se,t as _,g as a,i as k,b as w,c as de,$ as oe,s as d,D as ie,m as f,d as r,u as q,q as B,k as i,r as t,z as D,e as I}from"../chunks/DniTuB_0.js";import{i as le,s as ne,a as ce}from"../chunks/DbNhg6mG.js";import{B as me,d as l,c as T,r as U}from"../chunks/DSfKzFV1.js";import{b as C}from"../chunks/CCQwxxp9.js";import{p as ue}from"../chunks/D4Caz1gY.js";import{g as H}from"../chunks/kW9-6GPQ.js";import{a as pe,b as ve}from"../chunks/Dt70yZzL.js";import{e as fe}from"../chunks/BZiHL9L3.js";var ge=K('

'),he=K('
GARM

Sign in to GARM

GitHub Actions Runner Manager

');function Ae(W,F){ee(F,!1);const[J,N]=ne(),$=()=>ce(pe,"$authStore",J);let m=f(""),u=f(""),o=f(!1),n=f("");ae(()=>{O()});function O(){const e=localStorage.getItem("theme");let s=!1;e==="dark"?s=!0:e==="light"?s=!1:s=window.matchMedia("(prefers-color-scheme: dark)").matches,s?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}async function M(){if(!a(m)||!a(u)){i(n,"Please enter both username and password");return}i(o,!0),i(n,"");try{await ve.login(a(m),a(u)),H(l("/"))}catch(e){i(n,fe(e))}finally{i(o,!1)}}function L(e){e.key==="Enter"&&M()}re(()=>($(),l),()=>{$().isAuthenticated&&H(l("/"))}),te(),Z();var g=he();se(e=>{oe.title="Login - GARM"});var z=r(g),h=r(z),A=r(h),S=r(A),Q=d(S,2);t(A),D(4),t(h);var b=d(h,2),x=r(b),y=r(x),p=d(r(y),2);U(p),t(y);var P=d(y,2),v=d(r(P),2);U(v),t(P),t(x);var G=d(x,2);{var V=e=>{var s=ge(),c=r(s),E=d(r(c),2),j=r(E),Y=r(j,!0);t(j),t(E),t(c),t(s),_(()=>I(Y,a(n))),w(e,s)};le(G,e=>{a(n)&&e(V)})}var R=d(G,2),X=r(R);me(X,{type:"submit",variant:"primary",size:"md",fullWidth:!0,get disabled(){return a(o)},get loading(){return a(o)},children:(e,s)=>{D();var c=ie();_(()=>I(c,a(o)?"Signing in...":"Sign in")),w(e,c)},$$slots:{default:!0}}),t(R),t(b),t(z),t(g),_((e,s)=>{T(S,"src",e),T(Q,"src",s),p.disabled=a(o),v.disabled=a(o)},[()=>(B(l),q(()=>l("/assets/garm-light.svg"))),()=>(B(l),q(()=>l("/assets/garm-dark.svg")))]),C(p,()=>a(m),e=>i(m,e)),k("keypress",p,L),C(v,()=>a(u),e=>i(u,e)),k("keypress",v,L),k("submit",b,ue(M)),w(W,g),de(),N()}export{Ae as component}; diff --git a/webapp/assets/_app/immutable/nodes/11.B9eGfscp.js b/webapp/assets/_app/immutable/nodes/11.B9eGfscp.js new file mode 100644 index 00000000..07e2b2d6 --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/11.B9eGfscp.js @@ -0,0 +1,7 @@ +import"../chunks/DsnmJJEf.js";import{i as tt}from"../chunks/TJn6xDN9.js";import{p as at,l as oe,q as z,g as e,m as g,h as vt,A as Tt,a as bt,b as v,c as rt,k as r,u as ut,f as C,d as l,r as o,t as E,e as w,s,E as zt,z as W,D as se,v as He,y as Et,C as ht,i as H,o as Ot,B as Ut,x as pt,w as V}from"../chunks/DniTuB_0.js";import{p as ue,i as te}from"../chunks/DbNhg6mG.js";import{e as Xe,i as Ve}from"../chunks/Ck5PkeSc.js";import{B as Y,b as At,g as Ge,s as Ft,r as qe,c as Ke,k as It}from"../chunks/DSfKzFV1.js";import{b as ye}from"../chunks/CCQwxxp9.js";import{p as gt}from"../chunks/D4Caz1gY.js";import"../chunks/kW9-6GPQ.js";import"../chunks/CRDKDqj5.js";import{P as Bt}from"../chunks/RtJp4Ifn.js";import{D as Rt,G as mt,A as Lt}from"../chunks/BlJ06z1t.js";import{M as ft}from"../chunks/l9U2NoST.js";import{t as ee}from"../chunks/CBJzOE8U.js";import{e as Ee}from"../chunks/BZiHL9L3.js";import{D as Nt}from"../chunks/z19xmJI9.js";import{E as Ht}from"../chunks/30NlHgQ_.js";import{f as Gt,a as qt}from"../chunks/aK-A9Gop.js";import{w as Kt}from"../chunks/DmHFwzWx.js";var Xt=C('-'),Vt=C(' '),Wt=C(' '),Yt=C(' '),Zt=C(''),Jt=C('
');function Qt(_e,O){at(O,!1);const m=g(),S=g(),U=g();let M=ue(O,"item",8);const c=3;oe(()=>z(M()),()=>{r(m,M()?.tags||[])}),oe(()=>e(m),()=>{r(S,e(m).slice(0,c))}),oe(()=>e(m),()=>{r(U,Math.max(0,e(m).length-c))}),vt(),tt();var k=Tt(),B=bt(k);{var D=R=>{var b=Xt();v(R,b)},P=R=>{var b=Jt(),Z=l(b);Xe(Z,1,()=>e(S),Ve,(y,f)=>{var $=Vt(),T=l($,!0);o($),E(()=>w(T,e(f))),v(y,$)});var G=s(Z,2);{var ke=y=>{var f=Wt(),$=l(f);o(f),E(()=>w($,`+${e(U)??""} more`)),v(y,f)};te(G,y=>{e(U)>0&&y(ke)})}var q=s(G,2);{var L=y=>{var f=Zt(),$=l(f),T=s(l($),2);Xe(T,5,()=>e(m),Ve,(n,A)=>{var h=Yt(),p=l(h,!0);o(h),E(()=>w(p,e(A))),v(n,h)}),o(T),o($),o(f),v(y,f)};te(q,y=>{e(m),ut(()=>e(m).length>c)&&y(L)})}o(b),v(R,b)};te(B,R=>{e(m),ut(()=>!e(m)||e(m).length===0)?R(D):R(P,!1)})}v(_e,k),rt()}var ea=ht(''),ta=ht(''),aa=C('
');function ra(_e,O){at(O,!1);const m=g(),S=g(),U=g(),M=g();let c=ue(O,"currentPage",8,1),k=ue(O,"totalPages",8,1),B=ue(O,"totalItems",8,0),D=ue(O,"pageSize",12,25),P=ue(O,"loading",8,!1),R=ue(O,"itemName",8,"items");const b=zt();function Z(){e(S)&&!P()&&(b("pageChange",{page:c()-1}),c()-2>0&&b("prefetch",{page:c()-2}))}function G(){e(m)&&!P()&&(b("pageChange",{page:c()+1}),c()+2<=k()&&b("prefetch",{page:c()+2}))}function ke(j){const F=j.target,ae=parseInt(F.value);b("pageSizeChange",{pageSize:ae})}oe(()=>(z(c()),z(k())),()=>{r(m,c()z(c()),()=>{r(S,c()>1)}),oe(()=>(z(B()),z(c()),z(D())),()=>{r(U,B()===0?0:(c()-1)*D()+1)}),oe(()=>(z(c()),z(D()),z(B())),()=>{r(M,Math.min(c()*D(),B()))}),oe(()=>(z(c()),z(k()),z(P())),()=>{c()!e(S)||P());Y(y,{variant:"secondary",size:"sm",get disabled(){return e(j)},$$events:{click:Z},children:(F,ae)=>{W();var X=se("Previous");v(F,X)},$$slots:{default:!0}})}var f=s(y,2);{let j=He(()=>!e(m)||P());Y(f,{variant:"secondary",size:"sm",get disabled(){return e(j)},$$events:{click:G},children:(F,ae)=>{W();var X=se("Next");v(F,X)},$$slots:{default:!0}})}o(L);var $=s(L,2),T=l($),n=l(T),A=s(l(n)),h=l(A,!0);o(A);var p=s(A,2),We=l(p,!0);o(p);var pe=s(p,2),Ye=l(pe,!0);o(pe);var K=s(pe);o(n);var Oe=s(n,2),le=s(l(Oe),2);E(()=>{D(),Et(()=>{P()})});var we=l(le);we.value=we.__value=10;var $e=s(we);$e.value=$e.__value=25;var Pe=s($e);Pe.value=Pe.__value=50;var Ue=s(Pe);Ue.value=Ue.__value=100,o(le),o(Oe),o(T);var Ae=s(T,2),Fe=l(Ae);{let j=He(()=>!e(S)||P());Y(Fe,{variant:"secondary",size:"sm",get disabled(){return e(j)},$$events:{click:Z},children:(F,ae)=>{var X=ea();v(F,X)},$$slots:{default:!0}})}var je=s(Fe,2),Se=s(l(je)),Ze=l(Se,!0);o(Se);var Ie=s(Se,2),Je=l(Ie,!0);o(Ie),o(je);var ie=s(je,2);{let j=He(()=>!e(m)||P());Y(ie,{variant:"secondary",size:"sm",get disabled(){return e(j)},$$events:{click:G},children:(F,ae)=>{var X=ta();v(F,X)},$$slots:{default:!0}})}o(Ae),o($),o(q),E(()=>{w(h,e(U)),w(We,e(M)),w(Ye,B()),w(K,` ${R()??""}`),le.disabled=P(),w(Ze,c()),w(Je,k())}),At(le,D),H("change",le,ke),v(_e,q),rt()}var sa=C('
'),oa=C(' '),la=C('
Uploading...
'),ia=C('

Upload New Object

Press Space or Enter to add a tag. Press Backspace to remove the last tag.

'),na=C(' '),da=C('

Update Object

Press Space or Enter to add a tag. Press Backspace to remove the last tag.

'),ca=C(`
`,1);function Ca(_e,O){at(O,!1);let m=g([]),S=g(!0),U=g(""),M=g(""),c=g(1),k=g(25),B=g(1),D=g(0),P=1;const R="garm_objects_page_size";let b=new Map;const Z=300*1e3;let G=null;const ke=500;let q=g(!1),L=g(!1),y=g(!1),f=g(null),$=g(!1),T=null,n=g({name:"",file:null,tags:[],description:""}),A=g(0),h=g(!1),p=g({name:"",tags:[],description:""});function We(t){if(t.operation==="create")K();else if(t.operation==="update"){const a=t.payload;r(m,e(m).map(i=>i.id===a.id?a:i))}else if(t.operation==="delete"){const a=t.payload.id||t.payload;r(m,e(m).filter(i=>i.id!==a)),r(D,Math.max(0,e(D)-1))}}Ot(async()=>{const t=localStorage.getItem(R);if(t){const a=parseInt(t,10);!isNaN(a)&&a>0&&r(k,a)}await K(),T=Kt.subscribeToEntity("file_object",["create","update","delete"],We)}),Ut(()=>{T&&(T(),T=null)});function pe(t,a,i=e(k)){return`${t}-${a||"all"}-${i}`}function Ye(){const t=Date.now();for(const[a,i]of b.entries())t-i.timestamp>Z&&b.delete(a)}async function K(t=!1){try{r(S,!t),r(U,"");const a=e(M).trim()?e(M).trim().replace(/\s+/g,","):void 0,i=pe(e(c),a);if(t){const u=b.get(i);if(u&&Date.now()-u.timestampe(B))return;const a=e(M).trim()?e(M).trim().replace(/\s+/g,","):void 0,i=pe(t,a),d=b.get(i);if(!(d&&Date.now()-d.timestamp{i.lengthComputable&&r(A,Math.round(i.loaded/i.total*100))}),await new Promise((i,d)=>{a.addEventListener("load",async()=>{a.status>=200&&a.status<300?i():d(new Error(`Upload failed with status ${a.status}`))}),a.addEventListener("error",()=>{d(new Error("Upload failed"))});const u=localStorage.getItem("token"),N=window.location.origin;a.open("POST",`${N}/api/v1/objects/`),u&&a.setRequestHeader("Authorization",`Bearer ${u}`),a.setRequestHeader("X-File-Name",e(n).name),e(n).tags.length>0&&a.setRequestHeader("X-Tags",e(n).tags.join(",")),e(n).description.trim()&&a.setRequestHeader("X-File-Description",e(n).description.trim()),a.send(e(n).file)}),ee.add({type:"success",title:"Upload successful",message:`File "${e(n).name}" has been uploaded successfully.`}),r(L,!1),await K()}catch(t){const a=Ee(t);ee.add({type:"error",title:"Upload failed",message:a})}finally{r(h,!1),r(A,0)}}async function Ae(){if(e(f)?.id)try{await Ge.updateFileObject(e(f).id.toString(),{name:e(p).name||void 0,tags:e(p).tags,description:e(p).description||void 0}),ee.add({type:"success",title:"Object updated",message:"Object has been updated successfully."}),r(y,!1),r(f,null),await K()}catch(t){const a=Ee(t);ee.add({type:"error",title:"Failed to update object",message:a})}}async function Fe(t){try{const i=`${window.location.origin}/api/v1/objects/${t.id}/download`,d=await fetch(i,{method:"HEAD",credentials:"include"});if(!d.ok){const N=await d.text();throw new Error(N||`Download failed with status ${d.status}`)}const u=document.createElement("a");u.href=i,u.download=t.name||"download",document.body.appendChild(u),u.click(),document.body.removeChild(u)}catch(a){const i=Ee(a);ee.add({type:"error",title:"Download failed",message:i})}}function je(t){const a=t.detail.term,i=e(M).length>0,d=a.length>0;r(M,a),G&&clearTimeout(G),G=setTimeout(()=>{!i&&d?(P=e(c),r(c,1)):i&&!d?r(c,P):d&&r(c,1),b.clear(),K(),G=null},ke)}function Se(t){r(c,t.detail.page),K(!0)}function Ze(t){r(k,t.detail.pageSize),localStorage.setItem(R,e(k).toString()),r(c,1),b.clear(),K()}function Ie(t){Oe(t.detail.page)}function Je(t){const a=t.target;a.files&&a.files[0]&&(V(n,e(n).file=a.files[0]),V(n,e(n).name=a.files[0].name))}let ie=g(""),j=g("");function F(t,a){const d=t.target.value.trim();if((t.key===" "||t.key==="Enter")&&d)t.preventDefault(),X(d,a),a==="upload"?r(ie,""):r(j,"");else if(t.key==="Backspace"&&!d){t.preventDefault();const u=a==="upload"?e(n).tags:e(p).tags;u.length>0&&Qe(u.length-1,a)}}function ae(t){const a=t==="upload"?e(ie).trim():e(j).trim();a&&(X(a,t),t==="upload"?r(ie,""):r(j,""))}function X(t,a){const i=t.trim().toLowerCase();i&&(a==="upload"?e(n).tags.includes(i)||V(n,e(n).tags=[...e(n).tags,i]):e(p).tags.includes(i)||V(p,e(p).tags=[...e(p).tags,i]))}function Qe(t,a){a==="upload"?V(n,e(n).tags=e(n).tags.filter((i,d)=>d!==t)):V(p,e(p).tags=e(p).tags.filter((i,d)=>d!==t))}const xt=[{key:"name",title:"Name",cellComponent:Ht,cellProps:{entityType:"object"}},{key:"size",title:"Size",cellComponent:mt,cellProps:{getValue:t=>Gt(t.size||0)}},{key:"tags",title:"Tags",cellComponent:Qt,hideOnMobile:!0,cellProps:{tags:[]}},{key:"updated_at",title:"Last Modified",hideOnMobile:!0,cellComponent:mt,cellProps:{getValue:t=>qt(t.updated_at)}},{key:"actions",title:"Actions",align:"right",width:"min",cellComponent:Lt,cellProps:{actions:[{type:"custom",label:"Download",action:"download",title:"Download",ariaLabel:"Download object"},{type:"edit",action:"edit",title:"Update",ariaLabel:"Update object"},{type:"delete",action:"delete",title:"Delete",ariaLabel:"Delete object"}]}}],yt=` +This feature allows you to use GARM as a simple, private internal-use object storage system. The primary goal of this is to allow users to store provider binaries, agent binaries, runner tools and any other type of files needed for a functional GARM deployment. + +Files are stored in the database as blobs. You do not need to configure additional storage. + +It is not meant to be used to serve files outside of the needs of GARM and it does not implement S3, nor will it ever. + `.trim();tt();var st=ca(),ot=bt(st);Bt(ot,{title:"Object Storage",description:"Manage files stored in GARM's internal object storage",$$slots:{actions:(t,a)=>{Y(t,{variant:"primary",icon:'',$$events:{click:we},children:(i,d)=>{W();var u=se("Upload New Object");v(i,u)},$$slots:{default:!0}})}}});var et=s(ot,2),Be=l(et),_t=s(l(Be),2);o(Be);var kt=s(Be,2);{var wt=t=>{var a=sa(),i=l(a,!0);o(a),E(()=>w(i,yt)),v(t,a)};te(kt,t=>{e($)&&t(wt)})}o(et);var lt=s(et,2);Rt(lt,{get columns(){return xt},get data(){return e(m)},get loading(){return e(S)},get error(){return e(U)},itemName:"objects",emptyIconType:"document",showSearch:!0,searchType:"backend",searchPlaceholder:"Search by name or tags...",searchHelpText:"",showPagination:!1,get searchTerm(){return e(M)},set searchTerm(t){r(M,t)},$$events:{search:je,edit:t=>$e(t.detail.item),delete:t=>Pe(t.detail.item),action:t=>t.detail.type==="download"&&Fe(t.detail.item)},$$legacy:!0});var it=s(lt,2);{var $t=t=>{ra(t,{get currentPage(){return e(c)},get totalPages(){return e(B)},get totalItems(){return e(D)},get pageSize(){return e(k)},get loading(){return e(S)},itemName:"objects",$$events:{pageChange:Se,pageSizeChange:Ze,prefetch:Ie}})};te(it,t=>{!e(S)&&!e(U)&&e(D)>0&&t($t)})}var nt=s(it,2);{var Pt=t=>{ft(t,{$$events:{close:()=>!e(h)&&r(L,!1)},children:(a,i)=>{var d=ia(),u=s(l(d),2),N=l(u),ge=s(l(N),2);qe(ge),o(N);var ne=s(N,2),Me=s(l(ne),2),me=l(Me),re=s(me,2);Y(re,{type:"button",variant:"secondary",get disabled(){return e(h)},$$events:{click:()=>document.getElementById("upload-file-input")?.click()},children:(x,Q)=>{W();var I=se("Choose File");v(x,I)},$$slots:{default:!0}});var fe=s(re,2),De=l(fe,!0);o(fe),o(Me),o(ne);var ve=s(ne,2),Re=s(l(ve),2),Ce=l(Re);Xe(Ce,1,()=>e(n).tags,Ve,(x,Q,I)=>{var he=oa(),Ne=l(he),xe=s(Ne);o(he),E(()=>{w(Ne,`${e(Q)??""} `),xe.disabled=e(h),Ke(xe,"aria-label",`Remove tag ${e(Q)??""}`)}),H("click",xe,()=>Qe(I,"upload")),v(x,he)});var J=s(Ce,2);qe(J),o(Re),W(2),o(ve);var Te=s(ve,2),_=s(l(Te),2);pt(_);var de=s(_,2),ce=l(de);o(de),o(Te);var be=s(Te,2);{var Le=x=>{var Q=la(),I=l(Q),he=s(l(I),2),Ne=l(he);o(he),o(I);var xe=s(I,2),Ct=l(xe);o(xe),o(Q),E(()=>{w(Ne,`${e(A)??""}%`),It(Ct,`width: ${e(A)??""}%`)}),v(x,Q)};te(be,x=>{e(h)&&x(Le)})}var ze=s(be,2),ct=l(ze);Y(ct,{type:"button",variant:"secondary",get disabled(){return e(h)},$$events:{click:()=>r(L,!1)},children:(x,Q)=>{W();var I=se("Cancel");v(x,I)},$$slots:{default:!0}});var Dt=s(ct,2);Y(Dt,{type:"submit",variant:"primary",get disabled(){return e(h)},get loading(){return e(h)},children:(x,Q)=>{W();var I=se();E(()=>w(I,e(h)?"Uploading...":"Upload")),v(x,I)},$$slots:{default:!0}}),o(ze),o(u),o(d),E(()=>{ge.disabled=e(h),me.disabled=e(h),w(De,e(n).file?e(n).file.name:"No file chosen"),J.disabled=e(h),Ke(J,"placeholder",e(n).tags.length===0?"Type and press space to add tags...":""),_.disabled=e(h),w(ce,`${e(n).description.length??""} / 8192 characters`)}),ye(ge,()=>e(n).name,x=>V(n,e(n).name=x)),H("change",me,Je),ye(J,()=>e(ie),x=>r(ie,x)),H("keydown",J,x=>F(x,"upload")),H("blur",J,()=>ae("upload")),ye(_,()=>e(n).description,x=>V(n,e(n).description=x)),H("submit",u,gt(Ue)),v(a,d)},$$slots:{default:!0}})};te(nt,t=>{e(L)&&t(Pt)})}var dt=s(nt,2);{var jt=t=>{ft(t,{$$events:{close:()=>r(y,!1)},children:(a,i)=>{var d=da(),u=s(l(d),2),N=l(u),ge=s(l(N),2);qe(ge),o(N);var ne=s(N,2),Me=s(l(ne),2),me=l(Me);Xe(me,1,()=>e(p).tags,Ve,(_,de,ce)=>{var be=na(),Le=l(be),ze=s(Le);o(be),E(()=>{w(Le,`${e(de)??""} `),Ke(ze,"aria-label",`Remove tag ${e(de)??""}`)}),H("click",ze,()=>Qe(ce,"update")),v(_,be)});var re=s(me,2);qe(re),o(Me),W(2),o(ne);var fe=s(ne,2),De=s(l(fe),2);pt(De);var ve=s(De,2),Re=l(ve);o(ve),o(fe);var Ce=s(fe,2),J=l(Ce);Y(J,{type:"button",variant:"secondary",$$events:{click:()=>r(y,!1)},children:(_,de)=>{W();var ce=se("Cancel");v(_,ce)},$$slots:{default:!0}});var Te=s(J,2);Y(Te,{type:"submit",variant:"primary",children:(_,de)=>{W();var ce=se("Update");v(_,ce)},$$slots:{default:!0}}),o(Ce),o(u),o(d),E(()=>{Ke(re,"placeholder",e(p).tags.length===0?"Type and press space to add tags...":""),w(Re,`${e(p).description.length??""} / 8192 characters`)}),ye(ge,()=>e(p).name,_=>V(p,e(p).name=_)),ye(re,()=>e(j),_=>r(j,_)),H("keydown",re,_=>F(_,"update")),H("blur",re,()=>ae("update")),ye(De,()=>e(p).description,_=>V(p,e(p).description=_)),H("submit",u,gt(Ae)),v(a,d)},$$slots:{default:!0}})};te(dt,t=>{e(y)&&e(f)&&t(jt)})}var St=s(dt,2);{var Mt=t=>{Nt(t,{title:"Delete Object",get message(){return`Are you sure you want to delete the object '${e(f).name??""}'? This action cannot be undone.`},$$events:{confirm:le,cancel:()=>{r(q,!1),r(f,null)}}})};te(St,t=>{e(q)&&e(f)&&t(Mt)})}E(()=>Ft(_t,0,`w-4 h-4 ml-1 transform ${e($)?"rotate-180":""}`)),H("click",Be,()=>r($,!e($))),v(_e,st),rt()}export{Ca as component}; diff --git a/webapp/assets/_app/immutable/nodes/11.BJZYIyBS.js b/webapp/assets/_app/immutable/nodes/11.BJZYIyBS.js deleted file mode 100644 index 3612b93e..00000000 --- a/webapp/assets/_app/immutable/nodes/11.BJZYIyBS.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as Le}from"../chunks/TJn6xDN9.js";import{p as Ne,E as Qe,o as je,l as x,k as a,m as s,g as e,w as W,h as qe,f as T,s as i,d as o,r as n,b as E,t as Q,e as ie,y as Ae,u as v,z as Fe,i as $e,c as Ge,j as Xe,a as Ze,$ as et,q as P,v as ue}from"../chunks/DniTuB_0.js";import{a as He,i as X,s as Je}from"../chunks/DbNhg6mG.js";import{r as ge,b as Ue,h as tt,d as Ie,c as at,g as me}from"../chunks/BZ2rxtTc.js";import{e as rt,i as ot}from"../chunks/Ck5PkeSc.js";import{b as Re,a as We}from"../chunks/CCQwxxp9.js";import{p as nt}from"../chunks/D4Caz1gY.js";import{M as it}from"../chunks/CHjY0Kaf.js";import{F as st}from"../chunks/BaeBx81k.js";import{e as Pe}from"../chunks/BZiHL9L3.js";import{e as Ve,a as Me}from"../chunks/DKJ_c8yL.js";import{U as lt}from"../chunks/BWuIa3ut.js";import{D as dt}from"../chunks/DGVAzkoE.js";import{P as ct}from"../chunks/CuYqFPEA.js";import{t as K}from"../chunks/CBJzOE8U.js";import{B as ut,k as Ce,g as Oe,l as gt}from"../chunks/CTcPpzia.js";import{D as mt,G as pt,A as ft}from"../chunks/CKaB5fL4.js";import{A as Be}from"../chunks/Ok63PiOl.js";import{E as bt}from"../chunks/Dh8uHEF5.js";import{E as vt}from"../chunks/Bz3T1MM4.js";import{S as yt}from"../chunks/C1GM4Goa.js";var ht=T('

'),_t=T('

Loading...

'),xt=T(""),kt=T(''),wt=T('

Webhook secret will be automatically generated

'),zt=T('
'),$t=T('

Create Organization

');function Ct(pe,fe){Ne(fe,!1);const[be,ve]=Je(),f=()=>He(Ve,"$eagerCache",be),D=s(),w=s(),z=s(),Z=s(),$=Qe();let C=s(!1),b=s(""),y=s("github"),r=s({name:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin"}),k=s(!0),p=s(!0);async function A(){if(!f().loaded.credentials&&!f().loading.credentials)try{await Me.getCredentials()}catch(d){a(b,Pe(d))}}function B(d){a(y,d.detail),W(r,e(r).credentials_name="")}function c(){if(e(r).credentials_name){const d=e(D).find(L=>L.name===e(r).credentials_name);d&&d.forge_type&&a(y,d.forge_type)}}function ye(){const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,L=>L.toString(16).padStart(2,"0")).join("")}async function he(){if(!e(r).name?.trim()){a(b,"Organization name is required");return}if(!e(r).credentials_name){a(b,"Please select credentials");return}try{a(C,!0),a(b,"");const d={...e(r),install_webhook:e(k),auto_generate_secret:e(p)};$("submit",d)}catch(d){a(b,d instanceof Error?d.message:"Failed to create organization"),a(C,!1)}}je(()=>{A()}),x(()=>f(),()=>{a(D,f().credentials)}),x(()=>f(),()=>{a(w,f().loading.credentials)}),x(()=>(e(D),e(y)),()=>{a(z,e(D).filter(d=>e(y)?d.forge_type===e(y):!0))}),x(()=>e(p),()=>{e(p)?W(r,e(r).webhook_secret=ye()):e(p)||W(r,e(r).webhook_secret="")}),x(()=>(e(r),e(p)),()=>{a(Z,e(r).name?.trim()!==""&&e(r).credentials_name!==""&&(e(p)||e(r).webhook_secret&&e(r).webhook_secret.trim()!==""))}),qe(),Le(),it(pe,{$$events:{close:()=>$("close")},children:(d,L)=>{var ee=$t(),N=i(o(ee),2);{var te=h=>{var _=ht(),F=o(_),U=o(F,!0);n(F),n(_),Q(()=>ie(U,e(b))),E(h,_)};X(N,h=>{e(b)&&h(te)})}var _e=i(N,2);{var xe=h=>{var _=_t();E(h,_)},ke=h=>{var _=zt(),F=o(_);st(F,{get selectedForgeType(){return e(y)},set selectedForgeType(l){a(y,l)},$$events:{select:B},$$legacy:!0});var U=i(F,2),se=i(o(U),2);ge(se),n(U);var j=i(U,2),S=i(o(j),2);Q(()=>{e(r),Ae(()=>{e(z)})});var q=o(S);q.value=q.__value="";var we=i(q);rt(we,1,()=>e(z),ot,(l,m)=>{var O=xt(),de=o(O);n(O);var ce={};Q(()=>{ie(de,`${e(m),v(()=>e(m).name)??""} (${e(m),v(()=>e(m).endpoint?.name||"Unknown endpoint")??""})`),ce!==(ce=(e(m),v(()=>e(m).name)))&&(O.value=(O.__value=(e(m),v(()=>e(m).name)))??"")}),E(l,O)}),n(S),n(j);var G=i(j,2),ae=i(o(G),2);Q(()=>{e(r),Ae(()=>{})});var H=o(ae);H.value=H.__value="roundrobin";var le=i(H);le.value=le.__value="pack",n(ae),n(G);var re=i(G,2),oe=o(re),t=o(oe);ge(t),Fe(2),n(oe);var u=i(oe,2),I=o(u),M=o(I);ge(M),Fe(2),n(I);var g=i(I,2);{var J=l=>{var m=kt();ge(m),Re(m,()=>e(r).webhook_secret,O=>W(r,e(r).webhook_secret=O)),E(l,m)},ne=l=>{var m=wt();E(l,m)};X(g,l=>{e(p)?l(ne,!1):l(J)})}n(u),n(re);var V=i(re,2),Y=o(V),R=i(Y,2),ze=o(R,!0);n(R),n(V),n(_),Q(()=>{R.disabled=e(C)||e(w)||!e(Z),ie(ze,e(C)?"Creating...":"Create Organization")}),Re(se,()=>e(r).name,l=>W(r,e(r).name=l)),Ue(S,()=>e(r).credentials_name,l=>W(r,e(r).credentials_name=l)),$e("change",S,c),Ue(ae,()=>e(r).pool_balancer_type,l=>W(r,e(r).pool_balancer_type=l)),We(t,()=>e(k),l=>a(k,l)),We(M,()=>e(p),l=>a(p,l)),$e("click",Y,()=>$("close")),$e("submit",_,nt(he)),E(h,_)};X(_e,h=>{e(C)?h(xe):h(ke,!1)})}n(ee),E(d,ee)},$$slots:{default:!0}}),Ge(),ve()}var Ot=T(''),Pt=T('
',1);function Qt(pe,fe){Ne(fe,!1);const[be,ve]=Je(),f=()=>He(Ve,"$eagerCache",be),D=s(),w=s(),z=s(),Z=s();let $=s([]),C=s(!0),b=s(""),y=s(""),r=s(1),k=s(25),p=s(!1),A=s(!1),B=s(!1),c=s(null);function ye(){a(p,!1),a(B,!1),a(A,!1)}async function he(t){try{a(b,"");const u=t.detail,I={name:u.name,credentials_name:u.credentials_name,webhook_secret:u.webhook_secret,pool_balancer_type:u.pool_balancer_type},M=await me.createOrganization(I);if(u.install_webhook&&M.id)try{await me.installOrganizationWebhook(M.id),K.success("Webhook Installed",`Webhook for organization ${M.name} has been installed successfully.`)}catch(g){console.warn("Organization created but webhook installation failed:",g),K.error("Webhook Installation Failed",g instanceof Error?g.message:"Failed to install webhook. You can try installing it manually from the organization details page.")}K.success("Organization Created",`Organization ${M.name} has been created successfully.`),a(p,!1)}catch(u){throw a(b,Pe(u)),u}}async function d(t){if(e(c))try{await me.updateOrganization(e(c).id,t),K.success("Organization Updated",`Organization ${e(c).name} has been updated successfully.`),a(A,!1),a(c,null)}catch(u){throw u}}async function L(){if(e(c))try{a(b,""),await me.deleteOrganization(e(c).id),K.success("Organization Deleted",`Organization ${e(c).name} has been deleted successfully.`),a(c,null)}catch(t){const u=Pe(t);K.error("Delete Failed",u)}finally{ye()}}function ee(){a(p,!0)}function N(t){a(c,t),a(A,!0)}function te(t){a(c,t),a(B,!0)}je(async()=>{try{a(C,!0);const t=await Me.getOrganizations();t&&Array.isArray(t)&&a($,t)}catch(t){console.error("Failed to load organizations:",t),a(b,t instanceof Error?t.message:"Failed to load organizations")}finally{a(C,!1)}});async function _e(){try{await Me.retryResource("organizations")}catch(t){console.error("Retry failed:",t)}}const xe=[{key:"name",title:"Name",cellComponent:bt,cellProps:{entityType:"organization"}},{key:"endpoint",title:"Endpoint",cellComponent:vt},{key:"credentials",title:"Credentials",cellComponent:pt,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:yt,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:ft}],ke={entityType:"organization",primaryText:{field:"name",isClickable:!0,href:"/organizations/{id}"},customInfo:[{icon:t=>Oe(t?.endpoint?.endpoint_type||"unknown"),text:t=>t?.endpoint?.name||"Unknown"}],badges:[{type:"custom",value:t=>Ce(t)}],actions:[{type:"edit",handler:t=>N(t)},{type:"delete",handler:t=>te(t)}]};function h(t){a(y,t.detail.term),a(r,1)}function _(t){a(r,t.detail.page)}function F(t){a(k,t.detail.perPage),a(r,1)}function U(t){N(t.detail.item)}function se(t){te(t.detail.item)}x(()=>(e($),f()),()=>{(!e($).length||f().loaded.organizations)&&a($,f().organizations)}),x(()=>f(),()=>{a(C,f().loading.organizations)}),x(()=>f(),()=>{a(D,f().errorMessages.organizations)}),x(()=>(e($),e(y)),()=>{a(w,gt(e($),e(y)))}),x(()=>(e(w),e(k)),()=>{a(z,Math.ceil(e(w).length/e(k)))}),x(()=>(e(r),e(z)),()=>{e(r)>e(z)&&e(z)>0&&a(r,e(z))}),x(()=>(e(w),e(r),e(k)),()=>{a(Z,e(w).slice((e(r)-1)*e(k),e(r)*e(k)))}),qe(),Le();var j=Pt();Xe(t=>{et.title="Organizations - GARM"});var S=Ze(j),q=o(S);ct(q,{title:"Organizations",description:"Manage GitHub and Gitea organizations",actionLabel:"Add Organization",$$events:{action:ee}});var we=i(q,2);{let t=ue(()=>e(D)||e(b)),u=ue(()=>!!e(D));mt(we,{get columns(){return xe},get data(){return e(Z)},get loading(){return e(C)},get error(){return e(t)},get searchTerm(){return e(y)},searchPlaceholder:"Search organizations...",get currentPage(){return e(r)},get perPage(){return e(k)},get totalPages(){return e(z)},get totalItems(){return e(w),v(()=>e(w).length)},itemName:"organizations",emptyIconType:"building",get showRetry(){return e(u)},get mobileCardConfig(){return ke},$$events:{search:h,pageChange:_,perPageChange:F,retry:_e,edit:U,delete:se},$$slots:{"mobile-card":(I,M)=>{const g=ue(()=>M.item),J=ue(()=>(P(Ce),P(e(g)),v(()=>Ce(e(g)))));var ne=Ot(),V=o(ne),Y=o(V),R=o(Y),ze=o(R,!0);n(R);var l=i(R,2),m=o(l),O=o(m);tt(O,()=>(P(Oe),P(e(g)),v(()=>Oe(e(g).endpoint?.endpoint_type||"unknown"))));var de=i(O,2),ce=o(de,!0);n(de),n(m),n(l),n(Y),n(V);var Ee=i(V,2),Te=o(Ee);ut(Te,{get variant(){return P(e(J)),v(()=>e(J).variant)},get text(){return P(e(J)),v(()=>e(J).text)}});var De=i(Te,2),Se=o(De);Be(Se,{action:"edit",size:"sm",title:"Edit organization",ariaLabel:"Edit organization",$$events:{click:()=>N(e(g))}});var Ye=i(Se,2);Be(Ye,{action:"delete",size:"sm",title:"Delete organization",ariaLabel:"Delete organization",$$events:{click:()=>te(e(g))}}),n(De),n(Ee),n(ne),Q(Ke=>{at(Y,"href",Ke),ie(ze,(P(e(g)),v(()=>e(g).name))),ie(ce,(P(e(g)),v(()=>e(g).endpoint?.name||"Unknown")))},[()=>(P(Ie),P(e(g)),v(()=>Ie(`/organizations/${e(g).id}`)))]),E(I,ne)}}})}n(S);var G=i(S,2);{var ae=t=>{Ct(t,{$$events:{close:()=>a(p,!1),submit:he}})};X(G,t=>{e(p)&&t(ae)})}var H=i(G,2);{var le=t=>{lt(t,{get entity(){return e(c)},entityType:"organization",$$events:{close:()=>{a(A,!1),a(c,null)},submit:u=>d(u.detail)}})};X(H,t=>{e(A)&&e(c)&&t(le)})}var re=i(H,2);{var oe=t=>{dt(t,{title:"Delete Organization",message:"Are you sure you want to delete this organization? This action cannot be undone.",get itemName(){return e(c),v(()=>e(c).name)},$$events:{close:()=>{a(B,!1),a(c,null)},confirm:L}})};X(re,t=>{e(B)&&e(c)&&t(oe)})}E(pe,j),Ge(),ve()}export{Qt as component}; diff --git a/webapp/assets/_app/immutable/nodes/12.DEH2x_tr.js b/webapp/assets/_app/immutable/nodes/12.DEH2x_tr.js new file mode 100644 index 00000000..877a42e2 --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/12.DEH2x_tr.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as ct}from"../chunks/TJn6xDN9.js";import{p as vt,o as mt,l as ut,h as gt,f as y,a as de,t as U,b as x,c as xt,u as n,q as J,e as p,g as e,m as k,d as r,s,k as l,r as t,A as pt,i as j,z as se,x as ft,D as Fe,w as Q}from"../chunks/DniTuB_0.js";import{i as $,s as bt,a as yt}from"../chunks/DbNhg6mG.js";import{e as Be,i as Ee}from"../chunks/Ck5PkeSc.js";import{d as ie,c as oe,g as le,r as Se,B as Ue}from"../chunks/DSfKzFV1.js";import{b as ne}from"../chunks/CCQwxxp9.js";import{p as ht}from"../chunks/D4Caz1gY.js";import{p as _t}from"../chunks/Dt7jKcR8.js";import{g as kt}from"../chunks/kW9-6GPQ.js";import{t as C}from"../chunks/CBJzOE8U.js";import{e as V}from"../chunks/BZiHL9L3.js";import{f as Ce,a as W}from"../chunks/aK-A9Gop.js";import{D as wt}from"../chunks/z19xmJI9.js";import{M as jt}from"../chunks/l9U2NoST.js";import{B as $t}from"../chunks/Dyp1NLoF.js";var Dt=y('

Error

'),Mt=y('

Loading object details...

'),Ot=y('
'),Tt=y('No tags'),At=y('

Description

'),Ft=y('

File Information

ID:
Name:
Size:
File Type:
SHA256:

Metadata & Timestamps

Created At:
Updated At:
Tags:
',1),Bt=y(' '),Et=y('

Update Object

Press Space or Enter to add a tag. Press Backspace on empty field to remove last tag.

'),St=y(' ',1);function Xt(Ie,Le){vt(Le,!1);const[ze,Pe]=bt(),ce=()=>yt(_t,"$page",ze),X=k();let a=k(null),q=k(!0),D=k(""),Y=k(!1),I=k(!1),i=k({name:"",tags:[],description:""}),M=k("");mt(async()=>{await ve()});async function ve(){if(!e(X)){l(D,"Invalid object ID"),l(q,!1);return}try{l(q,!0),l(D,""),l(a,await le.getFileObject(e(X)))}catch(d){l(D,V(d)),C.add({type:"error",title:"Failed to load object",message:e(D)})}finally{l(q,!1)}}async function Ne(){if(e(a)?.id)try{await le.deleteFileObject(e(a).id.toString()),C.add({type:"success",title:"Object deleted",message:`Object "${e(a).name}" has been deleted successfully.`}),kt(ie("/objects"))}catch(d){const o=V(d);C.add({type:"error",title:"Failed to delete object",message:o})}}async function Re(){if(e(a)?.id)try{const o=`${window.location.origin}/api/v1/objects/${e(a).id}/download`,c=await fetch(o,{method:"HEAD",credentials:"include"});if(!c.ok){const u=await c.text();throw new Error(u||`Download failed with status ${c.status}`)}const v=document.createElement("a");v.href=o,v.download=e(a).name||"download",document.body.appendChild(v),v.click(),document.body.removeChild(v)}catch(d){const o=V(d);C.add({type:"error",title:"Download failed",message:o})}}function He(){e(a)&&(l(i,{name:e(a).name||"",tags:e(a).tags||[],description:e(a).description||""}),l(M,""),l(I,!0))}async function qe(){if(e(a)?.id)try{await le.updateFileObject(e(a).id.toString(),{name:e(i).name||void 0,tags:e(i).tags,description:e(i).description||void 0}),C.add({type:"success",title:"Object updated",message:"Object has been updated successfully."}),l(I,!1),await ve()}catch(d){const o=V(d);C.add({type:"error",title:"Failed to update object",message:o})}}function Ke(d){const c=d.target.value.trim();(d.key===" "||d.key==="Enter")&&c?(d.preventDefault(),me(c),l(M,"")):d.key==="Backspace"&&!c&&e(i).tags.length>0&&(d.preventDefault(),ue(e(i).tags.length-1))}function Ge(){const d=e(M).trim();d&&(me(d),l(M,""))}function me(d){const o=d.trim().toLowerCase();o&&(e(i).tags.includes(o)||Q(i,e(i).tags=[...e(i).tags,o]))}function ue(d){Q(i,e(i).tags=e(i).tags.filter((o,c)=>c!==d))}ut(()=>ce(),()=>{l(X,ce().params.id||"")}),gt(),ct();var ge=St(),Z=de(ge),xe=r(Z),ee=r(xe),Je=r(ee);t(ee);var pe=s(ee,2),fe=r(pe),be=s(r(fe),2),Qe=r(be,!0);t(be),t(fe),t(pe),t(xe),t(Z);var ye=s(Z,2);{var Ve=d=>{var o=Dt(),c=r(o),v=r(c),u=s(r(v),2),h=r(u,!0);t(u),t(v),t(c),t(o),U(()=>p(h,e(D))),x(d,o)};$(ye,d=>{e(D)&&d(Ve)})}var he=s(ye,2);{var We=d=>{var o=Mt();x(d,o)},Xe=d=>{var o=pt(),c=de(o);{var v=u=>{var h=Ft(),O=de(h),w=r(O),T=r(w),L=s(r(T),2),_=r(L),A=s(_,2),z=s(A,2);t(L),t(T);var P=s(T,2),N=r(P),R=s(r(N),2),K=r(R,!0);t(R),t(N);var H=s(N,2),m=s(r(H),2),F=r(m,!0);t(m),t(H);var b=s(H,2),B=s(r(b),2),G=r(B,!0);t(B),t(b);var E=s(b,2),ke=s(r(E),2),tt=r(ke,!0);t(ke),t(E);var we=s(E,2),je=s(r(we),2),at=r(je,!0);t(je),t(we),t(P),t(w);var $e=s(w,2),De=s(r($e),2),te=r(De),Me=s(r(te),2),rt=r(Me,!0);t(Me),t(te);var ae=s(te,2),Oe=s(r(ae),2),dt=r(Oe,!0);t(Oe),t(ae);var Te=s(ae,2),Ae=s(r(Te),2),st=r(Ae);{var it=g=>{var f=Ot();Be(f,5,()=>(e(a),n(()=>e(a).tags)),Ee,(S,re)=>{$t(S,{variant:"blue",get text(){return e(re)}})}),t(f),x(g,f)},ot=g=>{var f=Tt();x(g,f)};$(st,g=>{e(a),n(()=>e(a).tags&&e(a).tags.length>0)?g(it):g(ot,!1)})}t(Ae),t(Te),t(De),t($e),t(O);var lt=s(O,2);{var nt=g=>{var f=At(),S=s(r(f),2),re=r(S,!0);t(S),t(f),U(()=>p(re,(e(a),n(()=>e(a).description)))),x(g,f)};$(lt,g=>{e(a),n(()=>e(a).description)&&g(nt)})}U((g,f,S)=>{p(K,(e(a),n(()=>e(a).id))),p(F,(e(a),n(()=>e(a).name))),p(G,g),p(tt,(e(a),n(()=>e(a).file_type||"N/A"))),p(at,(e(a),n(()=>e(a).sha256||"N/A"))),p(rt,f),p(dt,S)},[()=>(J(Ce),e(a),n(()=>Ce(e(a).size||0))),()=>(J(W),e(a),n(()=>W(e(a).created_at))),()=>(J(W),e(a),n(()=>W(e(a).updated_at)))]),j("click",_,He),j("click",A,Re),j("click",z,()=>l(Y,!0)),x(u,h)};$(c,u=>{e(a)&&u(v)},!0)}x(d,o)};$(he,d=>{e(q)?d(We):d(Xe,!1)})}var _e=s(he,2);{var Ye=d=>{jt(d,{$$events:{close:()=>l(I,!1)},children:(o,c)=>{var v=Et(),u=s(r(v),2),h=r(u),O=s(r(h),2);Se(O),t(h);var w=s(h,2),T=s(r(w),2),L=r(T);Be(L,1,()=>(e(i),n(()=>e(i).tags)),Ee,(m,F,b)=>{var B=Bt(),G=r(B),E=s(G);t(B),U(()=>{p(G,`${e(F)??""} `),oe(E,"aria-label",`Remove tag ${e(F)??""}`)}),j("click",E,()=>ue(b)),x(m,B)});var _=s(L,2);Se(_),t(T),se(2),t(w);var A=s(w,2),z=s(r(A),2);ft(z);var P=s(z,2),N=r(P);t(P),t(A);var R=s(A,2),K=r(R);Ue(K,{type:"button",variant:"secondary",$$events:{click:()=>l(I,!1)},children:(m,F)=>{se();var b=Fe("Cancel");x(m,b)},$$slots:{default:!0}});var H=s(K,2);Ue(H,{type:"submit",variant:"primary",children:(m,F)=>{se();var b=Fe("Update Object");x(m,b)},$$slots:{default:!0}}),t(R),t(u),t(v),U(()=>{oe(_,"placeholder",(e(i),n(()=>e(i).tags.length===0?"Type and press Space or Enter":""))),p(N,`${e(i),n(()=>e(i).description.length)??""} / 8192 characters`)}),ne(O,()=>e(i).name,m=>Q(i,e(i).name=m)),ne(_,()=>e(M),m=>l(M,m)),j("keydown",_,Ke),j("blur",_,Ge),ne(z,()=>e(i).description,m=>Q(i,e(i).description=m)),j("submit",u,ht(qe)),x(o,v)},$$slots:{default:!0}})};$(_e,d=>{e(I)&&e(a)&&d(Ye)})}var Ze=s(_e,2);{var et=d=>{wt(d,{title:"Delete Object",get message(){return`Are you sure you want to delete the object '${e(a),n(()=>e(a).name)??""}'? This action cannot be undone.`},$$events:{confirm:Ne,cancel:()=>l(Y,!1)}})};$(Ze,d=>{e(Y)&&e(a)&&d(et)})}U(d=>{oe(Je,"href",d),p(Qe,(e(a),n(()=>e(a)?e(a).name:"Object Details")))},[()=>(J(ie),n(()=>ie("/objects")))]),x(Ie,ge),xt(),Pe()}export{Xt as component}; diff --git a/webapp/assets/_app/immutable/nodes/13.NurrRkua.js b/webapp/assets/_app/immutable/nodes/13.NurrRkua.js new file mode 100644 index 00000000..85efd98a --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/13.NurrRkua.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as Le}from"../chunks/TJn6xDN9.js";import{p as Ne,E as Qe,o as je,l as x,k as a,m as s,g as e,w as W,h as qe,f as T,s as i,d as o,r as n,b as E,t as Q,e as ie,y as Ae,u as v,z as Fe,i as $e,c as Ge,j as Xe,a as Ze,$ as et,q as P,v as ue}from"../chunks/DniTuB_0.js";import{a as He,i as X,s as Je}from"../chunks/DbNhg6mG.js";import{r as ge,b as Ue,h as tt,d as Ie,c as at,g as me}from"../chunks/DSfKzFV1.js";import{e as rt,i as ot}from"../chunks/Ck5PkeSc.js";import{b as Re,a as We}from"../chunks/CCQwxxp9.js";import{p as nt}from"../chunks/D4Caz1gY.js";import{M as it}from"../chunks/l9U2NoST.js";import{F as st}from"../chunks/CQIRreSz.js";import{e as Pe}from"../chunks/BZiHL9L3.js";import{e as Ve,a as Me}from"../chunks/BE9PkXKz.js";import{U as lt}from"../chunks/KogAzbD4.js";import{D as dt}from"../chunks/z19xmJI9.js";import{P as ct}from"../chunks/RtJp4Ifn.js";import{t as K}from"../chunks/CBJzOE8U.js";import{k as Ce,g as Oe,l as ut}from"../chunks/BC4TpgBU.js";import{B as gt}from"../chunks/Dyp1NLoF.js";import{D as mt,G as pt,A as ft}from"../chunks/BlJ06z1t.js";import{A as Be}from"../chunks/DGZKesLN.js";import{E as bt}from"../chunks/30NlHgQ_.js";import{E as vt}from"../chunks/CE0C-N9m.js";import{S as yt}from"../chunks/BsX_CrDw.js";var ht=T('

'),_t=T('

Loading...

'),xt=T(""),kt=T(''),wt=T('

Webhook secret will be automatically generated

'),zt=T('
'),$t=T('

Create Organization

');function Ct(pe,fe){Ne(fe,!1);const[be,ve]=Je(),f=()=>He(Ve,"$eagerCache",be),D=s(),w=s(),z=s(),Z=s(),$=Qe();let C=s(!1),b=s(""),y=s("github"),r=s({name:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin"}),k=s(!0),p=s(!0);async function A(){if(!f().loaded.credentials&&!f().loading.credentials)try{await Me.getCredentials()}catch(d){a(b,Pe(d))}}function B(d){a(y,d.detail),W(r,e(r).credentials_name="")}function c(){if(e(r).credentials_name){const d=e(D).find(L=>L.name===e(r).credentials_name);d&&d.forge_type&&a(y,d.forge_type)}}function ye(){const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,L=>L.toString(16).padStart(2,"0")).join("")}async function he(){if(!e(r).name?.trim()){a(b,"Organization name is required");return}if(!e(r).credentials_name){a(b,"Please select credentials");return}try{a(C,!0),a(b,"");const d={...e(r),install_webhook:e(k),auto_generate_secret:e(p)};$("submit",d)}catch(d){a(b,d instanceof Error?d.message:"Failed to create organization"),a(C,!1)}}je(()=>{A()}),x(()=>f(),()=>{a(D,f().credentials)}),x(()=>f(),()=>{a(w,f().loading.credentials)}),x(()=>(e(D),e(y)),()=>{a(z,e(D).filter(d=>e(y)?d.forge_type===e(y):!0))}),x(()=>e(p),()=>{e(p)?W(r,e(r).webhook_secret=ye()):e(p)||W(r,e(r).webhook_secret="")}),x(()=>(e(r),e(p)),()=>{a(Z,e(r).name?.trim()!==""&&e(r).credentials_name!==""&&(e(p)||e(r).webhook_secret&&e(r).webhook_secret.trim()!==""))}),qe(),Le(),it(pe,{$$events:{close:()=>$("close")},children:(d,L)=>{var ee=$t(),N=i(o(ee),2);{var te=h=>{var _=ht(),F=o(_),U=o(F,!0);n(F),n(_),Q(()=>ie(U,e(b))),E(h,_)};X(N,h=>{e(b)&&h(te)})}var _e=i(N,2);{var xe=h=>{var _=_t();E(h,_)},ke=h=>{var _=zt(),F=o(_);st(F,{get selectedForgeType(){return e(y)},set selectedForgeType(l){a(y,l)},$$events:{select:B},$$legacy:!0});var U=i(F,2),se=i(o(U),2);ge(se),n(U);var j=i(U,2),S=i(o(j),2);Q(()=>{e(r),Ae(()=>{e(z)})});var q=o(S);q.value=q.__value="";var we=i(q);rt(we,1,()=>e(z),ot,(l,m)=>{var O=xt(),de=o(O);n(O);var ce={};Q(()=>{ie(de,`${e(m),v(()=>e(m).name)??""} (${e(m),v(()=>e(m).endpoint?.name||"Unknown endpoint")??""})`),ce!==(ce=(e(m),v(()=>e(m).name)))&&(O.value=(O.__value=(e(m),v(()=>e(m).name)))??"")}),E(l,O)}),n(S),n(j);var G=i(j,2),ae=i(o(G),2);Q(()=>{e(r),Ae(()=>{})});var H=o(ae);H.value=H.__value="roundrobin";var le=i(H);le.value=le.__value="pack",n(ae),n(G);var re=i(G,2),oe=o(re),t=o(oe);ge(t),Fe(2),n(oe);var u=i(oe,2),I=o(u),M=o(I);ge(M),Fe(2),n(I);var g=i(I,2);{var J=l=>{var m=kt();ge(m),Re(m,()=>e(r).webhook_secret,O=>W(r,e(r).webhook_secret=O)),E(l,m)},ne=l=>{var m=wt();E(l,m)};X(g,l=>{e(p)?l(ne,!1):l(J)})}n(u),n(re);var V=i(re,2),Y=o(V),R=i(Y,2),ze=o(R,!0);n(R),n(V),n(_),Q(()=>{R.disabled=e(C)||e(w)||!e(Z),ie(ze,e(C)?"Creating...":"Create Organization")}),Re(se,()=>e(r).name,l=>W(r,e(r).name=l)),Ue(S,()=>e(r).credentials_name,l=>W(r,e(r).credentials_name=l)),$e("change",S,c),Ue(ae,()=>e(r).pool_balancer_type,l=>W(r,e(r).pool_balancer_type=l)),We(t,()=>e(k),l=>a(k,l)),We(M,()=>e(p),l=>a(p,l)),$e("click",Y,()=>$("close")),$e("submit",_,nt(he)),E(h,_)};X(_e,h=>{e(C)?h(xe):h(ke,!1)})}n(ee),E(d,ee)},$$slots:{default:!0}}),Ge(),ve()}var Ot=T(''),Pt=T('
',1);function Xt(pe,fe){Ne(fe,!1);const[be,ve]=Je(),f=()=>He(Ve,"$eagerCache",be),D=s(),w=s(),z=s(),Z=s();let $=s([]),C=s(!0),b=s(""),y=s(""),r=s(1),k=s(25),p=s(!1),A=s(!1),B=s(!1),c=s(null);function ye(){a(p,!1),a(B,!1),a(A,!1)}async function he(t){try{a(b,"");const u=t.detail,I={name:u.name,credentials_name:u.credentials_name,webhook_secret:u.webhook_secret,pool_balancer_type:u.pool_balancer_type},M=await me.createOrganization(I);if(u.install_webhook&&M.id)try{await me.installOrganizationWebhook(M.id),K.success("Webhook Installed",`Webhook for organization ${M.name} has been installed successfully.`)}catch(g){console.warn("Organization created but webhook installation failed:",g),K.error("Webhook Installation Failed",g instanceof Error?g.message:"Failed to install webhook. You can try installing it manually from the organization details page.")}K.success("Organization Created",`Organization ${M.name} has been created successfully.`),a(p,!1)}catch(u){throw a(b,Pe(u)),u}}async function d(t){if(e(c))try{await me.updateOrganization(e(c).id,t),K.success("Organization Updated",`Organization ${e(c).name} has been updated successfully.`),a(A,!1),a(c,null)}catch(u){throw u}}async function L(){if(e(c))try{a(b,""),await me.deleteOrganization(e(c).id),K.success("Organization Deleted",`Organization ${e(c).name} has been deleted successfully.`),a(c,null)}catch(t){const u=Pe(t);K.error("Delete Failed",u)}finally{ye()}}function ee(){a(p,!0)}function N(t){a(c,t),a(A,!0)}function te(t){a(c,t),a(B,!0)}je(async()=>{try{a(C,!0);const t=await Me.getOrganizations();t&&Array.isArray(t)&&a($,t)}catch(t){console.error("Failed to load organizations:",t),a(b,t instanceof Error?t.message:"Failed to load organizations")}finally{a(C,!1)}});async function _e(){try{await Me.retryResource("organizations")}catch(t){console.error("Retry failed:",t)}}const xe=[{key:"name",title:"Name",cellComponent:bt,cellProps:{entityType:"organization"}},{key:"endpoint",title:"Endpoint",cellComponent:vt},{key:"credentials",title:"Credentials",cellComponent:pt,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:yt,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:ft}],ke={entityType:"organization",primaryText:{field:"name",isClickable:!0,href:"/organizations/{id}"},customInfo:[{icon:t=>Oe(t?.endpoint?.endpoint_type||"unknown"),text:t=>t?.endpoint?.name||"Unknown"}],badges:[{type:"custom",value:t=>Ce(t)}],actions:[{type:"edit",handler:t=>N(t)},{type:"delete",handler:t=>te(t)}]};function h(t){a(y,t.detail.term),a(r,1)}function _(t){a(r,t.detail.page)}function F(t){a(k,t.detail.perPage),a(r,1)}function U(t){N(t.detail.item)}function se(t){te(t.detail.item)}x(()=>(e($),f()),()=>{(!e($).length||f().loaded.organizations)&&a($,f().organizations)}),x(()=>f(),()=>{a(C,f().loading.organizations)}),x(()=>f(),()=>{a(D,f().errorMessages.organizations)}),x(()=>(e($),e(y)),()=>{a(w,ut(e($),e(y)))}),x(()=>(e(w),e(k)),()=>{a(z,Math.ceil(e(w).length/e(k)))}),x(()=>(e(r),e(z)),()=>{e(r)>e(z)&&e(z)>0&&a(r,e(z))}),x(()=>(e(w),e(r),e(k)),()=>{a(Z,e(w).slice((e(r)-1)*e(k),e(r)*e(k)))}),qe(),Le();var j=Pt();Xe(t=>{et.title="Organizations - GARM"});var S=Ze(j),q=o(S);ct(q,{title:"Organizations",description:"Manage GitHub and Gitea organizations",actionLabel:"Add Organization",$$events:{action:ee}});var we=i(q,2);{let t=ue(()=>e(D)||e(b)),u=ue(()=>!!e(D));mt(we,{get columns(){return xe},get data(){return e(Z)},get loading(){return e(C)},get error(){return e(t)},get searchTerm(){return e(y)},searchPlaceholder:"Search organizations...",get currentPage(){return e(r)},get perPage(){return e(k)},get totalPages(){return e(z)},get totalItems(){return e(w),v(()=>e(w).length)},itemName:"organizations",emptyIconType:"building",get showRetry(){return e(u)},get mobileCardConfig(){return ke},$$events:{search:h,pageChange:_,perPageChange:F,retry:_e,edit:U,delete:se},$$slots:{"mobile-card":(I,M)=>{const g=ue(()=>M.item),J=ue(()=>(P(Ce),P(e(g)),v(()=>Ce(e(g)))));var ne=Ot(),V=o(ne),Y=o(V),R=o(Y),ze=o(R,!0);n(R);var l=i(R,2),m=o(l),O=o(m);tt(O,()=>(P(Oe),P(e(g)),v(()=>Oe(e(g).endpoint?.endpoint_type||"unknown"))));var de=i(O,2),ce=o(de,!0);n(de),n(m),n(l),n(Y),n(V);var Ee=i(V,2),Te=o(Ee);gt(Te,{get variant(){return P(e(J)),v(()=>e(J).variant)},get text(){return P(e(J)),v(()=>e(J).text)}});var De=i(Te,2),Se=o(De);Be(Se,{action:"edit",size:"sm",title:"Edit organization",ariaLabel:"Edit organization",$$events:{click:()=>N(e(g))}});var Ye=i(Se,2);Be(Ye,{action:"delete",size:"sm",title:"Delete organization",ariaLabel:"Delete organization",$$events:{click:()=>te(e(g))}}),n(De),n(Ee),n(ne),Q(Ke=>{at(Y,"href",Ke),ie(ze,(P(e(g)),v(()=>e(g).name))),ie(ce,(P(e(g)),v(()=>e(g).endpoint?.name||"Unknown")))},[()=>(P(Ie),P(e(g)),v(()=>Ie(`/organizations/${e(g).id}`)))]),E(I,ne)}}})}n(S);var G=i(S,2);{var ae=t=>{Ct(t,{$$events:{close:()=>a(p,!1),submit:he}})};X(G,t=>{e(p)&&t(ae)})}var H=i(G,2);{var le=t=>{lt(t,{get entity(){return e(c)},entityType:"organization",$$events:{close:()=>{a(A,!1),a(c,null)},submit:u=>d(u.detail)}})};X(H,t=>{e(A)&&e(c)&&t(le)})}var re=i(H,2);{var oe=t=>{dt(t,{title:"Delete Organization",message:"Are you sure you want to delete this organization? This action cannot be undone.",get itemName(){return e(c),v(()=>e(c).name)},$$events:{close:()=>{a(B,!1),a(c,null)},confirm:L}})};X(re,t=>{e(B)&&e(c)&&t(oe)})}E(pe,j),Ge(),ve()}export{Xt as component}; diff --git a/webapp/assets/_app/immutable/nodes/12.COfe1f2G.js b/webapp/assets/_app/immutable/nodes/14.BzcZF8IN.js similarity index 93% rename from webapp/assets/_app/immutable/nodes/12.COfe1f2G.js rename to webapp/assets/_app/immutable/nodes/14.BzcZF8IN.js index a6bf03de..1a692704 100644 --- a/webapp/assets/_app/immutable/nodes/12.COfe1f2G.js +++ b/webapp/assets/_app/immutable/nodes/14.BzcZF8IN.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as We}from"../chunks/TJn6xDN9.js";import{p as qe,o as He,B as je,l as Ge,h as Re,f as B,j as Ve,a as C,t as j,b as x,c as Je,u as i,q as de,e as ce,g as e,m as l,d as f,s as d,k as o,$ as Ke,r as m,w as Qe,A as ue,v as g}from"../chunks/DniTuB_0.js";import{i as h,s as Xe,a as Ye}from"../chunks/DbNhg6mG.js";import{d as A,c as Ze,g as _}from"../chunks/BZ2rxtTc.js";import{p as et}from"../chunks/DQE8oq0R.js";import{g as fe}from"../chunks/HMJxCnAR.js";import{U as tt}from"../chunks/BWuIa3ut.js";import{D as me}from"../chunks/DGVAzkoE.js";import{E as at,P as nt,a as ot}from"../chunks/BZ_AecKg.js";import{D as rt}from"../chunks/J4QHiesY.js";import{g as ge}from"../chunks/CTcPpzia.js";import{e as S}from"../chunks/BZiHL9L3.js";import{I as it}from"../chunks/d1ceLqrJ.js";import{W as st}from"../chunks/CWdSRFlF.js";import{C as lt}from"../chunks/mwBQAfJV.js";import{w as G}from"../chunks/DmHFwzWx.js";import{t as I}from"../chunks/CBJzOE8U.js";var dt=B('

Loading organization...

'),ct=B('

'),ut=B(" ",1),ft=B(' ',1);function Mt(pe,ve){qe(ve,!1);const[ye,he]=Xe(),R=()=>Ye(et,"$page",ye),w=l();let a=l(null),c=l([]),p=l([]),F=l(!0),O=l(""),D=l(!1),P=l(!1),E=l(!1),T=l(!1),u=l(null),M=null,b=l();async function V(){if(e(w))try{o(F,!0),o(O,"");const[t,n,r]=await Promise.all([_.getOrganization(e(w)),_.listOrganizationPools(e(w)).catch(()=>[]),_.listOrganizationInstances(e(w)).catch(()=>[])]);o(a,t),o(c,n),o(p,r)}catch(t){o(O,S(t))}finally{o(F,!1)}}function _e(t,n){const{events:r}=t;return{...n,events:r}}async function be(t){if(e(a))try{await _.updateOrganization(e(a).id,t),await V(),I.success("Organization Updated",`Organization ${e(a).name} has been updated successfully.`),o(D,!1)}catch(n){throw n}}async function ze(){if(e(a)){try{await _.deleteOrganization(e(a).id),fe(A("/organizations"))}catch(t){const n=S(t);I.error("Delete Failed",n)}o(P,!1)}}async function $e(){if(e(u))try{await _.deleteInstance(e(u).name),I.success("Instance Deleted",`Instance ${e(u).name} has been deleted successfully.`),o(E,!1),o(u,null)}catch(t){const n=S(t);I.error("Delete Failed",n),o(E,!1),o(u,null)}}function xe(t){o(u,t),o(E,!0)}function Ie(){o(T,!0)}async function we(t){try{if(!e(a))return;await _.createOrganizationPool(e(a).id,t.detail),I.success("Pool Created",`Pool has been created successfully for organization ${e(a).name}.`),o(T,!1)}catch(n){const r=S(n);I.error("Pool Creation Failed",r)}}function J(){e(b)&&Qe(b,e(b).scrollTop=e(b).scrollHeight)}function Ee(t){if(t.operation==="update"){const n=t.payload;if(e(a)&&n.id===e(a).id){const r=e(a).events?.length||0,s=n.events?.length||0;o(a,_e(e(a),n)),s>r&&setTimeout(()=>{J()},100)}}else if(t.operation==="delete"){const n=t.payload.id||t.payload;e(a)&&e(a).id===n&&fe(A("/organizations"))}}function Oe(t){if(!e(a))return;const n=t.payload;if(n.org_id===e(a).id){if(t.operation==="create")o(c,[...e(c),n]);else if(t.operation==="update")o(c,e(c).map(r=>r.id===n.id?n:r));else if(t.operation==="delete"){const r=n.id||n;o(c,e(c).filter(s=>s.id!==r))}}}function De(t){if(!e(a)||!e(c))return;const n=t.payload;if(e(c).some(s=>s.id===n.pool_id)){if(t.operation==="create")o(p,[...e(p),n]);else if(t.operation==="update")o(p,e(p).map(s=>s.id===n.id?n:s));else if(t.operation==="delete"){const s=n.id||n;o(p,e(p).filter(W=>W.id!==s))}}}He(()=>{V().then(()=>{e(a)?.events?.length&&setTimeout(()=>{J()},100)});const t=G.subscribeToEntity("organization",["update","delete"],Ee),n=G.subscribeToEntity("pool",["create","update","delete"],Oe),r=G.subscribeToEntity("instance",["create","update","delete"],De);M=()=>{t(),n(),r()}}),je(()=>{M&&(M(),M=null)}),Ge(()=>R(),()=>{o(w,R().params.id)}),Re(),We();var K=ft();Ve(t=>{j(()=>Ke.title=`${e(a),i(()=>e(a)?`${e(a).name} - Organization Details`:"Organization Details")??""} - GARM`)});var U=C(K),L=f(U),Q=f(L),N=f(Q),Pe=f(N);m(N);var X=d(N,2),Y=f(X),Z=d(f(Y),2),Te=f(Z,!0);m(Z),m(Y),m(X),m(Q),m(L);var Me=d(L,2);{var ke=t=>{var n=dt();x(t,n)},Ce=t=>{var n=ue(),r=C(n);{var s=z=>{var $=ct(),k=f($),q=f(k,!0);m(k),m($),j(()=>ce(q,e(O))),x(z,$)},W=z=>{var $=ue(),k=C($);{var q=H=>{var ne=ut(),oe=C(ne);{let v=g(()=>(e(a),i(()=>e(a).name||"Organization"))),y=g(()=>(e(a),i(()=>e(a).endpoint?.name))),Ne=g(()=>(de(ge),e(a),i(()=>ge(e(a).endpoint?.endpoint_type||"unknown"))));rt(oe,{get title(){return e(v)},get subtitle(){return`Endpoint: ${e(y)??""}`},get forgeIcon(){return e(Ne)},onEdit:()=>o(D,!0),onDelete:()=>o(P,!0)})}var re=d(oe,2);at(re,{get entity(){return e(a)},entityType:"organization"});var ie=d(re,2);{let v=g(()=>(e(a),i(()=>e(a).id||""))),y=g(()=>(e(a),i(()=>e(a).name||"")));st(ie,{entityType:"organization",get entityId(){return e(v)},get entityName(){return e(y)}})}var se=d(ie,2);{let v=g(()=>(e(a),i(()=>e(a).id||""))),y=g(()=>(e(a),i(()=>e(a).name||"")));nt(se,{get pools(){return e(c)},entityType:"organization",get entityId(){return e(v)},get entityName(){return e(y)},$$events:{addPool:Ie}})}var le=d(se,2);it(le,{get instances(){return e(p)},entityType:"organization",onDeleteInstance:xe});var Le=d(le,2);{let v=g(()=>(e(a),i(()=>e(a)?.events)));ot(Le,{get events(){return e(v)},get eventsContainer(){return e(b)},set eventsContainer(y){o(b,y)},$$legacy:!0})}x(H,ne)};h(k,H=>{e(a)&&H(q)},!0)}x(z,$)};h(r,z=>{e(O)?z(s):z(W,!1)},!0)}x(t,n)};h(Me,t=>{e(F)?t(ke):t(Ce,!1)})}m(U);var ee=d(U,2);{var Ae=t=>{tt(t,{get entity(){return e(a)},entityType:"organization",$$events:{close:()=>o(D,!1),submit:n=>be(n.detail)}})};h(ee,t=>{e(D)&&e(a)&&t(Ae)})}var te=d(ee,2);{var Se=t=>{me(t,{title:"Delete Organization",message:"Are you sure you want to delete this organization? This action cannot be undone and will remove all associated pools and instances.",get itemName(){return e(a),i(()=>e(a).name)},$$events:{close:()=>o(P,!1),confirm:ze}})};h(te,t=>{e(P)&&e(a)&&t(Se)})}var ae=d(te,2);{var Be=t=>{me(t,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(u),i(()=>e(u).name)},$$events:{close:()=>{o(E,!1),o(u,null)},confirm:$e}})};h(ae,t=>{e(E)&&e(u)&&t(Be)})}var Fe=d(ae,2);{var Ue=t=>{{let n=g(()=>(e(a),i(()=>e(a).id||"")));lt(t,{initialEntityType:"organization",get initialEntityId(){return e(n)},$$events:{close:()=>o(T,!1),submit:we}})}};h(Fe,t=>{e(T)&&e(a)&&t(Ue)})}j(t=>{Ze(Pe,"href",t),ce(Te,(e(a),i(()=>e(a)?e(a).name:"Loading...")))},[()=>(de(A),i(()=>A("/organizations")))]),x(pe,K),Je(),he()}export{Mt as component}; +import"../chunks/DsnmJJEf.js";import{i as We}from"../chunks/TJn6xDN9.js";import{p as qe,o as He,B as je,l as Ge,h as Re,f as B,j as Ve,a as C,t as j,b as x,c as Je,u as i,q as de,e as ce,g as e,m as l,d as f,s as d,k as o,$ as Ke,r as m,w as Qe,A as ue,v as g}from"../chunks/DniTuB_0.js";import{i as h,s as Xe,a as Ye}from"../chunks/DbNhg6mG.js";import{d as A,c as Ze,g as _}from"../chunks/DSfKzFV1.js";import{p as et}from"../chunks/Dt7jKcR8.js";import{g as fe}from"../chunks/kW9-6GPQ.js";import{U as tt}from"../chunks/KogAzbD4.js";import{D as me}from"../chunks/z19xmJI9.js";import{E as at,P as nt,a as ot}from"../chunks/BehbwORU.js";import{D as rt}from"../chunks/DsCgpFQt.js";import{g as ge}from"../chunks/BC4TpgBU.js";import{e as S}from"../chunks/BZiHL9L3.js";import{I as it}from"../chunks/B3d8BqkX.js";import{W as st}from"../chunks/Cv3bKZ1_.js";import{C as lt}from"../chunks/CMD3IPWU.js";import{w as G}from"../chunks/DmHFwzWx.js";import{t as I}from"../chunks/CBJzOE8U.js";var dt=B('

Loading organization...

'),ct=B('

'),ut=B(" ",1),ft=B(' ',1);function Mt(pe,ve){qe(ve,!1);const[ye,he]=Xe(),R=()=>Ye(et,"$page",ye),w=l();let a=l(null),c=l([]),p=l([]),F=l(!0),O=l(""),D=l(!1),P=l(!1),E=l(!1),T=l(!1),u=l(null),M=null,b=l();async function V(){if(e(w))try{o(F,!0),o(O,"");const[t,n,r]=await Promise.all([_.getOrganization(e(w)),_.listOrganizationPools(e(w)).catch(()=>[]),_.listOrganizationInstances(e(w)).catch(()=>[])]);o(a,t),o(c,n),o(p,r)}catch(t){o(O,S(t))}finally{o(F,!1)}}function _e(t,n){const{events:r}=t;return{...n,events:r}}async function be(t){if(e(a))try{await _.updateOrganization(e(a).id,t),await V(),I.success("Organization Updated",`Organization ${e(a).name} has been updated successfully.`),o(D,!1)}catch(n){throw n}}async function ze(){if(e(a)){try{await _.deleteOrganization(e(a).id),fe(A("/organizations"))}catch(t){const n=S(t);I.error("Delete Failed",n)}o(P,!1)}}async function $e(){if(e(u))try{await _.deleteInstance(e(u).name),I.success("Instance Deleted",`Instance ${e(u).name} has been deleted successfully.`),o(E,!1),o(u,null)}catch(t){const n=S(t);I.error("Delete Failed",n),o(E,!1),o(u,null)}}function xe(t){o(u,t),o(E,!0)}function Ie(){o(T,!0)}async function we(t){try{if(!e(a))return;await _.createOrganizationPool(e(a).id,t.detail),I.success("Pool Created",`Pool has been created successfully for organization ${e(a).name}.`),o(T,!1)}catch(n){const r=S(n);I.error("Pool Creation Failed",r)}}function J(){e(b)&&Qe(b,e(b).scrollTop=e(b).scrollHeight)}function Ee(t){if(t.operation==="update"){const n=t.payload;if(e(a)&&n.id===e(a).id){const r=e(a).events?.length||0,s=n.events?.length||0;o(a,_e(e(a),n)),s>r&&setTimeout(()=>{J()},100)}}else if(t.operation==="delete"){const n=t.payload.id||t.payload;e(a)&&e(a).id===n&&fe(A("/organizations"))}}function Oe(t){if(!e(a))return;const n=t.payload;if(n.org_id===e(a).id){if(t.operation==="create")o(c,[...e(c),n]);else if(t.operation==="update")o(c,e(c).map(r=>r.id===n.id?n:r));else if(t.operation==="delete"){const r=n.id||n;o(c,e(c).filter(s=>s.id!==r))}}}function De(t){if(!e(a)||!e(c))return;const n=t.payload;if(e(c).some(s=>s.id===n.pool_id)){if(t.operation==="create")o(p,[...e(p),n]);else if(t.operation==="update")o(p,e(p).map(s=>s.id===n.id?n:s));else if(t.operation==="delete"){const s=n.id||n;o(p,e(p).filter(W=>W.id!==s))}}}He(()=>{V().then(()=>{e(a)?.events?.length&&setTimeout(()=>{J()},100)});const t=G.subscribeToEntity("organization",["update","delete"],Ee),n=G.subscribeToEntity("pool",["create","update","delete"],Oe),r=G.subscribeToEntity("instance",["create","update","delete"],De);M=()=>{t(),n(),r()}}),je(()=>{M&&(M(),M=null)}),Ge(()=>R(),()=>{o(w,R().params.id)}),Re(),We();var K=ft();Ve(t=>{j(()=>Ke.title=`${e(a),i(()=>e(a)?`${e(a).name} - Organization Details`:"Organization Details")??""} - GARM`)});var U=C(K),L=f(U),Q=f(L),N=f(Q),Pe=f(N);m(N);var X=d(N,2),Y=f(X),Z=d(f(Y),2),Te=f(Z,!0);m(Z),m(Y),m(X),m(Q),m(L);var Me=d(L,2);{var ke=t=>{var n=dt();x(t,n)},Ce=t=>{var n=ue(),r=C(n);{var s=z=>{var $=ct(),k=f($),q=f(k,!0);m(k),m($),j(()=>ce(q,e(O))),x(z,$)},W=z=>{var $=ue(),k=C($);{var q=H=>{var ne=ut(),oe=C(ne);{let v=g(()=>(e(a),i(()=>e(a).name||"Organization"))),y=g(()=>(e(a),i(()=>e(a).endpoint?.name))),Ne=g(()=>(de(ge),e(a),i(()=>ge(e(a).endpoint?.endpoint_type||"unknown"))));rt(oe,{get title(){return e(v)},get subtitle(){return`Endpoint: ${e(y)??""}`},get forgeIcon(){return e(Ne)},onEdit:()=>o(D,!0),onDelete:()=>o(P,!0)})}var re=d(oe,2);at(re,{get entity(){return e(a)},entityType:"organization"});var ie=d(re,2);{let v=g(()=>(e(a),i(()=>e(a).id||""))),y=g(()=>(e(a),i(()=>e(a).name||"")));st(ie,{entityType:"organization",get entityId(){return e(v)},get entityName(){return e(y)}})}var se=d(ie,2);{let v=g(()=>(e(a),i(()=>e(a).id||""))),y=g(()=>(e(a),i(()=>e(a).name||"")));nt(se,{get pools(){return e(c)},entityType:"organization",get entityId(){return e(v)},get entityName(){return e(y)},$$events:{addPool:Ie}})}var le=d(se,2);it(le,{get instances(){return e(p)},entityType:"organization",onDeleteInstance:xe});var Le=d(le,2);{let v=g(()=>(e(a),i(()=>e(a)?.events)));ot(Le,{get events(){return e(v)},get eventsContainer(){return e(b)},set eventsContainer(y){o(b,y)},$$legacy:!0})}x(H,ne)};h(k,H=>{e(a)&&H(q)},!0)}x(z,$)};h(r,z=>{e(O)?z(s):z(W,!1)},!0)}x(t,n)};h(Me,t=>{e(F)?t(ke):t(Ce,!1)})}m(U);var ee=d(U,2);{var Ae=t=>{tt(t,{get entity(){return e(a)},entityType:"organization",$$events:{close:()=>o(D,!1),submit:n=>be(n.detail)}})};h(ee,t=>{e(D)&&e(a)&&t(Ae)})}var te=d(ee,2);{var Se=t=>{me(t,{title:"Delete Organization",message:"Are you sure you want to delete this organization? This action cannot be undone and will remove all associated pools and instances.",get itemName(){return e(a),i(()=>e(a).name)},$$events:{close:()=>o(P,!1),confirm:ze}})};h(te,t=>{e(P)&&e(a)&&t(Se)})}var ae=d(te,2);{var Be=t=>{me(t,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(u),i(()=>e(u).name)},$$events:{close:()=>{o(E,!1),o(u,null)},confirm:$e}})};h(ae,t=>{e(E)&&e(u)&&t(Be)})}var Fe=d(ae,2);{var Ue=t=>{{let n=g(()=>(e(a),i(()=>e(a).id||"")));lt(t,{initialEntityType:"organization",get initialEntityId(){return e(n)},$$events:{close:()=>o(T,!1),submit:we}})}};h(Fe,t=>{e(T)&&e(a)&&t(Ue)})}j(t=>{Ze(Pe,"href",t),ce(Te,(e(a),i(()=>e(a)?e(a).name:"Loading...")))},[()=>(de(A),i(()=>A("/organizations")))]),x(pe,K),Je(),he()}export{Mt as component}; diff --git a/webapp/assets/_app/immutable/nodes/13.I_oWpCo4.js b/webapp/assets/_app/immutable/nodes/15.B9OmKcrm.js similarity index 88% rename from webapp/assets/_app/immutable/nodes/13.I_oWpCo4.js rename to webapp/assets/_app/immutable/nodes/15.B9OmKcrm.js index ce341306..1e5d9163 100644 --- a/webapp/assets/_app/immutable/nodes/13.I_oWpCo4.js +++ b/webapp/assets/_app/immutable/nodes/15.B9OmKcrm.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as ye}from"../chunks/TJn6xDN9.js";import{p as he,o as Pe,l as p,h as ve,f as J,j as Ce,a as _e,b as V,c as $e,g as t,m as r,$ as be,d as q,v as w,u as j,s as y,k as o,r as H,q as Me}from"../chunks/DniTuB_0.js";import{i as _,s as Te,a as De}from"../chunks/DbNhg6mG.js";import{g as k}from"../chunks/BZ2rxtTc.js";import{P as Ee}from"../chunks/CuYqFPEA.js";import{C as we}from"../chunks/mwBQAfJV.js";import{U as ke}from"../chunks/Cpl8oLXd.js";import{D as Ae}from"../chunks/DGVAzkoE.js";import{M as Ie}from"../chunks/CHjY0Kaf.js";import{D as Se,G as A,A as xe,L as Fe}from"../chunks/CKaB5fL4.js";import{e as Ue,a as z}from"../chunks/DKJ_c8yL.js";import{t as u}from"../chunks/CBJzOE8U.js";import{e as $,h as Le}from"../chunks/CTcPpzia.js";import{e as b}from"../chunks/BZiHL9L3.js";import{E as Ne}from"../chunks/Dh8uHEF5.js";import{E as Re}from"../chunks/Bz3T1MM4.js";import{S as Ge}from"../chunks/C1GM4Goa.js";import{P as Ve}from"../chunks/DSRJryIz.js";import"../chunks/CGAsTaG2.js";const B={};var qe=J('
'),je=J('
',1);function ct(K,O){he(O,!1);const[Q,W]=Te(),s=()=>De(Ue,"$eagerCache",Q),M=r(),c=r(),m=r(),I=r();let f=r([]),h=r(!0),S=r(""),P=r(""),n=r(1),d=r(25),v=r(!1),C=r(!1),g=r(!1),a=r(null),T=r(!1);async function X(e){try{u.success("Pool Created","Pool has been created successfully."),o(v,!1)}catch(l){const i=b(l);u.error("Pool Creation Failed",i)}}async function Y(e){if(t(a))try{await k.updatePool(t(a).id,e),o(C,!1),u.add({type:"success",title:"Pool Updated",message:`Pool ${t(a).id.slice(0,8)}... has been updated successfully.`}),o(a,null)}catch(l){const i=b(l);throw u.add({type:"error",title:"Update Failed",message:i}),l}}async function Z(){if(!t(a))return;const e=`Pool ${t(a).id.slice(0,8)}...`;try{await k.deletePool(t(a).id),o(g,!1),u.add({type:"success",title:"Pool Deleted",message:`${e} has been deleted successfully.`}),o(a,null)}catch(l){const i=b(l);u.add({type:"error",title:"Delete Failed",message:i})}o(g,!1),o(a,null)}function ee(){o(v,!0)}async function x(e){try{o(T,!0);const l=await k.getPool(e.id);o(a,l),o(C,!0)}catch(l){const i=b(l);u.error("Failed to Load Pool Details",i)}finally{o(T,!1)}}function F(e){o(a,e),o(g,!0)}Pe(async()=>{try{o(h,!0);const e=await z.getPools();e&&Array.isArray(e)&&o(f,e)}catch(e){B?.VITEST||console.error("Failed to load pools:",e),o(S,e instanceof Error?e.message:"Failed to load pools")}finally{o(h,!1)}});async function te(){try{await z.retryResource("pools")}catch(e){B?.VITEST||console.error("Retry failed:",e)}}const oe=[{key:"id",title:"ID",flexible:!0,cellComponent:Ne,cellProps:{entityType:"pool",showId:!0,fontMono:!0}},{key:"image",title:"Image",flexible:!0,cellComponent:A,cellProps:{field:"image",type:"code",showTitle:!0}},{key:"provider",title:"Provider",cellComponent:A,cellProps:{field:"provider_name"}},{key:"flavor",title:"Flavor",cellComponent:A,cellProps:{field:"flavor"}},{key:"entity",title:"Entity",cellComponent:Ve},{key:"endpoint",title:"Endpoint",cellComponent:Re},{key:"status",title:"Status",cellComponent:Ge,cellProps:{statusType:"enabled"}},{key:"actions",title:"Actions",align:"right",cellComponent:xe}],ae={entityType:"pool",primaryText:{field:"id",isClickable:!0,href:"/pools/{id}",useId:!0,isMonospace:!0},secondaryText:{field:"entity_name",computedValue:e=>$(e,s())},badges:[{type:"custom",value:e=>({variant:e.enabled?"success":"error",text:e.enabled?"Enabled":"Disabled"})}],actions:[{type:"edit",handler:e=>x(e)},{type:"delete",handler:e=>F(e)}]};function le(e){o(P,e.detail.term),o(n,1)}function re(e){o(n,e.detail.page)}function se(e){o(d,e.detail.perPage),o(n,1)}function ne(e){x(e.detail.item)}function ie(e){F(e.detail.item)}p(()=>(t(f),s()),()=>{(!t(f).length||s().loaded.pools)&&o(f,s().pools)}),p(()=>s(),()=>{o(h,s().loading.pools)}),p(()=>s(),()=>{o(M,s().errorMessages.pools)}),p(()=>(t(f),t(P),s()),()=>{o(c,Le(t(f),t(P),e=>$(e,s())))}),p(()=>(t(c),t(d)),()=>{o(m,Math.ceil(t(c).length/t(d)))}),p(()=>(t(n),t(m)),()=>{t(n)>t(m)&&t(m)>0&&o(n,t(m))}),p(()=>(t(c),t(n),t(d)),()=>{o(I,t(c).slice((t(n)-1)*t(d),t(n)*t(d)))}),ve(),ye();var U=je();Ce(e=>{be.title="Pools - GARM"});var D=_e(U),L=q(D);Ee(L,{title:"Pools",description:"Manage runner pools across all entities",actionLabel:"Add Pool",$$events:{action:ee}});var ce=y(L,2);{let e=w(()=>t(M)||t(S)),l=w(()=>!!t(M));Se(ce,{get columns(){return oe},get data(){return t(I)},get loading(){return t(h)},get error(){return t(e)},get searchTerm(){return t(P)},searchPlaceholder:"Search by entity name...",get currentPage(){return t(n)},get perPage(){return t(d)},get totalPages(){return t(m)},get totalItems(){return t(c),j(()=>t(c).length)},itemName:"pools",emptyIconType:"cog",get showRetry(){return t(l)},get mobileCardConfig(){return ae},$$events:{search:le,pageChange:re,perPageChange:se,retry:te,edit:ne,delete:ie}})}H(D);var N=y(D,2);{var de=e=>{we(e,{$$events:{close:()=>o(v,!1),submit:X}})};_(N,e=>{t(v)&&e(de)})}var R=y(N,2);{var pe=e=>{ke(e,{get pool(){return t(a)},$$events:{close:()=>{o(C,!1),o(a,null)},submit:l=>Y(l.detail)}})};_(R,e=>{t(C)&&t(a)&&e(pe)})}var G=y(R,2);{var ue=e=>{{let l=w(()=>(t(a),Me($),s(),j(()=>`Pool ${t(a).id.slice(0,8)}... (${$(t(a),s())})`)));Ae(e,{title:"Delete Pool",message:"Are you sure you want to delete this pool? This action cannot be undone and will remove all associated runners.",get itemName(){return t(l)},$$events:{close:()=>{o(g,!1),o(a,null)},confirm:Z}})}};_(G,e=>{t(g)&&t(a)&&e(ue)})}var me=y(G,2);{var fe=e=>{Ie(e,{$$events:{close:()=>{}},children:(l,i)=>{var E=qe(),ge=q(E);Fe(ge,{message:"Loading pool details..."}),H(E),V(l,E)},$$slots:{default:!0}})};_(me,e=>{t(T)&&e(fe)})}V(K,U),$e(),W()}export{ct as component}; +import"../chunks/DsnmJJEf.js";import{i as ye}from"../chunks/TJn6xDN9.js";import{p as he,o as Pe,l as p,h as ve,f as J,j as Ce,a as _e,b as V,c as $e,g as t,m as r,$ as be,d as q,v as w,u as j,s as y,k as o,r as H,q as Me}from"../chunks/DniTuB_0.js";import{i as _,s as Te,a as De}from"../chunks/DbNhg6mG.js";import{g as k}from"../chunks/DSfKzFV1.js";import{P as Ee}from"../chunks/RtJp4Ifn.js";import{C as we}from"../chunks/CMD3IPWU.js";import{U as ke}from"../chunks/fxFZ0i0Q.js";import{D as Ae}from"../chunks/z19xmJI9.js";import{M as Ie}from"../chunks/l9U2NoST.js";import{D as Se,G as A,A as xe,L as Fe}from"../chunks/BlJ06z1t.js";import{e as Ue,a as z}from"../chunks/BE9PkXKz.js";import{t as u}from"../chunks/CBJzOE8U.js";import{e as $,h as Le}from"../chunks/BC4TpgBU.js";import{e as b}from"../chunks/BZiHL9L3.js";import{E as Ne}from"../chunks/30NlHgQ_.js";import{E as Re}from"../chunks/CE0C-N9m.js";import{S as Ge}from"../chunks/BsX_CrDw.js";import{P as Ve}from"../chunks/DzXPCUia.js";import"../chunks/CRDKDqj5.js";const B={};var qe=J('
'),je=J('
',1);function ct(K,O){he(O,!1);const[Q,W]=Te(),s=()=>De(Ue,"$eagerCache",Q),M=r(),c=r(),m=r(),I=r();let f=r([]),h=r(!0),S=r(""),P=r(""),n=r(1),d=r(25),v=r(!1),C=r(!1),g=r(!1),a=r(null),T=r(!1);async function X(e){try{u.success("Pool Created","Pool has been created successfully."),o(v,!1)}catch(l){const i=b(l);u.error("Pool Creation Failed",i)}}async function Y(e){if(t(a))try{await k.updatePool(t(a).id,e),o(C,!1),u.add({type:"success",title:"Pool Updated",message:`Pool ${t(a).id.slice(0,8)}... has been updated successfully.`}),o(a,null)}catch(l){const i=b(l);throw u.add({type:"error",title:"Update Failed",message:i}),l}}async function Z(){if(!t(a))return;const e=`Pool ${t(a).id.slice(0,8)}...`;try{await k.deletePool(t(a).id),o(g,!1),u.add({type:"success",title:"Pool Deleted",message:`${e} has been deleted successfully.`}),o(a,null)}catch(l){const i=b(l);u.add({type:"error",title:"Delete Failed",message:i})}o(g,!1),o(a,null)}function ee(){o(v,!0)}async function x(e){try{o(T,!0);const l=await k.getPool(e.id);o(a,l),o(C,!0)}catch(l){const i=b(l);u.error("Failed to Load Pool Details",i)}finally{o(T,!1)}}function F(e){o(a,e),o(g,!0)}Pe(async()=>{try{o(h,!0);const e=await z.getPools();e&&Array.isArray(e)&&o(f,e)}catch(e){B?.VITEST||console.error("Failed to load pools:",e),o(S,e instanceof Error?e.message:"Failed to load pools")}finally{o(h,!1)}});async function te(){try{await z.retryResource("pools")}catch(e){B?.VITEST||console.error("Retry failed:",e)}}const oe=[{key:"id",title:"ID",flexible:!0,cellComponent:Ne,cellProps:{entityType:"pool",showId:!0,fontMono:!0}},{key:"image",title:"Image",flexible:!0,cellComponent:A,cellProps:{field:"image",type:"code",showTitle:!0}},{key:"provider",title:"Provider",cellComponent:A,cellProps:{field:"provider_name"}},{key:"flavor",title:"Flavor",cellComponent:A,cellProps:{field:"flavor"}},{key:"entity",title:"Entity",cellComponent:Ve},{key:"endpoint",title:"Endpoint",cellComponent:Re},{key:"status",title:"Status",cellComponent:Ge,cellProps:{statusType:"enabled"}},{key:"actions",title:"Actions",align:"right",cellComponent:xe}],ae={entityType:"pool",primaryText:{field:"id",isClickable:!0,href:"/pools/{id}",useId:!0,isMonospace:!0},secondaryText:{field:"entity_name",computedValue:e=>$(e,s())},badges:[{type:"custom",value:e=>({variant:e.enabled?"success":"error",text:e.enabled?"Enabled":"Disabled"})}],actions:[{type:"edit",handler:e=>x(e)},{type:"delete",handler:e=>F(e)}]};function le(e){o(P,e.detail.term),o(n,1)}function re(e){o(n,e.detail.page)}function se(e){o(d,e.detail.perPage),o(n,1)}function ne(e){x(e.detail.item)}function ie(e){F(e.detail.item)}p(()=>(t(f),s()),()=>{(!t(f).length||s().loaded.pools)&&o(f,s().pools)}),p(()=>s(),()=>{o(h,s().loading.pools)}),p(()=>s(),()=>{o(M,s().errorMessages.pools)}),p(()=>(t(f),t(P),s()),()=>{o(c,Le(t(f),t(P),e=>$(e,s())))}),p(()=>(t(c),t(d)),()=>{o(m,Math.ceil(t(c).length/t(d)))}),p(()=>(t(n),t(m)),()=>{t(n)>t(m)&&t(m)>0&&o(n,t(m))}),p(()=>(t(c),t(n),t(d)),()=>{o(I,t(c).slice((t(n)-1)*t(d),t(n)*t(d)))}),ve(),ye();var U=je();Ce(e=>{be.title="Pools - GARM"});var D=_e(U),L=q(D);Ee(L,{title:"Pools",description:"Manage runner pools across all entities",actionLabel:"Add Pool",$$events:{action:ee}});var ce=y(L,2);{let e=w(()=>t(M)||t(S)),l=w(()=>!!t(M));Se(ce,{get columns(){return oe},get data(){return t(I)},get loading(){return t(h)},get error(){return t(e)},get searchTerm(){return t(P)},searchPlaceholder:"Search by entity name...",get currentPage(){return t(n)},get perPage(){return t(d)},get totalPages(){return t(m)},get totalItems(){return t(c),j(()=>t(c).length)},itemName:"pools",emptyIconType:"cog",get showRetry(){return t(l)},get mobileCardConfig(){return ae},$$events:{search:le,pageChange:re,perPageChange:se,retry:te,edit:ne,delete:ie}})}H(D);var N=y(D,2);{var de=e=>{we(e,{$$events:{close:()=>o(v,!1),submit:X}})};_(N,e=>{t(v)&&e(de)})}var R=y(N,2);{var pe=e=>{ke(e,{get pool(){return t(a)},$$events:{close:()=>{o(C,!1),o(a,null)},submit:l=>Y(l.detail)}})};_(R,e=>{t(C)&&t(a)&&e(pe)})}var G=y(R,2);{var ue=e=>{{let l=w(()=>(t(a),Me($),s(),j(()=>`Pool ${t(a).id.slice(0,8)}... (${$(t(a),s())})`)));Ae(e,{title:"Delete Pool",message:"Are you sure you want to delete this pool? This action cannot be undone and will remove all associated runners.",get itemName(){return t(l)},$$events:{close:()=>{o(g,!1),o(a,null)},confirm:Z}})}};_(G,e=>{t(g)&&t(a)&&e(ue)})}var me=y(G,2);{var fe=e=>{Ie(e,{$$events:{close:()=>{}},children:(l,i)=>{var E=qe(),ge=q(E);Fe(ge,{message:"Loading pool details..."}),H(E),V(l,E)},$$slots:{default:!0}})};_(me,e=>{t(T)&&e(fe)})}V(K,U),$e(),W()}export{ct as component}; diff --git a/webapp/assets/_app/immutable/nodes/14.Bwt3ck_f.js b/webapp/assets/_app/immutable/nodes/16.D2pagW-N.js similarity index 97% rename from webapp/assets/_app/immutable/nodes/14.Bwt3ck_f.js rename to webapp/assets/_app/immutable/nodes/16.D2pagW-N.js index 1c5752aa..c3c42867 100644 --- a/webapp/assets/_app/immutable/nodes/14.Bwt3ck_f.js +++ b/webapp/assets/_app/immutable/nodes/16.D2pagW-N.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as ze}from"../chunks/TJn6xDN9.js";import{p as He,o as Ve,B as We,l as Ke,h as Qe,f as _,j as Xe,a as F,t as b,b as u,c as Ye,u as i,q as g,e as n,g as t,m as k,d as r,s,k as v,$ as Ze,r as a,w as M,A as Qt,v as E}from"../chunks/DniTuB_0.js";import{i as f}from"../chunks/DbNhg6mG.js";import{e as ta,i as ea}from"../chunks/Ck5PkeSc.js";import{d as $,c as gt,g as C,s as aa}from"../chunks/BZ2rxtTc.js";import{p as Xt}from"../chunks/Hb0uuDRx.js";import{g as Yt}from"../chunks/HMJxCnAR.js";import{U as ra}from"../chunks/Cpl8oLXd.js";import{D as Zt}from"../chunks/DGVAzkoE.js";import{I as da}from"../chunks/d1ceLqrJ.js";import{D as sa}from"../chunks/J4QHiesY.js";import{w as te}from"../chunks/DmHFwzWx.js";import{t as T}from"../chunks/CBJzOE8U.js";import{e as D,i as L,j as ee,b as O,g as ae}from"../chunks/CTcPpzia.js";import{e as G}from"../chunks/BZiHL9L3.js";var ia=_('

Loading pool...

'),oa=_('

'),la=_('
Runner Install Template
'),na=_('
GitHub Runner Group
'),va=_(' '),ma=_('
Tags
'),ca=_('

Extra Specifications

 
'),xa=_('

Basic Information

Pool ID
Provider
Image
Flavor
Status
Entity
Created At
Updated At

Configuration

Max Runners
Min Idle Runners
Bootstrap Timeout
Priority
Runner Prefix
OS Type / Architecture
',1),ua=_(' ',1);function Aa(re,de){He(de,!1);const J=k();let e=k(null),j=k(!0),A=k(""),U=k(!1),S=k(!1),B=k(!1),p=k(null),N=null;async function se(){if(t(J))try{v(j,!0),v(A,""),v(e,await C.getPool(t(J))),t(e).instances||M(e,t(e).instances=[])}catch(d){v(A,G(d))}finally{v(j,!1)}}async function ie(d){if(t(e))try{const o=await C.updatePool(t(e).id,d);v(e,o),v(U,!1),T.success("Pool Updated",`Pool ${t(e).id} has been updated successfully.`)}catch(o){const y=G(o);T.error("Update Failed",y)}}async function oe(){if(t(e)){try{await C.deletePool(t(e).id),Yt($("/pools"))}catch(d){const o=G(d);T.error("Delete Failed",o)}v(S,!1)}}async function le(){if(t(p)){try{await C.deleteInstance(t(p).name),T.success("Instance Deleted",`Instance ${t(p).name} has been deleted successfully.`)}catch(d){const o=G(d);T.error("Delete Failed",o)}v(B,!1),v(p,null)}}function ne(d){v(p,d),v(B,!0)}function ve(d){if(!d)return"{}";try{if(typeof d=="string"){const o=JSON.parse(d);return JSON.stringify(o,null,2)}return JSON.stringify(d,null,2)}catch{return d.toString()}}function me(d){if(d.operation==="update"){const o=d.payload;t(e)&&o.id===t(e).id&&v(e,o)}else if(d.operation==="delete"){const o=d.payload.id||d.payload;t(e)&&t(e).id===o&&Yt($("/pools"))}}function ce(d){if(!t(e))return;const o=d.payload;if(o.pool_id===t(e).id){if(t(e).instances||M(e,t(e).instances=[]),d.operation==="create")M(e,t(e).instances=[...t(e).instances,o]);else if(d.operation==="update")M(e,t(e).instances=t(e).instances.map(y=>y.id===o.id?o:y));else if(d.operation==="delete"){const y=o.id||o;M(e,t(e).instances=t(e).instances.filter(V=>V.id!==y))}v(e,t(e))}}Ve(()=>{se();const d=te.subscribeToEntity("pool",["update","delete"],me),o=te.subscribeToEntity("instance",["create","update","delete"],ce);N=()=>{d(),o()}}),We(()=>{N&&(N(),N=null)}),Ke(()=>Xt,()=>{v(J,Xt.params.id)}),Qe(),ze();var ft=ua();Xe(d=>{b(()=>Ze.title=`${t(e),i(()=>t(e)?`Pool ${t(e).id} - Pool Details`:"Pool Details")??""} - GARM`)});var q=F(ft),z=r(q),pt=r(z),H=r(pt),xe=r(H);a(H);var _t=s(H,2),yt=r(_t),ht=s(r(yt),2),ue=r(ht,!0);a(ht),a(yt),a(_t),a(pt),a(z);var ge=s(z,2);{var fe=d=>{var o=ia();u(d,o)},pe=d=>{var o=Qt(),y=F(o);{var V=I=>{var P=oa(),R=r(P),W=r(R,!0);a(R),a(P),b(()=>n(W,t(A))),u(I,P)},ke=I=>{var P=Qt(),R=F(P);{var W=K=>{var wt=xa(),It=F(wt);{let l=E(()=>(g(D),t(e),i(()=>D(t(e))))),m=E(()=>(g(L),t(e),i(()=>L(t(e))))),c=E(()=>(g(ae),t(e),i(()=>ae(t(e).endpoint?.endpoint_type||"unknown"))));sa(It,{get title(){return t(e),i(()=>t(e).id)},get subtitle(){return`Pool for ${t(l)??""} (${t(m)??""})`},get forgeIcon(){return t(c)},onEdit:()=>v(U,!0),onDelete:()=>v(S,!0)})}var Q=s(It,2),X=r(Q),Pt=r(X),$t=s(r(Pt),2),Y=r($t),Dt=s(r(Y),2),we=r(Dt,!0);a(Dt),a(Y);var Z=s(Y,2),Mt=s(r(Z),2),Ie=r(Mt,!0);a(Mt),a(Z);var tt=s(Z,2),Et=s(r(tt),2),Tt=r(Et),Pe=r(Tt,!0);a(Tt),a(Et),a(tt);var et=s(tt,2),At=s(r(et),2),$e=r(At,!0);a(At),a(et);var at=s(et,2),Ut=s(r(at),2),rt=r(Ut),De=r(rt,!0);a(rt),a(Ut),a(at);var dt=s(at,2),St=s(r(dt),2),Bt=r(St),st=r(Bt),Me=r(st,!0);a(st);var it=s(st,2),Ee=r(it,!0);a(it),a(Bt),a(St),a(dt);var ot=s(dt,2),Nt=s(r(ot),2),Te=r(Nt,!0);a(Nt),a(ot);var Rt=s(ot,2),Ft=s(r(Rt),2),Ae=r(Ft,!0);a(Ft),a(Rt),a($t),a(Pt),a(X);var Ct=s(X,2),Lt=r(Ct),Ot=s(r(Lt),2),lt=r(Ot),Gt=s(r(lt),2),Ue=r(Gt,!0);a(Gt),a(lt);var nt=s(lt,2),Jt=s(r(nt),2),Se=r(Jt,!0);a(Jt),a(nt);var vt=s(nt,2),jt=s(r(vt),2),Be=r(jt);a(jt),a(vt);var mt=s(vt,2),qt=s(r(mt),2),Ne=r(qt,!0);a(qt),a(mt);var ct=s(mt,2),zt=s(r(ct),2),Re=r(zt,!0);a(zt),a(ct);var xt=s(ct,2),Ht=s(r(xt),2),Fe=r(Ht);a(Ht),a(xt);var Vt=s(xt,2);{var Ce=l=>{var m=la(),c=s(r(m),2),x=r(c),w=r(x,!0);a(x),a(c),a(m),b(h=>{gt(x,"href",h),n(w,(t(e),i(()=>t(e).template_name)))},[()=>(g($),t(e),i(()=>$(`/templates/${t(e).template_id}`)))]),u(l,m)};f(Vt,l=>{t(e),i(()=>t(e).template_name)&&l(Ce)})}var Wt=s(Vt,2);{var Le=l=>{var m=na(),c=s(r(m),2),x=r(c,!0);a(c),a(m),b(()=>n(x,(t(e),i(()=>t(e)["github-runner-group"])))),u(l,m)};f(Wt,l=>{t(e),i(()=>t(e)["github-runner-group"])&&l(Le)})}var Oe=s(Wt,2);{var Ge=l=>{var m=ma(),c=s(r(m),2),x=r(c);ta(x,5,()=>(t(e),i(()=>t(e).tags)),ea,(w,h)=>{var ut=va(),qe=r(ut,!0);a(ut),b(()=>n(qe,(t(h),i(()=>typeof t(h)=="string"?t(h):t(h).name)))),u(w,ut)}),a(x),a(c),a(m),u(l,m)};f(Oe,l=>{t(e),i(()=>t(e).tags&&t(e).tags.length>0)&&l(Ge)})}a(Ot),a(Lt),a(Ct),a(Q);var Kt=s(Q,2);{var Je=l=>{var m=ca(),c=r(m),x=s(r(c),2),w=r(x,!0);a(x),a(c),a(m),b(h=>n(w,h),[()=>(t(e),i(()=>ve(t(e).extra_specs)))]),u(l,m)};f(Kt,l=>{t(e),i(()=>t(e).extra_specs)&&l(Je)})}var je=s(Kt,2);{let l=E(()=>(t(e),i(()=>t(e).instances||[])));da(je,{get instances(){return t(l)},entityType:"pool",onDeleteInstance:ne})}b((l,m,c,x,w)=>{n(we,(t(e),i(()=>t(e).id))),n(Ie,(t(e),i(()=>t(e).provider_name))),n(Pe,(t(e),i(()=>t(e).image))),n($e,(t(e),i(()=>t(e).flavor))),aa(rt,1,`inline-flex px-2 py-1 text-xs font-medium rounded-full ${t(e),i(()=>t(e).enabled?"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200":"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200")??""}`),n(De,(t(e),i(()=>t(e).enabled?"Enabled":"Disabled"))),n(Me,l),gt(it,"href",m),n(Ee,c),n(Te,x),n(Ae,w),n(Ue,(t(e),i(()=>t(e).max_runners))),n(Se,(t(e),i(()=>t(e).min_idle_runners))),n(Be,`${t(e),i(()=>t(e).runner_bootstrap_timeout)??""} minutes`),n(Ne,(t(e),i(()=>t(e).priority))),n(Re,(t(e),i(()=>t(e).runner_prefix||"garm"))),n(Fe,`${t(e),i(()=>t(e).os_type)??""} / ${t(e),i(()=>t(e).os_arch)??""}`)},[()=>(g(L),t(e),i(()=>L(t(e)))),()=>(g(ee),t(e),i(()=>ee(t(e)))),()=>(g(D),t(e),i(()=>D(t(e)))),()=>(g(O),t(e),i(()=>O(t(e).created_at||""))),()=>(g(O),t(e),i(()=>O(t(e).updated_at||"")))]),u(K,wt)};f(R,K=>{t(e)&&K(W)},!0)}u(I,P)};f(y,I=>{t(A)?I(V):I(ke,!1)},!0)}u(d,o)};f(ge,d=>{t(j)?d(fe):d(pe,!1)})}a(q);var bt=s(q,2);{var _e=d=>{ra(d,{get pool(){return t(e)},$$events:{close:()=>v(U,!1),submit:o=>ie(o.detail)}})};f(bt,d=>{t(U)&&t(e)&&d(_e)})}var kt=s(bt,2);{var ye=d=>{{let o=E(()=>(t(e),g(D),i(()=>`Pool ${t(e).id} (${D(t(e))})`)));Zt(d,{title:"Delete Pool",message:"Are you sure you want to delete this pool? This action cannot be undone and will remove all associated runners.",get itemName(){return t(o)},$$events:{close:()=>v(S,!1),confirm:oe}})}};f(kt,d=>{t(S)&&t(e)&&d(ye)})}var he=s(kt,2);{var be=d=>{Zt(d,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(p),i(()=>t(p).name)},$$events:{close:()=>{v(B,!1),v(p,null)},confirm:le}})};f(he,d=>{t(B)&&t(p)&&d(be)})}b(d=>{gt(xe,"href",d),n(ue,(t(e),i(()=>t(e)?t(e).id:"Loading...")))},[()=>(g($),i(()=>$("/pools")))]),u(re,ft),Ye()}export{Aa as component}; +import"../chunks/DsnmJJEf.js";import{i as ze}from"../chunks/TJn6xDN9.js";import{p as He,o as Ve,B as We,l as Ke,h as Qe,f as _,j as Xe,a as F,t as b,b as u,c as Ye,u as i,q as g,e as n,g as t,m as k,d as r,s,k as v,$ as Ze,r as a,w as M,A as Qt,v as E}from"../chunks/DniTuB_0.js";import{i as f}from"../chunks/DbNhg6mG.js";import{e as ta,i as ea}from"../chunks/Ck5PkeSc.js";import{d as $,c as gt,g as C,s as aa}from"../chunks/DSfKzFV1.js";import{p as Xt}from"../chunks/covROD4j.js";import{g as Yt}from"../chunks/kW9-6GPQ.js";import{U as ra}from"../chunks/fxFZ0i0Q.js";import{D as Zt}from"../chunks/z19xmJI9.js";import{I as da}from"../chunks/B3d8BqkX.js";import{D as sa}from"../chunks/DsCgpFQt.js";import{w as te}from"../chunks/DmHFwzWx.js";import{t as T}from"../chunks/CBJzOE8U.js";import{e as D,i as L,j as ee,b as O,g as ae}from"../chunks/BC4TpgBU.js";import{e as G}from"../chunks/BZiHL9L3.js";var ia=_('

Loading pool...

'),oa=_('

'),la=_('
Runner Install Template
'),na=_('
GitHub Runner Group
'),va=_(' '),ma=_('
Tags
'),ca=_('

Extra Specifications

 
'),xa=_('

Basic Information

Pool ID
Provider
Image
Flavor
Status
Entity
Created At
Updated At

Configuration

Max Runners
Min Idle Runners
Bootstrap Timeout
Priority
Runner Prefix
OS Type / Architecture
',1),ua=_(' ',1);function Aa(re,de){He(de,!1);const J=k();let e=k(null),j=k(!0),A=k(""),U=k(!1),S=k(!1),B=k(!1),p=k(null),N=null;async function se(){if(t(J))try{v(j,!0),v(A,""),v(e,await C.getPool(t(J))),t(e).instances||M(e,t(e).instances=[])}catch(d){v(A,G(d))}finally{v(j,!1)}}async function ie(d){if(t(e))try{const o=await C.updatePool(t(e).id,d);v(e,o),v(U,!1),T.success("Pool Updated",`Pool ${t(e).id} has been updated successfully.`)}catch(o){const y=G(o);T.error("Update Failed",y)}}async function oe(){if(t(e)){try{await C.deletePool(t(e).id),Yt($("/pools"))}catch(d){const o=G(d);T.error("Delete Failed",o)}v(S,!1)}}async function le(){if(t(p)){try{await C.deleteInstance(t(p).name),T.success("Instance Deleted",`Instance ${t(p).name} has been deleted successfully.`)}catch(d){const o=G(d);T.error("Delete Failed",o)}v(B,!1),v(p,null)}}function ne(d){v(p,d),v(B,!0)}function ve(d){if(!d)return"{}";try{if(typeof d=="string"){const o=JSON.parse(d);return JSON.stringify(o,null,2)}return JSON.stringify(d,null,2)}catch{return d.toString()}}function me(d){if(d.operation==="update"){const o=d.payload;t(e)&&o.id===t(e).id&&v(e,o)}else if(d.operation==="delete"){const o=d.payload.id||d.payload;t(e)&&t(e).id===o&&Yt($("/pools"))}}function ce(d){if(!t(e))return;const o=d.payload;if(o.pool_id===t(e).id){if(t(e).instances||M(e,t(e).instances=[]),d.operation==="create")M(e,t(e).instances=[...t(e).instances,o]);else if(d.operation==="update")M(e,t(e).instances=t(e).instances.map(y=>y.id===o.id?o:y));else if(d.operation==="delete"){const y=o.id||o;M(e,t(e).instances=t(e).instances.filter(V=>V.id!==y))}v(e,t(e))}}Ve(()=>{se();const d=te.subscribeToEntity("pool",["update","delete"],me),o=te.subscribeToEntity("instance",["create","update","delete"],ce);N=()=>{d(),o()}}),We(()=>{N&&(N(),N=null)}),Ke(()=>Xt,()=>{v(J,Xt.params.id)}),Qe(),ze();var ft=ua();Xe(d=>{b(()=>Ze.title=`${t(e),i(()=>t(e)?`Pool ${t(e).id} - Pool Details`:"Pool Details")??""} - GARM`)});var q=F(ft),z=r(q),pt=r(z),H=r(pt),xe=r(H);a(H);var _t=s(H,2),yt=r(_t),ht=s(r(yt),2),ue=r(ht,!0);a(ht),a(yt),a(_t),a(pt),a(z);var ge=s(z,2);{var fe=d=>{var o=ia();u(d,o)},pe=d=>{var o=Qt(),y=F(o);{var V=I=>{var P=oa(),R=r(P),W=r(R,!0);a(R),a(P),b(()=>n(W,t(A))),u(I,P)},ke=I=>{var P=Qt(),R=F(P);{var W=K=>{var wt=xa(),It=F(wt);{let l=E(()=>(g(D),t(e),i(()=>D(t(e))))),m=E(()=>(g(L),t(e),i(()=>L(t(e))))),c=E(()=>(g(ae),t(e),i(()=>ae(t(e).endpoint?.endpoint_type||"unknown"))));sa(It,{get title(){return t(e),i(()=>t(e).id)},get subtitle(){return`Pool for ${t(l)??""} (${t(m)??""})`},get forgeIcon(){return t(c)},onEdit:()=>v(U,!0),onDelete:()=>v(S,!0)})}var Q=s(It,2),X=r(Q),Pt=r(X),$t=s(r(Pt),2),Y=r($t),Dt=s(r(Y),2),we=r(Dt,!0);a(Dt),a(Y);var Z=s(Y,2),Mt=s(r(Z),2),Ie=r(Mt,!0);a(Mt),a(Z);var tt=s(Z,2),Et=s(r(tt),2),Tt=r(Et),Pe=r(Tt,!0);a(Tt),a(Et),a(tt);var et=s(tt,2),At=s(r(et),2),$e=r(At,!0);a(At),a(et);var at=s(et,2),Ut=s(r(at),2),rt=r(Ut),De=r(rt,!0);a(rt),a(Ut),a(at);var dt=s(at,2),St=s(r(dt),2),Bt=r(St),st=r(Bt),Me=r(st,!0);a(st);var it=s(st,2),Ee=r(it,!0);a(it),a(Bt),a(St),a(dt);var ot=s(dt,2),Nt=s(r(ot),2),Te=r(Nt,!0);a(Nt),a(ot);var Rt=s(ot,2),Ft=s(r(Rt),2),Ae=r(Ft,!0);a(Ft),a(Rt),a($t),a(Pt),a(X);var Ct=s(X,2),Lt=r(Ct),Ot=s(r(Lt),2),lt=r(Ot),Gt=s(r(lt),2),Ue=r(Gt,!0);a(Gt),a(lt);var nt=s(lt,2),Jt=s(r(nt),2),Se=r(Jt,!0);a(Jt),a(nt);var vt=s(nt,2),jt=s(r(vt),2),Be=r(jt);a(jt),a(vt);var mt=s(vt,2),qt=s(r(mt),2),Ne=r(qt,!0);a(qt),a(mt);var ct=s(mt,2),zt=s(r(ct),2),Re=r(zt,!0);a(zt),a(ct);var xt=s(ct,2),Ht=s(r(xt),2),Fe=r(Ht);a(Ht),a(xt);var Vt=s(xt,2);{var Ce=l=>{var m=la(),c=s(r(m),2),x=r(c),w=r(x,!0);a(x),a(c),a(m),b(h=>{gt(x,"href",h),n(w,(t(e),i(()=>t(e).template_name)))},[()=>(g($),t(e),i(()=>$(`/templates/${t(e).template_id}`)))]),u(l,m)};f(Vt,l=>{t(e),i(()=>t(e).template_name)&&l(Ce)})}var Wt=s(Vt,2);{var Le=l=>{var m=na(),c=s(r(m),2),x=r(c,!0);a(c),a(m),b(()=>n(x,(t(e),i(()=>t(e)["github-runner-group"])))),u(l,m)};f(Wt,l=>{t(e),i(()=>t(e)["github-runner-group"])&&l(Le)})}var Oe=s(Wt,2);{var Ge=l=>{var m=ma(),c=s(r(m),2),x=r(c);ta(x,5,()=>(t(e),i(()=>t(e).tags)),ea,(w,h)=>{var ut=va(),qe=r(ut,!0);a(ut),b(()=>n(qe,(t(h),i(()=>typeof t(h)=="string"?t(h):t(h).name)))),u(w,ut)}),a(x),a(c),a(m),u(l,m)};f(Oe,l=>{t(e),i(()=>t(e).tags&&t(e).tags.length>0)&&l(Ge)})}a(Ot),a(Lt),a(Ct),a(Q);var Kt=s(Q,2);{var Je=l=>{var m=ca(),c=r(m),x=s(r(c),2),w=r(x,!0);a(x),a(c),a(m),b(h=>n(w,h),[()=>(t(e),i(()=>ve(t(e).extra_specs)))]),u(l,m)};f(Kt,l=>{t(e),i(()=>t(e).extra_specs)&&l(Je)})}var je=s(Kt,2);{let l=E(()=>(t(e),i(()=>t(e).instances||[])));da(je,{get instances(){return t(l)},entityType:"pool",onDeleteInstance:ne})}b((l,m,c,x,w)=>{n(we,(t(e),i(()=>t(e).id))),n(Ie,(t(e),i(()=>t(e).provider_name))),n(Pe,(t(e),i(()=>t(e).image))),n($e,(t(e),i(()=>t(e).flavor))),aa(rt,1,`inline-flex px-2 py-1 text-xs font-medium rounded-full ${t(e),i(()=>t(e).enabled?"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200":"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200")??""}`),n(De,(t(e),i(()=>t(e).enabled?"Enabled":"Disabled"))),n(Me,l),gt(it,"href",m),n(Ee,c),n(Te,x),n(Ae,w),n(Ue,(t(e),i(()=>t(e).max_runners))),n(Se,(t(e),i(()=>t(e).min_idle_runners))),n(Be,`${t(e),i(()=>t(e).runner_bootstrap_timeout)??""} minutes`),n(Ne,(t(e),i(()=>t(e).priority))),n(Re,(t(e),i(()=>t(e).runner_prefix||"garm"))),n(Fe,`${t(e),i(()=>t(e).os_type)??""} / ${t(e),i(()=>t(e).os_arch)??""}`)},[()=>(g(L),t(e),i(()=>L(t(e)))),()=>(g(ee),t(e),i(()=>ee(t(e)))),()=>(g(D),t(e),i(()=>D(t(e)))),()=>(g(O),t(e),i(()=>O(t(e).created_at||""))),()=>(g(O),t(e),i(()=>O(t(e).updated_at||"")))]),u(K,wt)};f(R,K=>{t(e)&&K(W)},!0)}u(I,P)};f(y,I=>{t(A)?I(V):I(ke,!1)},!0)}u(d,o)};f(ge,d=>{t(j)?d(fe):d(pe,!1)})}a(q);var bt=s(q,2);{var _e=d=>{ra(d,{get pool(){return t(e)},$$events:{close:()=>v(U,!1),submit:o=>ie(o.detail)}})};f(bt,d=>{t(U)&&t(e)&&d(_e)})}var kt=s(bt,2);{var ye=d=>{{let o=E(()=>(t(e),g(D),i(()=>`Pool ${t(e).id} (${D(t(e))})`)));Zt(d,{title:"Delete Pool",message:"Are you sure you want to delete this pool? This action cannot be undone and will remove all associated runners.",get itemName(){return t(o)},$$events:{close:()=>v(S,!1),confirm:oe}})}};f(kt,d=>{t(S)&&t(e)&&d(ye)})}var he=s(kt,2);{var be=d=>{Zt(d,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(p),i(()=>t(p).name)},$$events:{close:()=>{v(B,!1),v(p,null)},confirm:le}})};f(he,d=>{t(B)&&t(p)&&d(be)})}b(d=>{gt(xe,"href",d),n(ue,(t(e),i(()=>t(e)?t(e).id:"Loading...")))},[()=>(g($),i(()=>$("/pools")))]),u(re,ft),Ye()}export{Aa as component}; diff --git a/webapp/assets/_app/immutable/nodes/15.9KeO9SOD.js b/webapp/assets/_app/immutable/nodes/17.D6aJ6Eno.js similarity index 95% rename from webapp/assets/_app/immutable/nodes/15.9KeO9SOD.js rename to webapp/assets/_app/immutable/nodes/17.D6aJ6Eno.js index d021aae5..568d7ae6 100644 --- a/webapp/assets/_app/immutable/nodes/15.9KeO9SOD.js +++ b/webapp/assets/_app/immutable/nodes/17.D6aJ6Eno.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as Me}from"../chunks/TJn6xDN9.js";import{p as Te,E as Ne,o as De,l as w,k as r,m as a,g as e,w as T,h as Se,f as S,s as l,d as c,r as u,b as D,t as Q,e as fe,y as $e,u as j,z as Re,i as ye,c as Ae,j as ze,a as Be,$ as Oe,v as Ce}from"../chunks/DniTuB_0.js";import{a as Fe,i as V,s as Ie}from"../chunks/DbNhg6mG.js";import{r as X,b as Pe,g as oe}from"../chunks/BZ2rxtTc.js";import{e as He,i as Je}from"../chunks/Ck5PkeSc.js";import{b as ve,a as Ee}from"../chunks/CCQwxxp9.js";import{p as Ve}from"../chunks/D4Caz1gY.js";import{M as Ye}from"../chunks/CHjY0Kaf.js";import{e as ae}from"../chunks/BZiHL9L3.js";import{F as Ke}from"../chunks/BaeBx81k.js";import{e as We,a as he}from"../chunks/DKJ_c8yL.js";import{U as Qe}from"../chunks/BWuIa3ut.js";import{D as Xe}from"../chunks/DGVAzkoE.js";import{P as Ze}from"../chunks/CuYqFPEA.js";import{t as J}from"../chunks/CBJzOE8U.js";import{k as et,g as tt,c as rt,m as ot,p as at}from"../chunks/CTcPpzia.js";import{D as st,G as nt,A as it}from"../chunks/CKaB5fL4.js";import{E as lt}from"../chunks/Dh8uHEF5.js";import{E as dt}from"../chunks/Bz3T1MM4.js";import{S as ct}from"../chunks/C1GM4Goa.js";import"../chunks/CGAsTaG2.js";var ut=S('

'),pt=S('

Loading...

'),mt=S(""),gt=S(''),bt=S('

Webhook secret will be automatically generated

'),ft=S('
'),yt=S('

Create Repository

');function vt(se,ne){Te(ne,!1);const[ie,le]=Ie(),p=()=>Fe(We,"$eagerCache",ie),R=a(),k=a(),G=a(),x=a(),C=Ne();let y=a(!1),g=a(""),b=a("github"),o=a({name:"",owner:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin"}),A=a(!0),d=a(!0);async function f(){if(!p().loaded.credentials&&!p().loading.credentials)try{await he.getCredentials()}catch(i){r(g,ae(i))}}function _(i){r(b,i.detail),T(o,e(o).credentials_name="")}function P(){if(e(o).credentials_name){const i=e(R).find(F=>F.name===e(o).credentials_name);i&&i.forge_type&&r(b,i.forge_type)}}function E(){const i=new Uint8Array(32);return crypto.getRandomValues(i),Array.from(i,F=>F.toString(16).padStart(2,"0")).join("")}De(()=>{f()});async function de(){if(!e(o).name?.trim()){r(g,"Repository name is required");return}if(!e(o).owner?.trim()){r(g,"Repository owner is required");return}if(!e(o).credentials_name){r(g,"Please select credentials");return}try{r(y,!0),r(g,"");const i={...e(o),install_webhook:e(A),auto_generate_secret:e(d)};C("submit",i)}catch(i){r(g,ae(i)),r(y,!1)}}w(()=>p(),()=>{r(R,p().credentials)}),w(()=>p(),()=>{r(k,p().loading.credentials)}),w(()=>(e(R),e(b)),()=>{r(G,e(R).filter(i=>e(b)?i.forge_type===e(b):!0))}),w(()=>e(d),()=>{e(d)?T(o,e(o).webhook_secret=E()):e(d)||T(o,e(o).webhook_secret="")}),w(()=>(e(o),e(d)),()=>{r(x,e(o).name?.trim()!==""&&e(o).owner?.trim()!==""&&e(o).credentials_name!==""&&(e(d)||e(o).webhook_secret?.trim()!==""))}),Se(),Me(),Ye(se,{$$events:{close:()=>C("close")},children:(i,F)=>{var M=yt(),Z=l(c(M),2);{var ce=v=>{var h=ut(),I=c(h),W=c(I,!0);u(I),u(h),Q(()=>fe(W,e(g))),D(v,h)};V(Z,v=>{e(g)&&v(ce)})}var ue=l(Z,2);{var pe=v=>{var h=pt();D(v,h)},me=v=>{var h=ft(),I=c(h);Ke(I,{get selectedForgeType(){return e(b)},set selectedForgeType(n){r(b,n)},$$events:{select:_},$$legacy:!0});var W=l(I,2),ee=l(c(W),2);X(ee),u(W);var L=l(W,2),N=l(c(L),2);X(N),u(L);var z=l(L,2),B=l(c(z),2);Q(()=>{e(o),$e(()=>{e(G)})});var O=c(B);O.value=O.__value="";var ge=l(O);He(ge,1,()=>e(G),Je,(n,m)=>{var q=mt(),Le=c(q);u(q);var xe={};Q(()=>{fe(Le,`${e(m),j(()=>e(m).name)??""} (${e(m),j(()=>e(m).endpoint?.name)??""})`),xe!==(xe=(e(m),j(()=>e(m).name)))&&(q.value=(q.__value=(e(m),j(()=>e(m).name)))??"")}),D(n,q)}),u(B),u(z);var H=l(z,2),Y=l(c(H),2);Q(()=>{e(o),$e(()=>{})});var K=c(Y);K.value=K.__value="roundrobin";var te=l(K);te.value=te.__value="pack",u(Y),u(H);var t=l(H,2),s=c(t),re=c(s);X(re),Re(2),u(s);var $=l(s,2),U=c($),_e=c(U);X(_e),Re(2),u(U);var Ue=l(U,2);{var qe=n=>{var m=gt();X(m),ve(m,()=>e(o).webhook_secret,q=>T(o,e(o).webhook_secret=q)),D(n,m)},je=n=>{var m=bt();D(n,m)};V(Ue,n=>{e(d)?n(je,!1):n(qe)})}u($),u(t);var we=l(t,2),ke=c(we),be=l(ke,2),Ge=c(be,!0);u(be),u(we),u(h),Q(()=>{be.disabled=e(y)||e(k)||!e(x),fe(Ge,e(y)?"Creating...":"Create Repository")}),ve(ee,()=>e(o).name,n=>T(o,e(o).name=n)),ve(N,()=>e(o).owner,n=>T(o,e(o).owner=n)),Pe(B,()=>e(o).credentials_name,n=>T(o,e(o).credentials_name=n)),ye("change",B,P),Pe(Y,()=>e(o).pool_balancer_type,n=>T(o,e(o).pool_balancer_type=n)),Ee(re,()=>e(A),n=>r(A,n)),Ee(_e,()=>e(d),n=>r(d,n)),ye("click",ke,()=>C("close")),ye("submit",h,Ve(de)),D(v,h)};V(ue,v=>{e(y)?v(pe):v(me,!1)})}u(M),D(i,M)},$$slots:{default:!0}}),Ae(),le()}var ht=S('
',1);function Nt(se,ne){Te(ne,!1);const[ie,le]=Ie(),p=()=>Fe(We,"$eagerCache",ie),R=a(),k=a(),G=a();let x=a([]),C=a(!0),y=a(""),g=a(""),b=a(!1),o=a(!1),A=a(!1),d=a(null),f=a(null),_=a(1),P=a(25),E=a(1);De(async()=>{try{r(C,!0);const t=await he.getRepositories();t&&Array.isArray(t)&&r(x,t)}catch(t){console.error("Failed to load repositories:",t),r(y,t instanceof Error?t.message:"Failed to load repositories")}finally{r(C,!1)}});async function de(){try{await he.retryResource("repositories")}catch(t){console.error("Retry failed:",t)}}function i(t){r(d,t),r(o,!0)}function F(t){r(f,t),r(A,!0)}function M(){r(b,!1),r(o,!1),r(A,!1),r(d,null),r(f,null),r(y,"")}async function Z(t){try{r(y,"");const s=t.detail,re={name:s.name,owner:s.owner,credentials_name:s.credentials_name,webhook_secret:s.webhook_secret},$=await oe.createRepository(re);if(s.install_webhook&&$.id)try{await oe.installRepoWebhook($.id),J.success("Webhook Installed",`Webhook for repository ${$.owner}/${$.name} has been installed successfully.`)}catch(U){console.warn("Repository created but webhook installation failed:",U),J.error("Webhook Installation Failed",U instanceof Error?U.message:"Failed to install webhook. You can try installing it manually from the repository details page.")}r(b,!1),J.success("Repository Created",`Repository ${$.owner}/${$.name} has been created successfully.`)}catch(s){throw r(y,ae(s)),s}}async function ce(t){if(e(d))try{await oe.updateRepository(e(d).id,t),J.success("Repository Updated",`Repository ${e(d).owner}/${e(d).name} has been updated successfully.`),M()}catch(s){throw s}}async function ue(){if(e(f))try{r(y,""),await oe.deleteRepository(e(f).id),J.success("Repository Deleted",`Repository ${e(f).owner}/${e(f).name} has been deleted successfully.`)}catch(t){const s=ae(t);J.error("Delete Failed",s)}finally{M()}}const pe=[{key:"repository",title:"Repository",cellComponent:lt,cellProps:{entityType:"repository",showOwner:!0}},{key:"endpoint",title:"Endpoint",cellComponent:dt},{key:"credentials",title:"Credentials",cellComponent:nt,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:ct,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:it}],me={entityType:"repository",primaryText:{field:"name",isClickable:!0,href:"/repositories/{id}",showOwner:!0},customInfo:[{icon:t=>tt(t?.endpoint?.endpoint_type||"unknown"),text:t=>t?.endpoint?.name||"Unknown"}],badges:[{type:"custom",value:t=>et(t)}],actions:[{type:"edit",handler:t=>i(t)},{type:"delete",handler:t=>F(t)}]};function v(t){r(g,t.detail.term),r(_,1)}function h(t){r(_,t.detail.page)}function I(t){const s=rt(t.detail.perPage);r(P,s.newPerPage),r(_,s.newCurrentPage)}function W(t){i(t.detail.item)}function ee(t){F(t.detail.item)}w(()=>(e(x),p()),()=>{(!e(x).length||p().loaded.repositories)&&r(x,p().repositories)}),w(()=>p(),()=>{r(C,p().loading.repositories)}),w(()=>p(),()=>{r(R,p().errorMessages.repositories)}),w(()=>(e(x),e(g)),()=>{r(k,ot(e(x),e(g)))}),w(()=>(e(E),e(k),e(P),e(_)),()=>{r(E,Math.ceil(e(k).length/e(P))),e(_)>e(E)&&e(E)>0&&r(_,e(E))}),w(()=>(e(k),e(_),e(P)),()=>{r(G,at(e(k),e(_),e(P)))}),Se(),Me();var L=ht();ze(t=>{Oe.title="Repositories - GARM"});var N=Be(L),z=c(N);Ze(z,{title:"Repositories",description:"Manage your GitHub repositories and their runners",actionLabel:"Add Repository",$$events:{action:()=>{r(b,!0)}}});var B=l(z,2);{let t=Ce(()=>e(R)||e(y)),s=Ce(()=>!!e(R));st(B,{get columns(){return pe},get data(){return e(G)},get loading(){return e(C)},get error(){return e(t)},get searchTerm(){return e(g)},searchPlaceholder:"Search repositories by name or owner...",get currentPage(){return e(_)},get perPage(){return e(P)},get totalPages(){return e(E)},get totalItems(){return e(k),j(()=>e(k).length)},itemName:"repositories",emptyIconType:"building",get showRetry(){return e(s)},get mobileCardConfig(){return me},$$events:{search:v,pageChange:h,perPageChange:I,retry:de,edit:W,delete:ee}})}u(N);var O=l(N,2);{var ge=t=>{vt(t,{$$events:{close:()=>r(b,!1),submit:Z}})};V(O,t=>{e(b)&&t(ge)})}var H=l(O,2);{var Y=t=>{Qe(t,{get entity(){return e(d)},entityType:"repository",$$events:{close:M,submit:s=>ce(s.detail)}})};V(H,t=>{e(o)&&e(d)&&t(Y)})}var K=l(H,2);{var te=t=>{Xe(t,{title:"Delete Repository",message:"Are you sure you want to delete this repository? This action cannot be undone and will remove all associated pools and runners.",get itemName(){return`${e(f),j(()=>e(f).owner)??""}/${e(f),j(()=>e(f).name)??""}`},$$events:{close:M,confirm:ue}})};V(K,t=>{e(A)&&e(f)&&t(te)})}D(se,L),Ae(),le()}export{Nt as component}; +import"../chunks/DsnmJJEf.js";import{i as Me}from"../chunks/TJn6xDN9.js";import{p as Te,E as Ne,o as De,l as w,k as r,m as a,g as e,w as T,h as Se,f as S,s as l,d as c,r as u,b as D,t as Q,e as fe,y as $e,u as j,z as Re,i as ye,c as Ae,j as ze,a as Be,$ as Oe,v as Ce}from"../chunks/DniTuB_0.js";import{a as Fe,i as V,s as Ie}from"../chunks/DbNhg6mG.js";import{r as X,b as Pe,g as oe}from"../chunks/DSfKzFV1.js";import{e as He,i as Je}from"../chunks/Ck5PkeSc.js";import{b as ve,a as Ee}from"../chunks/CCQwxxp9.js";import{p as Ve}from"../chunks/D4Caz1gY.js";import{M as Ye}from"../chunks/l9U2NoST.js";import{e as ae}from"../chunks/BZiHL9L3.js";import{F as Ke}from"../chunks/CQIRreSz.js";import{e as We,a as he}from"../chunks/BE9PkXKz.js";import{U as Qe}from"../chunks/KogAzbD4.js";import{D as Xe}from"../chunks/z19xmJI9.js";import{P as Ze}from"../chunks/RtJp4Ifn.js";import{t as J}from"../chunks/CBJzOE8U.js";import{k as et,g as tt,c as rt,m as ot,p as at}from"../chunks/BC4TpgBU.js";import{D as st,G as nt,A as it}from"../chunks/BlJ06z1t.js";import{E as lt}from"../chunks/30NlHgQ_.js";import{E as dt}from"../chunks/CE0C-N9m.js";import{S as ct}from"../chunks/BsX_CrDw.js";import"../chunks/CRDKDqj5.js";var ut=S('

'),pt=S('

Loading...

'),mt=S(""),gt=S(''),bt=S('

Webhook secret will be automatically generated

'),ft=S('
'),yt=S('

Create Repository

');function vt(se,ne){Te(ne,!1);const[ie,le]=Ie(),p=()=>Fe(We,"$eagerCache",ie),R=a(),k=a(),G=a(),x=a(),C=Ne();let y=a(!1),g=a(""),b=a("github"),o=a({name:"",owner:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin"}),A=a(!0),d=a(!0);async function f(){if(!p().loaded.credentials&&!p().loading.credentials)try{await he.getCredentials()}catch(i){r(g,ae(i))}}function _(i){r(b,i.detail),T(o,e(o).credentials_name="")}function P(){if(e(o).credentials_name){const i=e(R).find(F=>F.name===e(o).credentials_name);i&&i.forge_type&&r(b,i.forge_type)}}function E(){const i=new Uint8Array(32);return crypto.getRandomValues(i),Array.from(i,F=>F.toString(16).padStart(2,"0")).join("")}De(()=>{f()});async function de(){if(!e(o).name?.trim()){r(g,"Repository name is required");return}if(!e(o).owner?.trim()){r(g,"Repository owner is required");return}if(!e(o).credentials_name){r(g,"Please select credentials");return}try{r(y,!0),r(g,"");const i={...e(o),install_webhook:e(A),auto_generate_secret:e(d)};C("submit",i)}catch(i){r(g,ae(i)),r(y,!1)}}w(()=>p(),()=>{r(R,p().credentials)}),w(()=>p(),()=>{r(k,p().loading.credentials)}),w(()=>(e(R),e(b)),()=>{r(G,e(R).filter(i=>e(b)?i.forge_type===e(b):!0))}),w(()=>e(d),()=>{e(d)?T(o,e(o).webhook_secret=E()):e(d)||T(o,e(o).webhook_secret="")}),w(()=>(e(o),e(d)),()=>{r(x,e(o).name?.trim()!==""&&e(o).owner?.trim()!==""&&e(o).credentials_name!==""&&(e(d)||e(o).webhook_secret?.trim()!==""))}),Se(),Me(),Ye(se,{$$events:{close:()=>C("close")},children:(i,F)=>{var M=yt(),Z=l(c(M),2);{var ce=v=>{var h=ut(),I=c(h),W=c(I,!0);u(I),u(h),Q(()=>fe(W,e(g))),D(v,h)};V(Z,v=>{e(g)&&v(ce)})}var ue=l(Z,2);{var pe=v=>{var h=pt();D(v,h)},me=v=>{var h=ft(),I=c(h);Ke(I,{get selectedForgeType(){return e(b)},set selectedForgeType(n){r(b,n)},$$events:{select:_},$$legacy:!0});var W=l(I,2),ee=l(c(W),2);X(ee),u(W);var L=l(W,2),N=l(c(L),2);X(N),u(L);var z=l(L,2),B=l(c(z),2);Q(()=>{e(o),$e(()=>{e(G)})});var O=c(B);O.value=O.__value="";var ge=l(O);He(ge,1,()=>e(G),Je,(n,m)=>{var q=mt(),Le=c(q);u(q);var xe={};Q(()=>{fe(Le,`${e(m),j(()=>e(m).name)??""} (${e(m),j(()=>e(m).endpoint?.name)??""})`),xe!==(xe=(e(m),j(()=>e(m).name)))&&(q.value=(q.__value=(e(m),j(()=>e(m).name)))??"")}),D(n,q)}),u(B),u(z);var H=l(z,2),Y=l(c(H),2);Q(()=>{e(o),$e(()=>{})});var K=c(Y);K.value=K.__value="roundrobin";var te=l(K);te.value=te.__value="pack",u(Y),u(H);var t=l(H,2),s=c(t),re=c(s);X(re),Re(2),u(s);var $=l(s,2),U=c($),_e=c(U);X(_e),Re(2),u(U);var Ue=l(U,2);{var qe=n=>{var m=gt();X(m),ve(m,()=>e(o).webhook_secret,q=>T(o,e(o).webhook_secret=q)),D(n,m)},je=n=>{var m=bt();D(n,m)};V(Ue,n=>{e(d)?n(je,!1):n(qe)})}u($),u(t);var we=l(t,2),ke=c(we),be=l(ke,2),Ge=c(be,!0);u(be),u(we),u(h),Q(()=>{be.disabled=e(y)||e(k)||!e(x),fe(Ge,e(y)?"Creating...":"Create Repository")}),ve(ee,()=>e(o).name,n=>T(o,e(o).name=n)),ve(N,()=>e(o).owner,n=>T(o,e(o).owner=n)),Pe(B,()=>e(o).credentials_name,n=>T(o,e(o).credentials_name=n)),ye("change",B,P),Pe(Y,()=>e(o).pool_balancer_type,n=>T(o,e(o).pool_balancer_type=n)),Ee(re,()=>e(A),n=>r(A,n)),Ee(_e,()=>e(d),n=>r(d,n)),ye("click",ke,()=>C("close")),ye("submit",h,Ve(de)),D(v,h)};V(ue,v=>{e(y)?v(pe):v(me,!1)})}u(M),D(i,M)},$$slots:{default:!0}}),Ae(),le()}var ht=S('
',1);function Nt(se,ne){Te(ne,!1);const[ie,le]=Ie(),p=()=>Fe(We,"$eagerCache",ie),R=a(),k=a(),G=a();let x=a([]),C=a(!0),y=a(""),g=a(""),b=a(!1),o=a(!1),A=a(!1),d=a(null),f=a(null),_=a(1),P=a(25),E=a(1);De(async()=>{try{r(C,!0);const t=await he.getRepositories();t&&Array.isArray(t)&&r(x,t)}catch(t){console.error("Failed to load repositories:",t),r(y,t instanceof Error?t.message:"Failed to load repositories")}finally{r(C,!1)}});async function de(){try{await he.retryResource("repositories")}catch(t){console.error("Retry failed:",t)}}function i(t){r(d,t),r(o,!0)}function F(t){r(f,t),r(A,!0)}function M(){r(b,!1),r(o,!1),r(A,!1),r(d,null),r(f,null),r(y,"")}async function Z(t){try{r(y,"");const s=t.detail,re={name:s.name,owner:s.owner,credentials_name:s.credentials_name,webhook_secret:s.webhook_secret},$=await oe.createRepository(re);if(s.install_webhook&&$.id)try{await oe.installRepoWebhook($.id),J.success("Webhook Installed",`Webhook for repository ${$.owner}/${$.name} has been installed successfully.`)}catch(U){console.warn("Repository created but webhook installation failed:",U),J.error("Webhook Installation Failed",U instanceof Error?U.message:"Failed to install webhook. You can try installing it manually from the repository details page.")}r(b,!1),J.success("Repository Created",`Repository ${$.owner}/${$.name} has been created successfully.`)}catch(s){throw r(y,ae(s)),s}}async function ce(t){if(e(d))try{await oe.updateRepository(e(d).id,t),J.success("Repository Updated",`Repository ${e(d).owner}/${e(d).name} has been updated successfully.`),M()}catch(s){throw s}}async function ue(){if(e(f))try{r(y,""),await oe.deleteRepository(e(f).id),J.success("Repository Deleted",`Repository ${e(f).owner}/${e(f).name} has been deleted successfully.`)}catch(t){const s=ae(t);J.error("Delete Failed",s)}finally{M()}}const pe=[{key:"repository",title:"Repository",cellComponent:lt,cellProps:{entityType:"repository",showOwner:!0}},{key:"endpoint",title:"Endpoint",cellComponent:dt},{key:"credentials",title:"Credentials",cellComponent:nt,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:ct,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:it}],me={entityType:"repository",primaryText:{field:"name",isClickable:!0,href:"/repositories/{id}",showOwner:!0},customInfo:[{icon:t=>tt(t?.endpoint?.endpoint_type||"unknown"),text:t=>t?.endpoint?.name||"Unknown"}],badges:[{type:"custom",value:t=>et(t)}],actions:[{type:"edit",handler:t=>i(t)},{type:"delete",handler:t=>F(t)}]};function v(t){r(g,t.detail.term),r(_,1)}function h(t){r(_,t.detail.page)}function I(t){const s=rt(t.detail.perPage);r(P,s.newPerPage),r(_,s.newCurrentPage)}function W(t){i(t.detail.item)}function ee(t){F(t.detail.item)}w(()=>(e(x),p()),()=>{(!e(x).length||p().loaded.repositories)&&r(x,p().repositories)}),w(()=>p(),()=>{r(C,p().loading.repositories)}),w(()=>p(),()=>{r(R,p().errorMessages.repositories)}),w(()=>(e(x),e(g)),()=>{r(k,ot(e(x),e(g)))}),w(()=>(e(E),e(k),e(P),e(_)),()=>{r(E,Math.ceil(e(k).length/e(P))),e(_)>e(E)&&e(E)>0&&r(_,e(E))}),w(()=>(e(k),e(_),e(P)),()=>{r(G,at(e(k),e(_),e(P)))}),Se(),Me();var L=ht();ze(t=>{Oe.title="Repositories - GARM"});var N=Be(L),z=c(N);Ze(z,{title:"Repositories",description:"Manage your GitHub repositories and their runners",actionLabel:"Add Repository",$$events:{action:()=>{r(b,!0)}}});var B=l(z,2);{let t=Ce(()=>e(R)||e(y)),s=Ce(()=>!!e(R));st(B,{get columns(){return pe},get data(){return e(G)},get loading(){return e(C)},get error(){return e(t)},get searchTerm(){return e(g)},searchPlaceholder:"Search repositories by name or owner...",get currentPage(){return e(_)},get perPage(){return e(P)},get totalPages(){return e(E)},get totalItems(){return e(k),j(()=>e(k).length)},itemName:"repositories",emptyIconType:"building",get showRetry(){return e(s)},get mobileCardConfig(){return me},$$events:{search:v,pageChange:h,perPageChange:I,retry:de,edit:W,delete:ee}})}u(N);var O=l(N,2);{var ge=t=>{vt(t,{$$events:{close:()=>r(b,!1),submit:Z}})};V(O,t=>{e(b)&&t(ge)})}var H=l(O,2);{var Y=t=>{Qe(t,{get entity(){return e(d)},entityType:"repository",$$events:{close:M,submit:s=>ce(s.detail)}})};V(H,t=>{e(o)&&e(d)&&t(Y)})}var K=l(H,2);{var te=t=>{Xe(t,{title:"Delete Repository",message:"Are you sure you want to delete this repository? This action cannot be undone and will remove all associated pools and runners.",get itemName(){return`${e(f),j(()=>e(f).owner)??""}/${e(f),j(()=>e(f).name)??""}`},$$events:{close:M,confirm:ue}})};V(K,t=>{e(A)&&e(f)&&t(te)})}D(se,L),Ae(),le()}export{Nt as component}; diff --git a/webapp/assets/_app/immutable/nodes/16.Drkhu5n3.js b/webapp/assets/_app/immutable/nodes/18.wCxl2r5C.js similarity index 93% rename from webapp/assets/_app/immutable/nodes/16.Drkhu5n3.js rename to webapp/assets/_app/immutable/nodes/18.wCxl2r5C.js index 29170bb8..85ec7efe 100644 --- a/webapp/assets/_app/immutable/nodes/16.Drkhu5n3.js +++ b/webapp/assets/_app/immutable/nodes/18.wCxl2r5C.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as ze}from"../chunks/TJn6xDN9.js";import{p as He,o as je,B as Ge,l as Oe,h as Ve,f as B,j as Je,a as C,t as j,b as w,c as Ke,u as n,q as de,e as ce,g as e,m as l,d as u,s as d,k as r,$ as Qe,r as f,w as Xe,A as pe,v as m}from"../chunks/DniTuB_0.js";import{i as g,s as Ye,a as Ze}from"../chunks/DbNhg6mG.js";import{d as A,c as et,g as h}from"../chunks/BZ2rxtTc.js";import{p as tt}from"../chunks/DQE8oq0R.js";import{g as ue}from"../chunks/HMJxCnAR.js";import{U as ot}from"../chunks/BWuIa3ut.js";import{D as fe}from"../chunks/DGVAzkoE.js";import{E as at,P as rt,a as st}from"../chunks/BZ_AecKg.js";import{D as nt}from"../chunks/J4QHiesY.js";import{g as me}from"../chunks/CTcPpzia.js";import{e as S}from"../chunks/BZiHL9L3.js";import{I as it}from"../chunks/d1ceLqrJ.js";import{W as lt}from"../chunks/CWdSRFlF.js";import{C as dt}from"../chunks/mwBQAfJV.js";import{w as G}from"../chunks/DmHFwzWx.js";import{t as x}from"../chunks/CBJzOE8U.js";var ct=B('

Loading repository...

'),pt=B('

'),ut=B(" ",1),ft=B(' ',1);function Ct(ye,ve){He(ve,!1);const[ge,he]=Ye(),O=()=>Ze(tt,"$page",ge),I=l();let t=l(null),c=l([]),y=l([]),F=l(!0),E=l(""),D=l(!1),P=l(!1),R=l(!1),T=l(!1),p=l(null),M=null,_=l();async function V(){if(e(I))try{r(F,!0),r(E,"");const[o,a,s]=await Promise.all([h.getRepository(e(I)),h.listRepositoryPools(e(I)).catch(()=>[]),h.listRepositoryInstances(e(I)).catch(()=>[])]);r(t,o),r(c,a),r(y,s)}catch(o){r(E,S(o))}finally{r(F,!1)}}function _e(o,a){const{events:s}=o;return{...a,events:s}}async function $e(o){if(e(t))try{await h.updateRepository(e(t).id,o),await V(),x.success("Repository Updated",`Repository ${e(t).owner}/${e(t).name} has been updated successfully.`),r(D,!1)}catch(a){throw a}}async function be(){if(e(t)){try{await h.deleteRepository(e(t).id),ue(A("/repositories"))}catch(o){const a=S(o);x.error("Delete Failed",a)}r(P,!1)}}async function we(){if(e(p))try{await h.deleteInstance(e(p).name),x.success("Instance Deleted",`Instance ${e(p).name} has been deleted successfully.`),r(R,!1),r(p,null)}catch(o){const a=S(o);x.error("Delete Failed",a),r(R,!1),r(p,null)}}function xe(o){r(p,o),r(R,!0)}function Ie(){r(T,!0)}async function Re(o){try{if(!e(t))return;await h.createRepositoryPool(e(t).id,o.detail),x.success("Pool Created",`Pool has been created successfully for repository ${e(t).owner}/${e(t).name}.`),r(T,!1)}catch(a){const s=S(a);x.error("Pool Creation Failed",s)}}function J(){e(_)&&Xe(_,e(_).scrollTop=e(_).scrollHeight)}function Ee(o){if(o.operation==="update"){const a=o.payload;if(e(t)&&a.id===e(t).id){const s=e(t).events?.length||0,i=a.events?.length||0;r(t,_e(e(t),a)),i>s&&setTimeout(()=>{J()},100)}}else if(o.operation==="delete"){const a=o.payload.id||o.payload;e(t)&&e(t).id===a&&ue(A("/repositories"))}}function De(o){if(!e(t))return;const a=o.payload;if(a.repo_id===e(t).id){if(o.operation==="create")r(c,[...e(c),a]);else if(o.operation==="update")r(c,e(c).map(s=>s.id===a.id?a:s));else if(o.operation==="delete"){const s=a.id||a;r(c,e(c).filter(i=>i.id!==s))}}}function Pe(o){if(!e(t)||!e(c))return;const a=o.payload;if(e(c).some(i=>i.id===a.pool_id)){if(o.operation==="create")r(y,[...e(y),a]);else if(o.operation==="update")r(y,e(y).map(i=>i.id===a.id?a:i));else if(o.operation==="delete"){const i=a.id||a;r(y,e(y).filter(W=>W.id!==i))}}}je(()=>{V().then(()=>{e(t)?.events?.length&&setTimeout(()=>{J()},100)});const o=G.subscribeToEntity("repository",["update","delete"],Ee),a=G.subscribeToEntity("pool",["create","update","delete"],De),s=G.subscribeToEntity("instance",["create","update","delete"],Pe);M=()=>{o(),a(),s()}}),Ge(()=>{M&&(M(),M=null)}),Oe(()=>O(),()=>{r(I,O().params.id)}),Ve(),ze();var K=ft();Je(o=>{j(()=>Qe.title=`${e(t),n(()=>e(t)?`${e(t).name} - Repository Details`:"Repository Details")??""} - GARM`)});var U=C(K),L=u(U),Q=u(L),N=u(Q),Te=u(N);f(N);var X=d(N,2),Y=u(X),Z=d(u(Y),2),Me=u(Z,!0);f(Z),f(Y),f(X),f(Q),f(L);var ke=d(L,2);{var Ce=o=>{var a=ct();w(o,a)},Ae=o=>{var a=pe(),s=C(a);{var i=$=>{var b=pt(),k=u(b),q=u(k,!0);f(k),f(b),j(()=>ce(q,e(E))),w($,b)},W=$=>{var b=pe(),k=C(b);{var q=z=>{var ae=ut(),re=C(ae);{let v=m(()=>(e(t),n(()=>e(t).name||"Repository"))),H=m(()=>(e(t),n(()=>e(t).owner))),We=m(()=>(e(t),n(()=>e(t).endpoint?.name))),qe=m(()=>(de(me),e(t),n(()=>me(e(t).endpoint?.endpoint_type||"unknown"))));nt(re,{get title(){return e(v)},get subtitle(){return`Owner: ${e(H)??""} • Endpoint: ${e(We)??""}`},get forgeIcon(){return e(qe)},onEdit:()=>r(D,!0),onDelete:()=>r(P,!0)})}var se=d(re,2);at(se,{get entity(){return e(t)},entityType:"repository"});var ne=d(se,2);{let v=m(()=>(e(t),n(()=>e(t).id||"")));lt(ne,{entityType:"repository",get entityId(){return e(v)},get entityName(){return`${e(t),n(()=>e(t).owner)??""}/${e(t),n(()=>e(t).name)??""}`}})}var ie=d(ne,2);{let v=m(()=>(e(t),n(()=>e(t).id||"")));rt(ie,{get pools(){return e(c)},entityType:"repository",get entityId(){return e(v)},get entityName(){return`${e(t),n(()=>e(t).owner)??""}/${e(t),n(()=>e(t).name)??""}`},$$events:{addPool:Ie}})}var le=d(ie,2);it(le,{get instances(){return e(y)},entityType:"repository",onDeleteInstance:xe});var Ne=d(le,2);{let v=m(()=>(e(t),n(()=>e(t)?.events)));st(Ne,{get events(){return e(v)},get eventsContainer(){return e(_)},set eventsContainer(H){r(_,H)},$$legacy:!0})}w(z,ae)};g(k,z=>{e(t)&&z(q)},!0)}w($,b)};g(s,$=>{e(E)?$(i):$(W,!1)},!0)}w(o,a)};g(ke,o=>{e(F)?o(Ce):o(Ae,!1)})}f(U);var ee=d(U,2);{var Se=o=>{ot(o,{get entity(){return e(t)},entityType:"repository",$$events:{close:()=>r(D,!1),submit:a=>$e(a.detail)}})};g(ee,o=>{e(D)&&e(t)&&o(Se)})}var te=d(ee,2);{var Be=o=>{{let a=m(()=>(e(t),n(()=>`${e(t).owner}/${e(t).name}`)));fe(o,{title:"Delete Repository",message:"Are you sure you want to delete this repository? This action cannot be undone and will remove all associated pools and instances.",get itemName(){return e(a)},$$events:{close:()=>r(P,!1),confirm:be}})}};g(te,o=>{e(P)&&e(t)&&o(Be)})}var oe=d(te,2);{var Fe=o=>{fe(o,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(p),n(()=>e(p).name)},$$events:{close:()=>{r(R,!1),r(p,null)},confirm:we}})};g(oe,o=>{e(R)&&e(p)&&o(Fe)})}var Ue=d(oe,2);{var Le=o=>{{let a=m(()=>(e(t),n(()=>e(t).id||"")));dt(o,{initialEntityType:"repository",get initialEntityId(){return e(a)},$$events:{close:()=>r(T,!1),submit:Re}})}};g(Ue,o=>{e(T)&&e(t)&&o(Le)})}j(o=>{et(Te,"href",o),ce(Me,(e(t),n(()=>e(t)?e(t).name:"Loading...")))},[()=>(de(A),n(()=>A("/repositories")))]),w(ye,K),Ke(),he()}export{Ct as component}; +import"../chunks/DsnmJJEf.js";import{i as ze}from"../chunks/TJn6xDN9.js";import{p as He,o as je,B as Ge,l as Oe,h as Ve,f as B,j as Je,a as C,t as j,b as w,c as Ke,u as n,q as de,e as ce,g as e,m as l,d as u,s as d,k as r,$ as Qe,r as f,w as Xe,A as pe,v as m}from"../chunks/DniTuB_0.js";import{i as g,s as Ye,a as Ze}from"../chunks/DbNhg6mG.js";import{d as A,c as et,g as h}from"../chunks/DSfKzFV1.js";import{p as tt}from"../chunks/Dt7jKcR8.js";import{g as ue}from"../chunks/kW9-6GPQ.js";import{U as ot}from"../chunks/KogAzbD4.js";import{D as fe}from"../chunks/z19xmJI9.js";import{E as at,P as rt,a as st}from"../chunks/BehbwORU.js";import{D as nt}from"../chunks/DsCgpFQt.js";import{g as me}from"../chunks/BC4TpgBU.js";import{e as S}from"../chunks/BZiHL9L3.js";import{I as it}from"../chunks/B3d8BqkX.js";import{W as lt}from"../chunks/Cv3bKZ1_.js";import{C as dt}from"../chunks/CMD3IPWU.js";import{w as G}from"../chunks/DmHFwzWx.js";import{t as x}from"../chunks/CBJzOE8U.js";var ct=B('

Loading repository...

'),pt=B('

'),ut=B(" ",1),ft=B(' ',1);function Ct(ye,ve){He(ve,!1);const[ge,he]=Ye(),O=()=>Ze(tt,"$page",ge),I=l();let t=l(null),c=l([]),y=l([]),F=l(!0),E=l(""),D=l(!1),P=l(!1),R=l(!1),T=l(!1),p=l(null),M=null,_=l();async function V(){if(e(I))try{r(F,!0),r(E,"");const[o,a,s]=await Promise.all([h.getRepository(e(I)),h.listRepositoryPools(e(I)).catch(()=>[]),h.listRepositoryInstances(e(I)).catch(()=>[])]);r(t,o),r(c,a),r(y,s)}catch(o){r(E,S(o))}finally{r(F,!1)}}function _e(o,a){const{events:s}=o;return{...a,events:s}}async function $e(o){if(e(t))try{await h.updateRepository(e(t).id,o),await V(),x.success("Repository Updated",`Repository ${e(t).owner}/${e(t).name} has been updated successfully.`),r(D,!1)}catch(a){throw a}}async function be(){if(e(t)){try{await h.deleteRepository(e(t).id),ue(A("/repositories"))}catch(o){const a=S(o);x.error("Delete Failed",a)}r(P,!1)}}async function we(){if(e(p))try{await h.deleteInstance(e(p).name),x.success("Instance Deleted",`Instance ${e(p).name} has been deleted successfully.`),r(R,!1),r(p,null)}catch(o){const a=S(o);x.error("Delete Failed",a),r(R,!1),r(p,null)}}function xe(o){r(p,o),r(R,!0)}function Ie(){r(T,!0)}async function Re(o){try{if(!e(t))return;await h.createRepositoryPool(e(t).id,o.detail),x.success("Pool Created",`Pool has been created successfully for repository ${e(t).owner}/${e(t).name}.`),r(T,!1)}catch(a){const s=S(a);x.error("Pool Creation Failed",s)}}function J(){e(_)&&Xe(_,e(_).scrollTop=e(_).scrollHeight)}function Ee(o){if(o.operation==="update"){const a=o.payload;if(e(t)&&a.id===e(t).id){const s=e(t).events?.length||0,i=a.events?.length||0;r(t,_e(e(t),a)),i>s&&setTimeout(()=>{J()},100)}}else if(o.operation==="delete"){const a=o.payload.id||o.payload;e(t)&&e(t).id===a&&ue(A("/repositories"))}}function De(o){if(!e(t))return;const a=o.payload;if(a.repo_id===e(t).id){if(o.operation==="create")r(c,[...e(c),a]);else if(o.operation==="update")r(c,e(c).map(s=>s.id===a.id?a:s));else if(o.operation==="delete"){const s=a.id||a;r(c,e(c).filter(i=>i.id!==s))}}}function Pe(o){if(!e(t)||!e(c))return;const a=o.payload;if(e(c).some(i=>i.id===a.pool_id)){if(o.operation==="create")r(y,[...e(y),a]);else if(o.operation==="update")r(y,e(y).map(i=>i.id===a.id?a:i));else if(o.operation==="delete"){const i=a.id||a;r(y,e(y).filter(W=>W.id!==i))}}}je(()=>{V().then(()=>{e(t)?.events?.length&&setTimeout(()=>{J()},100)});const o=G.subscribeToEntity("repository",["update","delete"],Ee),a=G.subscribeToEntity("pool",["create","update","delete"],De),s=G.subscribeToEntity("instance",["create","update","delete"],Pe);M=()=>{o(),a(),s()}}),Ge(()=>{M&&(M(),M=null)}),Oe(()=>O(),()=>{r(I,O().params.id)}),Ve(),ze();var K=ft();Je(o=>{j(()=>Qe.title=`${e(t),n(()=>e(t)?`${e(t).name} - Repository Details`:"Repository Details")??""} - GARM`)});var U=C(K),L=u(U),Q=u(L),N=u(Q),Te=u(N);f(N);var X=d(N,2),Y=u(X),Z=d(u(Y),2),Me=u(Z,!0);f(Z),f(Y),f(X),f(Q),f(L);var ke=d(L,2);{var Ce=o=>{var a=ct();w(o,a)},Ae=o=>{var a=pe(),s=C(a);{var i=$=>{var b=pt(),k=u(b),q=u(k,!0);f(k),f(b),j(()=>ce(q,e(E))),w($,b)},W=$=>{var b=pe(),k=C(b);{var q=z=>{var ae=ut(),re=C(ae);{let v=m(()=>(e(t),n(()=>e(t).name||"Repository"))),H=m(()=>(e(t),n(()=>e(t).owner))),We=m(()=>(e(t),n(()=>e(t).endpoint?.name))),qe=m(()=>(de(me),e(t),n(()=>me(e(t).endpoint?.endpoint_type||"unknown"))));nt(re,{get title(){return e(v)},get subtitle(){return`Owner: ${e(H)??""} • Endpoint: ${e(We)??""}`},get forgeIcon(){return e(qe)},onEdit:()=>r(D,!0),onDelete:()=>r(P,!0)})}var se=d(re,2);at(se,{get entity(){return e(t)},entityType:"repository"});var ne=d(se,2);{let v=m(()=>(e(t),n(()=>e(t).id||"")));lt(ne,{entityType:"repository",get entityId(){return e(v)},get entityName(){return`${e(t),n(()=>e(t).owner)??""}/${e(t),n(()=>e(t).name)??""}`}})}var ie=d(ne,2);{let v=m(()=>(e(t),n(()=>e(t).id||"")));rt(ie,{get pools(){return e(c)},entityType:"repository",get entityId(){return e(v)},get entityName(){return`${e(t),n(()=>e(t).owner)??""}/${e(t),n(()=>e(t).name)??""}`},$$events:{addPool:Ie}})}var le=d(ie,2);it(le,{get instances(){return e(y)},entityType:"repository",onDeleteInstance:xe});var Ne=d(le,2);{let v=m(()=>(e(t),n(()=>e(t)?.events)));st(Ne,{get events(){return e(v)},get eventsContainer(){return e(_)},set eventsContainer(H){r(_,H)},$$legacy:!0})}w(z,ae)};g(k,z=>{e(t)&&z(q)},!0)}w($,b)};g(s,$=>{e(E)?$(i):$(W,!1)},!0)}w(o,a)};g(ke,o=>{e(F)?o(Ce):o(Ae,!1)})}f(U);var ee=d(U,2);{var Se=o=>{ot(o,{get entity(){return e(t)},entityType:"repository",$$events:{close:()=>r(D,!1),submit:a=>$e(a.detail)}})};g(ee,o=>{e(D)&&e(t)&&o(Se)})}var te=d(ee,2);{var Be=o=>{{let a=m(()=>(e(t),n(()=>`${e(t).owner}/${e(t).name}`)));fe(o,{title:"Delete Repository",message:"Are you sure you want to delete this repository? This action cannot be undone and will remove all associated pools and instances.",get itemName(){return e(a)},$$events:{close:()=>r(P,!1),confirm:be}})}};g(te,o=>{e(P)&&e(t)&&o(Be)})}var oe=d(te,2);{var Fe=o=>{fe(o,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(p),n(()=>e(p).name)},$$events:{close:()=>{r(R,!1),r(p,null)},confirm:we}})};g(oe,o=>{e(R)&&e(p)&&o(Fe)})}var Ue=d(oe,2);{var Le=o=>{{let a=m(()=>(e(t),n(()=>e(t).id||"")));dt(o,{initialEntityType:"repository",get initialEntityId(){return e(a)},$$events:{close:()=>r(T,!1),submit:Re}})}};g(Ue,o=>{e(T)&&e(t)&&o(Le)})}j(o=>{et(Te,"href",o),ce(Me,(e(t),n(()=>e(t)?e(t).name:"Loading...")))},[()=>(de(A),n(()=>A("/repositories")))]),w(ye,K),Ke(),he()}export{Ct as component}; diff --git a/webapp/assets/_app/immutable/nodes/17.BRdX9TGm.js b/webapp/assets/_app/immutable/nodes/19.DSHKyTOS.js similarity index 97% rename from webapp/assets/_app/immutable/nodes/17.BRdX9TGm.js rename to webapp/assets/_app/immutable/nodes/19.DSHKyTOS.js index 58ef9826..18cd9692 100644 --- a/webapp/assets/_app/immutable/nodes/17.BRdX9TGm.js +++ b/webapp/assets/_app/immutable/nodes/19.DSHKyTOS.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as Gr}from"../chunks/TJn6xDN9.js";import{p as Hr,E as ot,o as Nr,l as F,k as r,g as e,m as d,h as Ur,f as k,s as a,d as l,r as o,t as _,i as ke,b,e as q,a as Pe,z as ir,y as we,u as p,D as Se,c as jr,A as Ir,q as qr,j as lt,$ as st,v as nr}from"../chunks/DniTuB_0.js";import{i as M,s as dt,a as it}from"../chunks/DbNhg6mG.js";import{r as V,s as cr,b as $e,g as G,d as zr,c as nt}from"../chunks/BZ2rxtTc.js";import{P as ct}from"../chunks/CuYqFPEA.js";import{e as ur,i as gr}from"../chunks/Ck5PkeSc.js";import{b as Q,a as ut}from"../chunks/CCQwxxp9.js";import{p as gt}from"../chunks/D4Caz1gY.js";import{M as Fr}from"../chunks/CHjY0Kaf.js";import{J as vt}from"../chunks/C-CyTC2O.js";import{e as B}from"../chunks/BZiHL9L3.js";import{U as bt}from"../chunks/DZ5U-N28.js";import{D as pt}from"../chunks/DGVAzkoE.js";import{D as mt,G as vr,A as ft,L as yt}from"../chunks/CKaB5fL4.js";import{e as xt,a as Lr}from"../chunks/DKJ_c8yL.js";import{t as ne}from"../chunks/CBJzOE8U.js";import{e as Ce,h as ht}from"../chunks/CTcPpzia.js";import{E as _t}from"../chunks/Dh8uHEF5.js";import{E as kt}from"../chunks/Bz3T1MM4.js";import{S as wt}from"../chunks/C1GM4Goa.js";import{P as St}from"../chunks/DSRJryIz.js";import"../chunks/CGAsTaG2.js";var $t=k('

'),Ct=k('
'),Pt=k(""),Mt=k(''),Tt=k('
'),Et=k(""),Rt=k(''),Dt=k('
Loading templates...
'),At=k(""),It=k('

Templates define how the runner software is installed and configured.

',1),zt=k('

Create a template first or proceed without a template to use default behavior.

'),Lt=k('

Select an entity first to see available templates

'),Gt=k('

Entity & Provider Configuration

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Extra Specs (JSON)
',1),Ht=k('
Creating...
'),Nt=k('

Create New Scale Set

Scale sets are only available for GitHub endpoints

Entity Level *
');function Ut(ze,Le){Hr(Le,!1);const ce=d(),ue=ot();let E=d(!1),A=d(""),u=d(""),C=d([]),re=d([]),x=d([]),J=d(!1),W=d(!1),K=d(!1),w=d(""),g=d(""),I=d(""),H=d(""),N=d(""),m=d(void 0),X=d(void 0),ge=d(void 0),ve=d("garm"),R=d("linux"),te=d("amd64"),ae=d(""),oe=d(!0),Y=d("{}"),z=d(void 0);async function Ge(){try{r(W,!0),r(re,await G.listProviders())}catch(i){r(A,B(i))}finally{r(W,!1)}}async function Me(){try{r(K,!0);const i=be();if(!i){r(x,[]);return}if(r(x,await G.listTemplates(e(R),void 0,i)),!e(z)||!e(x).find(f=>f.id===e(z))){const f=e(x).find(D=>D.owner_id==="system");f?r(z,f.id):e(x).length>0&&r(z,e(x)[0].id)}}catch(i){r(A,B(i))}finally{r(K,!1)}}function be(){if(!e(g)||!e(C))return null;const i=e(C).find(f=>f.id===e(g));if(!i)return null;if("forge_type"in i)return i.forge_type;if("endpoint"in i){const f=i.endpoint;if(f&&"endpoint_type"in f)return f.endpoint_type||null}return"github"}async function He(){if(e(u))try{switch(r(J,!0),r(C,[]),e(u)){case"repository":r(C,await G.listRepositories());break;case"organization":r(C,await G.listOrganizations());break;case"enterprise":r(C,await G.listEnterprises());break}}catch(i){r(A,B(i))}finally{r(J,!1)}}function pe(i){e(u)!==i&&(r(u,i),r(g,""),r(z,void 0),He())}async function Ne(){if(!e(ce)){r(A,"Please fill in all required fields");return}try{r(E,!0),r(A,"");let i={};if(e(Y).trim())try{i=JSON.parse(e(Y))}catch{throw new Error("Invalid JSON in extra specs")}const f={name:e(w),provider_name:e(I),image:e(H),flavor:e(N),max_runners:e(m)||10,min_idle_runners:e(X)||0,runner_bootstrap_timeout:e(ge)||20,runner_prefix:e(ve),os_type:e(R),os_arch:e(te),"github-runner-group":e(ae)||void 0,enabled:e(oe),extra_specs:e(Y).trim()?i:void 0,template_id:e(z)};let D;switch(e(u)){case"repository":D=await G.createRepositoryScaleSet(e(g),f);break;case"organization":D=await G.createOrganizationScaleSet(e(g),f);break;case"enterprise":D=await G.createEnterpriseScaleSet(e(g),f);break;default:throw new Error("Invalid entity level selected")}ue("submit",D)}catch(i){r(A,B(i))}finally{r(E,!1)}}Nr(()=>{Ge()}),F(()=>(e(E),e(w),e(u),e(g),e(I),e(H),e(N)),()=>{r(ce,!e(E)&&e(w).trim()!==""&&e(u)!==""&&e(g)!==""&&e(I)!==""&&e(H).trim()!==""&&e(N).trim()!=="")}),F(()=>(e(g),e(R)),()=>{e(g)&&e(R)&&Me()}),F(()=>(e(R),e(g)),()=>{e(R)&&e(g)&&Me()}),Ur(),Gr(),Fr(ze,{$$events:{close:()=>ue("close")},children:(i,f)=>{var D=Nt(),le=a(l(D),2),me=l(le);{var Ue=S=>{var U=$t(),ie=l(U),Ae=l(ie,!0);o(ie),o(U),_(()=>q(Ae,e(A))),b(S,U)};M(me,S=>{e(A)&&S(Ue)})}var se=a(me,2),Te=a(l(se),2);V(Te),o(se);var de=a(se,2),Ee=l(de),Re=a(l(Ee),2),fe=l(Re),t=a(fe,2),v=a(t,2);o(Re),o(Ee),o(de);var Z=a(de,2);{var ye=S=>{var U=Gt(),ie=Pe(U),Ae=a(l(ie),2),qe=l(Ae),Fe=l(qe),Jr=l(Fe);ir(),o(Fe);var Wr=a(Fe,2);{var Kr=s=>{var y=Ct();b(s,y)},Qr=s=>{var y=Mt();_(()=>{e(g),we(()=>{e(u),e(C)})});var L=l(y),xe=l(L);o(L),L.value=L.__value="";var ee=a(L);ur(ee,1,()=>e(C),gr,(h,n)=>{var T=Pt(),O=l(T);{var he=c=>{var P=Se();_(()=>q(P,`${e(n),p(()=>e(n).owner)??""}/${e(n),p(()=>e(n).name)??""} (${e(n),p(()=>e(n).endpoint?.name||"Unknown endpoint")??""})`)),b(c,P)},j=c=>{var P=Se();_(()=>q(P,`${e(n),p(()=>e(n).name)??""} (${e(n),p(()=>e(n).endpoint?.name||"Unknown endpoint")??""})`)),b(c,P)};M(O,c=>{e(u)==="repository"?c(he):c(j,!1)})}o(T);var $={};_(()=>{$!==($=(e(n),p(()=>e(n).id)))&&(T.value=(T.__value=(e(n),p(()=>e(n).id)))??"")}),b(h,T)}),o(y),_(()=>q(xe,`Select a ${e(u)??""}`)),$e(y,()=>e(g),h=>r(g,h)),b(s,y)};M(Wr,s=>{e(J)?s(Kr):s(Qr,!1)})}o(qe);var pr=a(qe,2),Xr=a(l(pr),2);{var Yr=s=>{var y=Tt();b(s,y)},Zr=s=>{var y=Rt();_(()=>{e(I),we(()=>{e(re)})});var L=l(y);L.value=L.__value="";var xe=a(L);ur(xe,1,()=>e(re),gr,(ee,h)=>{var n=Et(),T=l(n,!0);o(n);var O={};_(()=>{q(T,(e(h),p(()=>e(h).name))),O!==(O=(e(h),p(()=>e(h).name)))&&(n.value=(n.__value=(e(h),p(()=>e(h).name)))??"")}),b(ee,n)}),o(y),$e(y,()=>e(I),ee=>r(I,ee)),b(s,y)};M(Xr,s=>{e(W)?s(Yr):s(Zr,!1)})}o(pr),o(Ae),o(ie);var Oe=a(ie,2),Ve=a(l(Oe),2),Be=l(Ve),mr=a(l(Be),2);V(mr),o(Be);var Je=a(Be,2),fr=a(l(Je),2);V(fr),o(Je);var We=a(Je,2),Ke=a(l(We),2);_(()=>{e(R),we(()=>{})});var Qe=l(Ke);Qe.value=Qe.__value="linux";var yr=a(Qe);yr.value=yr.__value="windows",o(Ke),o(We);var xr=a(We,2),Xe=a(l(xr),2);_(()=>{e(te),we(()=>{})});var Ye=l(Xe);Ye.value=Ye.__value="amd64";var hr=a(Ye);hr.value=hr.__value="arm64",o(Xe),o(xr),o(Ve);var _r=a(Ve,2),et=a(l(_r),2);{var rt=s=>{var y=Dt();b(s,y)},tt=s=>{var y=Ir(),L=Pe(y);{var xe=h=>{var n=It(),T=Pe(n);_(()=>{e(z),we(()=>{e(x)})}),ur(T,5,()=>e(x),gr,($,c)=>{var P=At(),_e=l(P),lr=a(_e);{var sr=dr=>{var Ar=Se();_(()=>q(Ar,`- ${e(c),p(()=>e(c).description)??""}`)),b(dr,Ar)};M(lr,dr=>{e(c),p(()=>e(c).description)&&dr(sr)})}o(P);var Ie={};_(()=>{q(_e,`${e(c),p(()=>e(c).name)??""} ${e(c),p(()=>e(c).owner_id==="system"?"(System)":"")??""} `),Ie!==(Ie=(e(c),p(()=>e(c).id)))&&(P.value=(P.__value=(e(c),p(()=>e(c).id)))??"")}),b($,P)}),o(T);var O=a(T,2),he=a(l(O));{var j=$=>{var c=Se();_(P=>q(c,`Showing templates for ${P??""} ${e(R)??""}.`),[()=>p(be)]),b($,c)};M(he,$=>{e(g)&&$(j)})}o(O),$e(T,()=>e(z),$=>r(z,$)),b(h,n)},ee=h=>{var n=Ir(),T=Pe(n);{var O=j=>{var $=zt(),c=l($),P=l(c);o(c);var _e=a(c,2),lr=l(_e);ir(),o(_e),o($),_((sr,Ie)=>{q(P,`No templates found for ${sr??""} ${e(R)??""}.`),nt(lr,"href",Ie)},[()=>p(be),()=>(qr(zr),p(()=>zr("/templates")))]),b(j,$)},he=j=>{var $=Lt();b(j,$)};M(T,j=>{e(g)?j(O):j(he,!1)},!0)}b(h,n)};M(L,h=>{e(x),p(()=>e(x).length>0)?h(xe):h(ee,!1)},!0)}b(s,y)};M(et,s=>{e(K)?s(rt):s(tt,!1)})}o(_r),o(Oe);var Ze=a(Oe,2),kr=a(l(Ze),2),er=l(kr),wr=a(l(er),2);V(wr),o(er);var rr=a(er,2),Sr=a(l(rr),2);V(Sr),o(rr);var $r=a(rr,2),Cr=a(l($r),2);V(Cr),o($r),o(kr),o(Ze);var Pr=a(Ze,2),tr=a(l(Pr),2),ar=l(tr),Mr=a(l(ar),2);V(Mr),o(ar);var Tr=a(ar,2),Er=a(l(Tr),2);V(Er),o(Tr),o(tr);var or=a(tr,2),at=a(l(or),2);vt(at,{rows:4,placeholder:"{}",get value(){return e(Y)},set value(s){r(Y,s)},$$legacy:!0}),o(or);var Rr=a(or,2),Dr=l(Rr);V(Dr),ir(2),o(Rr),o(Pr),_(s=>q(Jr,`${s??""} `),[()=>(e(u),p(()=>e(u).charAt(0).toUpperCase()+e(u).slice(1)))]),Q(mr,()=>e(H),s=>r(H,s)),Q(fr,()=>e(N),s=>r(N,s)),$e(Ke,()=>e(R),s=>r(R,s)),$e(Xe,()=>e(te),s=>r(te,s)),Q(wr,()=>e(X),s=>r(X,s)),Q(Sr,()=>e(m),s=>r(m,s)),Q(Cr,()=>e(ge),s=>r(ge,s)),Q(Mr,()=>e(ve),s=>r(ve,s)),Q(Er,()=>e(ae),s=>r(ae,s)),ut(Dr,()=>e(oe),s=>r(oe,s)),b(S,U)};M(Z,S=>{e(u)&&S(ye)})}var De=a(Z,2),br=l(De),je=a(br,2),Or=l(je);{var Vr=S=>{var U=Ht();b(S,U)},Br=S=>{var U=Se("Create Scale Set");b(S,U)};M(Or,S=>{e(E)?S(Vr):S(Br,!1)})}o(je),o(De),o(le),o(D),_(()=>{cr(fe,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(u)==="repository"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),cr(t,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(u)==="organization"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),cr(v,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(u)==="enterprise"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),je.disabled=!e(ce)}),Q(Te,()=>e(w),S=>r(w,S)),ke("click",fe,()=>pe("repository")),ke("click",t,()=>pe("organization")),ke("click",v,()=>pe("enterprise")),ke("click",br,()=>ue("close")),ke("submit",le,gt(Ne)),b(i,D)},$$slots:{default:!0}}),jr()}const jt={};var qt=k('
'),Ft=k('
',1);function va(ze,Le){Hr(Le,!1);const[ce,ue]=dt(),E=()=>it(xt,"$eagerCache",ce),A=d(),u=d(),C=d(),re=d();let x=d([]),J=d(!0),W=d(""),K=d(""),w=d(1),g=d(25),I=d(!1),H=d(!1),N=d(!1),m=d(null),X=d(!1);async function ge(t){try{r(W,""),r(I,!1),ne.success("Scale Set Created","Scale set has been created successfully.")}catch(v){throw r(W,B(v)),v}}async function ve(t){if(e(m))try{await G.updateScaleSet(e(m).id,t),ne.success("Scale Set Updated",`Scale set ${e(m).name} has been updated successfully.`),r(H,!1),r(m,null)}catch(v){const Z=B(v);throw ne.error("Update Failed",Z),v}}async function R(){if(e(m))try{await G.deleteScaleSet(e(m).id),ne.success("Scale Set Deleted",`Scale set ${e(m).name} has been deleted successfully.`)}catch(t){const v=B(t);ne.error("Delete Failed",v)}finally{r(N,!1),r(m,null)}}function te(){r(I,!0)}async function ae(t){try{r(X,!0);const v=await G.getScaleSet(t.id);r(m,v),r(H,!0)}catch(v){const Z=B(v);ne.error("Failed to Load Scale Set Details",Z)}finally{r(X,!1)}}function oe(t){r(m,t),r(N,!0)}Nr(async()=>{try{r(J,!0);const t=await Lr.getScaleSets();t&&Array.isArray(t)&&r(x,t)}catch(t){jt?.VITEST||console.error("Failed to load scale sets:",t),r(W,B(t))}finally{r(J,!1)}});async function Y(){try{await Lr.retryResource("scalesets")}catch(t){console.error("Retry failed:",t)}}const z=[{key:"name",title:"Name",cellComponent:_t,cellProps:{entityType:"scaleset"}},{key:"image",title:"Image",cellComponent:vr,cellProps:{field:"image",type:"code",showTitle:!0}},{key:"provider",title:"Provider",cellComponent:vr,cellProps:{field:"provider_name"}},{key:"flavor",title:"Flavor",cellComponent:vr,cellProps:{field:"flavor"}},{key:"entity",title:"Entity",cellComponent:St},{key:"endpoint",title:"Endpoint",cellComponent:kt},{key:"status",title:"Status",cellComponent:wt,cellProps:{statusType:"enabled"}},{key:"actions",title:"Actions",align:"right",cellComponent:ft}],Ge={entityType:"scaleset",primaryText:{field:"name",isClickable:!0,href:"/scalesets/{id}"},secondaryText:{field:"entity_name",computedValue:t=>Ce(t)},badges:[{type:"custom",value:t=>({variant:t.enabled?"success":"error",text:t.enabled?"Enabled":"Disabled"})}],actions:[{type:"edit",handler:t=>ae(t)},{type:"delete",handler:t=>oe(t)}]};function Me(t){r(K,t.detail.term),r(w,1)}function be(t){r(w,t.detail.page)}function He(t){r(g,t.detail.perPage),r(w,1)}function pe(t){ae(t.detail.item)}function Ne(t){oe(t.detail.item)}F(()=>(e(x),E()),()=>{(!e(x).length||E().loaded.scalesets)&&r(x,E().scalesets)}),F(()=>E(),()=>{r(J,E().loading.scalesets)}),F(()=>E(),()=>{r(A,E().errorMessages.scalesets)}),F(()=>(e(x),e(K),Ce),()=>{r(u,ht(e(x),e(K),t=>Ce(t)))}),F(()=>(e(u),e(g)),()=>{r(C,Math.ceil(e(u).length/e(g)))}),F(()=>(e(w),e(C)),()=>{e(w)>e(C)&&e(C)>0&&r(w,e(C))}),F(()=>(e(u),e(w),e(g)),()=>{r(re,e(u).slice((e(w)-1)*e(g),e(w)*e(g)))}),Ur(),Gr();var i=Ft();lt(t=>{st.title="Scale Sets - GARM"});var f=Pe(i),D=l(f);ct(D,{title:"Scale Sets",description:"Manage GitHub runner scale sets",actionLabel:"Add Scale Set",$$events:{action:te}});var le=a(D,2);{let t=nr(()=>e(A)||e(W)),v=nr(()=>!!e(A));mt(le,{get columns(){return z},get data(){return e(re)},get loading(){return e(J)},get error(){return e(t)},get searchTerm(){return e(K)},searchPlaceholder:"Search by entity name...",get currentPage(){return e(w)},get perPage(){return e(g)},get totalPages(){return e(C)},get totalItems(){return e(u),p(()=>e(u).length)},itemName:"scale sets",emptyIconType:"cog",get showRetry(){return e(v)},get mobileCardConfig(){return Ge},$$events:{search:Me,pageChange:be,perPageChange:He,retry:Y,edit:pe,delete:Ne}})}o(f);var me=a(f,2);{var Ue=t=>{Ut(t,{$$events:{close:()=>r(I,!1),submit:v=>ge(v.detail)}})};M(me,t=>{e(I)&&t(Ue)})}var se=a(me,2);{var Te=t=>{bt(t,{get scaleSet(){return e(m)},$$events:{close:()=>{r(H,!1),r(m,null)},submit:v=>ve(v.detail)}})};M(se,t=>{e(H)&&e(m)&&t(Te)})}var de=a(se,2);{var Ee=t=>{{let v=nr(()=>(e(m),qr(Ce),p(()=>`Scale Set ${e(m).name} (${Ce(e(m))})`)));pt(t,{title:"Delete Scale Set",message:"Are you sure you want to delete this scale set? This action cannot be undone and will remove all associated runners.",get itemName(){return e(v)},$$events:{close:()=>{r(N,!1),r(m,null)},confirm:R}})}};M(de,t=>{e(N)&&e(m)&&t(Ee)})}var Re=a(de,2);{var fe=t=>{Fr(t,{$$events:{close:()=>{}},children:(v,Z)=>{var ye=qt(),De=l(ye);yt(De,{message:"Loading scale set details..."}),o(ye),b(v,ye)},$$slots:{default:!0}})};M(Re,t=>{e(X)&&t(fe)})}b(ze,i),jr(),ue()}export{va as component}; +import"../chunks/DsnmJJEf.js";import{i as Gr}from"../chunks/TJn6xDN9.js";import{p as Hr,E as ot,o as Nr,l as F,k as r,g as e,m as d,h as Ur,f as k,s as a,d as l,r as o,t as _,i as ke,b,e as q,a as Pe,z as ir,y as we,u as p,D as Se,c as jr,A as Ir,q as qr,j as lt,$ as st,v as nr}from"../chunks/DniTuB_0.js";import{i as M,s as dt,a as it}from"../chunks/DbNhg6mG.js";import{r as V,s as cr,b as $e,g as G,d as zr,c as nt}from"../chunks/DSfKzFV1.js";import{P as ct}from"../chunks/RtJp4Ifn.js";import{e as ur,i as gr}from"../chunks/Ck5PkeSc.js";import{b as Q,a as ut}from"../chunks/CCQwxxp9.js";import{p as gt}from"../chunks/D4Caz1gY.js";import{M as Fr}from"../chunks/l9U2NoST.js";import{J as vt}from"../chunks/DoxpoDLH.js";import{e as B}from"../chunks/BZiHL9L3.js";import{U as bt}from"../chunks/D44hH3AJ.js";import{D as pt}from"../chunks/z19xmJI9.js";import{D as mt,G as vr,A as ft,L as yt}from"../chunks/BlJ06z1t.js";import{e as xt,a as Lr}from"../chunks/BE9PkXKz.js";import{t as ne}from"../chunks/CBJzOE8U.js";import{e as Ce,h as ht}from"../chunks/BC4TpgBU.js";import{E as _t}from"../chunks/30NlHgQ_.js";import{E as kt}from"../chunks/CE0C-N9m.js";import{S as wt}from"../chunks/BsX_CrDw.js";import{P as St}from"../chunks/DzXPCUia.js";import"../chunks/CRDKDqj5.js";var $t=k('

'),Ct=k('
'),Pt=k(""),Mt=k(''),Tt=k('
'),Et=k(""),Rt=k(''),Dt=k('
Loading templates...
'),At=k(""),It=k('

Templates define how the runner software is installed and configured.

',1),zt=k('

Create a template first or proceed without a template to use default behavior.

'),Lt=k('

Select an entity first to see available templates

'),Gt=k('

Entity & Provider Configuration

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Extra Specs (JSON)
',1),Ht=k('
Creating...
'),Nt=k('

Create New Scale Set

Scale sets are only available for GitHub endpoints

Entity Level *
');function Ut(ze,Le){Hr(Le,!1);const ce=d(),ue=ot();let E=d(!1),A=d(""),u=d(""),C=d([]),re=d([]),x=d([]),J=d(!1),W=d(!1),K=d(!1),w=d(""),g=d(""),I=d(""),H=d(""),N=d(""),m=d(void 0),X=d(void 0),ge=d(void 0),ve=d("garm"),R=d("linux"),te=d("amd64"),ae=d(""),oe=d(!0),Y=d("{}"),z=d(void 0);async function Ge(){try{r(W,!0),r(re,await G.listProviders())}catch(i){r(A,B(i))}finally{r(W,!1)}}async function Me(){try{r(K,!0);const i=be();if(!i){r(x,[]);return}if(r(x,await G.listTemplates(e(R),void 0,i)),!e(z)||!e(x).find(f=>f.id===e(z))){const f=e(x).find(D=>D.owner_id==="system");f?r(z,f.id):e(x).length>0&&r(z,e(x)[0].id)}}catch(i){r(A,B(i))}finally{r(K,!1)}}function be(){if(!e(g)||!e(C))return null;const i=e(C).find(f=>f.id===e(g));if(!i)return null;if("forge_type"in i)return i.forge_type;if("endpoint"in i){const f=i.endpoint;if(f&&"endpoint_type"in f)return f.endpoint_type||null}return"github"}async function He(){if(e(u))try{switch(r(J,!0),r(C,[]),e(u)){case"repository":r(C,await G.listRepositories());break;case"organization":r(C,await G.listOrganizations());break;case"enterprise":r(C,await G.listEnterprises());break}}catch(i){r(A,B(i))}finally{r(J,!1)}}function pe(i){e(u)!==i&&(r(u,i),r(g,""),r(z,void 0),He())}async function Ne(){if(!e(ce)){r(A,"Please fill in all required fields");return}try{r(E,!0),r(A,"");let i={};if(e(Y).trim())try{i=JSON.parse(e(Y))}catch{throw new Error("Invalid JSON in extra specs")}const f={name:e(w),provider_name:e(I),image:e(H),flavor:e(N),max_runners:e(m)||10,min_idle_runners:e(X)||0,runner_bootstrap_timeout:e(ge)||20,runner_prefix:e(ve),os_type:e(R),os_arch:e(te),"github-runner-group":e(ae)||void 0,enabled:e(oe),extra_specs:e(Y).trim()?i:void 0,template_id:e(z)};let D;switch(e(u)){case"repository":D=await G.createRepositoryScaleSet(e(g),f);break;case"organization":D=await G.createOrganizationScaleSet(e(g),f);break;case"enterprise":D=await G.createEnterpriseScaleSet(e(g),f);break;default:throw new Error("Invalid entity level selected")}ue("submit",D)}catch(i){r(A,B(i))}finally{r(E,!1)}}Nr(()=>{Ge()}),F(()=>(e(E),e(w),e(u),e(g),e(I),e(H),e(N)),()=>{r(ce,!e(E)&&e(w).trim()!==""&&e(u)!==""&&e(g)!==""&&e(I)!==""&&e(H).trim()!==""&&e(N).trim()!=="")}),F(()=>(e(g),e(R)),()=>{e(g)&&e(R)&&Me()}),F(()=>(e(R),e(g)),()=>{e(R)&&e(g)&&Me()}),Ur(),Gr(),Fr(ze,{$$events:{close:()=>ue("close")},children:(i,f)=>{var D=Nt(),le=a(l(D),2),me=l(le);{var Ue=S=>{var U=$t(),ie=l(U),Ae=l(ie,!0);o(ie),o(U),_(()=>q(Ae,e(A))),b(S,U)};M(me,S=>{e(A)&&S(Ue)})}var se=a(me,2),Te=a(l(se),2);V(Te),o(se);var de=a(se,2),Ee=l(de),Re=a(l(Ee),2),fe=l(Re),t=a(fe,2),v=a(t,2);o(Re),o(Ee),o(de);var Z=a(de,2);{var ye=S=>{var U=Gt(),ie=Pe(U),Ae=a(l(ie),2),qe=l(Ae),Fe=l(qe),Jr=l(Fe);ir(),o(Fe);var Wr=a(Fe,2);{var Kr=s=>{var y=Ct();b(s,y)},Qr=s=>{var y=Mt();_(()=>{e(g),we(()=>{e(u),e(C)})});var L=l(y),xe=l(L);o(L),L.value=L.__value="";var ee=a(L);ur(ee,1,()=>e(C),gr,(h,n)=>{var T=Pt(),O=l(T);{var he=c=>{var P=Se();_(()=>q(P,`${e(n),p(()=>e(n).owner)??""}/${e(n),p(()=>e(n).name)??""} (${e(n),p(()=>e(n).endpoint?.name||"Unknown endpoint")??""})`)),b(c,P)},j=c=>{var P=Se();_(()=>q(P,`${e(n),p(()=>e(n).name)??""} (${e(n),p(()=>e(n).endpoint?.name||"Unknown endpoint")??""})`)),b(c,P)};M(O,c=>{e(u)==="repository"?c(he):c(j,!1)})}o(T);var $={};_(()=>{$!==($=(e(n),p(()=>e(n).id)))&&(T.value=(T.__value=(e(n),p(()=>e(n).id)))??"")}),b(h,T)}),o(y),_(()=>q(xe,`Select a ${e(u)??""}`)),$e(y,()=>e(g),h=>r(g,h)),b(s,y)};M(Wr,s=>{e(J)?s(Kr):s(Qr,!1)})}o(qe);var pr=a(qe,2),Xr=a(l(pr),2);{var Yr=s=>{var y=Tt();b(s,y)},Zr=s=>{var y=Rt();_(()=>{e(I),we(()=>{e(re)})});var L=l(y);L.value=L.__value="";var xe=a(L);ur(xe,1,()=>e(re),gr,(ee,h)=>{var n=Et(),T=l(n,!0);o(n);var O={};_(()=>{q(T,(e(h),p(()=>e(h).name))),O!==(O=(e(h),p(()=>e(h).name)))&&(n.value=(n.__value=(e(h),p(()=>e(h).name)))??"")}),b(ee,n)}),o(y),$e(y,()=>e(I),ee=>r(I,ee)),b(s,y)};M(Xr,s=>{e(W)?s(Yr):s(Zr,!1)})}o(pr),o(Ae),o(ie);var Oe=a(ie,2),Ve=a(l(Oe),2),Be=l(Ve),mr=a(l(Be),2);V(mr),o(Be);var Je=a(Be,2),fr=a(l(Je),2);V(fr),o(Je);var We=a(Je,2),Ke=a(l(We),2);_(()=>{e(R),we(()=>{})});var Qe=l(Ke);Qe.value=Qe.__value="linux";var yr=a(Qe);yr.value=yr.__value="windows",o(Ke),o(We);var xr=a(We,2),Xe=a(l(xr),2);_(()=>{e(te),we(()=>{})});var Ye=l(Xe);Ye.value=Ye.__value="amd64";var hr=a(Ye);hr.value=hr.__value="arm64",o(Xe),o(xr),o(Ve);var _r=a(Ve,2),et=a(l(_r),2);{var rt=s=>{var y=Dt();b(s,y)},tt=s=>{var y=Ir(),L=Pe(y);{var xe=h=>{var n=It(),T=Pe(n);_(()=>{e(z),we(()=>{e(x)})}),ur(T,5,()=>e(x),gr,($,c)=>{var P=At(),_e=l(P),lr=a(_e);{var sr=dr=>{var Ar=Se();_(()=>q(Ar,`- ${e(c),p(()=>e(c).description)??""}`)),b(dr,Ar)};M(lr,dr=>{e(c),p(()=>e(c).description)&&dr(sr)})}o(P);var Ie={};_(()=>{q(_e,`${e(c),p(()=>e(c).name)??""} ${e(c),p(()=>e(c).owner_id==="system"?"(System)":"")??""} `),Ie!==(Ie=(e(c),p(()=>e(c).id)))&&(P.value=(P.__value=(e(c),p(()=>e(c).id)))??"")}),b($,P)}),o(T);var O=a(T,2),he=a(l(O));{var j=$=>{var c=Se();_(P=>q(c,`Showing templates for ${P??""} ${e(R)??""}.`),[()=>p(be)]),b($,c)};M(he,$=>{e(g)&&$(j)})}o(O),$e(T,()=>e(z),$=>r(z,$)),b(h,n)},ee=h=>{var n=Ir(),T=Pe(n);{var O=j=>{var $=zt(),c=l($),P=l(c);o(c);var _e=a(c,2),lr=l(_e);ir(),o(_e),o($),_((sr,Ie)=>{q(P,`No templates found for ${sr??""} ${e(R)??""}.`),nt(lr,"href",Ie)},[()=>p(be),()=>(qr(zr),p(()=>zr("/templates")))]),b(j,$)},he=j=>{var $=Lt();b(j,$)};M(T,j=>{e(g)?j(O):j(he,!1)},!0)}b(h,n)};M(L,h=>{e(x),p(()=>e(x).length>0)?h(xe):h(ee,!1)},!0)}b(s,y)};M(et,s=>{e(K)?s(rt):s(tt,!1)})}o(_r),o(Oe);var Ze=a(Oe,2),kr=a(l(Ze),2),er=l(kr),wr=a(l(er),2);V(wr),o(er);var rr=a(er,2),Sr=a(l(rr),2);V(Sr),o(rr);var $r=a(rr,2),Cr=a(l($r),2);V(Cr),o($r),o(kr),o(Ze);var Pr=a(Ze,2),tr=a(l(Pr),2),ar=l(tr),Mr=a(l(ar),2);V(Mr),o(ar);var Tr=a(ar,2),Er=a(l(Tr),2);V(Er),o(Tr),o(tr);var or=a(tr,2),at=a(l(or),2);vt(at,{rows:4,placeholder:"{}",get value(){return e(Y)},set value(s){r(Y,s)},$$legacy:!0}),o(or);var Rr=a(or,2),Dr=l(Rr);V(Dr),ir(2),o(Rr),o(Pr),_(s=>q(Jr,`${s??""} `),[()=>(e(u),p(()=>e(u).charAt(0).toUpperCase()+e(u).slice(1)))]),Q(mr,()=>e(H),s=>r(H,s)),Q(fr,()=>e(N),s=>r(N,s)),$e(Ke,()=>e(R),s=>r(R,s)),$e(Xe,()=>e(te),s=>r(te,s)),Q(wr,()=>e(X),s=>r(X,s)),Q(Sr,()=>e(m),s=>r(m,s)),Q(Cr,()=>e(ge),s=>r(ge,s)),Q(Mr,()=>e(ve),s=>r(ve,s)),Q(Er,()=>e(ae),s=>r(ae,s)),ut(Dr,()=>e(oe),s=>r(oe,s)),b(S,U)};M(Z,S=>{e(u)&&S(ye)})}var De=a(Z,2),br=l(De),je=a(br,2),Or=l(je);{var Vr=S=>{var U=Ht();b(S,U)},Br=S=>{var U=Se("Create Scale Set");b(S,U)};M(Or,S=>{e(E)?S(Vr):S(Br,!1)})}o(je),o(De),o(le),o(D),_(()=>{cr(fe,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(u)==="repository"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),cr(t,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(u)==="organization"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),cr(v,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(u)==="enterprise"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),je.disabled=!e(ce)}),Q(Te,()=>e(w),S=>r(w,S)),ke("click",fe,()=>pe("repository")),ke("click",t,()=>pe("organization")),ke("click",v,()=>pe("enterprise")),ke("click",br,()=>ue("close")),ke("submit",le,gt(Ne)),b(i,D)},$$slots:{default:!0}}),jr()}const jt={};var qt=k('
'),Ft=k('
',1);function va(ze,Le){Hr(Le,!1);const[ce,ue]=dt(),E=()=>it(xt,"$eagerCache",ce),A=d(),u=d(),C=d(),re=d();let x=d([]),J=d(!0),W=d(""),K=d(""),w=d(1),g=d(25),I=d(!1),H=d(!1),N=d(!1),m=d(null),X=d(!1);async function ge(t){try{r(W,""),r(I,!1),ne.success("Scale Set Created","Scale set has been created successfully.")}catch(v){throw r(W,B(v)),v}}async function ve(t){if(e(m))try{await G.updateScaleSet(e(m).id,t),ne.success("Scale Set Updated",`Scale set ${e(m).name} has been updated successfully.`),r(H,!1),r(m,null)}catch(v){const Z=B(v);throw ne.error("Update Failed",Z),v}}async function R(){if(e(m))try{await G.deleteScaleSet(e(m).id),ne.success("Scale Set Deleted",`Scale set ${e(m).name} has been deleted successfully.`)}catch(t){const v=B(t);ne.error("Delete Failed",v)}finally{r(N,!1),r(m,null)}}function te(){r(I,!0)}async function ae(t){try{r(X,!0);const v=await G.getScaleSet(t.id);r(m,v),r(H,!0)}catch(v){const Z=B(v);ne.error("Failed to Load Scale Set Details",Z)}finally{r(X,!1)}}function oe(t){r(m,t),r(N,!0)}Nr(async()=>{try{r(J,!0);const t=await Lr.getScaleSets();t&&Array.isArray(t)&&r(x,t)}catch(t){jt?.VITEST||console.error("Failed to load scale sets:",t),r(W,B(t))}finally{r(J,!1)}});async function Y(){try{await Lr.retryResource("scalesets")}catch(t){console.error("Retry failed:",t)}}const z=[{key:"name",title:"Name",cellComponent:_t,cellProps:{entityType:"scaleset"}},{key:"image",title:"Image",cellComponent:vr,cellProps:{field:"image",type:"code",showTitle:!0}},{key:"provider",title:"Provider",cellComponent:vr,cellProps:{field:"provider_name"}},{key:"flavor",title:"Flavor",cellComponent:vr,cellProps:{field:"flavor"}},{key:"entity",title:"Entity",cellComponent:St},{key:"endpoint",title:"Endpoint",cellComponent:kt},{key:"status",title:"Status",cellComponent:wt,cellProps:{statusType:"enabled"}},{key:"actions",title:"Actions",align:"right",cellComponent:ft}],Ge={entityType:"scaleset",primaryText:{field:"name",isClickable:!0,href:"/scalesets/{id}"},secondaryText:{field:"entity_name",computedValue:t=>Ce(t)},badges:[{type:"custom",value:t=>({variant:t.enabled?"success":"error",text:t.enabled?"Enabled":"Disabled"})}],actions:[{type:"edit",handler:t=>ae(t)},{type:"delete",handler:t=>oe(t)}]};function Me(t){r(K,t.detail.term),r(w,1)}function be(t){r(w,t.detail.page)}function He(t){r(g,t.detail.perPage),r(w,1)}function pe(t){ae(t.detail.item)}function Ne(t){oe(t.detail.item)}F(()=>(e(x),E()),()=>{(!e(x).length||E().loaded.scalesets)&&r(x,E().scalesets)}),F(()=>E(),()=>{r(J,E().loading.scalesets)}),F(()=>E(),()=>{r(A,E().errorMessages.scalesets)}),F(()=>(e(x),e(K),Ce),()=>{r(u,ht(e(x),e(K),t=>Ce(t)))}),F(()=>(e(u),e(g)),()=>{r(C,Math.ceil(e(u).length/e(g)))}),F(()=>(e(w),e(C)),()=>{e(w)>e(C)&&e(C)>0&&r(w,e(C))}),F(()=>(e(u),e(w),e(g)),()=>{r(re,e(u).slice((e(w)-1)*e(g),e(w)*e(g)))}),Ur(),Gr();var i=Ft();lt(t=>{st.title="Scale Sets - GARM"});var f=Pe(i),D=l(f);ct(D,{title:"Scale Sets",description:"Manage GitHub runner scale sets",actionLabel:"Add Scale Set",$$events:{action:te}});var le=a(D,2);{let t=nr(()=>e(A)||e(W)),v=nr(()=>!!e(A));mt(le,{get columns(){return z},get data(){return e(re)},get loading(){return e(J)},get error(){return e(t)},get searchTerm(){return e(K)},searchPlaceholder:"Search by entity name...",get currentPage(){return e(w)},get perPage(){return e(g)},get totalPages(){return e(C)},get totalItems(){return e(u),p(()=>e(u).length)},itemName:"scale sets",emptyIconType:"cog",get showRetry(){return e(v)},get mobileCardConfig(){return Ge},$$events:{search:Me,pageChange:be,perPageChange:He,retry:Y,edit:pe,delete:Ne}})}o(f);var me=a(f,2);{var Ue=t=>{Ut(t,{$$events:{close:()=>r(I,!1),submit:v=>ge(v.detail)}})};M(me,t=>{e(I)&&t(Ue)})}var se=a(me,2);{var Te=t=>{bt(t,{get scaleSet(){return e(m)},$$events:{close:()=>{r(H,!1),r(m,null)},submit:v=>ve(v.detail)}})};M(se,t=>{e(H)&&e(m)&&t(Te)})}var de=a(se,2);{var Ee=t=>{{let v=nr(()=>(e(m),qr(Ce),p(()=>`Scale Set ${e(m).name} (${Ce(e(m))})`)));pt(t,{title:"Delete Scale Set",message:"Are you sure you want to delete this scale set? This action cannot be undone and will remove all associated runners.",get itemName(){return e(v)},$$events:{close:()=>{r(N,!1),r(m,null)},confirm:R}})}};M(de,t=>{e(N)&&e(m)&&t(Ee)})}var Re=a(de,2);{var fe=t=>{Fr(t,{$$events:{close:()=>{}},children:(v,Z)=>{var ye=qt(),De=l(ye);yt(De,{message:"Loading scale set details..."}),o(ye),b(v,ye)},$$slots:{default:!0}})};M(Re,t=>{e(X)&&t(fe)})}b(ze,i),jr(),ue()}export{va as component}; diff --git a/webapp/assets/_app/immutable/nodes/2.DePCP1xr.js b/webapp/assets/_app/immutable/nodes/2.BmBet37R.js similarity index 99% rename from webapp/assets/_app/immutable/nodes/2.DePCP1xr.js rename to webapp/assets/_app/immutable/nodes/2.BmBet37R.js index 3641d11b..5c515e35 100644 --- a/webapp/assets/_app/immutable/nodes/2.DePCP1xr.js +++ b/webapp/assets/_app/immutable/nodes/2.BmBet37R.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as Ve}from"../chunks/TJn6xDN9.js";import{p as We,E as lt,l as Ue,k as c,m as j,g as e,h as Je,f as L,a as dt,d as r,s as a,r as t,C as ct,z as X,b as U,q as f,u as v,t as H,e as $,c as Fe,i as Ae,o as vt,B as ut,j as mt,$ as gt,w as P}from"../chunks/DniTuB_0.js";import{p as pt,i as A,s as bt,a as ft}from"../chunks/DbNhg6mG.js";import{e as xt,i as ht}from"../chunks/Ck5PkeSc.js";import{B as kt,r as ke,s as Me,g as Oe,d as I,c as Y}from"../chunks/BZ2rxtTc.js";import{w as ye}from"../chunks/DmHFwzWx.js";import{e as yt,a as _e}from"../chunks/DKJ_c8yL.js";import{b as we}from"../chunks/CCQwxxp9.js";import{p as _t}from"../chunks/D4Caz1gY.js";import{M as wt}from"../chunks/CHjY0Kaf.js";import{T as oe}from"../chunks/DUI-G4vy.js";import{t as De}from"../chunks/CBJzOE8U.js";import{e as Mt}from"../chunks/BZiHL9L3.js";var Ut=ct(' Settings',1),Ct=L('
Metadata
'),Rt=L('
Callback
'),Lt=L('
Webhook
'),zt=L('

No URLs configured

'),St=L('
Controller Webhook URL

Use this URL in your GitHub organization/repository webhook settings

'),$t=L('

Please enter a valid URL

'),jt=L('

Please enter a valid URL

'),Bt=L('

Please enter a valid URL

'),It=L('

Controller Settings

URL where runners can fetch metadata and setup information

URL where runners send status updates and lifecycle events

URL where GitHub/Gitea will send webhook events for job notifications

Time to wait before spinning up a runner for a new job (0 = immediate)

'),At=L('

Controller Information

Identity

Controller ID
Hostname
Job Age Backoff

Integration URLs

',1);function Et(Ce,se){We(se,!1);const b=j(),ie=j();let l=pt(se,"controllerInfo",12);const ne=lt();let i=j(!1),C=j(!1),x=j(""),M=j(""),u=j(""),z=j(null);function le(){c(x,l().metadata_url||""),c(M,l().callback_url||""),c(u,l().webhook_url||""),c(z,l().minimum_job_age_backoff||null),c(i,!0)}async function Re(){try{c(C,!0);const n={};e(x).trim()&&(n.metadata_url=e(x).trim()),e(M).trim()&&(n.callback_url=e(M).trim()),e(u).trim()&&(n.webhook_url=e(u).trim()),e(z)!==null&&e(z)>=0&&(n.minimum_job_age_backoff=e(z));const d=await Oe.updateController(n);De.success("Settings Updated","Controller settings have been updated successfully."),c(i,!1),l(d),ne("updated",d)}catch(n){De.error("Update Failed",n instanceof Error?n.message:"Failed to update controller settings")}finally{c(C,!1)}}function de(){c(i,!1),c(x,""),c(M,""),c(u,""),c(z,null)}Ue(()=>{},()=>{c(b,n=>{if(!n.trim())return!0;try{return new URL(n),!0}catch{return!1}})}),Ue(()=>(e(b),e(x),e(M),e(u),e(z)),()=>{c(ie,e(b)(e(x))&&e(b)(e(M))&&e(b)(e(u))&&(e(z)===null||e(z)>=0))}),Je(),Ve();var ce=At(),Z=dt(ce),J=r(Z),F=r(J),ee=r(F),O=a(r(ee),2),te=a(r(O),2),ve=r(te),ue=r(ve);t(ve),t(te),t(O),t(ee);var me=a(ee,2);kt(me,{variant:"secondary",size:"sm",$$events:{click:le},children:(n,d)=>{var g=Ut();X(),U(n,g)},$$slots:{default:!0}}),t(F);var N=a(F,2),Q=r(N),re=r(Q),ge=a(r(re),2),s=r(ge),o=a(r(s),2),h=r(o,!0);t(o),t(s);var k=a(s,2),p=a(r(k),2),y=r(p,!0);t(p),t(k);var S=a(k,2),E=r(S),T=a(r(E),2),D=r(T);oe(D,{title:"Job Age Backoff",content:"Time in seconds GARM waits after receiving a new job before spinning up a runner. This delay allows existing idle runners to pick up jobs first, preventing unnecessary runner creation. Set to 0 for immediate response."}),t(T),t(E);var G=a(E,2),q=r(G);t(G),t(S),t(ge),t(re),t(Q);var V=a(Q,2),K=r(V),pe=a(r(K),2),be=r(pe);{var Le=n=>{var d=Ct(),g=r(d),_=a(r(g),2),B=r(_);oe(B,{title:"Metadata URL",content:"URL where runners retrieve setup information and metadata. Runners must be able to connect to this URL during their initialization process. Usually accessible at /api/v1/metadata endpoint."}),t(_),t(g);var w=a(g,2),R=r(w,!0);t(w),t(d),H(()=>$(R,(f(l()),v(()=>l().metadata_url)))),U(n,d)};A(be,n=>{f(l()),v(()=>l().metadata_url)&&n(Le)})}var Ee=a(be,2);{var Ne=n=>{var d=Rt(),g=r(d),_=a(r(g),2),B=r(_);oe(B,{title:"Callback URL",content:"URL where runners send status updates and system information (OS version, runner agent ID, etc.) to the controller. Runners must be able to connect to this URL. Usually accessible at /api/v1/callbacks endpoint."}),t(_),t(g);var w=a(g,2),R=r(w,!0);t(w),t(d),H(()=>$(R,(f(l()),v(()=>l().callback_url)))),U(n,d)};A(Ee,n=>{f(l()),v(()=>l().callback_url)&&n(Ne)})}var He=a(Ee,2);{var Qe=n=>{var d=Lt(),g=r(d),_=a(r(g),2),B=r(_);oe(B,{title:"Webhook Base URL",content:"Base URL for webhooks where GitHub sends job notifications. GARM needs to receive these webhooks to know when to create new runners for jobs. GitHub must be able to connect to this URL. Usually accessible at /webhooks endpoint."}),t(_),t(g);var w=a(g,2),R=r(w,!0);t(w),t(d),H(()=>$(R,(f(l()),v(()=>l().webhook_url)))),U(n,d)};A(He,n=>{f(l()),v(()=>l().webhook_url)&&n(Qe)})}var Ke=a(He,2);{var Xe=n=>{var d=zt(),g=a(r(d),4);t(d),Ae("click",g,le),U(n,d)};A(Ke,n=>{f(l()),v(()=>!l().metadata_url&&!l().callback_url&&!l().webhook_url)&&n(Xe)})}t(pe),t(K),t(V),t(N);var Ye=a(N,2);{var Ze=n=>{var d=St(),g=r(d),_=a(r(g),2),B=r(_);oe(B,{title:"Controller Webhook URL",content:"Unique webhook URL for this GARM controller. This is the preferred URL to use in GitHub webhook settings as it's controller-specific and allows multiple GARM controllers to work with the same repository. Automatically combines the webhook base URL with the controller ID."}),t(_),t(g);var w=a(g,2),R=r(w),ae=a(r(R),2),fe=r(ae),ze=r(fe,!0);t(fe),X(2),t(ae),t(R),t(w),t(d),H(()=>$(ze,(f(l()),v(()=>l().controller_webhook_url)))),U(n,d)};A(Ye,n=>{f(l()),v(()=>l().controller_webhook_url)&&n(Ze)})}t(J),t(Z);var et=a(Z,2);{var tt=n=>{wt(n,{$$events:{close:de},children:(d,g)=>{var _=It(),B=a(r(_),2),w=r(B),R=a(r(w),2);ke(R);let ae;var fe=a(R,2);{var ze=m=>{var W=$t();U(m,W)};A(fe,m=>{e(b),e(x),v(()=>!e(b)(e(x)))&&m(ze)})}X(2),t(w);var Se=a(w,2),xe=a(r(Se),2);ke(xe);let Ge;var rt=a(xe,2);{var at=m=>{var W=jt();U(m,W)};A(rt,m=>{e(b),e(M),v(()=>!e(b)(e(M)))&&m(at)})}X(2),t(Se);var $e=a(Se,2),he=a(r($e),2);ke(he);let qe;var ot=a(he,2);{var st=m=>{var W=Bt();U(m,W)};A(ot,m=>{e(b),e(u),v(()=>!e(b)(e(u)))&&m(st)})}X(2),t($e);var je=a($e,2),Pe=a(r(je),2);ke(Pe),X(2),t(je);var Te=a(je,2),Be=r(Te),Ie=a(Be,2),it=r(Ie,!0);t(Ie),t(Te),t(B),t(_),H((m,W,nt)=>{ae=Me(R,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,ae,m),Ge=Me(xe,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,Ge,W),qe=Me(he,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,qe,nt),Be.disabled=e(C),Ie.disabled=!e(ie)||e(C),$(it,e(C)?"Saving...":"Save Changes")},[()=>({"border-red-300":!e(b)(e(x))}),()=>({"border-red-300":!e(b)(e(M))}),()=>({"border-red-300":!e(b)(e(u))})]),we(R,()=>e(x),m=>c(x,m)),we(xe,()=>e(M),m=>c(M,m)),we(he,()=>e(u),m=>c(u,m)),we(Pe,()=>e(z),m=>c(z,m)),Ae("click",Be,de),Ae("submit",B,_t(Re)),U(d,_)},$$slots:{default:!0}})};A(et,n=>{e(i)&&n(tt)})}H(n=>{$(ue,`v${n??""}`),$(h,(f(l()),v(()=>l().controller_id))),$(y,(f(l()),v(()=>l().hostname||"Unknown"))),$(q,`${f(l()),v(()=>l().minimum_job_age_backoff||30)??""}s`)},[()=>(f(l()),v(()=>l().version?.replace(/^v/,"")||"Unknown"))]),U(Ce,ce),Fe()}var Ht=L('

Error loading dashboard

'),Gt=L('
'),qt=L('

Dashboard

Welcome to GARM - GitHub Actions Runner Manager

');function er(Ce,se){We(se,!1);const[b,ie]=bt(),l=()=>ft(yt,"$eagerCache",b),ne=j();let i=j({repositories:0,organizations:0,pools:0,instances:0}),C=j(null),x=j(""),M=[];function u(s,o,h=1e3){const k=parseInt(s.textContent||"0"),p=(o-k)/(h/16);let y=k;const S=()=>{if(y+=p,p>0&&y>=o||p<0&&y<=o){s.textContent=o.toString();return}s.textContent=Math.floor(y).toString(),requestAnimationFrame(S)};k!==o&&requestAnimationFrame(S)}vt(async()=>{try{const[p,y,S,E,T]=await Promise.all([_e.getRepositories(),_e.getOrganizations(),_e.getPools(),Oe.listInstances(),_e.getControllerInfo()]);setTimeout(()=>{const D=document.querySelector('[data-stat="repositories"]'),G=document.querySelector('[data-stat="organizations"]'),q=document.querySelector('[data-stat="pools"]'),V=document.querySelector('[data-stat="instances"]');D&&u(D,p.length),G&&u(G,y.length),q&&u(q,S.length),V&&u(V,E.length)},100),c(i,{repositories:p.length,organizations:y.length,pools:S.length,instances:E.length}),T&&c(C,T)}catch(p){c(x,Mt(p)),console.error("Dashboard error:",p)}const s=ye.subscribeToEntity("repository",["create","delete"],z),o=ye.subscribeToEntity("organization",["create","delete"],le),h=ye.subscribeToEntity("pool",["create","delete"],Re),k=ye.subscribeToEntity("instance",["create","delete"],de);M=[s,o,h,k]}),ut(()=>{M.forEach(s=>s())});function z(s){const o=document.querySelector('[data-stat="repositories"]');s.operation==="create"?(P(i,e(i).repositories++),o&&u(o,e(i).repositories,500)):s.operation==="delete"&&(P(i,e(i).repositories=Math.max(0,e(i).repositories-1)),o&&u(o,e(i).repositories,500))}function le(s){const o=document.querySelector('[data-stat="organizations"]');s.operation==="create"?(P(i,e(i).organizations++),o&&u(o,e(i).organizations,500)):s.operation==="delete"&&(P(i,e(i).organizations=Math.max(0,e(i).organizations-1)),o&&u(o,e(i).organizations,500))}function Re(s){const o=document.querySelector('[data-stat="pools"]');s.operation==="create"?(P(i,e(i).pools++),o&&u(o,e(i).pools,500)):s.operation==="delete"&&(P(i,e(i).pools=Math.max(0,e(i).pools-1)),o&&u(o,e(i).pools,500))}function de(s){const o=document.querySelector('[data-stat="instances"]');s.operation==="create"?(P(i,e(i).instances++),o&&u(o,e(i).instances,500)):s.operation==="delete"&&(P(i,e(i).instances=Math.max(0,e(i).instances-1)),o&&u(o,e(i).instances,500))}function ce(s){c(C,s.detail)}function Z(s){return{blue:"bg-blue-500 text-white",green:"bg-green-500 text-white",purple:"bg-purple-500 text-white",yellow:"bg-yellow-500 text-white"}[s]||"bg-gray-500 text-white"}Ue(()=>(e(C),l()),()=>{(!e(C)||l().loaded.controllerInfo)&&c(C,l().controllerInfo)}),Ue(()=>(e(i),I),()=>{c(ne,[{title:"Repositories",value:e(i).repositories,icon:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z",color:"blue",href:I("/repositories")},{title:"Organizations",value:e(i).organizations,icon:"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z",color:"green",href:I("/organizations")},{title:"Pools",value:e(i).pools,icon:"M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z",color:"purple",href:I("/pools")},{title:"Instances",value:e(i).instances,icon:"M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z",color:"yellow",href:I("/instances")}])}),Je(),Ve();var J=qt();mt(s=>{gt.title="Dashboard - GARM"});var F=a(r(J),2);{var ee=s=>{var o=Ht(),h=r(o),k=a(r(h),2),p=a(r(k),2),y=r(p,!0);t(p),t(k),t(h),t(o),H(()=>$(y,e(x))),U(s,o)};A(F,s=>{e(x)&&s(ee)})}var O=a(F,2);xt(O,5,()=>e(ne),ht,(s,o)=>{var h=Gt(),k=r(h),p=r(k),y=r(p),S=r(y),E=r(S),T=r(E);t(E),t(S),t(y);var D=a(y,2),G=r(D),q=r(G),V=r(q,!0);t(q);var K=a(q,2),pe=r(K,!0);t(K),t(G),t(D),t(p),t(k),t(h),H((be,Le)=>{Y(h,"href",(e(o),v(()=>e(o).href))),Me(S,1,`w-8 h-8 rounded-md ${be??""} flex items-center justify-center`),Y(T,"d",(e(o),v(()=>e(o).icon))),$(V,(e(o),v(()=>e(o).title))),Y(K,"data-stat",Le),$(pe,(e(o),v(()=>e(o).value)))},[()=>(e(o),v(()=>Z(e(o).color))),()=>(e(o),v(()=>e(o).title.toLowerCase()))]),U(s,h)}),t(O);var te=a(O,2);{var ve=s=>{Et(s,{get controllerInfo(){return e(C)},$$events:{updated:ce}})};A(te,s=>{e(C)&&s(ve)})}var ue=a(te,2),me=r(ue),N=a(r(me),4),Q=r(N),re=a(Q,2),ge=a(re,2);t(N),t(me),t(ue),t(J),H((s,o,h)=>{Y(Q,"href",s),Y(re,"href",o),Y(ge,"href",h)},[()=>(f(I),v(()=>I("/repositories"))),()=>(f(I),v(()=>I("/pools"))),()=>(f(I),v(()=>I("/instances")))]),U(Ce,J),Fe(),ie()}export{er as component}; +import"../chunks/DsnmJJEf.js";import{i as Ve}from"../chunks/TJn6xDN9.js";import{p as We,E as lt,l as Ue,k as c,m as j,g as e,h as Je,f as L,a as dt,d as r,s as a,r as t,C as ct,z as X,b as U,q as f,u as v,t as H,e as $,c as Fe,i as Ae,o as vt,B as ut,j as mt,$ as gt,w as P}from"../chunks/DniTuB_0.js";import{p as pt,i as A,s as bt,a as ft}from"../chunks/DbNhg6mG.js";import{e as xt,i as ht}from"../chunks/Ck5PkeSc.js";import{B as kt,r as ke,s as Me,g as Oe,d as I,c as Y}from"../chunks/DSfKzFV1.js";import{w as ye}from"../chunks/DmHFwzWx.js";import{e as yt,a as _e}from"../chunks/BE9PkXKz.js";import{b as we}from"../chunks/CCQwxxp9.js";import{p as _t}from"../chunks/D4Caz1gY.js";import{M as wt}from"../chunks/l9U2NoST.js";import{T as oe}from"../chunks/CwLZz6xi.js";import{t as De}from"../chunks/CBJzOE8U.js";import{e as Mt}from"../chunks/BZiHL9L3.js";var Ut=ct(' Settings',1),Ct=L('
Metadata
'),Rt=L('
Callback
'),Lt=L('
Webhook
'),zt=L('

No URLs configured

'),St=L('
Controller Webhook URL

Use this URL in your GitHub organization/repository webhook settings

'),$t=L('

Please enter a valid URL

'),jt=L('

Please enter a valid URL

'),Bt=L('

Please enter a valid URL

'),It=L('

Controller Settings

URL where runners can fetch metadata and setup information

URL where runners send status updates and lifecycle events

URL where GitHub/Gitea will send webhook events for job notifications

Time to wait before spinning up a runner for a new job (0 = immediate)

'),At=L('

Controller Information

Identity

Controller ID
Hostname
Job Age Backoff

Integration URLs

',1);function Et(Ce,se){We(se,!1);const b=j(),ie=j();let l=pt(se,"controllerInfo",12);const ne=lt();let i=j(!1),C=j(!1),x=j(""),M=j(""),u=j(""),z=j(null);function le(){c(x,l().metadata_url||""),c(M,l().callback_url||""),c(u,l().webhook_url||""),c(z,l().minimum_job_age_backoff||null),c(i,!0)}async function Re(){try{c(C,!0);const n={};e(x).trim()&&(n.metadata_url=e(x).trim()),e(M).trim()&&(n.callback_url=e(M).trim()),e(u).trim()&&(n.webhook_url=e(u).trim()),e(z)!==null&&e(z)>=0&&(n.minimum_job_age_backoff=e(z));const d=await Oe.updateController(n);De.success("Settings Updated","Controller settings have been updated successfully."),c(i,!1),l(d),ne("updated",d)}catch(n){De.error("Update Failed",n instanceof Error?n.message:"Failed to update controller settings")}finally{c(C,!1)}}function de(){c(i,!1),c(x,""),c(M,""),c(u,""),c(z,null)}Ue(()=>{},()=>{c(b,n=>{if(!n.trim())return!0;try{return new URL(n),!0}catch{return!1}})}),Ue(()=>(e(b),e(x),e(M),e(u),e(z)),()=>{c(ie,e(b)(e(x))&&e(b)(e(M))&&e(b)(e(u))&&(e(z)===null||e(z)>=0))}),Je(),Ve();var ce=At(),Z=dt(ce),J=r(Z),F=r(J),ee=r(F),O=a(r(ee),2),te=a(r(O),2),ve=r(te),ue=r(ve);t(ve),t(te),t(O),t(ee);var me=a(ee,2);kt(me,{variant:"secondary",size:"sm",$$events:{click:le},children:(n,d)=>{var g=Ut();X(),U(n,g)},$$slots:{default:!0}}),t(F);var N=a(F,2),Q=r(N),re=r(Q),ge=a(r(re),2),s=r(ge),o=a(r(s),2),h=r(o,!0);t(o),t(s);var k=a(s,2),p=a(r(k),2),y=r(p,!0);t(p),t(k);var S=a(k,2),E=r(S),T=a(r(E),2),D=r(T);oe(D,{title:"Job Age Backoff",content:"Time in seconds GARM waits after receiving a new job before spinning up a runner. This delay allows existing idle runners to pick up jobs first, preventing unnecessary runner creation. Set to 0 for immediate response."}),t(T),t(E);var G=a(E,2),q=r(G);t(G),t(S),t(ge),t(re),t(Q);var V=a(Q,2),K=r(V),pe=a(r(K),2),be=r(pe);{var Le=n=>{var d=Ct(),g=r(d),_=a(r(g),2),B=r(_);oe(B,{title:"Metadata URL",content:"URL where runners retrieve setup information and metadata. Runners must be able to connect to this URL during their initialization process. Usually accessible at /api/v1/metadata endpoint."}),t(_),t(g);var w=a(g,2),R=r(w,!0);t(w),t(d),H(()=>$(R,(f(l()),v(()=>l().metadata_url)))),U(n,d)};A(be,n=>{f(l()),v(()=>l().metadata_url)&&n(Le)})}var Ee=a(be,2);{var Ne=n=>{var d=Rt(),g=r(d),_=a(r(g),2),B=r(_);oe(B,{title:"Callback URL",content:"URL where runners send status updates and system information (OS version, runner agent ID, etc.) to the controller. Runners must be able to connect to this URL. Usually accessible at /api/v1/callbacks endpoint."}),t(_),t(g);var w=a(g,2),R=r(w,!0);t(w),t(d),H(()=>$(R,(f(l()),v(()=>l().callback_url)))),U(n,d)};A(Ee,n=>{f(l()),v(()=>l().callback_url)&&n(Ne)})}var He=a(Ee,2);{var Qe=n=>{var d=Lt(),g=r(d),_=a(r(g),2),B=r(_);oe(B,{title:"Webhook Base URL",content:"Base URL for webhooks where GitHub sends job notifications. GARM needs to receive these webhooks to know when to create new runners for jobs. GitHub must be able to connect to this URL. Usually accessible at /webhooks endpoint."}),t(_),t(g);var w=a(g,2),R=r(w,!0);t(w),t(d),H(()=>$(R,(f(l()),v(()=>l().webhook_url)))),U(n,d)};A(He,n=>{f(l()),v(()=>l().webhook_url)&&n(Qe)})}var Ke=a(He,2);{var Xe=n=>{var d=zt(),g=a(r(d),4);t(d),Ae("click",g,le),U(n,d)};A(Ke,n=>{f(l()),v(()=>!l().metadata_url&&!l().callback_url&&!l().webhook_url)&&n(Xe)})}t(pe),t(K),t(V),t(N);var Ye=a(N,2);{var Ze=n=>{var d=St(),g=r(d),_=a(r(g),2),B=r(_);oe(B,{title:"Controller Webhook URL",content:"Unique webhook URL for this GARM controller. This is the preferred URL to use in GitHub webhook settings as it's controller-specific and allows multiple GARM controllers to work with the same repository. Automatically combines the webhook base URL with the controller ID."}),t(_),t(g);var w=a(g,2),R=r(w),ae=a(r(R),2),fe=r(ae),ze=r(fe,!0);t(fe),X(2),t(ae),t(R),t(w),t(d),H(()=>$(ze,(f(l()),v(()=>l().controller_webhook_url)))),U(n,d)};A(Ye,n=>{f(l()),v(()=>l().controller_webhook_url)&&n(Ze)})}t(J),t(Z);var et=a(Z,2);{var tt=n=>{wt(n,{$$events:{close:de},children:(d,g)=>{var _=It(),B=a(r(_),2),w=r(B),R=a(r(w),2);ke(R);let ae;var fe=a(R,2);{var ze=m=>{var W=$t();U(m,W)};A(fe,m=>{e(b),e(x),v(()=>!e(b)(e(x)))&&m(ze)})}X(2),t(w);var Se=a(w,2),xe=a(r(Se),2);ke(xe);let Ge;var rt=a(xe,2);{var at=m=>{var W=jt();U(m,W)};A(rt,m=>{e(b),e(M),v(()=>!e(b)(e(M)))&&m(at)})}X(2),t(Se);var $e=a(Se,2),he=a(r($e),2);ke(he);let qe;var ot=a(he,2);{var st=m=>{var W=Bt();U(m,W)};A(ot,m=>{e(b),e(u),v(()=>!e(b)(e(u)))&&m(st)})}X(2),t($e);var je=a($e,2),Pe=a(r(je),2);ke(Pe),X(2),t(je);var Te=a(je,2),Be=r(Te),Ie=a(Be,2),it=r(Ie,!0);t(Ie),t(Te),t(B),t(_),H((m,W,nt)=>{ae=Me(R,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,ae,m),Ge=Me(xe,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,Ge,W),qe=Me(he,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,qe,nt),Be.disabled=e(C),Ie.disabled=!e(ie)||e(C),$(it,e(C)?"Saving...":"Save Changes")},[()=>({"border-red-300":!e(b)(e(x))}),()=>({"border-red-300":!e(b)(e(M))}),()=>({"border-red-300":!e(b)(e(u))})]),we(R,()=>e(x),m=>c(x,m)),we(xe,()=>e(M),m=>c(M,m)),we(he,()=>e(u),m=>c(u,m)),we(Pe,()=>e(z),m=>c(z,m)),Ae("click",Be,de),Ae("submit",B,_t(Re)),U(d,_)},$$slots:{default:!0}})};A(et,n=>{e(i)&&n(tt)})}H(n=>{$(ue,`v${n??""}`),$(h,(f(l()),v(()=>l().controller_id))),$(y,(f(l()),v(()=>l().hostname||"Unknown"))),$(q,`${f(l()),v(()=>l().minimum_job_age_backoff||30)??""}s`)},[()=>(f(l()),v(()=>l().version?.replace(/^v/,"")||"Unknown"))]),U(Ce,ce),Fe()}var Ht=L('

Error loading dashboard

'),Gt=L('
'),qt=L('

Dashboard

Welcome to GARM - GitHub Actions Runner Manager

');function er(Ce,se){We(se,!1);const[b,ie]=bt(),l=()=>ft(yt,"$eagerCache",b),ne=j();let i=j({repositories:0,organizations:0,pools:0,instances:0}),C=j(null),x=j(""),M=[];function u(s,o,h=1e3){const k=parseInt(s.textContent||"0"),p=(o-k)/(h/16);let y=k;const S=()=>{if(y+=p,p>0&&y>=o||p<0&&y<=o){s.textContent=o.toString();return}s.textContent=Math.floor(y).toString(),requestAnimationFrame(S)};k!==o&&requestAnimationFrame(S)}vt(async()=>{try{const[p,y,S,E,T]=await Promise.all([_e.getRepositories(),_e.getOrganizations(),_e.getPools(),Oe.listInstances(),_e.getControllerInfo()]);setTimeout(()=>{const D=document.querySelector('[data-stat="repositories"]'),G=document.querySelector('[data-stat="organizations"]'),q=document.querySelector('[data-stat="pools"]'),V=document.querySelector('[data-stat="instances"]');D&&u(D,p.length),G&&u(G,y.length),q&&u(q,S.length),V&&u(V,E.length)},100),c(i,{repositories:p.length,organizations:y.length,pools:S.length,instances:E.length}),T&&c(C,T)}catch(p){c(x,Mt(p)),console.error("Dashboard error:",p)}const s=ye.subscribeToEntity("repository",["create","delete"],z),o=ye.subscribeToEntity("organization",["create","delete"],le),h=ye.subscribeToEntity("pool",["create","delete"],Re),k=ye.subscribeToEntity("instance",["create","delete"],de);M=[s,o,h,k]}),ut(()=>{M.forEach(s=>s())});function z(s){const o=document.querySelector('[data-stat="repositories"]');s.operation==="create"?(P(i,e(i).repositories++),o&&u(o,e(i).repositories,500)):s.operation==="delete"&&(P(i,e(i).repositories=Math.max(0,e(i).repositories-1)),o&&u(o,e(i).repositories,500))}function le(s){const o=document.querySelector('[data-stat="organizations"]');s.operation==="create"?(P(i,e(i).organizations++),o&&u(o,e(i).organizations,500)):s.operation==="delete"&&(P(i,e(i).organizations=Math.max(0,e(i).organizations-1)),o&&u(o,e(i).organizations,500))}function Re(s){const o=document.querySelector('[data-stat="pools"]');s.operation==="create"?(P(i,e(i).pools++),o&&u(o,e(i).pools,500)):s.operation==="delete"&&(P(i,e(i).pools=Math.max(0,e(i).pools-1)),o&&u(o,e(i).pools,500))}function de(s){const o=document.querySelector('[data-stat="instances"]');s.operation==="create"?(P(i,e(i).instances++),o&&u(o,e(i).instances,500)):s.operation==="delete"&&(P(i,e(i).instances=Math.max(0,e(i).instances-1)),o&&u(o,e(i).instances,500))}function ce(s){c(C,s.detail)}function Z(s){return{blue:"bg-blue-500 text-white",green:"bg-green-500 text-white",purple:"bg-purple-500 text-white",yellow:"bg-yellow-500 text-white"}[s]||"bg-gray-500 text-white"}Ue(()=>(e(C),l()),()=>{(!e(C)||l().loaded.controllerInfo)&&c(C,l().controllerInfo)}),Ue(()=>(e(i),I),()=>{c(ne,[{title:"Repositories",value:e(i).repositories,icon:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z",color:"blue",href:I("/repositories")},{title:"Organizations",value:e(i).organizations,icon:"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z",color:"green",href:I("/organizations")},{title:"Pools",value:e(i).pools,icon:"M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z",color:"purple",href:I("/pools")},{title:"Instances",value:e(i).instances,icon:"M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z",color:"yellow",href:I("/instances")}])}),Je(),Ve();var J=qt();mt(s=>{gt.title="Dashboard - GARM"});var F=a(r(J),2);{var ee=s=>{var o=Ht(),h=r(o),k=a(r(h),2),p=a(r(k),2),y=r(p,!0);t(p),t(k),t(h),t(o),H(()=>$(y,e(x))),U(s,o)};A(F,s=>{e(x)&&s(ee)})}var O=a(F,2);xt(O,5,()=>e(ne),ht,(s,o)=>{var h=Gt(),k=r(h),p=r(k),y=r(p),S=r(y),E=r(S),T=r(E);t(E),t(S),t(y);var D=a(y,2),G=r(D),q=r(G),V=r(q,!0);t(q);var K=a(q,2),pe=r(K,!0);t(K),t(G),t(D),t(p),t(k),t(h),H((be,Le)=>{Y(h,"href",(e(o),v(()=>e(o).href))),Me(S,1,`w-8 h-8 rounded-md ${be??""} flex items-center justify-center`),Y(T,"d",(e(o),v(()=>e(o).icon))),$(V,(e(o),v(()=>e(o).title))),Y(K,"data-stat",Le),$(pe,(e(o),v(()=>e(o).value)))},[()=>(e(o),v(()=>Z(e(o).color))),()=>(e(o),v(()=>e(o).title.toLowerCase()))]),U(s,h)}),t(O);var te=a(O,2);{var ve=s=>{Et(s,{get controllerInfo(){return e(C)},$$events:{updated:ce}})};A(te,s=>{e(C)&&s(ve)})}var ue=a(te,2),me=r(ue),N=a(r(me),4),Q=r(N),re=a(Q,2),ge=a(re,2);t(N),t(me),t(ue),t(J),H((s,o,h)=>{Y(Q,"href",s),Y(re,"href",o),Y(ge,"href",h)},[()=>(f(I),v(()=>I("/repositories"))),()=>(f(I),v(()=>I("/pools"))),()=>(f(I),v(()=>I("/instances")))]),U(Ce,J),Fe(),ie()}export{er as component}; diff --git a/webapp/assets/_app/immutable/nodes/20.CiUKuwkk.js b/webapp/assets/_app/immutable/nodes/20.CiUKuwkk.js deleted file mode 100644 index 78a1a6d7..00000000 --- a/webapp/assets/_app/immutable/nodes/20.CiUKuwkk.js +++ /dev/null @@ -1,2 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as Dt}from"../chunks/TJn6xDN9.js";import{p as Ut,o as Lt,l as ue,h as Rt,f as A,j as It,a as ee,b as _,c as Mt,g as e,m as w,t as P,k as l,u as s,$ as Et,s as r,w as I,A as Oe,d,r as o,z as W,D as qe,v as g,e as S,q as U,i as Ce,y as Ft}from"../chunks/DniTuB_0.js";import{i as T}from"../chunks/DbNhg6mG.js";import{d as te,g as $e,r as Ye,b as St}from"../chunks/BZ2rxtTc.js";import{b as Je}from"../chunks/CCQwxxp9.js";import{p as Ht}from"../chunks/D4Caz1gY.js";import{p as me}from"../chunks/Hb0uuDRx.js";import{g as Ae}from"../chunks/HMJxCnAR.js";import{A as Ke}from"../chunks/Ok63PiOl.js";import{t as M}from"../chunks/CBJzOE8U.js";import{e as De}from"../chunks/BZiHL9L3.js";import{g as Qe,B as pe}from"../chunks/CTcPpzia.js";import{D as Bt}from"../chunks/J4QHiesY.js";import{C as Pt,a as Xe}from"../chunks/Byy0srta.js";import{D as jt}from"../chunks/DGVAzkoE.js";import{i as Ze}from"../chunks/C98nByjP.js";import{w as Gt}from"../chunks/DmHFwzWx.js";var Vt=A('
Loading template...
'),zt=A('

Error loading template

'),Nt=A('
Forge Type

Cannot be changed

OS Type

Cannot be changed

'),Wt=A('
Created
'),Ot=A('
Last Updated
'),qt=A('
Name
Description
Forge Type
OS Type
Owner
Template ID
'),Yt=A('
'),Jt=A('

Available Template Variables

Your template can use the following variables using Go template syntax (e.g., ):

Runner Info
  • .RunnerName - Runner name
  • .RunnerLabels - Comma separated labels
  • .RunnerUsername - Runner service username
  • .RunnerGroup - Runner service group
  • .GitHubRunnerGroup - GitHub runner group
Download & Install
  • .FileName - Download file name
  • .DownloadURL - Runner download URL
  • .TempDownloadToken - Download token
  • .RepoURL - Repository URL
Configuration
  • .MetadataURL - Instance metadata URL
  • .CallbackURL - Status callback URL
  • .CallbackToken - Callback token
  • .CABundle - CA certificate bundle
  • .EnableBootDebug - Enable debug mode
  • .UseJITConfig - Use JIT configuration
  • .ExtraContext - Additional context map

💡 Tip: Use for conditional content, or to iterate over extra context.

'),Kt=A('

'),Qt=A('
',1),Xt=A('

Template Information

Template Content

',1),Zt=A(" ",1);function fa(et,tt){Ut(tt,!1);const ae=w(),ge=w(),ve=w();let re=w(!0),t=w(null),j=w(""),y=w(!1),i=w({name:"",description:"",data:new Uint8Array}),m=w(""),O=w("text"),H=w(!1),C=w({name:"",description:""}),F=w(""),be=w(!1),de=w(!1);async function xe(){try{if(l(re,!0),l(j,""),l(t,await $e.getTemplate(e(ae))),!e(t))throw new Error("Template not found");if(I(i,e(i).name=e(t).name||""),I(i,e(i).description=e(t).description||""),I(C,e(C).name=e(t).name||""),I(C,e(C).description=e(t).description||""),e(t).data)try{if(Array.isArray(e(t).data)){const a=new Uint8Array(e(t).data);l(m,new TextDecoder().decode(a)),l(F,e(m))}else l(m,atob(e(t).data)),l(F,e(m))}catch(a){console.error("Failed to decode template data:",a),l(m,""),l(F,"")}else l(m,""),l(F,"")}catch(a){l(j,De(a)),M.add({type:"error",title:"Failed to load template",message:e(j)})}finally{l(re,!1)}}async function Ue(){if(!(!e(t)?.id||!e(ve)))try{const a={name:e(i).name,description:e(i).description||void 0,data:Array.from(new TextEncoder().encode(e(m)))},n=await $e.updateTemplate(e(t).id,a);l(t,n),M.add({type:"success",title:"Template updated",message:`Template "${e(i).name}" has been updated successfully.`}),I(C,e(C).name=e(i).name),I(C,e(C).description=e(i).description),l(F,e(m)),l(y,!1)}catch(a){const n=De(a);M.add({type:"error",title:"Failed to update template",message:n})}}async function at(){if(e(t)?.id)try{await $e.deleteTemplate(e(t).id),M.add({type:"success",title:"Template deleted",message:`Template "${e(t).name}" has been deleted successfully.`}),Ae(te("/templates"))}catch(a){const n=De(a);M.add({type:"error",title:"Failed to delete template",message:n})}}function Le(){l(y,!0),l(H,!1)}function rt(){return e(i).name!==e(C).name||e(i).description!==e(C).description||e(m)!==e(F)}function dt(){if(rt()){l(de,!0);return}Re()}function Re(){if(l(y,!1),l(H,!1),me.url.searchParams.get("edit")==="true"){Ae(te("/templates"));return}if(e(t))if(I(i,e(i).name=e(t).name||""),I(i,e(i).description=e(t).description||""),e(t).data)try{if(Array.isArray(e(t).data)){const a=new Uint8Array(e(t).data);l(m,new TextDecoder().decode(a))}else l(m,atob(e(t).data))}catch(a){console.error("Failed to decode template data:",a),l(m,"")}else l(m,"")}function ot(){l(de,!1),Re()}function Ie(a){switch(a){case"github":return{color:"blue",text:"GitHub"};case"gitea":return{color:"green",text:"Gitea"};default:return{color:"gray",text:a||"Unknown"}}}function Me(a){switch(a){case"linux":return{color:"blue",text:"Linux"};case"windows":return{color:"info",text:"Windows"};default:return{color:"gray",text:a||"Unknown"}}}function fe(){if(!e(t)?.data)return"";try{if(Array.isArray(e(t).data)){const a=new Uint8Array(e(t).data);return new TextDecoder().decode(a)}else return atob(e(t).data)}catch(a){return console.error("Failed to decode template data:",a),"Error: Failed to decode template content"}}function Ee(a){const L=a.split(` -`)[0]?.trim()||"";return L.startsWith("#!/bin/bash")||L.startsWith("#!/bin/sh")?"bash":L.startsWith("#!/usr/bin/env pwsh")||L.includes("#ps1_sysnative")?"powershell":L.startsWith("#!/usr/bin/env python")||L.startsWith("#!/usr/bin/python")?"python":a.includes("param(")||a.includes("Write-Host")||a.includes("$_")?"powershell":a.includes("def ")||a.includes("import ")||a.includes("print(")?"python":a.includes("echo ")||a.includes("export ")||a.includes("if [")?"bash":"text"}async function lt(a){try{navigator.clipboard&&navigator.clipboard.writeText?(await navigator.clipboard.writeText(a),M.add({type:"success",title:"Copied to clipboard",message:"Template content has been copied to your clipboard."})):Fe(a)}catch(n){console.error("Failed to copy to clipboard:",n),Fe(a)}}function Fe(a){try{const n=document.createElement("textarea");n.value=a,n.style.position="fixed",n.style.left="-999999px",n.style.top="-999999px",document.body.appendChild(n),n.focus(),n.select();const L=document.execCommand("copy");if(document.body.removeChild(n),L)M.add({type:"success",title:"Copied to clipboard",message:"Template content has been copied to your clipboard."});else throw new Error("Copy command failed")}catch(n){console.error("Fallback copy failed:",n),M.add({type:"error",title:"Copy failed",message:"Unable to copy to clipboard. Please manually select and copy the content."})}}Lt(()=>{if(e(ae))return xe().then(()=>{me.url.searchParams.get("edit")==="true"&&Le()}),Gt.subscribeToEntity("template",["update","delete"],n=>{n.payload&&n.payload.id===e(ae)&&(n.operation==="update"?e(y)?M.add({type:"info",title:"Template updated",message:"This template has been updated externally. Your changes are preserved."}):xe():n.operation==="delete"&&(M.add({type:"info",title:"Template deleted",message:`Template "${e(t)?.name||"Unknown"}" has been deleted.`}),Ae(te("/templates"))))});l(j,"Invalid template ID"),l(re,!1)}),ue(()=>me,()=>{l(ae,parseInt(me.params.id||"0"))}),ue(()=>(e(m),e(H)),()=>{e(m)&&!e(H)&&l(O,Ee(e(m)))}),ue(()=>(e(i),e(C),e(m),e(F)),()=>{l(ge,e(i).name!==e(C).name||e(i).description!==e(C).description||e(m)!==e(F))}),ue(()=>(e(ge),e(i),e(m)),()=>{l(ve,e(ge)&&e(i).name.trim().length>0&&e(m).trim().length>0)}),Rt(),Dt();var Se=Zt();It(a=>{P(()=>Et.title=`${e(t),s(()=>e(t)?.name||"Template")??""} - GARM`)});var He=ee(Se);{var st=a=>{var n=Vt();_(a,n)},nt=a=>{var n=Oe(),L=ee(n);{var mt=G=>{var V=zt(),oe=d(V),le=r(d(oe),2),B=r(d(le),2),se=d(B,!0);o(B);var q=r(B,2),ne=d(q);Ke(ne,{variant:"secondary",size:"sm",$$events:{click:xe},children:(z,Y)=>{W();var J=qe("Try Again");_(z,J)},$$slots:{default:!0}});var ye=r(ne,2);{let z=g(()=>(U(te),s(()=>te("/templates"))));Ke(ye,{variant:"secondary",size:"sm",get href(){return e(z)},children:(Y,J)=>{W();var K=qe("Back to Templates");_(Y,K)},$$slots:{default:!0}})}o(q),o(le),o(oe),o(V),P(()=>S(se,e(j))),_(G,V)},pt=G=>{var V=Oe(),oe=ee(V);{var le=B=>{const se=g(()=>(U(Ze),s(Ze))),q=g(()=>(e(t),s(()=>e(t).owner_id==="system"))),ne=g(()=>e(se)||!e(q)),ye=g(()=>e(se)||!e(q));var z=Xt(),Y=ee(z);{let p=g(()=>(e(t),s(()=>e(t).name||"Unnamed Template"))),c=g(()=>(U(Qe),e(t),s(()=>Qe(e(t).forge_type||"unknown")))),u=g(()=>e(y)?dt:e(ne)?Le:null),v=g(()=>e(y)?Ue:e(ye)?()=>l(be,!0):null),x=g(()=>e(y)?"Close":"Edit"),b=g(()=>e(y)?"Save Changes":"Delete"),f=g(()=>(e(y),"secondary")),R=g(()=>e(y)?"primary":"danger"),E=g(()=>e(y)?!e(ve):!1),N=g(()=>e(y)?"":""),Q=g(()=>e(y)?"":"");Bt(Y,{get title(){return e(p)},subtitle:"View and manage template details",get forgeIcon(){return e(c)},get onEdit(){return e(u)},get onDelete(){return e(v)},get editLabel(){return e(x)},get deleteLabel(){return e(b)},get editVariant(){return e(f)},get deleteVariant(){return e(R)},get deleteDisabled(){return e(E)},get editIcon(){return e(N)},get deleteIcon(){return e(Q)}})}var J=r(Y,2),K=d(J),Pe=d(K),gt=r(d(Pe),2);{var vt=p=>{var c=Nt(),u=d(c),v=d(u),x=r(d(v),2);Ye(x),o(v);var b=r(v,2),f=r(d(b),2);Ye(f),o(b),o(u);var R=r(u,2),E=d(R),N=r(d(E),2);{var Q=$=>{const D=g(()=>(e(t),s(()=>Ie(e(t).forge_type))));pe($,{get variant(){return U(e(D)),s(()=>e(D).color)},get text(){return U(e(D)),s(()=>e(D).text)}})};T(N,$=>{e(t),s(()=>e(t).forge_type)&&$(Q)})}W(2),o(E);var ie=r(E,2),X=r(d(ie),2);{var ce=$=>{const D=g(()=>(e(t),s(()=>Me(e(t).os_type))));pe($,{get variant(){return U(e(D)),s(()=>e(D).color)},get text(){return U(e(D)),s(()=>e(D).text)}})};T(X,$=>{e(t),s(()=>e(t).os_type)&&$(ce)})}W(2),o(ie),o(R),o(c),Je(x,()=>e(i).name,$=>I(i,e(i).name=$)),Je(f,()=>e(i).description,$=>I(i,e(i).description=$)),Ce("submit",c,Ht(Ue)),_(p,c)},bt=p=>{var c=qt(),u=d(c),v=r(d(u),2),x=d(v,!0);o(v),o(u);var b=r(u,2),f=r(d(b),2),R=d(f,!0);o(f),o(b);var E=r(b,2),N=r(d(E),2),Q=d(N);{var ie=k=>{const h=g(()=>(e(t),s(()=>Ie(e(t).forge_type))));pe(k,{get variant(){return U(e(h)),s(()=>e(h).color)},get text(){return U(e(h)),s(()=>e(h).text)}})};T(Q,k=>{e(t),s(()=>e(t).forge_type)&&k(ie)})}o(N),o(E);var X=r(E,2),ce=r(d(X),2),$=d(ce);{var D=k=>{const h=g(()=>(e(t),s(()=>Me(e(t).os_type))));pe(k,{get variant(){return U(e(h)),s(()=>e(h).color)},get text(){return U(e(h)),s(()=>e(h).text)}})};T($,k=>{e(t),s(()=>e(t).os_type)&&k(D)})}o(ce),o(X);var _e=r(X,2),ze=r(d(_e),2),wt=d(ze,!0);o(ze),o(_e);var ke=r(_e,2),Ne=r(d(ke),2),Tt=d(Ne,!0);o(Ne),o(ke);var We=r(ke,2);{var Ct=k=>{var h=Wt(),Z=r(d(h),2),we=d(Z,!0);o(Z),o(h),P(Te=>S(we,Te),[()=>(e(t),s(()=>new Date(e(t).created_at).toLocaleDateString()))]),_(k,h)};T(We,k=>{e(t),s(()=>e(t).created_at)&&k(Ct)})}var $t=r(We,2);{var At=k=>{var h=Ot(),Z=r(d(h),2),we=d(Z,!0);o(Z),o(h),P(Te=>S(we,Te),[()=>(e(t),s(()=>new Date(e(t).updated_at).toLocaleDateString()))]),_(k,h)};T($t,k=>{e(t),s(()=>e(t).updated_at)&&k(At)})}o(c),P(()=>{S(x,(e(t),s(()=>e(t).name||"Unnamed Template"))),S(R,(e(t),s(()=>e(t).description||"No description"))),S(wt,(e(t),s(()=>e(t).owner_id==="system"?"System":e(t).owner_id||"Unknown"))),S(Tt,(e(t),s(()=>e(t).id)))}),_(p,c)};T(gt,p=>{e(y)?p(vt):p(bt,!1)})}o(Pe),o(K);var je=r(K,2),Ge=d(je),he=d(Ge),xt=r(d(he),2);{var ft=p=>{var c=Yt(),u=r(d(c),2);P(()=>{e(O),Ft(()=>{e(H)})});var v=d(u);v.value=v.__value="bash";var x=r(v);x.value=x.__value="powershell";var b=r(x);b.value=b.__value="python";var f=r(b);f.value=f.__value="text",o(u),o(c),St(u,()=>e(O),R=>l(O,R)),Ce("change",u,()=>l(H,!0)),_(p,c)};T(xt,p=>{e(y)&&p(ft)})}o(he);var Ve=r(he,2);{var yt=p=>{var c=Jt(),u=r(d(c),2),v=r(d(u));v.textContent="{{ .RunnerName }}",W(),o(u);var x=r(u,4),b=r(d(x),3);b.textContent="{{if .CABundle}}...{{end}}";var f=r(b,2);f.textContent="{{range $key, $value := .ExtraContext}}{{$key}}: {{$value}}{{end}}",W(),o(x),o(c),_(p,c)};T(Ve,p=>{e(y)&&p(yt)})}var ht=r(Ve,2);{var _t=p=>{var c=Kt(),u=d(c);{let b=g(()=>!e(H));Xe(u,{get language(){return e(O)},get autoDetect(){return e(b)},enableTemplateCompletion:!0,minHeight:"400px",placeholder:"Enter your template script content here...",get value(){return e(m)},set value(f){l(m,f)},$$events:{change:f=>l(m,f.detail.value)},$$legacy:!0})}var v=r(u,2),x=d(v);o(v),o(c),P(()=>S(x,`Template content should be a ${e(t),s(()=>e(t).os_type==="windows"?"PowerShell":"bash")??""} script for runner installation and configuration on ${e(t),s(()=>e(t).os_type)??""}.`)),_(p,c)},kt=p=>{var c=Qt(),u=ee(c),v=r(d(u),2);o(u);var x=r(u,2),b=d(x);{let f=g(()=>s(fe)),R=g(()=>s(()=>Ee(fe())));Xe(b,{get value(){return e(f)},get language(){return e(R)},readonly:!0,minHeight:"400px"})}o(x),Ce("click",v,()=>lt(fe())),_(p,c)};T(ht,p=>{e(y)?p(_t):p(kt,!1)})}o(Ge),o(je),o(J),_(B,z)};T(oe,B=>{e(t)&&B(le)},!0)}_(G,V)};T(L,G=>{e(j)&&!e(t)?G(mt):G(pt,!1)},!0)}_(a,n)};T(He,a=>{e(re)?a(st):a(nt,!1)})}var Be=r(He,2);{var it=a=>{jt(a,{title:"Delete Template",message:"Are you sure you want to delete this template? This action cannot be undone.",get itemName(){return e(t),s(()=>e(t).name)},$$events:{close:()=>l(be,!1),confirm:at}})};T(Be,a=>{e(be)&&e(t)&&a(it)})}var ct=r(Be,2);{var ut=a=>{Pt(a,{title:"Unsaved Changes",message:"You have unsaved changes. Are you sure you want to discard them?",confirmText:"Discard Changes",cancelText:"Stay on Page",variant:"warning",$$events:{close:()=>l(de,!1),confirm:ot}})};T(ct,a=>{e(de)&&a(ut)})}_(et,Se),Mt()}export{fa as component}; diff --git a/webapp/assets/_app/immutable/nodes/18.C2-Tcxvs.js b/webapp/assets/_app/immutable/nodes/20.CrgpXSxy.js similarity index 96% rename from webapp/assets/_app/immutable/nodes/18.C2-Tcxvs.js rename to webapp/assets/_app/immutable/nodes/20.CrgpXSxy.js index c4abea63..148bba10 100644 --- a/webapp/assets/_app/immutable/nodes/18.C2-Tcxvs.js +++ b/webapp/assets/_app/immutable/nodes/20.CrgpXSxy.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as Ve}from"../chunks/TJn6xDN9.js";import{p as We,o as Ke,B as Qe,l as Xe,h as Ye,f as _,j as Ze,a as T,t as h,b as u,c as ta,u as i,q as g,e as n,g as t,m as b,d as a,s,k as v,$ as ea,r,w as A,A as ft,v as $}from"../chunks/DniTuB_0.js";import{i as f}from"../chunks/DbNhg6mG.js";import{d as k,c as L,g as O,s as aa}from"../chunks/BZ2rxtTc.js";import{p as Xt}from"../chunks/Hb0uuDRx.js";import{g as Yt}from"../chunks/HMJxCnAR.js";import{U as ra}from"../chunks/DZ5U-N28.js";import{D as Zt}from"../chunks/DGVAzkoE.js";import{I as da}from"../chunks/d1ceLqrJ.js";import{D as sa}from"../chunks/J4QHiesY.js";import{w as te}from"../chunks/DmHFwzWx.js";import{t as H}from"../chunks/CBJzOE8U.js";import{e as ee}from"../chunks/BZiHL9L3.js";import{e as E,i as J,j as ae,b as P,g as re}from"../chunks/CTcPpzia.js";var ia=_('

Loading scale set...

'),la=_('

'),na=_(' '),oa=_(' '),va=_('Default system template'),ca=_('
GitHub Runner Group
'),ma=_('

Extra Specifications

 
'),xa=_('

Basic Information

Scale Set ID
Name
Provider
Image
Flavor
Status
Entity
Created At
Updated At

Configuration

Max Runners
Min Idle Runners
Bootstrap Timeout
Runner Prefix
OS Type / Architecture
Runner Install Template
',1),ua=_(' ',1);function Ta(de,se){We(se,!1);const N=b();let e=b(null),j=b(!0),R=b(""),U=b(!1),B=b(!1),F=b(!1),p=b(null),C=null;async function pt(){if(!(!t(N)||isNaN(t(N))))try{v(j,!0),v(R,""),v(e,await O.getScaleSet(t(N))),t(e).instances||A(e,t(e).instances=[])}catch(d){v(R,d instanceof Error?d.message:"Failed to load scale set")}finally{v(j,!1)}}async function ie(d){if(t(e))try{await O.updateScaleSet(t(e).id,d),await pt(),H.success("Scale Set Updated",`Scale Set ${t(e).name} has been updated successfully.`),v(U,!1)}catch(l){throw l}}async function le(){if(t(e)){try{await O.deleteScaleSet(t(e).id),Yt(k("/scalesets"))}catch(d){const l=ee(d);H.error("Delete Failed",l)}v(B,!1)}}async function ne(){if(t(p)){try{await O.deleteInstance(t(p).name),H.success("Instance Deleted",`Instance ${t(p).name} has been deleted successfully.`)}catch(d){const l=ee(d);H.error("Delete Failed",l)}v(F,!1),v(p,null)}}function oe(d){v(p,d),v(F,!0)}function ve(d){if(!d)return"{}";try{if(typeof d=="string"){const l=JSON.parse(d);return JSON.stringify(l,null,2)}return JSON.stringify(d,null,2)}catch{return d.toString()}}function ce(d){if(d.operation==="update"){const l=d.payload;t(e)&&l.id===t(e).id&&v(e,l)}else if(d.operation==="delete"){const l=d.payload.id||d.payload;t(e)&&t(e).id===l&&Yt(k("/scalesets"))}}function me(d){if(!t(e))return;const l=d.payload;if(l.scale_set_id===t(e).id){if(t(e).instances||A(e,t(e).instances=[]),d.operation==="create")A(e,t(e).instances=[...t(e).instances,l]);else if(d.operation==="update")A(e,t(e).instances=t(e).instances.map(S=>S.id===l.id?l:S));else if(d.operation==="delete"){const S=l.id||l;A(e,t(e).instances=t(e).instances.filter(W=>W.id!==S))}v(e,t(e))}}Ke(()=>{pt();const d=te.subscribeToEntity("scaleset",["update","delete"],ce),l=te.subscribeToEntity("instance",["create","update","delete"],me);C=()=>{d(),l()}}),Qe(()=>{C&&(C(),C=null)}),Xe(()=>Xt,()=>{v(N,parseInt(Xt.params.id||"0"))}),Ye(),Ve();var _t=ua();Ze(d=>{h(()=>ea.title=`${t(e),i(()=>t(e)?`${t(e).name} - Scale Set Details`:"Scale Set Details")??""} - GARM`)});var q=T(_t),z=a(q),yt=a(z),V=a(yt),xe=a(V);r(V);var ht=s(V,2),bt=a(ht),kt=s(a(bt),2),ue=a(kt,!0);r(kt),r(bt),r(ht),r(yt),r(z);var ge=s(z,2);{var fe=d=>{var l=ia();u(d,l)},pe=d=>{var l=ft(),S=T(l);{var W=w=>{var I=la(),G=a(I),K=a(G,!0);r(G),r(I),h(()=>n(K,t(R))),u(w,I)},ke=w=>{var I=ft(),G=T(I);{var K=Q=>{var It=xa(),Dt=T(It);{let o=$(()=>(t(e),i(()=>t(e).name||"Scale Set"))),c=$(()=>(g(E),t(e),i(()=>E(t(e))))),m=$(()=>(g(J),t(e),i(()=>J(t(e))))),x=$(()=>(g(re),i(()=>re("github"))));sa(Dt,{get title(){return t(o)},get subtitle(){return`Scale set for ${t(c)??""} (${t(m)??""}) • GitHub Runner Scale Set`},get forgeIcon(){return t(x)},onEdit:()=>v(U,!0),onDelete:()=>v(B,!0)})}var X=s(Dt,2),Y=a(X),$t=a(Y),Et=s(a($t),2),Z=a(Et),Mt=s(a(Z),2),Se=a(Mt,!0);r(Mt),r(Z);var tt=s(Z,2),Tt=s(a(tt),2),we=a(Tt,!0);r(Tt),r(tt);var et=s(tt,2),At=s(a(et),2),Ie=a(At,!0);r(At),r(et);var at=s(et,2),Nt=s(a(at),2),Rt=a(Nt),De=a(Rt,!0);r(Rt),r(Nt),r(at);var rt=s(at,2),Ut=s(a(rt),2),$e=a(Ut,!0);r(Ut),r(rt);var dt=s(rt,2),Bt=s(a(dt),2),st=a(Bt),Ee=a(st,!0);r(st),r(Bt),r(dt);var it=s(dt,2),Ft=s(a(it),2),Ct=a(Ft),lt=a(Ct),Me=a(lt,!0);r(lt);var nt=s(lt,2),Te=a(nt,!0);r(nt),r(Ct),r(Ft),r(it);var ot=s(it,2),Gt=s(a(ot),2),Ae=a(Gt,!0);r(Gt),r(ot);var Lt=s(ot,2),Ot=s(a(Lt),2),Ne=a(Ot,!0);r(Ot),r(Lt),r(Et),r($t),r(Y);var Ht=s(Y,2),Jt=a(Ht),Pt=s(a(Jt),2),vt=a(Pt),jt=s(a(vt),2),Re=a(jt,!0);r(jt),r(vt);var ct=s(vt,2),qt=s(a(ct),2),Ue=a(qt,!0);r(qt),r(ct);var mt=s(ct,2),zt=s(a(mt),2),Be=a(zt);r(zt),r(mt);var xt=s(mt,2),Vt=s(a(xt),2),Fe=a(Vt,!0);r(Vt),r(xt);var ut=s(xt,2),Wt=s(a(ut),2),Ce=a(Wt);r(Wt),r(ut);var gt=s(ut,2),Kt=s(a(gt),2),Ge=a(Kt);{var Le=o=>{var c=na(),m=a(c,!0);r(c),h(x=>{L(c,"href",x),n(m,(t(e),i(()=>t(e).template_name)))},[()=>(g(k),t(e),i(()=>k(`/templates/${t(e).template_id}`)))]),u(o,c)},Oe=o=>{var c=ft(),m=T(c);{var x=y=>{var D=oa(),qe=a(D);r(D),h(ze=>{L(D,"href",ze),n(qe,`Template ID: ${t(e),i(()=>t(e).template_id)??""}`)},[()=>(g(k),t(e),i(()=>k(`/templates/${t(e).template_id}`)))]),u(y,D)},M=y=>{var D=va();u(y,D)};f(m,y=>{t(e),i(()=>t(e).template_id)?y(x):y(M,!1)},!0)}u(o,c)};f(Ge,o=>{t(e),i(()=>t(e).template_name)?o(Le):o(Oe,!1)})}r(Kt),r(gt);var He=s(gt,2);{var Je=o=>{var c=ca(),m=s(a(c),2),x=a(m,!0);r(m),r(c),h(()=>n(x,(t(e),i(()=>t(e)["github-runner-group"])))),u(o,c)};f(He,o=>{t(e),i(()=>t(e)["github-runner-group"])&&o(Je)})}r(Pt),r(Jt),r(Ht),r(X);var Qt=s(X,2);{var Pe=o=>{var c=ma(),m=a(c),x=s(a(m),2),M=a(x,!0);r(x),r(m),r(c),h(y=>n(M,y),[()=>(t(e),i(()=>ve(t(e).extra_specs)))]),u(o,c)};f(Qt,o=>{t(e),i(()=>t(e).extra_specs)&&o(Pe)})}var je=s(Qt,2);{let o=$(()=>(t(e),i(()=>t(e).instances||[])));da(je,{get instances(){return t(o)},entityType:"scaleset",onDeleteInstance:oe})}h((o,c,m,x,M)=>{n(Se,(t(e),i(()=>t(e).id))),n(we,(t(e),i(()=>t(e).name))),n(Ie,(t(e),i(()=>t(e).provider_name))),n(De,(t(e),i(()=>t(e).image))),n($e,(t(e),i(()=>t(e).flavor))),aa(st,1,`inline-flex px-2 py-1 text-xs font-medium rounded-full ${t(e),i(()=>t(e).enabled?"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200":"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200")??""}`),n(Ee,(t(e),i(()=>t(e).enabled?"Enabled":"Disabled"))),n(Me,o),L(nt,"href",c),n(Te,m),n(Ae,x),n(Ne,M),n(Re,(t(e),i(()=>t(e).max_runners))),n(Ue,(t(e),i(()=>t(e).min_idle_runners))),n(Be,`${t(e),i(()=>t(e).runner_bootstrap_timeout)??""} minutes`),n(Fe,(t(e),i(()=>t(e).runner_prefix||"garm"))),n(Ce,`${t(e),i(()=>t(e).os_type)??""} / ${t(e),i(()=>t(e).os_arch)??""}`)},[()=>(g(J),t(e),i(()=>J(t(e)))),()=>(g(ae),t(e),i(()=>ae(t(e)))),()=>(g(E),t(e),i(()=>E(t(e)))),()=>(g(P),t(e),i(()=>P(t(e).created_at||""))),()=>(g(P),t(e),i(()=>P(t(e).updated_at||"")))]),u(Q,It)};f(G,Q=>{t(e)&&Q(K)},!0)}u(w,I)};f(S,w=>{t(R)?w(W):w(ke,!1)},!0)}u(d,l)};f(ge,d=>{t(j)?d(fe):d(pe,!1)})}r(q);var St=s(q,2);{var _e=d=>{ra(d,{get scaleSet(){return t(e)},$$events:{close:()=>v(U,!1),submit:l=>ie(l.detail)}})};f(St,d=>{t(U)&&t(e)&&d(_e)})}var wt=s(St,2);{var ye=d=>{{let l=$(()=>(t(e),g(E),i(()=>`Scale Set ${t(e).name} (${E(t(e))})`)));Zt(d,{title:"Delete Scale Set",message:"Are you sure you want to delete this scale set? This action cannot be undone and will remove all associated runners.",get itemName(){return t(l)},$$events:{close:()=>v(B,!1),confirm:le}})}};f(wt,d=>{t(B)&&t(e)&&d(ye)})}var he=s(wt,2);{var be=d=>{Zt(d,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(p),i(()=>t(p).name)},$$events:{close:()=>{v(F,!1),v(p,null)},confirm:ne}})};f(he,d=>{t(F)&&t(p)&&d(be)})}h(d=>{L(xe,"href",d),n(ue,(t(e),i(()=>t(e)?t(e).name:"Loading...")))},[()=>(g(k),i(()=>k("/scalesets")))]),u(de,_t),ta()}export{Ta as component}; +import"../chunks/DsnmJJEf.js";import{i as Ve}from"../chunks/TJn6xDN9.js";import{p as We,o as Ke,B as Qe,l as Xe,h as Ye,f as _,j as Ze,a as T,t as h,b as u,c as ta,u as i,q as g,e as n,g as t,m as b,d as a,s,k as v,$ as ea,r,w as A,A as ft,v as $}from"../chunks/DniTuB_0.js";import{i as f}from"../chunks/DbNhg6mG.js";import{d as k,c as L,g as O,s as aa}from"../chunks/DSfKzFV1.js";import{p as Xt}from"../chunks/covROD4j.js";import{g as Yt}from"../chunks/kW9-6GPQ.js";import{U as ra}from"../chunks/D44hH3AJ.js";import{D as Zt}from"../chunks/z19xmJI9.js";import{I as da}from"../chunks/B3d8BqkX.js";import{D as sa}from"../chunks/DsCgpFQt.js";import{w as te}from"../chunks/DmHFwzWx.js";import{t as H}from"../chunks/CBJzOE8U.js";import{e as ee}from"../chunks/BZiHL9L3.js";import{e as E,i as J,j as ae,b as P,g as re}from"../chunks/BC4TpgBU.js";var ia=_('

Loading scale set...

'),la=_('

'),na=_(' '),oa=_(' '),va=_('Default system template'),ca=_('
GitHub Runner Group
'),ma=_('

Extra Specifications

 
'),xa=_('

Basic Information

Scale Set ID
Name
Provider
Image
Flavor
Status
Entity
Created At
Updated At

Configuration

Max Runners
Min Idle Runners
Bootstrap Timeout
Runner Prefix
OS Type / Architecture
Runner Install Template
',1),ua=_(' ',1);function Ta(de,se){We(se,!1);const N=b();let e=b(null),j=b(!0),R=b(""),U=b(!1),B=b(!1),F=b(!1),p=b(null),C=null;async function pt(){if(!(!t(N)||isNaN(t(N))))try{v(j,!0),v(R,""),v(e,await O.getScaleSet(t(N))),t(e).instances||A(e,t(e).instances=[])}catch(d){v(R,d instanceof Error?d.message:"Failed to load scale set")}finally{v(j,!1)}}async function ie(d){if(t(e))try{await O.updateScaleSet(t(e).id,d),await pt(),H.success("Scale Set Updated",`Scale Set ${t(e).name} has been updated successfully.`),v(U,!1)}catch(l){throw l}}async function le(){if(t(e)){try{await O.deleteScaleSet(t(e).id),Yt(k("/scalesets"))}catch(d){const l=ee(d);H.error("Delete Failed",l)}v(B,!1)}}async function ne(){if(t(p)){try{await O.deleteInstance(t(p).name),H.success("Instance Deleted",`Instance ${t(p).name} has been deleted successfully.`)}catch(d){const l=ee(d);H.error("Delete Failed",l)}v(F,!1),v(p,null)}}function oe(d){v(p,d),v(F,!0)}function ve(d){if(!d)return"{}";try{if(typeof d=="string"){const l=JSON.parse(d);return JSON.stringify(l,null,2)}return JSON.stringify(d,null,2)}catch{return d.toString()}}function ce(d){if(d.operation==="update"){const l=d.payload;t(e)&&l.id===t(e).id&&v(e,l)}else if(d.operation==="delete"){const l=d.payload.id||d.payload;t(e)&&t(e).id===l&&Yt(k("/scalesets"))}}function me(d){if(!t(e))return;const l=d.payload;if(l.scale_set_id===t(e).id){if(t(e).instances||A(e,t(e).instances=[]),d.operation==="create")A(e,t(e).instances=[...t(e).instances,l]);else if(d.operation==="update")A(e,t(e).instances=t(e).instances.map(S=>S.id===l.id?l:S));else if(d.operation==="delete"){const S=l.id||l;A(e,t(e).instances=t(e).instances.filter(W=>W.id!==S))}v(e,t(e))}}Ke(()=>{pt();const d=te.subscribeToEntity("scaleset",["update","delete"],ce),l=te.subscribeToEntity("instance",["create","update","delete"],me);C=()=>{d(),l()}}),Qe(()=>{C&&(C(),C=null)}),Xe(()=>Xt,()=>{v(N,parseInt(Xt.params.id||"0"))}),Ye(),Ve();var _t=ua();Ze(d=>{h(()=>ea.title=`${t(e),i(()=>t(e)?`${t(e).name} - Scale Set Details`:"Scale Set Details")??""} - GARM`)});var q=T(_t),z=a(q),yt=a(z),V=a(yt),xe=a(V);r(V);var ht=s(V,2),bt=a(ht),kt=s(a(bt),2),ue=a(kt,!0);r(kt),r(bt),r(ht),r(yt),r(z);var ge=s(z,2);{var fe=d=>{var l=ia();u(d,l)},pe=d=>{var l=ft(),S=T(l);{var W=w=>{var I=la(),G=a(I),K=a(G,!0);r(G),r(I),h(()=>n(K,t(R))),u(w,I)},ke=w=>{var I=ft(),G=T(I);{var K=Q=>{var It=xa(),Dt=T(It);{let o=$(()=>(t(e),i(()=>t(e).name||"Scale Set"))),c=$(()=>(g(E),t(e),i(()=>E(t(e))))),m=$(()=>(g(J),t(e),i(()=>J(t(e))))),x=$(()=>(g(re),i(()=>re("github"))));sa(Dt,{get title(){return t(o)},get subtitle(){return`Scale set for ${t(c)??""} (${t(m)??""}) • GitHub Runner Scale Set`},get forgeIcon(){return t(x)},onEdit:()=>v(U,!0),onDelete:()=>v(B,!0)})}var X=s(Dt,2),Y=a(X),$t=a(Y),Et=s(a($t),2),Z=a(Et),Mt=s(a(Z),2),Se=a(Mt,!0);r(Mt),r(Z);var tt=s(Z,2),Tt=s(a(tt),2),we=a(Tt,!0);r(Tt),r(tt);var et=s(tt,2),At=s(a(et),2),Ie=a(At,!0);r(At),r(et);var at=s(et,2),Nt=s(a(at),2),Rt=a(Nt),De=a(Rt,!0);r(Rt),r(Nt),r(at);var rt=s(at,2),Ut=s(a(rt),2),$e=a(Ut,!0);r(Ut),r(rt);var dt=s(rt,2),Bt=s(a(dt),2),st=a(Bt),Ee=a(st,!0);r(st),r(Bt),r(dt);var it=s(dt,2),Ft=s(a(it),2),Ct=a(Ft),lt=a(Ct),Me=a(lt,!0);r(lt);var nt=s(lt,2),Te=a(nt,!0);r(nt),r(Ct),r(Ft),r(it);var ot=s(it,2),Gt=s(a(ot),2),Ae=a(Gt,!0);r(Gt),r(ot);var Lt=s(ot,2),Ot=s(a(Lt),2),Ne=a(Ot,!0);r(Ot),r(Lt),r(Et),r($t),r(Y);var Ht=s(Y,2),Jt=a(Ht),Pt=s(a(Jt),2),vt=a(Pt),jt=s(a(vt),2),Re=a(jt,!0);r(jt),r(vt);var ct=s(vt,2),qt=s(a(ct),2),Ue=a(qt,!0);r(qt),r(ct);var mt=s(ct,2),zt=s(a(mt),2),Be=a(zt);r(zt),r(mt);var xt=s(mt,2),Vt=s(a(xt),2),Fe=a(Vt,!0);r(Vt),r(xt);var ut=s(xt,2),Wt=s(a(ut),2),Ce=a(Wt);r(Wt),r(ut);var gt=s(ut,2),Kt=s(a(gt),2),Ge=a(Kt);{var Le=o=>{var c=na(),m=a(c,!0);r(c),h(x=>{L(c,"href",x),n(m,(t(e),i(()=>t(e).template_name)))},[()=>(g(k),t(e),i(()=>k(`/templates/${t(e).template_id}`)))]),u(o,c)},Oe=o=>{var c=ft(),m=T(c);{var x=y=>{var D=oa(),qe=a(D);r(D),h(ze=>{L(D,"href",ze),n(qe,`Template ID: ${t(e),i(()=>t(e).template_id)??""}`)},[()=>(g(k),t(e),i(()=>k(`/templates/${t(e).template_id}`)))]),u(y,D)},M=y=>{var D=va();u(y,D)};f(m,y=>{t(e),i(()=>t(e).template_id)?y(x):y(M,!1)},!0)}u(o,c)};f(Ge,o=>{t(e),i(()=>t(e).template_name)?o(Le):o(Oe,!1)})}r(Kt),r(gt);var He=s(gt,2);{var Je=o=>{var c=ca(),m=s(a(c),2),x=a(m,!0);r(m),r(c),h(()=>n(x,(t(e),i(()=>t(e)["github-runner-group"])))),u(o,c)};f(He,o=>{t(e),i(()=>t(e)["github-runner-group"])&&o(Je)})}r(Pt),r(Jt),r(Ht),r(X);var Qt=s(X,2);{var Pe=o=>{var c=ma(),m=a(c),x=s(a(m),2),M=a(x,!0);r(x),r(m),r(c),h(y=>n(M,y),[()=>(t(e),i(()=>ve(t(e).extra_specs)))]),u(o,c)};f(Qt,o=>{t(e),i(()=>t(e).extra_specs)&&o(Pe)})}var je=s(Qt,2);{let o=$(()=>(t(e),i(()=>t(e).instances||[])));da(je,{get instances(){return t(o)},entityType:"scaleset",onDeleteInstance:oe})}h((o,c,m,x,M)=>{n(Se,(t(e),i(()=>t(e).id))),n(we,(t(e),i(()=>t(e).name))),n(Ie,(t(e),i(()=>t(e).provider_name))),n(De,(t(e),i(()=>t(e).image))),n($e,(t(e),i(()=>t(e).flavor))),aa(st,1,`inline-flex px-2 py-1 text-xs font-medium rounded-full ${t(e),i(()=>t(e).enabled?"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200":"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200")??""}`),n(Ee,(t(e),i(()=>t(e).enabled?"Enabled":"Disabled"))),n(Me,o),L(nt,"href",c),n(Te,m),n(Ae,x),n(Ne,M),n(Re,(t(e),i(()=>t(e).max_runners))),n(Ue,(t(e),i(()=>t(e).min_idle_runners))),n(Be,`${t(e),i(()=>t(e).runner_bootstrap_timeout)??""} minutes`),n(Fe,(t(e),i(()=>t(e).runner_prefix||"garm"))),n(Ce,`${t(e),i(()=>t(e).os_type)??""} / ${t(e),i(()=>t(e).os_arch)??""}`)},[()=>(g(J),t(e),i(()=>J(t(e)))),()=>(g(ae),t(e),i(()=>ae(t(e)))),()=>(g(E),t(e),i(()=>E(t(e)))),()=>(g(P),t(e),i(()=>P(t(e).created_at||""))),()=>(g(P),t(e),i(()=>P(t(e).updated_at||"")))]),u(Q,It)};f(G,Q=>{t(e)&&Q(K)},!0)}u(w,I)};f(S,w=>{t(R)?w(W):w(ke,!1)},!0)}u(d,l)};f(ge,d=>{t(j)?d(fe):d(pe,!1)})}r(q);var St=s(q,2);{var _e=d=>{ra(d,{get scaleSet(){return t(e)},$$events:{close:()=>v(U,!1),submit:l=>ie(l.detail)}})};f(St,d=>{t(U)&&t(e)&&d(_e)})}var wt=s(St,2);{var ye=d=>{{let l=$(()=>(t(e),g(E),i(()=>`Scale Set ${t(e).name} (${E(t(e))})`)));Zt(d,{title:"Delete Scale Set",message:"Are you sure you want to delete this scale set? This action cannot be undone and will remove all associated runners.",get itemName(){return t(l)},$$events:{close:()=>v(B,!1),confirm:le}})}};f(wt,d=>{t(B)&&t(e)&&d(ye)})}var he=s(wt,2);{var be=d=>{Zt(d,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(p),i(()=>t(p).name)},$$events:{close:()=>{v(F,!1),v(p,null)},confirm:ne}})};f(he,d=>{t(F)&&t(p)&&d(be)})}h(d=>{L(xe,"href",d),n(ue,(t(e),i(()=>t(e)?t(e).name:"Loading...")))},[()=>(g(k),i(()=>k("/scalesets")))]),u(de,_t),ta()}export{Ta as component}; diff --git a/webapp/assets/_app/immutable/nodes/19.WienvNXs.js b/webapp/assets/_app/immutable/nodes/21.Dlw8TYKW.js similarity index 92% rename from webapp/assets/_app/immutable/nodes/19.WienvNXs.js rename to webapp/assets/_app/immutable/nodes/21.Dlw8TYKW.js index 2f1403fb..18193ab7 100644 --- a/webapp/assets/_app/immutable/nodes/19.WienvNXs.js +++ b/webapp/assets/_app/immutable/nodes/21.Dlw8TYKW.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as we}from"../chunks/TJn6xDN9.js";import{p as be,o as Te,l as b,h as $e,f as se,j as ke,a as D,b as h,c as Le,g as e,m as l,$ as Pe,k as a,A as O,u as n,s as T,q as d,v as E,d as $,r as k,z as Ae,D as ee,t as te,e as ae}from"../chunks/DniTuB_0.js";import{i as L,s as Me,a as De}from"../chunks/DbNhg6mG.js";import{g as I}from"../chunks/HMJxCnAR.js";import{d as B,g as Ee}from"../chunks/BZ2rxtTc.js";import{P as Ie}from"../chunks/CuYqFPEA.js";import{A as Be}from"../chunks/Ok63PiOl.js";import{D as Se,G as S,A as Fe}from"../chunks/CKaB5fL4.js";import{t as q}from"../chunks/CBJzOE8U.js";import{e as Ge}from"../chunks/BZiHL9L3.js";import{B as re}from"../chunks/CTcPpzia.js";import{D as Re}from"../chunks/DGVAzkoE.js";import{E as ze}from"../chunks/Dh8uHEF5.js";import{i as Ue}from"../chunks/C98nByjP.js";import{e as Ne,a as oe}from"../chunks/DKJ_c8yL.js";var Oe=se('

Error loading templates

'),qe=se(" ",1);function lt(le,ne){be(ne,!1);const[ie,de]=Me(),g=()=>De(Ne,"$eagerCache",ie),F=l(),G=l(),f=l(),H=l();let y=l([]),P=l(""),m=l(""),i=l(1),v=l(25),x=l(1),A=l(!1),c=l(null);async function ce(){try{await oe.retryResource("templates")}catch(t){console.error("Retry failed:",t)}}async function me(){if(e(c)?.id)try{await Ee.deleteTemplate(e(c).id),q.add({type:"success",title:"Template deleted",message:`Template "${e(c).name}" has been deleted successfully.`}),a(A,!1),a(c,null)}catch(t){const r=Ge(t);q.add({type:"error",title:"Failed to delete template",message:r})}}function pe(){I(B("/templates/create"))}async function j(t){if(!t.id){q.add({type:"error",title:"Error",message:"Template ID is missing"});return}I(B(`/templates/create?clone=${t.id}`))}function W(t){a(c,t),a(A,!0)}function J(t){switch(t){case"github":return{color:"blue",text:"GitHub"};case"gitea":return{color:"green",text:"Gitea"};default:return{color:"gray",text:t||"Unknown"}}}function K(t){switch(t){case"linux":return{color:"blue",text:"Linux"};case"windows":return{color:"info",text:"Windows"};default:return{color:"gray",text:t||"Unknown"}}}const ue=[{key:"name",title:"Name",cellComponent:ze,cellProps:{entityType:"template"}},{key:"description",title:"Description",cellComponent:S,cellProps:{field:"description",type:"description"}},{key:"forge_type",title:"Forge Type",cellComponent:S,cellProps:{field:"forge_type"}},{key:"os_type",title:"OS Type",cellComponent:S,cellProps:{field:"os_type"}},{key:"owner_id",title:"Owner",cellComponent:S,cellProps:{field:"owner_id"}},{key:"actions",title:"Actions",align:"right",cellComponent:Fe,cellProps:t=>{const r=Ue(),s=t.owner_id==="system",o=[];return o.push({type:"copy",title:"Clone",ariaLabel:"Clone template",action:"clone"}),(r||!s)&&o.push({type:"edit",title:"Edit",ariaLabel:"Edit template",action:"edit"}),(r||!s)&&o.push({type:"delete",title:"Delete",ariaLabel:"Delete template",action:"delete"}),{actions:o}}}],ge={entityType:"template",primaryText:{field:"name",isClickable:!0,href:"/templates/{id}"},secondaryText:{field:"description"},badges:[{type:"custom",value:t=>{const r=J(t.forge_type);return{variant:r.color,text:r.text}}},{type:"custom",value:t=>{const r=K(t.os_type);return{variant:r.color,text:r.text}}}],actions:[{type:"clone",handler:t=>j(t)},{type:"edit",handler:t=>I(B(`/templates/${t.id}?edit=true`))},{type:"delete",handler:t=>W(t)}]};Te(async()=>{try{const t=await oe.getTemplates();t&&Array.isArray(t)&&a(y,t)}catch(t){console.error("Failed to load templates:",t),a(P,t instanceof Error?t.message:"Failed to load templates")}}),b(()=>(e(y),g()),()=>{(!e(y).length||g().loaded.templates)&&a(y,g().templates)}),b(()=>g(),()=>{a(F,g().loading.templates)}),b(()=>g(),()=>{a(G,g().errorMessages.templates)}),b(()=>(e(m),e(y)),()=>{a(f,e(m)?e(y).filter(t=>t.name?.toLowerCase().includes(e(m).toLowerCase())||t.description?.toLowerCase().includes(e(m).toLowerCase())||t.forge_type?.toLowerCase().includes(e(m).toLowerCase())||t.os_type?.toLowerCase().includes(e(m).toLowerCase())):e(y))}),b(()=>(e(x),e(f),e(v),e(i)),()=>{a(x,Math.ceil(e(f).length/e(v))),e(i)>e(x)&&e(x)>0&&a(i,e(x))}),b(()=>(e(f),e(i),e(v)),()=>{a(H,e(f).slice((e(i)-1)*e(v),e(i)*e(v)))}),$e(),we();var Q=qe();ke(t=>{Pe.title="Runner Install Templates - GARM"});var V=D(Q);Ie(V,{title:"Runner Install Templates",description:"Manage templates for configuring runner software installation. These templates can be set on pools or scale sets.",actionLabel:"Create Template",showAction:!0,$$events:{action:pe}});var X=T(V,2);{var fe=t=>{var r=Oe(),s=$(r),o=T($(s),2),C=T($(o),2),R=$(C,!0);k(C);var M=T(C,2),z=$(M);Be(z,{variant:"secondary",size:"sm",$$events:{click:ce},children:(p,u)=>{Ae();var U=ee("Try Again");h(p,U)},$$slots:{default:!0}}),k(M),k(o),k(s),k(r),te(()=>ae(R,e(P)||e(G))),h(t,r)};L(X,t=>{(e(P)||e(G))&&!e(F)&&t(fe)})}var Y=T(X,2);Se(Y,{get columns(){return ue},get data(){return e(H)},get loading(){return e(F)},get error(){return e(P)},get searchTerm(){return e(m)},searchPlaceholder:"Search templates by name, description, type...",get currentPage(){return e(i)},get perPage(){return e(v)},get totalPages(){return e(x)},get totalItems(){return e(f),n(()=>e(f).length)},get mobileCardConfig(){return ge},emptyMessage:"No templates found",$$events:{search:t=>{a(m,t.detail.term),a(i,1)},pageChange:t=>a(i,t.detail.page),perPageChange:t=>{a(v,t.detail.perPage),a(i,1)},clone:t=>j(t.detail.item),edit:t=>I(B(`/templates/${t.detail.item.id}?edit=true`)),delete:t=>W(t.detail.item)},$$slots:{cell:(t,r)=>{const s=E(()=>r.item),o=E(()=>r.column);var C=O(),R=D(C);{var M=p=>{const u=E(()=>(d(e(s)),n(()=>J(e(s).forge_type))));re(p,{get variant(){return d(e(u)),n(()=>e(u).color)},get text(){return d(e(u)),n(()=>e(u).text)}})},z=p=>{var u=O(),U=D(u);{var _e=w=>{const _=E(()=>(d(e(s)),n(()=>K(e(s).os_type))));re(w,{get variant(){return d(e(_)),n(()=>e(_).color)},get text(){return d(e(_)),n(()=>e(_).text)}})},he=w=>{var _=O(),xe=D(_);{var Ce=N=>{var Z=ee();te(()=>ae(Z,(d(e(s)),n(()=>e(s).owner_id==="system"?"System":e(s).owner_id||"Unknown")))),h(N,Z)};L(xe,N=>{d(e(o)),n(()=>e(o).key==="owner_id")&&N(Ce)},!0)}h(w,_)};L(U,w=>{d(e(o)),n(()=>e(o).key==="os_type")?w(_e):w(he,!1)},!0)}h(p,u)};L(R,p=>{d(e(o)),n(()=>e(o).key==="forge_type")?p(M):p(z,!1)})}h(t,C)}}});var ye=T(Y,2);{var ve=t=>{Re(t,{title:"Delete Template",message:"Are you sure you want to delete this template? This action cannot be undone.",get itemName(){return e(c),n(()=>e(c).name)},$$events:{close:()=>{a(A,!1),a(c,null)},confirm:me}})};L(ye,t=>{e(A)&&e(c)&&t(ve)})}h(le,Q),Le(),de()}export{lt as component}; +import"../chunks/DsnmJJEf.js";import{i as we}from"../chunks/TJn6xDN9.js";import{p as be,o as Te,l as b,h as $e,f as se,j as ke,a as D,b as h,c as Le,g as e,m as l,$ as Pe,k as a,A as O,u as n,s as T,q as d,v as E,d as $,r as k,z as Ae,D as ee,t as te,e as ae}from"../chunks/DniTuB_0.js";import{i as L,s as Me,a as De}from"../chunks/DbNhg6mG.js";import{g as I}from"../chunks/kW9-6GPQ.js";import{d as B,g as Ee}from"../chunks/DSfKzFV1.js";import{P as Ie}from"../chunks/RtJp4Ifn.js";import{A as Be}from"../chunks/DGZKesLN.js";import{D as Se,G as S,A as Fe}from"../chunks/BlJ06z1t.js";import{t as q}from"../chunks/CBJzOE8U.js";import{e as Ge}from"../chunks/BZiHL9L3.js";import{B as re}from"../chunks/Dyp1NLoF.js";import{D as Re}from"../chunks/z19xmJI9.js";import{E as ze}from"../chunks/30NlHgQ_.js";import{i as Ue}from"../chunks/C98nByjP.js";import{e as Ne,a as oe}from"../chunks/BE9PkXKz.js";var Oe=se('

Error loading templates

'),qe=se(" ",1);function lt(le,ne){be(ne,!1);const[ie,de]=Me(),g=()=>De(Ne,"$eagerCache",ie),F=l(),G=l(),f=l(),H=l();let y=l([]),P=l(""),m=l(""),i=l(1),v=l(25),x=l(1),A=l(!1),c=l(null);async function ce(){try{await oe.retryResource("templates")}catch(t){console.error("Retry failed:",t)}}async function me(){if(e(c)?.id)try{await Ee.deleteTemplate(e(c).id),q.add({type:"success",title:"Template deleted",message:`Template "${e(c).name}" has been deleted successfully.`}),a(A,!1),a(c,null)}catch(t){const r=Ge(t);q.add({type:"error",title:"Failed to delete template",message:r})}}function pe(){I(B("/templates/create"))}async function j(t){if(!t.id){q.add({type:"error",title:"Error",message:"Template ID is missing"});return}I(B(`/templates/create?clone=${t.id}`))}function W(t){a(c,t),a(A,!0)}function J(t){switch(t){case"github":return{color:"blue",text:"GitHub"};case"gitea":return{color:"green",text:"Gitea"};default:return{color:"gray",text:t||"Unknown"}}}function K(t){switch(t){case"linux":return{color:"blue",text:"Linux"};case"windows":return{color:"info",text:"Windows"};default:return{color:"gray",text:t||"Unknown"}}}const ue=[{key:"name",title:"Name",cellComponent:ze,cellProps:{entityType:"template"}},{key:"description",title:"Description",cellComponent:S,cellProps:{field:"description",type:"description"}},{key:"forge_type",title:"Forge Type",cellComponent:S,cellProps:{field:"forge_type"}},{key:"os_type",title:"OS Type",cellComponent:S,cellProps:{field:"os_type"}},{key:"owner_id",title:"Owner",cellComponent:S,cellProps:{field:"owner_id"}},{key:"actions",title:"Actions",align:"right",cellComponent:Fe,cellProps:t=>{const r=Ue(),s=t.owner_id==="system",o=[];return o.push({type:"copy",title:"Clone",ariaLabel:"Clone template",action:"clone"}),(r||!s)&&o.push({type:"edit",title:"Edit",ariaLabel:"Edit template",action:"edit"}),(r||!s)&&o.push({type:"delete",title:"Delete",ariaLabel:"Delete template",action:"delete"}),{actions:o}}}],ge={entityType:"template",primaryText:{field:"name",isClickable:!0,href:"/templates/{id}"},secondaryText:{field:"description"},badges:[{type:"custom",value:t=>{const r=J(t.forge_type);return{variant:r.color,text:r.text}}},{type:"custom",value:t=>{const r=K(t.os_type);return{variant:r.color,text:r.text}}}],actions:[{type:"clone",handler:t=>j(t)},{type:"edit",handler:t=>I(B(`/templates/${t.id}?edit=true`))},{type:"delete",handler:t=>W(t)}]};Te(async()=>{try{const t=await oe.getTemplates();t&&Array.isArray(t)&&a(y,t)}catch(t){console.error("Failed to load templates:",t),a(P,t instanceof Error?t.message:"Failed to load templates")}}),b(()=>(e(y),g()),()=>{(!e(y).length||g().loaded.templates)&&a(y,g().templates)}),b(()=>g(),()=>{a(F,g().loading.templates)}),b(()=>g(),()=>{a(G,g().errorMessages.templates)}),b(()=>(e(m),e(y)),()=>{a(f,e(m)?e(y).filter(t=>t.name?.toLowerCase().includes(e(m).toLowerCase())||t.description?.toLowerCase().includes(e(m).toLowerCase())||t.forge_type?.toLowerCase().includes(e(m).toLowerCase())||t.os_type?.toLowerCase().includes(e(m).toLowerCase())):e(y))}),b(()=>(e(x),e(f),e(v),e(i)),()=>{a(x,Math.ceil(e(f).length/e(v))),e(i)>e(x)&&e(x)>0&&a(i,e(x))}),b(()=>(e(f),e(i),e(v)),()=>{a(H,e(f).slice((e(i)-1)*e(v),e(i)*e(v)))}),$e(),we();var Q=qe();ke(t=>{Pe.title="Runner Install Templates - GARM"});var V=D(Q);Ie(V,{title:"Runner Install Templates",description:"Manage templates for configuring runner software installation. These templates can be set on pools or scale sets.",actionLabel:"Create Template",showAction:!0,$$events:{action:pe}});var X=T(V,2);{var fe=t=>{var r=Oe(),s=$(r),o=T($(s),2),C=T($(o),2),R=$(C,!0);k(C);var M=T(C,2),z=$(M);Be(z,{variant:"secondary",size:"sm",$$events:{click:ce},children:(p,u)=>{Ae();var U=ee("Try Again");h(p,U)},$$slots:{default:!0}}),k(M),k(o),k(s),k(r),te(()=>ae(R,e(P)||e(G))),h(t,r)};L(X,t=>{(e(P)||e(G))&&!e(F)&&t(fe)})}var Y=T(X,2);Se(Y,{get columns(){return ue},get data(){return e(H)},get loading(){return e(F)},get error(){return e(P)},get searchTerm(){return e(m)},searchPlaceholder:"Search templates by name, description, type...",get currentPage(){return e(i)},get perPage(){return e(v)},get totalPages(){return e(x)},get totalItems(){return e(f),n(()=>e(f).length)},get mobileCardConfig(){return ge},emptyMessage:"No templates found",$$events:{search:t=>{a(m,t.detail.term),a(i,1)},pageChange:t=>a(i,t.detail.page),perPageChange:t=>{a(v,t.detail.perPage),a(i,1)},clone:t=>j(t.detail.item),edit:t=>I(B(`/templates/${t.detail.item.id}?edit=true`)),delete:t=>W(t.detail.item)},$$slots:{cell:(t,r)=>{const s=E(()=>r.item),o=E(()=>r.column);var C=O(),R=D(C);{var M=p=>{const u=E(()=>(d(e(s)),n(()=>J(e(s).forge_type))));re(p,{get variant(){return d(e(u)),n(()=>e(u).color)},get text(){return d(e(u)),n(()=>e(u).text)}})},z=p=>{var u=O(),U=D(u);{var _e=w=>{const _=E(()=>(d(e(s)),n(()=>K(e(s).os_type))));re(w,{get variant(){return d(e(_)),n(()=>e(_).color)},get text(){return d(e(_)),n(()=>e(_).text)}})},he=w=>{var _=O(),xe=D(_);{var Ce=N=>{var Z=ee();te(()=>ae(Z,(d(e(s)),n(()=>e(s).owner_id==="system"?"System":e(s).owner_id||"Unknown")))),h(N,Z)};L(xe,N=>{d(e(o)),n(()=>e(o).key==="owner_id")&&N(Ce)},!0)}h(w,_)};L(U,w=>{d(e(o)),n(()=>e(o).key==="os_type")?w(_e):w(he,!1)},!0)}h(p,u)};L(R,p=>{d(e(o)),n(()=>e(o).key==="forge_type")?p(M):p(z,!1)})}h(t,C)}}});var ye=T(Y,2);{var ve=t=>{Re(t,{title:"Delete Template",message:"Are you sure you want to delete this template? This action cannot be undone.",get itemName(){return e(c),n(()=>e(c).name)},$$events:{close:()=>{a(A,!1),a(c,null)},confirm:me}})};L(ye,t=>{e(A)&&e(c)&&t(ve)})}h(le,Q),Le(),de()}export{lt as component}; diff --git a/webapp/assets/_app/immutable/nodes/22.HPy9RpzE.js b/webapp/assets/_app/immutable/nodes/22.HPy9RpzE.js new file mode 100644 index 00000000..cd9c088c --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/22.HPy9RpzE.js @@ -0,0 +1,2 @@ +import"../chunks/DsnmJJEf.js";import{i as Dt}from"../chunks/TJn6xDN9.js";import{p as Ut,o as Lt,l as ue,h as Rt,f as A,j as It,a as ee,b as _,c as Mt,g as e,m as w,t as P,k as l,u as s,$ as Et,s as r,w as I,A as Oe,d,r as o,z as W,D as qe,v as g,e as S,q as U,i as Ce,y as Ft}from"../chunks/DniTuB_0.js";import{i as T}from"../chunks/DbNhg6mG.js";import{d as te,g as $e,r as Ye,b as St}from"../chunks/DSfKzFV1.js";import{b as Je}from"../chunks/CCQwxxp9.js";import{p as Ht}from"../chunks/D4Caz1gY.js";import{p as me}from"../chunks/covROD4j.js";import{g as Ae}from"../chunks/kW9-6GPQ.js";import{A as Ke}from"../chunks/DGZKesLN.js";import{t as M}from"../chunks/CBJzOE8U.js";import{e as De}from"../chunks/BZiHL9L3.js";import{B as pe}from"../chunks/Dyp1NLoF.js";import{D as Bt}from"../chunks/DsCgpFQt.js";import{C as Pt,a as Qe}from"../chunks/CRtXxCw0.js";import{D as jt}from"../chunks/z19xmJI9.js";import{i as Xe}from"../chunks/C98nByjP.js";import{g as Ze}from"../chunks/BC4TpgBU.js";import{w as Gt}from"../chunks/DmHFwzWx.js";var Vt=A('
Loading template...
'),zt=A('

Error loading template

'),Nt=A('
Forge Type

Cannot be changed

OS Type

Cannot be changed

'),Wt=A('
Created
'),Ot=A('
Last Updated
'),qt=A('
Name
Description
Forge Type
OS Type
Owner
Template ID
'),Yt=A('
'),Jt=A('

Available Template Variables

Your template can use the following variables using Go template syntax (e.g., ):

Runner Info
  • .RunnerName - Runner name
  • .RunnerLabels - Comma separated labels
  • .RunnerUsername - Runner service username
  • .RunnerGroup - Runner service group
  • .GitHubRunnerGroup - GitHub runner group
Download & Install
  • .FileName - Download file name
  • .DownloadURL - Runner download URL
  • .TempDownloadToken - Download token
  • .RepoURL - Repository URL
Configuration
  • .MetadataURL - Instance metadata URL
  • .CallbackURL - Status callback URL
  • .CallbackToken - Callback token
  • .CABundle - CA certificate bundle
  • .EnableBootDebug - Enable debug mode
  • .UseJITConfig - Use JIT configuration
  • .ExtraContext - Additional context map

💡 Tip: Use for conditional content, or to iterate over extra context.

'),Kt=A('

'),Qt=A('
',1),Xt=A('

Template Information

Template Content

',1),Zt=A(" ",1);function ya(et,tt){Ut(tt,!1);const ae=w(),ge=w(),ve=w();let re=w(!0),t=w(null),j=w(""),y=w(!1),i=w({name:"",description:"",data:new Uint8Array}),m=w(""),O=w("text"),H=w(!1),C=w({name:"",description:""}),F=w(""),be=w(!1),de=w(!1);async function xe(){try{if(l(re,!0),l(j,""),l(t,await $e.getTemplate(e(ae))),!e(t))throw new Error("Template not found");if(I(i,e(i).name=e(t).name||""),I(i,e(i).description=e(t).description||""),I(C,e(C).name=e(t).name||""),I(C,e(C).description=e(t).description||""),e(t).data)try{if(Array.isArray(e(t).data)){const a=new Uint8Array(e(t).data);l(m,new TextDecoder().decode(a)),l(F,e(m))}else l(m,atob(e(t).data)),l(F,e(m))}catch(a){console.error("Failed to decode template data:",a),l(m,""),l(F,"")}else l(m,""),l(F,"")}catch(a){l(j,De(a)),M.add({type:"error",title:"Failed to load template",message:e(j)})}finally{l(re,!1)}}async function Ue(){if(!(!e(t)?.id||!e(ve)))try{const a={name:e(i).name,description:e(i).description||void 0,data:Array.from(new TextEncoder().encode(e(m)))},n=await $e.updateTemplate(e(t).id,a);l(t,n),M.add({type:"success",title:"Template updated",message:`Template "${e(i).name}" has been updated successfully.`}),I(C,e(C).name=e(i).name),I(C,e(C).description=e(i).description),l(F,e(m)),l(y,!1)}catch(a){const n=De(a);M.add({type:"error",title:"Failed to update template",message:n})}}async function at(){if(e(t)?.id)try{await $e.deleteTemplate(e(t).id),M.add({type:"success",title:"Template deleted",message:`Template "${e(t).name}" has been deleted successfully.`}),Ae(te("/templates"))}catch(a){const n=De(a);M.add({type:"error",title:"Failed to delete template",message:n})}}function Le(){l(y,!0),l(H,!1)}function rt(){return e(i).name!==e(C).name||e(i).description!==e(C).description||e(m)!==e(F)}function dt(){if(rt()){l(de,!0);return}Re()}function Re(){if(l(y,!1),l(H,!1),me.url.searchParams.get("edit")==="true"){Ae(te("/templates"));return}if(e(t))if(I(i,e(i).name=e(t).name||""),I(i,e(i).description=e(t).description||""),e(t).data)try{if(Array.isArray(e(t).data)){const a=new Uint8Array(e(t).data);l(m,new TextDecoder().decode(a))}else l(m,atob(e(t).data))}catch(a){console.error("Failed to decode template data:",a),l(m,"")}else l(m,"")}function ot(){l(de,!1),Re()}function Ie(a){switch(a){case"github":return{color:"blue",text:"GitHub"};case"gitea":return{color:"green",text:"Gitea"};default:return{color:"gray",text:a||"Unknown"}}}function Me(a){switch(a){case"linux":return{color:"blue",text:"Linux"};case"windows":return{color:"info",text:"Windows"};default:return{color:"gray",text:a||"Unknown"}}}function fe(){if(!e(t)?.data)return"";try{if(Array.isArray(e(t).data)){const a=new Uint8Array(e(t).data);return new TextDecoder().decode(a)}else return atob(e(t).data)}catch(a){return console.error("Failed to decode template data:",a),"Error: Failed to decode template content"}}function Ee(a){const L=a.split(` +`)[0]?.trim()||"";return L.startsWith("#!/bin/bash")||L.startsWith("#!/bin/sh")?"bash":L.startsWith("#!/usr/bin/env pwsh")||L.includes("#ps1_sysnative")?"powershell":L.startsWith("#!/usr/bin/env python")||L.startsWith("#!/usr/bin/python")?"python":a.includes("param(")||a.includes("Write-Host")||a.includes("$_")?"powershell":a.includes("def ")||a.includes("import ")||a.includes("print(")?"python":a.includes("echo ")||a.includes("export ")||a.includes("if [")?"bash":"text"}async function lt(a){try{navigator.clipboard&&navigator.clipboard.writeText?(await navigator.clipboard.writeText(a),M.add({type:"success",title:"Copied to clipboard",message:"Template content has been copied to your clipboard."})):Fe(a)}catch(n){console.error("Failed to copy to clipboard:",n),Fe(a)}}function Fe(a){try{const n=document.createElement("textarea");n.value=a,n.style.position="fixed",n.style.left="-999999px",n.style.top="-999999px",document.body.appendChild(n),n.focus(),n.select();const L=document.execCommand("copy");if(document.body.removeChild(n),L)M.add({type:"success",title:"Copied to clipboard",message:"Template content has been copied to your clipboard."});else throw new Error("Copy command failed")}catch(n){console.error("Fallback copy failed:",n),M.add({type:"error",title:"Copy failed",message:"Unable to copy to clipboard. Please manually select and copy the content."})}}Lt(()=>{if(e(ae))return xe().then(()=>{me.url.searchParams.get("edit")==="true"&&Le()}),Gt.subscribeToEntity("template",["update","delete"],n=>{n.payload&&n.payload.id===e(ae)&&(n.operation==="update"?e(y)?M.add({type:"info",title:"Template updated",message:"This template has been updated externally. Your changes are preserved."}):xe():n.operation==="delete"&&(M.add({type:"info",title:"Template deleted",message:`Template "${e(t)?.name||"Unknown"}" has been deleted.`}),Ae(te("/templates"))))});l(j,"Invalid template ID"),l(re,!1)}),ue(()=>me,()=>{l(ae,parseInt(me.params.id||"0"))}),ue(()=>(e(m),e(H)),()=>{e(m)&&!e(H)&&l(O,Ee(e(m)))}),ue(()=>(e(i),e(C),e(m),e(F)),()=>{l(ge,e(i).name!==e(C).name||e(i).description!==e(C).description||e(m)!==e(F))}),ue(()=>(e(ge),e(i),e(m)),()=>{l(ve,e(ge)&&e(i).name.trim().length>0&&e(m).trim().length>0)}),Rt(),Dt();var Se=Zt();It(a=>{P(()=>Et.title=`${e(t),s(()=>e(t)?.name||"Template")??""} - GARM`)});var He=ee(Se);{var st=a=>{var n=Vt();_(a,n)},nt=a=>{var n=Oe(),L=ee(n);{var mt=G=>{var V=zt(),oe=d(V),le=r(d(oe),2),B=r(d(le),2),se=d(B,!0);o(B);var q=r(B,2),ne=d(q);Ke(ne,{variant:"secondary",size:"sm",$$events:{click:xe},children:(z,Y)=>{W();var J=qe("Try Again");_(z,J)},$$slots:{default:!0}});var ye=r(ne,2);{let z=g(()=>(U(te),s(()=>te("/templates"))));Ke(ye,{variant:"secondary",size:"sm",get href(){return e(z)},children:(Y,J)=>{W();var K=qe("Back to Templates");_(Y,K)},$$slots:{default:!0}})}o(q),o(le),o(oe),o(V),P(()=>S(se,e(j))),_(G,V)},pt=G=>{var V=Oe(),oe=ee(V);{var le=B=>{const se=g(()=>(U(Xe),s(Xe))),q=g(()=>(e(t),s(()=>e(t).owner_id==="system"))),ne=g(()=>e(se)||!e(q)),ye=g(()=>e(se)||!e(q));var z=Xt(),Y=ee(z);{let p=g(()=>(e(t),s(()=>e(t).name||"Unnamed Template"))),c=g(()=>(U(Ze),e(t),s(()=>Ze(e(t).forge_type||"unknown")))),u=g(()=>e(y)?dt:e(ne)?Le:null),v=g(()=>e(y)?Ue:e(ye)?()=>l(be,!0):null),x=g(()=>e(y)?"Close":"Edit"),b=g(()=>e(y)?"Save Changes":"Delete"),f=g(()=>(e(y),"secondary")),R=g(()=>e(y)?"primary":"danger"),E=g(()=>e(y)?!e(ve):!1),N=g(()=>e(y)?"":""),Q=g(()=>e(y)?"":"");Bt(Y,{get title(){return e(p)},subtitle:"View and manage template details",get forgeIcon(){return e(c)},get onEdit(){return e(u)},get onDelete(){return e(v)},get editLabel(){return e(x)},get deleteLabel(){return e(b)},get editVariant(){return e(f)},get deleteVariant(){return e(R)},get deleteDisabled(){return e(E)},get editIcon(){return e(N)},get deleteIcon(){return e(Q)}})}var J=r(Y,2),K=d(J),Pe=d(K),gt=r(d(Pe),2);{var vt=p=>{var c=Nt(),u=d(c),v=d(u),x=r(d(v),2);Ye(x),o(v);var b=r(v,2),f=r(d(b),2);Ye(f),o(b),o(u);var R=r(u,2),E=d(R),N=r(d(E),2);{var Q=$=>{const D=g(()=>(e(t),s(()=>Ie(e(t).forge_type))));pe($,{get variant(){return U(e(D)),s(()=>e(D).color)},get text(){return U(e(D)),s(()=>e(D).text)}})};T(N,$=>{e(t),s(()=>e(t).forge_type)&&$(Q)})}W(2),o(E);var ie=r(E,2),X=r(d(ie),2);{var ce=$=>{const D=g(()=>(e(t),s(()=>Me(e(t).os_type))));pe($,{get variant(){return U(e(D)),s(()=>e(D).color)},get text(){return U(e(D)),s(()=>e(D).text)}})};T(X,$=>{e(t),s(()=>e(t).os_type)&&$(ce)})}W(2),o(ie),o(R),o(c),Je(x,()=>e(i).name,$=>I(i,e(i).name=$)),Je(f,()=>e(i).description,$=>I(i,e(i).description=$)),Ce("submit",c,Ht(Ue)),_(p,c)},bt=p=>{var c=qt(),u=d(c),v=r(d(u),2),x=d(v,!0);o(v),o(u);var b=r(u,2),f=r(d(b),2),R=d(f,!0);o(f),o(b);var E=r(b,2),N=r(d(E),2),Q=d(N);{var ie=k=>{const h=g(()=>(e(t),s(()=>Ie(e(t).forge_type))));pe(k,{get variant(){return U(e(h)),s(()=>e(h).color)},get text(){return U(e(h)),s(()=>e(h).text)}})};T(Q,k=>{e(t),s(()=>e(t).forge_type)&&k(ie)})}o(N),o(E);var X=r(E,2),ce=r(d(X),2),$=d(ce);{var D=k=>{const h=g(()=>(e(t),s(()=>Me(e(t).os_type))));pe(k,{get variant(){return U(e(h)),s(()=>e(h).color)},get text(){return U(e(h)),s(()=>e(h).text)}})};T($,k=>{e(t),s(()=>e(t).os_type)&&k(D)})}o(ce),o(X);var _e=r(X,2),ze=r(d(_e),2),wt=d(ze,!0);o(ze),o(_e);var ke=r(_e,2),Ne=r(d(ke),2),Tt=d(Ne,!0);o(Ne),o(ke);var We=r(ke,2);{var Ct=k=>{var h=Wt(),Z=r(d(h),2),we=d(Z,!0);o(Z),o(h),P(Te=>S(we,Te),[()=>(e(t),s(()=>new Date(e(t).created_at).toLocaleDateString()))]),_(k,h)};T(We,k=>{e(t),s(()=>e(t).created_at)&&k(Ct)})}var $t=r(We,2);{var At=k=>{var h=Ot(),Z=r(d(h),2),we=d(Z,!0);o(Z),o(h),P(Te=>S(we,Te),[()=>(e(t),s(()=>new Date(e(t).updated_at).toLocaleDateString()))]),_(k,h)};T($t,k=>{e(t),s(()=>e(t).updated_at)&&k(At)})}o(c),P(()=>{S(x,(e(t),s(()=>e(t).name||"Unnamed Template"))),S(R,(e(t),s(()=>e(t).description||"No description"))),S(wt,(e(t),s(()=>e(t).owner_id==="system"?"System":e(t).owner_id||"Unknown"))),S(Tt,(e(t),s(()=>e(t).id)))}),_(p,c)};T(gt,p=>{e(y)?p(vt):p(bt,!1)})}o(Pe),o(K);var je=r(K,2),Ge=d(je),he=d(Ge),xt=r(d(he),2);{var ft=p=>{var c=Yt(),u=r(d(c),2);P(()=>{e(O),Ft(()=>{e(H)})});var v=d(u);v.value=v.__value="bash";var x=r(v);x.value=x.__value="powershell";var b=r(x);b.value=b.__value="python";var f=r(b);f.value=f.__value="text",o(u),o(c),St(u,()=>e(O),R=>l(O,R)),Ce("change",u,()=>l(H,!0)),_(p,c)};T(xt,p=>{e(y)&&p(ft)})}o(he);var Ve=r(he,2);{var yt=p=>{var c=Jt(),u=r(d(c),2),v=r(d(u));v.textContent="{{ .RunnerName }}",W(),o(u);var x=r(u,4),b=r(d(x),3);b.textContent="{{if .CABundle}}...{{end}}";var f=r(b,2);f.textContent="{{range $key, $value := .ExtraContext}}{{$key}}: {{$value}}{{end}}",W(),o(x),o(c),_(p,c)};T(Ve,p=>{e(y)&&p(yt)})}var ht=r(Ve,2);{var _t=p=>{var c=Kt(),u=d(c);{let b=g(()=>!e(H));Qe(u,{get language(){return e(O)},get autoDetect(){return e(b)},enableTemplateCompletion:!0,minHeight:"400px",placeholder:"Enter your template script content here...",get value(){return e(m)},set value(f){l(m,f)},$$events:{change:f=>l(m,f.detail.value)},$$legacy:!0})}var v=r(u,2),x=d(v);o(v),o(c),P(()=>S(x,`Template content should be a ${e(t),s(()=>e(t).os_type==="windows"?"PowerShell":"bash")??""} script for runner installation and configuration on ${e(t),s(()=>e(t).os_type)??""}.`)),_(p,c)},kt=p=>{var c=Qt(),u=ee(c),v=r(d(u),2);o(u);var x=r(u,2),b=d(x);{let f=g(()=>s(fe)),R=g(()=>s(()=>Ee(fe())));Qe(b,{get value(){return e(f)},get language(){return e(R)},readonly:!0,minHeight:"400px"})}o(x),Ce("click",v,()=>lt(fe())),_(p,c)};T(ht,p=>{e(y)?p(_t):p(kt,!1)})}o(Ge),o(je),o(J),_(B,z)};T(oe,B=>{e(t)&&B(le)},!0)}_(G,V)};T(L,G=>{e(j)&&!e(t)?G(mt):G(pt,!1)},!0)}_(a,n)};T(He,a=>{e(re)?a(st):a(nt,!1)})}var Be=r(He,2);{var it=a=>{jt(a,{title:"Delete Template",message:"Are you sure you want to delete this template? This action cannot be undone.",get itemName(){return e(t),s(()=>e(t).name)},$$events:{close:()=>l(be,!1),confirm:at}})};T(Be,a=>{e(be)&&e(t)&&a(it)})}var ct=r(Be,2);{var ut=a=>{Pt(a,{title:"Unsaved Changes",message:"You have unsaved changes. Are you sure you want to discard them?",confirmText:"Discard Changes",cancelText:"Stay on Page",variant:"warning",$$events:{close:()=>l(de,!1),confirm:ot}})};T(ct,a=>{e(de)&&a(ut)})}_(et,Se),Mt()}export{ya as component}; diff --git a/webapp/assets/_app/immutable/nodes/21.C8nsoPMT.js b/webapp/assets/_app/immutable/nodes/23.BG2rtdAg.js similarity index 97% rename from webapp/assets/_app/immutable/nodes/21.C8nsoPMT.js rename to webapp/assets/_app/immutable/nodes/23.BG2rtdAg.js index f2ad45dd..cccb0dcb 100644 --- a/webapp/assets/_app/immutable/nodes/21.C8nsoPMT.js +++ b/webapp/assets/_app/immutable/nodes/23.BG2rtdAg.js @@ -1,2 +1,2 @@ -import"../chunks/DsnmJJEf.js";import{i as Ye}from"../chunks/TJn6xDN9.js";import{p as Ke,o as Qe,l as Q,h as Xe,f as F,j as Ze,a as Te,b as w,c as et,g as e,m as p,t as C,k as l,u as U,$ as tt,s as r,w as f,v as X,d as o,r as s,y as Z,z as A,e as at,i as D,C as rt}from"../chunks/DniTuB_0.js";import{i as ee}from"../chunks/DbNhg6mG.js";import{g as Le,d as te,r as Re,b as ae}from"../chunks/BZ2rxtTc.js";import{b as $e}from"../chunks/CCQwxxp9.js";import{b as lt}from"../chunks/C-xTH-sp.js";import{p as ot}from"../chunks/D4Caz1gY.js";import{g as re}from"../chunks/HMJxCnAR.js";import{p as st}from"../chunks/Hb0uuDRx.js";import{t as h}from"../chunks/CBJzOE8U.js";import{e as Ue}from"../chunks/BZiHL9L3.js";import{D as dt}from"../chunks/J4QHiesY.js";import{a as nt,C as it}from"../chunks/Byy0srta.js";var ut=F('
Loading...
'),ct=F('
Uploading...',1),pt=rt(' Upload File',1),bt=F('

Template Information

Template Content

Available Template Variables

Your template can use the following variables using Go template syntax (e.g., ):

Runner Info
  • .RunnerName - Runner name
  • .RunnerLabels - Comma separated labels
  • .RunnerUsername - Runner service username
  • .RunnerGroup - Runner service group
  • .GitHubRunnerGroup - GitHub runner group
Download & Install
  • .FileName - Download file name
  • .DownloadURL - Runner download URL
  • .TempDownloadToken - Download token
  • .RepoURL - Repository URL
Configuration
  • .MetadataURL - Instance metadata URL
  • .CallbackURL - Status callback URL
  • .CallbackToken - Callback token
  • .CABundle - CA certificate bundle
  • .EnableBootDebug - Enable debug mode
  • .UseJITConfig - Use JIT configuration
  • .ExtraContext - Additional context map

💡 Tip: Use for conditional content, or to iterate over extra context.

',1),gt=F(" ",1);function Ut(Ae,De){Ke(De,!1);const le=p(),M=p();let _=p(!1),i=p(null),t=p({name:"",description:"",forge_type:"github",os_type:"linux",data:new Uint8Array}),u=p(""),v=p("text"),x=p(!1),I=p(),T=p(!1),L={name:"",description:"",forge_type:"github",os_type:"linux"},Fe="",R=p(!1);async function oe(){if(e(M))try{l(_,!0);const a={name:e(t).name,description:e(t).description||void 0,forge_type:e(t).forge_type,os_type:e(t).os_type,data:Array.from(new TextEncoder().encode(e(u)))};await Le.createTemplate(a),h.add({type:"success",title:"Template created",message:`Template "${e(t).name}" has been created successfully.`}),re(te("/templates"))}catch(a){const c=Ue(a);h.add({type:"error",title:"Failed to create template",message:c})}finally{l(_,!1)}}function Me(){return e(le)}function Ie(){if(Me()){l(R,!0);return}se()}function se(){re(te("/templates"))}function We(){l(R,!1),se()}function Ee(){e(I).click()}async function Se(a){const c=a.target,n=c.files?.[0];if(n){if(n.size>1024*1024){h.add({type:"error",title:"File too large",message:"Please select a file smaller than 1MB."});return}try{l(T,!0);const y=await n.text();l(u,y);const b=n.name.toLowerCase();let m="text";b.endsWith(".sh")||b.endsWith(".bash")?m="bash":b.endsWith(".ps1")||b.endsWith(".psm1")?m="powershell":b.endsWith(".py")?m="python":m=W(y),l(v,m),l(x,!1),h.add({type:"success",title:"File uploaded",message:`Successfully loaded content from "${n.name}".`})}catch{h.add({type:"error",title:"Failed to read file",message:"Unable to read the selected file. Please try again."})}finally{l(T,!1),c.value=""}}}function W(a){const n=a.split(` +import"../chunks/DsnmJJEf.js";import{i as Ye}from"../chunks/TJn6xDN9.js";import{p as Ke,o as Qe,l as Q,h as Xe,f as F,j as Ze,a as Te,b as w,c as et,g as e,m as p,t as C,k as l,u as U,$ as tt,s as r,w as f,v as X,d as o,r as s,y as Z,z as A,e as at,i as D,C as rt}from"../chunks/DniTuB_0.js";import{i as ee}from"../chunks/DbNhg6mG.js";import{g as Le,d as te,r as Re,b as ae}from"../chunks/DSfKzFV1.js";import{b as $e}from"../chunks/CCQwxxp9.js";import{b as lt}from"../chunks/C-xTH-sp.js";import{p as ot}from"../chunks/D4Caz1gY.js";import{g as re}from"../chunks/kW9-6GPQ.js";import{p as st}from"../chunks/covROD4j.js";import{t as h}from"../chunks/CBJzOE8U.js";import{e as Ue}from"../chunks/BZiHL9L3.js";import{D as dt}from"../chunks/DsCgpFQt.js";import{a as nt,C as it}from"../chunks/CRtXxCw0.js";var ut=F('
Loading...
'),ct=F('
Uploading...',1),pt=rt(' Upload File',1),bt=F('

Template Information

Template Content

Available Template Variables

Your template can use the following variables using Go template syntax (e.g., ):

Runner Info
  • .RunnerName - Runner name
  • .RunnerLabels - Comma separated labels
  • .RunnerUsername - Runner service username
  • .RunnerGroup - Runner service group
  • .GitHubRunnerGroup - GitHub runner group
Download & Install
  • .FileName - Download file name
  • .DownloadURL - Runner download URL
  • .TempDownloadToken - Download token
  • .RepoURL - Repository URL
Configuration
  • .MetadataURL - Instance metadata URL
  • .CallbackURL - Status callback URL
  • .CallbackToken - Callback token
  • .CABundle - CA certificate bundle
  • .EnableBootDebug - Enable debug mode
  • .UseJITConfig - Use JIT configuration
  • .ExtraContext - Additional context map

💡 Tip: Use for conditional content, or to iterate over extra context.

',1),gt=F(" ",1);function Ut(Ae,De){Ke(De,!1);const le=p(),M=p();let _=p(!1),i=p(null),t=p({name:"",description:"",forge_type:"github",os_type:"linux",data:new Uint8Array}),u=p(""),v=p("text"),x=p(!1),I=p(),T=p(!1),L={name:"",description:"",forge_type:"github",os_type:"linux"},Fe="",R=p(!1);async function oe(){if(e(M))try{l(_,!0);const a={name:e(t).name,description:e(t).description||void 0,forge_type:e(t).forge_type,os_type:e(t).os_type,data:Array.from(new TextEncoder().encode(e(u)))};await Le.createTemplate(a),h.add({type:"success",title:"Template created",message:`Template "${e(t).name}" has been created successfully.`}),re(te("/templates"))}catch(a){const c=Ue(a);h.add({type:"error",title:"Failed to create template",message:c})}finally{l(_,!1)}}function Me(){return e(le)}function Ie(){if(Me()){l(R,!0);return}se()}function se(){re(te("/templates"))}function We(){l(R,!1),se()}function Ee(){e(I).click()}async function Se(a){const c=a.target,n=c.files?.[0];if(n){if(n.size>1024*1024){h.add({type:"error",title:"File too large",message:"Please select a file smaller than 1MB."});return}try{l(T,!0);const y=await n.text();l(u,y);const b=n.name.toLowerCase();let m="text";b.endsWith(".sh")||b.endsWith(".bash")?m="bash":b.endsWith(".ps1")||b.endsWith(".psm1")?m="powershell":b.endsWith(".py")?m="python":m=W(y),l(v,m),l(x,!1),h.add({type:"success",title:"File uploaded",message:`Successfully loaded content from "${n.name}".`})}catch{h.add({type:"error",title:"Failed to read file",message:"Unable to read the selected file. Please try again."})}finally{l(T,!1),c.value=""}}}function W(a){const n=a.split(` `)[0]?.trim()||"";return n.startsWith("#!/bin/bash")||n.startsWith("#!/bin/sh")?"bash":n.startsWith("#!/usr/bin/env pwsh")||n.includes("#ps1_sysnative")?"powershell":n.startsWith("#!/usr/bin/env python")||n.startsWith("#!/usr/bin/python")?"python":a.includes("param(")||a.includes("Write-Host")||a.includes("$_")?"powershell":a.includes("def ")||a.includes("import ")||a.includes("print(")?"python":a.includes("echo ")||a.includes("export ")||a.includes("if [")?"bash":"text"}async function Ge(){const a=st.url.searchParams.get("clone");if(a)try{if(l(_,!0),l(i,await Le.getTemplate(parseInt(a))),!e(i))throw new Error("Template not found");if(f(t,e(t).name=`${e(i).name} (Copy)`),f(t,e(t).description=e(i).description||""),f(t,e(t).forge_type=e(i).forge_type||"github"),f(t,e(t).os_type=e(i).os_type||"linux"),e(i).data)try{if(Array.isArray(e(i).data)){const c=new Uint8Array(e(i).data);l(u,new TextDecoder().decode(c))}else l(u,atob(e(i).data));l(v,W(e(u)))}catch(c){console.error("Failed to decode template data:",c),l(u,"")}}catch(c){const n=Ue(c);h.add({type:"error",title:"Failed to load template",message:n}),re(te("/templates"))}finally{l(_,!1)}}Qe(()=>{Ge()}),Q(()=>(e(t),e(u)),()=>{l(le,e(t).name!==L.name||e(t).description!==L.description||e(t).forge_type!==L.forge_type||e(t).os_type!==L.os_type||e(u)!==Fe)}),Q(()=>(e(t),e(u)),()=>{l(M,e(t).name.trim().length>0&&e(u).trim().length>0)}),Q(()=>(e(u),e(x)),()=>{e(u)&&!e(x)&&l(v,W(e(u)))}),Xe(),Ye();var de=gt();Ze(a=>{C(()=>tt.title=`${e(i),U(()=>e(i)?`Clone ${e(i).name}`:"Create Template")??""} - GARM`)});var ne=Te(de);{var He=a=>{var c=ut();w(a,c)},Pe=a=>{var c=bt(),n=Te(c);{let d=X(()=>(e(i),U(()=>e(i)?`Clone Template: ${e(i).name}`:"Create New Template"))),g=X(()=>!e(M));dt(n,{get title(){return e(d)},subtitle:"Create a new runner install template",onEdit:Ie,onDelete:oe,editLabel:"Cancel",deleteLabel:"Create Template",editVariant:"secondary",deleteVariant:"primary",get deleteDisabled(){return e(g)},editIcon:"",deleteIcon:""})}var y=r(n,2),b=o(y),m=o(b),E=r(o(m),2),S=o(E),G=o(S),ie=r(o(G),2);Re(ie),s(G);var ue=r(G,2),ce=r(o(ue),2);Re(ce),s(ue),s(S);var pe=r(S,2),H=o(pe),P=r(o(H),2);C(()=>{e(t),Z(()=>{})});var j=o(P);j.value=j.__value="github";var be=r(j);be.value=be.__value="gitea",s(P),s(H);var ge=r(H,2),B=r(o(ge),2);C(()=>{e(t),Z(()=>{})});var N=o(B);N.value=N.__value="linux";var me=r(N);me.value=me.__value="windows",s(B),s(ge),s(pe),s(E),s(m),s(b);var fe=r(b,2),ve=o(fe),V=o(ve),xe=r(o(V),2),k=o(xe),Ne=o(k);{var Ve=d=>{var g=ct();A(),w(d,g)},qe=d=>{var g=pt();A(),w(d,g)};ee(Ne,d=>{e(T)?d(Ve):d(qe,!1)})}s(k);var $=r(k,4);C(()=>{e(v),Z(()=>{e(x)})});var q=o($);q.value=q.__value="bash";var z=r(q);z.value=z.__value="powershell";var J=r(z);J.value=J.__value="python";var ye=r(J);ye.value=ye.__value="text",s($),s(xe),s(V);var O=r(V,2);lt(O,d=>l(I,d),()=>e(I));var Y=r(O,2),K=r(o(Y),2),ze=r(o(K));ze.textContent="{{ .RunnerName }}",A(),s(K);var he=r(K,4),_e=r(o(he),3);_e.textContent="{{if .CABundle}}...{{end}}";var Je=r(_e,2);Je.textContent="{{range $key, $value := .ExtraContext}}{{$key}}: {{$value}}{{end}}",A(),s(he),s(Y);var ke=r(Y,2),we=o(ke);{let d=X(()=>!e(x));nt(we,{get language(){return e(v)},get autoDetect(){return e(d)},enableTemplateCompletion:!0,minHeight:"400px",placeholder:"Enter your template script content here...",get value(){return e(u)},set value(g){l(u,g)},$$events:{change:g=>l(u,g.detail.value)},$$legacy:!0})}var Ce=r(we,2),Oe=o(Ce);s(Ce),s(ke),s(ve),s(fe),s(y),C(()=>{k.disabled=e(T),at(Oe,`Template content should be a ${e(t),U(()=>e(t).os_type==="windows"?"PowerShell":"bash")??""} script for runner installation and configuration on ${e(t),U(()=>e(t).os_type)??""}.`)}),$e(ie,()=>e(t).name,d=>f(t,e(t).name=d)),$e(ce,()=>e(t).description,d=>f(t,e(t).description=d)),ae(P,()=>e(t).forge_type,d=>f(t,e(t).forge_type=d)),ae(B,()=>e(t).os_type,d=>f(t,e(t).os_type=d)),D("submit",E,ot(oe)),D("click",k,Ee),ae($,()=>e(v),d=>l(v,d)),D("change",$,()=>l(x,!0)),D("change",O,Se),w(a,c)};ee(ne,a=>{e(_)?a(He):a(Pe,!1)})}var je=r(ne,2);{var Be=a=>{it(a,{title:"Unsaved Changes",message:"You have unsaved changes. Are you sure you want to discard them?",confirmText:"Discard Changes",cancelText:"Stay on Page",variant:"danger",$$events:{close:()=>l(R,!1),confirm:We}})};ee(je,a=>{e(R)&&a(Be)})}w(Ae,de),et()}export{Ut as component}; diff --git a/webapp/assets/_app/immutable/nodes/3.DmBkFzct.js b/webapp/assets/_app/immutable/nodes/3.DmBkFzct.js deleted file mode 100644 index 1054c7c2..00000000 --- a/webapp/assets/_app/immutable/nodes/3.DmBkFzct.js +++ /dev/null @@ -1,7 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as jt}from"../chunks/TJn6xDN9.js";import{p as Gt,g as e,o as Ut,l as J,h as zt,f as E,i as f,j as qt,a as Fe,b as $,c as Bt,$ as St,m as g,k as n,n as Lt,d as o,s as a,r as i,u,q as be,v as Ke,t as se,e as W,w as _,x as rt,y as Nt,z as X}from"../chunks/DniTuB_0.js";import{i as G,s as Kt,a as Vt}from"../chunks/DbNhg6mG.js";import{e as Ht,i as Rt}from"../chunks/Ck5PkeSc.js";import{h as Yt,r as L,s as je,b as Ot,a as Jt,g as fe}from"../chunks/BZ2rxtTc.js";import{b as N,a as Qt}from"../chunks/CCQwxxp9.js";import{p as at}from"../chunks/D4Caz1gY.js";import{P as Wt}from"../chunks/CuYqFPEA.js";import{F as Xt}from"../chunks/BaeBx81k.js";import{A as ot}from"../chunks/Ok63PiOl.js";import{D as Zt,G as it,A as er}from"../chunks/CKaB5fL4.js";import{e as tr,a as Ve}from"../chunks/DKJ_c8yL.js";import{t as ke}from"../chunks/CBJzOE8U.js";import{f as rr,p as ar,g as He,B as nt,c as or}from"../chunks/CTcPpzia.js";import{e as Re}from"../chunks/BZiHL9L3.js";import"../chunks/CGAsTaG2.js";import{E as ir}from"../chunks/Bz3T1MM4.js";import{S as nr}from"../chunks/C1GM4Goa.js";var dr=E('

'),sr=E(""),lr=E('

'),cr=E('

Gitea only supports PAT authentication

'),ur=E('
'),pr=E('

or drag and drop

PEM, KEY files only

',1),gr=E(''),yr=E('
'),br=E('

or drag and drop

PEM, KEY files only. Upload new private key.

',1),fr=E(" ",1),vr=E(''),mr=E(''),xr=E('
',1);function Br(dt,st){Gt(st,!1);const[lt,ct]=Kt(),U=()=>Vt(tr,"$eagerCache",lt),Ge=g(),Z=g(),Ye=g(),Ue=g(),ze=g(),p={PAT:"pat",APP:"app"};let we=g(!0),le=g([]),Q=g([]),Ce=g(""),Pe=g(""),K=g(1),ce=g(25),ue=g(1),Ae=g(!1),Te=g(!1),$e=g(!1),D=g(p.PAT),y=g(null),M=g(null),t=g({name:"",description:"",endpoint:"",auth_type:p.PAT,oauth2_token:"",app_id:"",installation_id:"",private_key_bytes:""}),Ee={...e(t)},ee=g(!1);function ut(r){r.key==="Escape"&&(e(Ae)||e(Te)||e($e))&&P()}Ut(async()=>{try{n(we,!0);const[r,d]=await Promise.all([Ve.getCredentials(),Ve.getEndpoints()]);r&&Array.isArray(r)&&n(le,r),d&&Array.isArray(d)&&n(Q,d)}catch(r){console.error("Failed to load credentials:",r),n(Ce,r instanceof Error?r.message:"Failed to load credentials")}finally{n(we,!1)}});async function pt(){try{await Ve.retryResource("credentials")}catch(r){console.error("Retry failed:",r)}}async function gt(){Se(),n(Ae,!0),n(x,"github"),_(t,e(t).auth_type=p.PAT)}let x=g("");function yt(r){n(x,r.detail),Se()}async function qe(r){n(y,r),n(t,{name:r.name||"",description:r.description||"",endpoint:r.endpoint?.name||"",auth_type:r["auth-type"]||p.PAT,oauth2_token:"",app_id:"",installation_id:"",private_key_bytes:""}),n(D,r["auth-type"]||p.PAT),Ee={...e(t)},n(ee,!1),n(Te,!0)}function Be(r){n(M,r),n($e,!0)}function Se(){n(t,{name:"",description:"",endpoint:"",auth_type:p.PAT,oauth2_token:"",app_id:"",installation_id:"",private_key_bytes:""}),Ee={...e(t)},n(D,p.PAT),n(ee,!1)}function P(){n(Ae,!1),n(Te,!1),n($e,!1),n(y,null),n(M,null),n(x,""),Se()}function Oe(r){n(D,r),_(t,e(t).auth_type=r)}function bt(){const r={};if(e(t).name!==Ee.name&&e(t).name.trim()!==""&&(r.name=e(t).name.trim()),e(t).description!==Ee.description&&e(t).description.trim()!==""&&(r.description=e(t).description.trim()),e(ee)&&e(y))if(e(y)["auth-type"]===p.PAT)e(t).oauth2_token.trim()!==""&&(r.pat={oauth2_token:e(t).oauth2_token.trim()});else{const d={};let b=!1;if(e(t).app_id.trim()!==""&&(d.app_id=parseInt(e(t).app_id.trim()),b=!0),e(t).installation_id.trim()!==""&&(d.installation_id=parseInt(e(t).installation_id.trim()),b=!0),e(t).private_key_bytes!=="")try{const v=atob(e(t).private_key_bytes);d.private_key_bytes=Array.from(v,l=>l.charCodeAt(0)),b=!0}catch{}b&&(r.app=d)}return r}async function ft(){try{if(e(x)==="github"){const r={name:e(t).name.trim(),description:e(t).description.trim(),endpoint:e(t).endpoint.trim(),auth_type:e(t).auth_type};e(t).auth_type===p.PAT?(r.pat={oauth2_token:e(t).oauth2_token.trim()},r.app={}):(r.app={app_id:parseInt(e(t).app_id.trim()),installation_id:parseInt(e(t).installation_id.trim()),private_key_bytes:Array.from(atob(e(t).private_key_bytes),d=>d.charCodeAt(0))},r.pat={}),await fe.createGithubCredentials(r)}else if(e(x)==="gitea"){const r={name:e(t).name.trim(),description:e(t).description.trim(),endpoint:e(t).endpoint.trim(),auth_type:p.PAT,pat:{oauth2_token:e(t).oauth2_token.trim()},app:{}};await fe.createGiteaCredentials(r)}else throw new Error("Please select a forge type");ke.success("Credentials Created",`Credentials ${e(t).name} have been created successfully.`),P()}catch(r){n(Ce,Re(r))}}async function vt(){if(!(!e(y)||!e(y).id))try{const r=bt();if(Object.keys(r).length===0){ke.info("No Changes","No fields were modified."),P();return}e(y).forge_type==="github"?await fe.updateGithubCredentials(e(y).id,r):await fe.updateGiteaCredentials(e(y).id,r),ke.success("Credentials Updated",`Credentials ${e(y)?.name||"Unknown"} have been updated successfully.`),P()}catch(r){n(Ce,Re(r))}}async function mt(){if(!(!e(M)||!e(M).id))try{e(M).forge_type==="github"?await fe.deleteGithubCredentials(e(M).id):await fe.deleteGiteaCredentials(e(M).id),ke.success("Credentials Deleted",`Credentials ${e(M)?.name||"Unknown"} have been deleted successfully.`)}catch(r){const d=Re(r);ke.error("Delete Failed",d)}finally{P()}}function Je(r){const b=r.target.files?.[0];if(!b){_(t,e(t).private_key_bytes="");return}const v=new FileReader;v.onload=l=>{const h=l.target?.result;_(t,e(t).private_key_bytes=btoa(h))},v.readAsText(b)}function Qe(){return e(t).name.trim()?e(ee)&&e(y)?e(y)["auth-type"]===p.PAT?!!e(t).oauth2_token.trim():!!e(t).app_id.trim()&&!!e(t).installation_id.trim()&&!!e(t).private_key_bytes:!0:!1}function xt(r){return e(Q).find(b=>b.name===r)?.endpoint_type||""}function _t(r){return xt(r)==="gitea"}const ht=[{key:"name",title:"Name",cellComponent:it,cellProps:{field:"name"}},{key:"description",title:"Description",cellComponent:it,cellProps:{field:"description",type:"description"}},{key:"endpoint",title:"Endpoint",cellComponent:ir},{key:"auth_type",title:"Auth Type",cellComponent:nr,cellProps:{statusType:"custom",statusField:"auth-type"}},{key:"actions",title:"Actions",align:"right",cellComponent:er}],kt={entityType:"credential",primaryText:{field:"name",isClickable:!1},secondaryText:{field:"description"},customInfo:[{icon:r=>He(r?.forge_type||"unknown"),text:r=>r?.endpoint?.name||"Unknown"}],badges:[{type:"auth",field:"auth-type"}],actions:[{type:"edit",handler:r=>qe(r)},{type:"delete",handler:r=>Be(r)}]};function wt(r){n(Pe,r.detail.term),n(K,1)}function Ct(r){n(K,r.detail.page)}function Pt(r){const d=or(r.detail.perPage);n(ce,d.newPerPage),n(K,d.newCurrentPage)}function At(r){qe(r.detail.item)}function Tt(r){Be(r.detail.item)}J(()=>(e(le),U()),()=>{(!e(le).length||U().loaded.credentials)&&n(le,U().credentials)}),J(()=>U(),()=>{n(we,U().loading.credentials)}),J(()=>U(),()=>{n(Ge,U().errorMessages.credentials)}),J(()=>(e(Q),U()),()=>{(!e(Q).length||U().loaded.endpoints)&&n(Q,U().endpoints)}),J(()=>(e(le),e(Pe)),()=>{n(Z,rr(e(le),e(Pe)))}),J(()=>(e(ue),e(Z),e(ce),e(K)),()=>{n(ue,Math.ceil(e(Z).length/e(ce))),e(K)>e(ue)&&e(ue)>0&&n(K,e(ue))}),J(()=>(e(Z),e(K),e(ce)),()=>{n(Ye,ar(e(Z),e(K),e(ce)))}),J(()=>e(t),()=>{n(Ue,!e(t).name||!e(t).endpoint?!1:e(t).auth_type===p.PAT?!!e(t).oauth2_token:!!e(t).app_id&&!!e(t).installation_id&&!!e(t).private_key_bytes)}),J(()=>(e(x),e(Q)),()=>{n(ze,e(x)?e(Q).filter(r=>r.endpoint_type===e(x)):e(Q))}),zt(),jt();var We=xr();f("keydown",Lt,ut),qt(r=>{St.title="Credentials - GARM"});var Le=Fe(We),Xe=o(Le);Wt(Xe,{title:"Credentials",description:"Manage authentication credentials for your GitHub and Gitea endpoints.",actionLabel:"Add Credentials",$$events:{action:gt}});var $t=a(Xe,2);{let r=Ke(()=>e(Ge)||e(Ce)),d=Ke(()=>!!e(Ge));Zt($t,{get columns(){return ht},get data(){return e(Ye)},get loading(){return e(we)},get error(){return e(r)},get searchTerm(){return e(Pe)},searchPlaceholder:"Search credentials by name, description, or endpoint...",get currentPage(){return e(K)},get perPage(){return e(ce)},get totalPages(){return e(ue)},get totalItems(){return e(Z),u(()=>e(Z).length)},itemName:"credentials",emptyIconType:"key",get showRetry(){return e(d)},get mobileCardConfig(){return kt},$$events:{search:wt,pageChange:Ct,perPageChange:Pt,retry:pt,edit:At,delete:Tt},$$slots:{"mobile-card":(b,v)=>{const l=Ke(()=>v.item);var h=dr(),A=o(h),z=o(A),I=o(z),F=o(I,!0);i(I);var k=a(I,2),V=o(k,!0);i(k);var q=a(k,2),B=o(q),S=o(B);Yt(S,()=>(be(He),be(e(l)),u(()=>He(e(l).forge_type||"unknown"))));var te=a(S,2),re=o(te,!0);i(te),i(B),i(q),i(z),i(A);var ae=a(A,2),H=o(ae);{var oe=j=>{nt(j,{variant:"success",text:"PAT"})},R=j=>{nt(j,{variant:"info",text:"App"})};G(H,j=>{be(e(l)),u(()=>(e(l)["auth-type"]||"pat")==="pat")?j(oe):j(R,!1)})}var Y=a(H,2),ie=o(Y);ot(ie,{action:"edit",size:"sm",title:"Edit credentials",ariaLabel:"Edit credentials",$$events:{click:()=>qe(e(l))}});var pe=a(ie,2);ot(pe,{action:"delete",size:"sm",title:"Delete credentials",ariaLabel:"Delete credentials",$$events:{click:()=>Be(e(l))}}),i(Y),i(ae),i(h),se(()=>{W(F,(be(e(l)),u(()=>e(l).name))),W(V,(be(e(l)),u(()=>e(l).description))),W(re,(be(e(l)),u(()=>e(l).endpoint?.name||"Unknown")))}),$(b,h)}}})}i(Le);var Ze=a(Le,2);{var Et=r=>{var d=gr(),b=o(d),v=a(b,2),l=o(v),h=a(o(l),2);i(l);var A=a(l,2),z=o(A);Xt(z,{get selectedForgeType(){return e(x)},set selectedForgeType(s){n(x,s)},$$events:{select:yt},$$legacy:!0});var I=a(z,2),F=a(o(I),2);L(F),i(I);var k=a(I,2),V=a(o(k),2);rt(V),i(k);var q=a(k,2),B=a(o(q),2);se(()=>{e(t),Nt(()=>{e(ze)})});var S=o(B);S.value=S.__value="";var te=a(S);Ht(te,1,()=>e(ze),Rt,(s,c)=>{var m=sr(),C=o(m);i(m);var T={};se(()=>{W(C,`${e(c),u(()=>e(c).name)??""} (${e(c),u(()=>e(c).endpoint_type)??""})`),T!==(T=(e(c),u(()=>e(c).name)))&&(m.value=(m.__value=(e(c),u(()=>e(c).name)))??"")}),$(s,m)}),i(B);var re=a(B,2);{var ae=s=>{var c=lr(),m=o(c);i(c),se(()=>W(m,`Showing only ${e(x)??""} endpoints`)),$(s,c)};G(re,s=>{e(x)&&s(ae)})}i(q);var H=a(q,2),oe=a(o(H),2),R=o(oe),Y=a(R,2);i(oe);var ie=a(oe,2);{var pe=s=>{var c=cr();$(s,c)};G(ie,s=>{e(x)==="gitea"&&s(pe)})}i(H);var j=a(H,2);{var De=s=>{var c=ur(),m=a(o(c),2);L(m),i(c),N(m,()=>e(t).oauth2_token,C=>_(t,e(t).oauth2_token=C)),$(s,c)};G(j,s=>{e(D),u(()=>e(D)===p.PAT)&&s(De)})}var ve=a(j,2);{var Me=s=>{var c=pr(),m=Fe(c),C=a(o(m),2);L(C),i(m);var T=a(m,2),O=a(o(T),2);L(O),i(T);var de=a(T,2),ge=a(o(de),2),xe=o(ge),_e=a(xe,2),he=a(o(_e),2),Ie=o(he);X(),i(he),X(2),i(_e),i(ge),i(de),N(C,()=>e(t).app_id,ye=>_(t,e(t).app_id=ye)),N(O,()=>e(t).installation_id,ye=>_(t,e(t).installation_id=ye)),f("change",xe,Je),f("click",Ie,()=>document.getElementById("private_key")?.click()),$(s,c)};G(ve,s=>{e(D),u(()=>e(D)===p.APP)&&s(Me)})}var w=a(ve,2),ne=o(w),me=a(ne,2);i(w),i(A),i(v),i(d),se(s=>{je(R,1,`flex-1 py-2 px-4 text-sm font-medium rounded-md border focus:outline-none focus:ring-2 focus:ring-blue-500 cursor-pointer - ${e(D),u(()=>e(D)===p.PAT?"bg-blue-600 text-white border-blue-600":"bg-white dark:bg-gray-700 text-gray-700 dark:text-gray-300 border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600")??""} - ${s??""}`),Y.disabled=e(x)==="gitea",je(Y,1,`flex-1 py-2 px-4 text-sm font-medium rounded-md border focus:outline-none focus:ring-2 focus:ring-blue-500 - ${e(D),u(()=>e(D)===p.APP?"bg-blue-600 text-white border-blue-600":"bg-white dark:bg-gray-700 text-gray-700 dark:text-gray-300 border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600")??""} - ${e(x)==="gitea"?"opacity-50 cursor-not-allowed":"cursor-pointer"}`),me.disabled=!e(Ue),je(me,1,`px-4 py-2 text-sm font-medium text-white rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors - ${e(Ue)?"bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 cursor-pointer":"bg-gray-400 cursor-not-allowed"}`)},[()=>(e(t),u(()=>(e(t).endpoint&&_t(e(t).endpoint),"")))]),f("click",b,P),f("click",h,P),N(F,()=>e(t).name,s=>_(t,e(t).name=s)),N(V,()=>e(t).description,s=>_(t,e(t).description=s)),Ot(B,()=>e(t).endpoint,s=>_(t,e(t).endpoint=s)),f("click",R,()=>Oe(p.PAT)),f("click",Y,()=>Oe(p.APP)),f("click",ne,P),f("submit",A,at(ft)),$(r,d)};G(Ze,r=>{e(Ae)&&r(Et)})}var et=a(Ze,2);{var Dt=r=>{var d=vr(),b=o(d),v=a(b,2),l=o(v),h=o(l),A=a(o(h),2),z=o(A);i(A),i(h);var I=a(h,2);i(l);var F=a(l,2),k=o(F),V=a(o(k),2);L(V),i(k);var q=a(k,2),B=a(o(q),2);rt(B),i(q);var S=a(q,2),te=a(o(S),2);L(te),X(2),i(S);var re=a(S,2),ae=a(o(re),2),H=o(ae),oe=o(H,!0);i(H),i(ae),X(2),i(re);var R=a(re,2),Y=o(R),ie=o(Y);L(ie),X(2),i(Y),X(2),i(R);var pe=a(R,2);{var j=w=>{var ne=fr(),me=Fe(ne);{var s=C=>{var T=yr(),O=a(o(T),2);L(O),i(T),N(O,()=>e(t).oauth2_token,de=>_(t,e(t).oauth2_token=de)),$(C,T)};G(me,C=>{e(y),u(()=>e(y)["auth-type"]===p.PAT)&&C(s)})}var c=a(me,2);{var m=C=>{var T=br(),O=Fe(T),de=a(o(O),2);L(de),i(O);var ge=a(O,2),xe=a(o(ge),2);L(xe),i(ge);var _e=a(ge,2),he=a(o(_e),2),Ie=o(he),ye=a(Ie,2),tt=a(o(ye),2),Ft=o(tt);X(),i(tt),X(2),i(ye),i(he),i(_e),N(de,()=>e(t).app_id,Ne=>_(t,e(t).app_id=Ne)),N(xe,()=>e(t).installation_id,Ne=>_(t,e(t).installation_id=Ne)),f("change",Ie,Je),f("click",Ft,()=>document.getElementById("edit_private_key")?.click()),$(C,T)};G(c,C=>{e(y),u(()=>e(y)["auth-type"]===p.APP)&&C(m)})}$(w,ne)};G(pe,w=>{e(ee)&&w(j)})}var De=a(pe,2),ve=o(De),Me=a(ve,2);i(De),i(F),i(v),i(d),se((w,ne)=>{W(z,`Update credentials for ${e(y),u(()=>e(y)?.name||"Unknown")??""}`),Jt(te,(e(t),u(()=>e(t).endpoint))),W(oe,(e(y),u(()=>(e(y)?.["auth-type"]||p.PAT)===p.PAT?"Personal Access Token (PAT)":"GitHub App"))),Me.disabled=w,je(Me,1,`px-4 py-2 text-sm font-medium text-white rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors - ${ne??""}`)},[()=>u(()=>!Qe()),()=>u(()=>Qe()?"bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 cursor-pointer":"bg-gray-400 cursor-not-allowed")]),f("click",b,P),f("click",I,P),N(V,()=>e(t).name,w=>_(t,e(t).name=w)),N(B,()=>e(t).description,w=>_(t,e(t).description=w)),Qt(ie,()=>e(ee),w=>n(ee,w)),f("click",ve,P),f("submit",F,at(vt)),$(r,d)};G(et,r=>{e(Te)&&e(y)&&r(Dt)})}var Mt=a(et,2);{var It=r=>{var d=mr(),b=o(d),v=a(b,2),l=o(v),h=o(l),A=a(o(h),2),z=a(o(A),2),I=o(z);i(z),i(A),i(h),i(l);var F=a(l,2),k=o(F),V=a(k,2);i(F),i(v),i(d),se(()=>W(I,`Are you sure you want to delete the credentials "${e(M),u(()=>e(M)?.name||"Unknown")??""}"? This action cannot be undone.`)),f("click",b,P),f("click",k,P),f("click",V,mt),$(r,d)};G(Mt,r=>{e($e)&&e(M)&&r(It)})}$(dt,We),Bt(),ct()}export{Br as component}; diff --git a/webapp/assets/_app/immutable/nodes/3.HdI83u8i.js b/webapp/assets/_app/immutable/nodes/3.HdI83u8i.js new file mode 100644 index 00000000..e57ac57a --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/3.HdI83u8i.js @@ -0,0 +1,7 @@ +import"../chunks/DsnmJJEf.js";import{i as jt}from"../chunks/TJn6xDN9.js";import{p as Gt,g as e,o as Ut,l as J,h as zt,f as E,i as f,j as qt,a as Fe,b as $,c as Bt,$ as St,m as g,k as n,n as Lt,d as o,s as a,r as i,u,q as be,v as Ke,t as se,e as W,w as _,x as rt,y as Nt,z as X}from"../chunks/DniTuB_0.js";import{i as G,s as Kt,a as Vt}from"../chunks/DbNhg6mG.js";import{e as Ht,i as Rt}from"../chunks/Ck5PkeSc.js";import{h as Yt,r as L,s as je,b as Ot,a as Jt,g as fe}from"../chunks/DSfKzFV1.js";import{b as N,a as Qt}from"../chunks/CCQwxxp9.js";import{p as at}from"../chunks/D4Caz1gY.js";import{P as Wt}from"../chunks/RtJp4Ifn.js";import{F as Xt}from"../chunks/CQIRreSz.js";import{A as ot}from"../chunks/DGZKesLN.js";import{D as Zt,G as it,A as er}from"../chunks/BlJ06z1t.js";import{e as tr,a as Ve}from"../chunks/BE9PkXKz.js";import{t as ke}from"../chunks/CBJzOE8U.js";import{f as rr,p as ar,g as He,c as or}from"../chunks/BC4TpgBU.js";import{e as Re}from"../chunks/BZiHL9L3.js";import{B as nt}from"../chunks/Dyp1NLoF.js";import"../chunks/CRDKDqj5.js";import{E as ir}from"../chunks/CE0C-N9m.js";import{S as nr}from"../chunks/BsX_CrDw.js";var dr=E('

'),sr=E(""),lr=E('

'),cr=E('

Gitea only supports PAT authentication

'),ur=E('
'),pr=E('

or drag and drop

PEM, KEY files only

',1),gr=E(''),yr=E('
'),br=E('

or drag and drop

PEM, KEY files only. Upload new private key.

',1),fr=E(" ",1),vr=E(''),mr=E(''),xr=E('
',1);function Sr(dt,st){Gt(st,!1);const[lt,ct]=Kt(),U=()=>Vt(tr,"$eagerCache",lt),Ge=g(),Z=g(),Ye=g(),Ue=g(),ze=g(),p={PAT:"pat",APP:"app"};let we=g(!0),le=g([]),Q=g([]),Ce=g(""),Pe=g(""),K=g(1),ce=g(25),ue=g(1),Ae=g(!1),Te=g(!1),$e=g(!1),D=g(p.PAT),y=g(null),M=g(null),t=g({name:"",description:"",endpoint:"",auth_type:p.PAT,oauth2_token:"",app_id:"",installation_id:"",private_key_bytes:""}),Ee={...e(t)},ee=g(!1);function ut(r){r.key==="Escape"&&(e(Ae)||e(Te)||e($e))&&P()}Ut(async()=>{try{n(we,!0);const[r,d]=await Promise.all([Ve.getCredentials(),Ve.getEndpoints()]);r&&Array.isArray(r)&&n(le,r),d&&Array.isArray(d)&&n(Q,d)}catch(r){console.error("Failed to load credentials:",r),n(Ce,r instanceof Error?r.message:"Failed to load credentials")}finally{n(we,!1)}});async function pt(){try{await Ve.retryResource("credentials")}catch(r){console.error("Retry failed:",r)}}async function gt(){Se(),n(Ae,!0),n(x,"github"),_(t,e(t).auth_type=p.PAT)}let x=g("");function yt(r){n(x,r.detail),Se()}async function qe(r){n(y,r),n(t,{name:r.name||"",description:r.description||"",endpoint:r.endpoint?.name||"",auth_type:r["auth-type"]||p.PAT,oauth2_token:"",app_id:"",installation_id:"",private_key_bytes:""}),n(D,r["auth-type"]||p.PAT),Ee={...e(t)},n(ee,!1),n(Te,!0)}function Be(r){n(M,r),n($e,!0)}function Se(){n(t,{name:"",description:"",endpoint:"",auth_type:p.PAT,oauth2_token:"",app_id:"",installation_id:"",private_key_bytes:""}),Ee={...e(t)},n(D,p.PAT),n(ee,!1)}function P(){n(Ae,!1),n(Te,!1),n($e,!1),n(y,null),n(M,null),n(x,""),Se()}function Oe(r){n(D,r),_(t,e(t).auth_type=r)}function bt(){const r={};if(e(t).name!==Ee.name&&e(t).name.trim()!==""&&(r.name=e(t).name.trim()),e(t).description!==Ee.description&&e(t).description.trim()!==""&&(r.description=e(t).description.trim()),e(ee)&&e(y))if(e(y)["auth-type"]===p.PAT)e(t).oauth2_token.trim()!==""&&(r.pat={oauth2_token:e(t).oauth2_token.trim()});else{const d={};let b=!1;if(e(t).app_id.trim()!==""&&(d.app_id=parseInt(e(t).app_id.trim()),b=!0),e(t).installation_id.trim()!==""&&(d.installation_id=parseInt(e(t).installation_id.trim()),b=!0),e(t).private_key_bytes!=="")try{const v=atob(e(t).private_key_bytes);d.private_key_bytes=Array.from(v,l=>l.charCodeAt(0)),b=!0}catch{}b&&(r.app=d)}return r}async function ft(){try{if(e(x)==="github"){const r={name:e(t).name.trim(),description:e(t).description.trim(),endpoint:e(t).endpoint.trim(),auth_type:e(t).auth_type};e(t).auth_type===p.PAT?(r.pat={oauth2_token:e(t).oauth2_token.trim()},r.app={}):(r.app={app_id:parseInt(e(t).app_id.trim()),installation_id:parseInt(e(t).installation_id.trim()),private_key_bytes:Array.from(atob(e(t).private_key_bytes),d=>d.charCodeAt(0))},r.pat={}),await fe.createGithubCredentials(r)}else if(e(x)==="gitea"){const r={name:e(t).name.trim(),description:e(t).description.trim(),endpoint:e(t).endpoint.trim(),auth_type:p.PAT,pat:{oauth2_token:e(t).oauth2_token.trim()},app:{}};await fe.createGiteaCredentials(r)}else throw new Error("Please select a forge type");ke.success("Credentials Created",`Credentials ${e(t).name} have been created successfully.`),P()}catch(r){n(Ce,Re(r))}}async function vt(){if(!(!e(y)||!e(y).id))try{const r=bt();if(Object.keys(r).length===0){ke.info("No Changes","No fields were modified."),P();return}e(y).forge_type==="github"?await fe.updateGithubCredentials(e(y).id,r):await fe.updateGiteaCredentials(e(y).id,r),ke.success("Credentials Updated",`Credentials ${e(y)?.name||"Unknown"} have been updated successfully.`),P()}catch(r){n(Ce,Re(r))}}async function mt(){if(!(!e(M)||!e(M).id))try{e(M).forge_type==="github"?await fe.deleteGithubCredentials(e(M).id):await fe.deleteGiteaCredentials(e(M).id),ke.success("Credentials Deleted",`Credentials ${e(M)?.name||"Unknown"} have been deleted successfully.`)}catch(r){const d=Re(r);ke.error("Delete Failed",d)}finally{P()}}function Je(r){const b=r.target.files?.[0];if(!b){_(t,e(t).private_key_bytes="");return}const v=new FileReader;v.onload=l=>{const h=l.target?.result;_(t,e(t).private_key_bytes=btoa(h))},v.readAsText(b)}function Qe(){return e(t).name.trim()?e(ee)&&e(y)?e(y)["auth-type"]===p.PAT?!!e(t).oauth2_token.trim():!!e(t).app_id.trim()&&!!e(t).installation_id.trim()&&!!e(t).private_key_bytes:!0:!1}function xt(r){return e(Q).find(b=>b.name===r)?.endpoint_type||""}function _t(r){return xt(r)==="gitea"}const ht=[{key:"name",title:"Name",cellComponent:it,cellProps:{field:"name"}},{key:"description",title:"Description",cellComponent:it,cellProps:{field:"description",type:"description"}},{key:"endpoint",title:"Endpoint",cellComponent:ir},{key:"auth_type",title:"Auth Type",cellComponent:nr,cellProps:{statusType:"custom",statusField:"auth-type"}},{key:"actions",title:"Actions",align:"right",cellComponent:er}],kt={entityType:"credential",primaryText:{field:"name",isClickable:!1},secondaryText:{field:"description"},customInfo:[{icon:r=>He(r?.forge_type||"unknown"),text:r=>r?.endpoint?.name||"Unknown"}],badges:[{type:"auth",field:"auth-type"}],actions:[{type:"edit",handler:r=>qe(r)},{type:"delete",handler:r=>Be(r)}]};function wt(r){n(Pe,r.detail.term),n(K,1)}function Ct(r){n(K,r.detail.page)}function Pt(r){const d=or(r.detail.perPage);n(ce,d.newPerPage),n(K,d.newCurrentPage)}function At(r){qe(r.detail.item)}function Tt(r){Be(r.detail.item)}J(()=>(e(le),U()),()=>{(!e(le).length||U().loaded.credentials)&&n(le,U().credentials)}),J(()=>U(),()=>{n(we,U().loading.credentials)}),J(()=>U(),()=>{n(Ge,U().errorMessages.credentials)}),J(()=>(e(Q),U()),()=>{(!e(Q).length||U().loaded.endpoints)&&n(Q,U().endpoints)}),J(()=>(e(le),e(Pe)),()=>{n(Z,rr(e(le),e(Pe)))}),J(()=>(e(ue),e(Z),e(ce),e(K)),()=>{n(ue,Math.ceil(e(Z).length/e(ce))),e(K)>e(ue)&&e(ue)>0&&n(K,e(ue))}),J(()=>(e(Z),e(K),e(ce)),()=>{n(Ye,ar(e(Z),e(K),e(ce)))}),J(()=>e(t),()=>{n(Ue,!e(t).name||!e(t).endpoint?!1:e(t).auth_type===p.PAT?!!e(t).oauth2_token:!!e(t).app_id&&!!e(t).installation_id&&!!e(t).private_key_bytes)}),J(()=>(e(x),e(Q)),()=>{n(ze,e(x)?e(Q).filter(r=>r.endpoint_type===e(x)):e(Q))}),zt(),jt();var We=xr();f("keydown",Lt,ut),qt(r=>{St.title="Credentials - GARM"});var Le=Fe(We),Xe=o(Le);Wt(Xe,{title:"Credentials",description:"Manage authentication credentials for your GitHub and Gitea endpoints.",actionLabel:"Add Credentials",$$events:{action:gt}});var $t=a(Xe,2);{let r=Ke(()=>e(Ge)||e(Ce)),d=Ke(()=>!!e(Ge));Zt($t,{get columns(){return ht},get data(){return e(Ye)},get loading(){return e(we)},get error(){return e(r)},get searchTerm(){return e(Pe)},searchPlaceholder:"Search credentials by name, description, or endpoint...",get currentPage(){return e(K)},get perPage(){return e(ce)},get totalPages(){return e(ue)},get totalItems(){return e(Z),u(()=>e(Z).length)},itemName:"credentials",emptyIconType:"key",get showRetry(){return e(d)},get mobileCardConfig(){return kt},$$events:{search:wt,pageChange:Ct,perPageChange:Pt,retry:pt,edit:At,delete:Tt},$$slots:{"mobile-card":(b,v)=>{const l=Ke(()=>v.item);var h=dr(),A=o(h),z=o(A),I=o(z),F=o(I,!0);i(I);var k=a(I,2),V=o(k,!0);i(k);var q=a(k,2),B=o(q),S=o(B);Yt(S,()=>(be(He),be(e(l)),u(()=>He(e(l).forge_type||"unknown"))));var te=a(S,2),re=o(te,!0);i(te),i(B),i(q),i(z),i(A);var ae=a(A,2),H=o(ae);{var oe=j=>{nt(j,{variant:"success",text:"PAT"})},R=j=>{nt(j,{variant:"info",text:"App"})};G(H,j=>{be(e(l)),u(()=>(e(l)["auth-type"]||"pat")==="pat")?j(oe):j(R,!1)})}var Y=a(H,2),ie=o(Y);ot(ie,{action:"edit",size:"sm",title:"Edit credentials",ariaLabel:"Edit credentials",$$events:{click:()=>qe(e(l))}});var pe=a(ie,2);ot(pe,{action:"delete",size:"sm",title:"Delete credentials",ariaLabel:"Delete credentials",$$events:{click:()=>Be(e(l))}}),i(Y),i(ae),i(h),se(()=>{W(F,(be(e(l)),u(()=>e(l).name))),W(V,(be(e(l)),u(()=>e(l).description))),W(re,(be(e(l)),u(()=>e(l).endpoint?.name||"Unknown")))}),$(b,h)}}})}i(Le);var Ze=a(Le,2);{var Et=r=>{var d=gr(),b=o(d),v=a(b,2),l=o(v),h=a(o(l),2);i(l);var A=a(l,2),z=o(A);Xt(z,{get selectedForgeType(){return e(x)},set selectedForgeType(s){n(x,s)},$$events:{select:yt},$$legacy:!0});var I=a(z,2),F=a(o(I),2);L(F),i(I);var k=a(I,2),V=a(o(k),2);rt(V),i(k);var q=a(k,2),B=a(o(q),2);se(()=>{e(t),Nt(()=>{e(ze)})});var S=o(B);S.value=S.__value="";var te=a(S);Ht(te,1,()=>e(ze),Rt,(s,c)=>{var m=sr(),C=o(m);i(m);var T={};se(()=>{W(C,`${e(c),u(()=>e(c).name)??""} (${e(c),u(()=>e(c).endpoint_type)??""})`),T!==(T=(e(c),u(()=>e(c).name)))&&(m.value=(m.__value=(e(c),u(()=>e(c).name)))??"")}),$(s,m)}),i(B);var re=a(B,2);{var ae=s=>{var c=lr(),m=o(c);i(c),se(()=>W(m,`Showing only ${e(x)??""} endpoints`)),$(s,c)};G(re,s=>{e(x)&&s(ae)})}i(q);var H=a(q,2),oe=a(o(H),2),R=o(oe),Y=a(R,2);i(oe);var ie=a(oe,2);{var pe=s=>{var c=cr();$(s,c)};G(ie,s=>{e(x)==="gitea"&&s(pe)})}i(H);var j=a(H,2);{var De=s=>{var c=ur(),m=a(o(c),2);L(m),i(c),N(m,()=>e(t).oauth2_token,C=>_(t,e(t).oauth2_token=C)),$(s,c)};G(j,s=>{e(D),u(()=>e(D)===p.PAT)&&s(De)})}var ve=a(j,2);{var Me=s=>{var c=pr(),m=Fe(c),C=a(o(m),2);L(C),i(m);var T=a(m,2),O=a(o(T),2);L(O),i(T);var de=a(T,2),ge=a(o(de),2),xe=o(ge),_e=a(xe,2),he=a(o(_e),2),Ie=o(he);X(),i(he),X(2),i(_e),i(ge),i(de),N(C,()=>e(t).app_id,ye=>_(t,e(t).app_id=ye)),N(O,()=>e(t).installation_id,ye=>_(t,e(t).installation_id=ye)),f("change",xe,Je),f("click",Ie,()=>document.getElementById("private_key")?.click()),$(s,c)};G(ve,s=>{e(D),u(()=>e(D)===p.APP)&&s(Me)})}var w=a(ve,2),ne=o(w),me=a(ne,2);i(w),i(A),i(v),i(d),se(s=>{je(R,1,`flex-1 py-2 px-4 text-sm font-medium rounded-md border focus:outline-none focus:ring-2 focus:ring-blue-500 cursor-pointer + ${e(D),u(()=>e(D)===p.PAT?"bg-blue-600 text-white border-blue-600":"bg-white dark:bg-gray-700 text-gray-700 dark:text-gray-300 border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600")??""} + ${s??""}`),Y.disabled=e(x)==="gitea",je(Y,1,`flex-1 py-2 px-4 text-sm font-medium rounded-md border focus:outline-none focus:ring-2 focus:ring-blue-500 + ${e(D),u(()=>e(D)===p.APP?"bg-blue-600 text-white border-blue-600":"bg-white dark:bg-gray-700 text-gray-700 dark:text-gray-300 border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600")??""} + ${e(x)==="gitea"?"opacity-50 cursor-not-allowed":"cursor-pointer"}`),me.disabled=!e(Ue),je(me,1,`px-4 py-2 text-sm font-medium text-white rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors + ${e(Ue)?"bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 cursor-pointer":"bg-gray-400 cursor-not-allowed"}`)},[()=>(e(t),u(()=>(e(t).endpoint&&_t(e(t).endpoint),"")))]),f("click",b,P),f("click",h,P),N(F,()=>e(t).name,s=>_(t,e(t).name=s)),N(V,()=>e(t).description,s=>_(t,e(t).description=s)),Ot(B,()=>e(t).endpoint,s=>_(t,e(t).endpoint=s)),f("click",R,()=>Oe(p.PAT)),f("click",Y,()=>Oe(p.APP)),f("click",ne,P),f("submit",A,at(ft)),$(r,d)};G(Ze,r=>{e(Ae)&&r(Et)})}var et=a(Ze,2);{var Dt=r=>{var d=vr(),b=o(d),v=a(b,2),l=o(v),h=o(l),A=a(o(h),2),z=o(A);i(A),i(h);var I=a(h,2);i(l);var F=a(l,2),k=o(F),V=a(o(k),2);L(V),i(k);var q=a(k,2),B=a(o(q),2);rt(B),i(q);var S=a(q,2),te=a(o(S),2);L(te),X(2),i(S);var re=a(S,2),ae=a(o(re),2),H=o(ae),oe=o(H,!0);i(H),i(ae),X(2),i(re);var R=a(re,2),Y=o(R),ie=o(Y);L(ie),X(2),i(Y),X(2),i(R);var pe=a(R,2);{var j=w=>{var ne=fr(),me=Fe(ne);{var s=C=>{var T=yr(),O=a(o(T),2);L(O),i(T),N(O,()=>e(t).oauth2_token,de=>_(t,e(t).oauth2_token=de)),$(C,T)};G(me,C=>{e(y),u(()=>e(y)["auth-type"]===p.PAT)&&C(s)})}var c=a(me,2);{var m=C=>{var T=br(),O=Fe(T),de=a(o(O),2);L(de),i(O);var ge=a(O,2),xe=a(o(ge),2);L(xe),i(ge);var _e=a(ge,2),he=a(o(_e),2),Ie=o(he),ye=a(Ie,2),tt=a(o(ye),2),Ft=o(tt);X(),i(tt),X(2),i(ye),i(he),i(_e),N(de,()=>e(t).app_id,Ne=>_(t,e(t).app_id=Ne)),N(xe,()=>e(t).installation_id,Ne=>_(t,e(t).installation_id=Ne)),f("change",Ie,Je),f("click",Ft,()=>document.getElementById("edit_private_key")?.click()),$(C,T)};G(c,C=>{e(y),u(()=>e(y)["auth-type"]===p.APP)&&C(m)})}$(w,ne)};G(pe,w=>{e(ee)&&w(j)})}var De=a(pe,2),ve=o(De),Me=a(ve,2);i(De),i(F),i(v),i(d),se((w,ne)=>{W(z,`Update credentials for ${e(y),u(()=>e(y)?.name||"Unknown")??""}`),Jt(te,(e(t),u(()=>e(t).endpoint))),W(oe,(e(y),u(()=>(e(y)?.["auth-type"]||p.PAT)===p.PAT?"Personal Access Token (PAT)":"GitHub App"))),Me.disabled=w,je(Me,1,`px-4 py-2 text-sm font-medium text-white rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors + ${ne??""}`)},[()=>u(()=>!Qe()),()=>u(()=>Qe()?"bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 cursor-pointer":"bg-gray-400 cursor-not-allowed")]),f("click",b,P),f("click",I,P),N(V,()=>e(t).name,w=>_(t,e(t).name=w)),N(B,()=>e(t).description,w=>_(t,e(t).description=w)),Qt(ie,()=>e(ee),w=>n(ee,w)),f("click",ve,P),f("submit",F,at(vt)),$(r,d)};G(et,r=>{e(Te)&&e(y)&&r(Dt)})}var Mt=a(et,2);{var It=r=>{var d=mr(),b=o(d),v=a(b,2),l=o(v),h=o(l),A=a(o(h),2),z=a(o(A),2),I=o(z);i(z),i(A),i(h),i(l);var F=a(l,2),k=o(F),V=a(k,2);i(F),i(v),i(d),se(()=>W(I,`Are you sure you want to delete the credentials "${e(M),u(()=>e(M)?.name||"Unknown")??""}"? This action cannot be undone.`)),f("click",b,P),f("click",k,P),f("click",V,mt),$(r,d)};G(Mt,r=>{e($e)&&e(M)&&r(It)})}$(dt,We),Bt(),ct()}export{Sr as component}; diff --git a/webapp/assets/_app/immutable/nodes/4.CjsS-n1C.js b/webapp/assets/_app/immutable/nodes/4.C1LoDGY5.js similarity index 98% rename from webapp/assets/_app/immutable/nodes/4.CjsS-n1C.js rename to webapp/assets/_app/immutable/nodes/4.C1LoDGY5.js index 8ddc7240..40c4f258 100644 --- a/webapp/assets/_app/immutable/nodes/4.CjsS-n1C.js +++ b/webapp/assets/_app/immutable/nodes/4.C1LoDGY5.js @@ -1,3 +1,3 @@ -import"../chunks/DsnmJJEf.js";import{i as kt}from"../chunks/TJn6xDN9.js";import{p as wt,g as e,o as Ct,l as Q,h as Et,f as z,i as _,j as Rt,a as be,b as F,c as Ut,m as c,n as Lt,$ as Pt,d as o,v as Be,s as r,t as Ue,u as O,k as s,w as u,r as i,q as _e,e as ge,x as Se,z as j}from"../chunks/DniTuB_0.js";import{i as me,s as Mt,a as Tt}from"../chunks/DbNhg6mG.js";import{h as At,r as x,c as Ve,s as Oe,g as oe}from"../chunks/BZ2rxtTc.js";import{b as h,a as We}from"../chunks/CCQwxxp9.js";import{p as Ke}from"../chunks/D4Caz1gY.js";import{P as $t}from"../chunks/CuYqFPEA.js";import{F as Bt}from"../chunks/BaeBx81k.js";import{A as Je}from"../chunks/Ok63PiOl.js";import{e as Dt,a as Qe}from"../chunks/DKJ_c8yL.js";import{t as fe}from"../chunks/CBJzOE8U.js";import{g as De,c as Gt,a as It,p as Ft}from"../chunks/CTcPpzia.js";import{e as Ge}from"../chunks/BZiHL9L3.js";import{D as jt,G as Ie,A as zt}from"../chunks/CKaB5fL4.js";import"../chunks/CGAsTaG2.js";import{E as qt}from"../chunks/Bz3T1MM4.js";import{T as Le}from"../chunks/DUI-G4vy.js";var Ht=z('

'),Nt=z('
',1),St=z('

If empty, Base URL will be used as API Base URL

Leave empty to use default Gitea releases URL

',1),Vt=z(''),Ot=z('
',1),Wt=z('

If empty, Base URL will be used as API Base URL

Leave empty to use default Gitea releases URL

',1),Kt=z(''),Jt=z(''),Qt=z('
',1);function ga(Xe,Ye){wt(Ye,!1);const[Ze,et]=Mt(),W=()=>Tt(Dt,"$eagerCache",Ze),Pe=c(),K=c(),Fe=c(),ie=c();let ve=c(!0),X=c([]),ye=c(""),xe=c(""),$=c(1),Y=c(25),Z=c(1),he=c(!1),ke=c(!1),we=c(!1),q=c("github"),g=c(null),M=c(null),t=c({name:"",description:"",endpoint_type:"",base_url:"",api_base_url:"",upload_base_url:"",ca_cert_bundle:"",tools_metadata_url:"",use_internal_tools_metadata:!1}),m={...e(t)};Ct(async()=>{try{s(ve,!0);const a=await Qe.getEndpoints();a&&Array.isArray(a)&&s(X,a)}catch(a){console.error("Failed to load endpoints:",a),s(ye,a instanceof Error?a.message:"Failed to load endpoints")}finally{s(ve,!1)}});async function tt(){try{await Qe.retryResource("endpoints")}catch(a){console.error("Retry failed:",a)}}const at=[{key:"name",title:"Name",cellComponent:Ie,cellProps:{field:"name"}},{key:"description",title:"Description",cellComponent:Ie,cellProps:{field:"description"}},{key:"api_url",title:"API URL",cellComponent:Ie,cellProps:{field:"api_base_url",fallbackField:"base_url"}},{key:"forge_type",title:"Forge Type",cellComponent:qt},{key:"actions",title:"Actions",align:"right",cellComponent:zt}],rt={entityType:"endpoint",primaryText:{field:"name",isClickable:!1},secondaryText:{field:"description"},customInfo:[{icon:a=>De(a?.endpoint_type||"unknown"),text:a=>a?.api_base_url||"Unknown"}],actions:[{type:"edit",handler:a=>Me(a)},{type:"delete",handler:a=>Te(a)}]};function ot(a){s(xe,a.detail.term),s($,1)}function it(a){s($,a.detail.page)}function st(a){const l=Gt(a.detail.perPage);s(Y,l.newPerPage),s($,l.newCurrentPage)}function lt(a){Me(a.detail.item)}function nt(a){Te(a.detail.item)}function dt(){s(q,"github"),Ae(),u(t,e(t).endpoint_type="github"),s(he,!0)}function ut(a){s(q,a.detail),Ae(),u(t,e(t).endpoint_type=a.detail)}function Me(a){s(g,a),s(t,{name:a.name||"",description:a.description||"",endpoint_type:a.endpoint_type||"",base_url:a.base_url||"",api_base_url:a.api_base_url||"",upload_base_url:a.upload_base_url||"",ca_cert_bundle:typeof a.ca_cert_bundle=="string"?a.ca_cert_bundle:"",tools_metadata_url:a.tools_metadata_url||"",use_internal_tools_metadata:a.use_internal_tools_metadata||!1}),m={...e(t)},s(ke,!0)}function Te(a){s(M,a),s(we,!0)}function Ae(){s(t,{name:"",description:"",endpoint_type:"",base_url:"",api_base_url:"",upload_base_url:"",ca_cert_bundle:"",tools_metadata_url:"",use_internal_tools_metadata:!1}),m={...e(t)}}function ct(a){a.key==="Escape"&&(e(he)||e(ke)||e(we))&&k()}function k(){s(he,!1),s(ke,!1),s(we,!1),s(q,"github"),s(g,null),s(M,null),Ae()}function pt(){const a={};if(e(t).description!==m.description&&(e(t).description.trim()!==""||m.description!=="")&&(a.description=e(t).description.trim()),e(t).base_url!==m.base_url&&e(t).base_url.trim()!==""&&(a.base_url=e(t).base_url.trim()),e(t).api_base_url!==m.api_base_url&&(e(t).api_base_url.trim()!==""||m.api_base_url!=="")&&(a.api_base_url=e(t).api_base_url.trim()),e(g)?.endpoint_type==="github"&&e(t).upload_base_url!==m.upload_base_url&&(e(t).upload_base_url.trim()!==""||m.upload_base_url!=="")&&(a.upload_base_url=e(t).upload_base_url.trim()),e(t).ca_cert_bundle!==m.ca_cert_bundle)if(e(t).ca_cert_bundle!=="")try{const l=atob(e(t).ca_cert_bundle);a.ca_cert_bundle=Array.from(l,p=>p.charCodeAt(0))}catch{m.ca_cert_bundle!==""&&(a.ca_cert_bundle=[])}else m.ca_cert_bundle!==""&&(a.ca_cert_bundle=[]);return e(g)?.endpoint_type==="gitea"&&(e(t).tools_metadata_url!==m.tools_metadata_url&&(a.tools_metadata_url=e(t).tools_metadata_url.trim()),e(t).use_internal_tools_metadata!==m.use_internal_tools_metadata&&(a.use_internal_tools_metadata=e(t).use_internal_tools_metadata)),a}async function bt(){try{const a={name:e(t).name,description:e(t).description,endpoint_type:e(t).endpoint_type,base_url:e(t).base_url,api_base_url:e(t).api_base_url,upload_base_url:e(t).upload_base_url};if(e(t).endpoint_type==="gitea"&&(e(t).tools_metadata_url.trim()!==""&&(a.tools_metadata_url=e(t).tools_metadata_url.trim()),a.use_internal_tools_metadata=e(t).use_internal_tools_metadata),e(t).ca_cert_bundle&&e(t).ca_cert_bundle.trim()!=="")try{const l=atob(e(t).ca_cert_bundle);a.ca_cert_bundle=Array.from(l,p=>p.charCodeAt(0))}catch{}e(t).endpoint_type==="github"?await oe.createGithubEndpoint(a):await oe.createGiteaEndpoint(a),fe.success("Endpoint Created",`Endpoint ${e(t).name} has been created successfully.`),k()}catch(a){s(ye,Ge(a))}}async function _t(){if(e(g))try{const a=pt();if(Object.keys(a).length===0){fe.info("No Changes","No fields were modified."),k();return}e(g).endpoint_type==="github"?await oe.updateGithubEndpoint(e(g).name,a):await oe.updateGiteaEndpoint(e(g).name,a),fe.success("Endpoint Updated",`Endpoint ${e(g).name} has been updated successfully.`),k()}catch(a){s(ye,Ge(a))}}async function gt(){if(e(M)){try{e(M).endpoint_type==="github"?await oe.deleteGithubEndpoint(e(M).name):await oe.deleteGiteaEndpoint(e(M).name),fe.success("Endpoint Deleted",`Endpoint ${e(M).name} has been deleted successfully.`)}catch(a){const l=Ge(a);fe.error("Delete Failed",l)}k()}}function je(a){const p=a.target.files?.[0];if(!p){u(t,e(t).ca_cert_bundle="");return}const w=new FileReader;w.onload=n=>{const f=n.target?.result;u(t,e(t).ca_cert_bundle=btoa(f))},w.readAsText(p)}Q(()=>(e(X),W()),()=>{(!e(X).length||W().loaded.endpoints)&&s(X,W().endpoints)}),Q(()=>W(),()=>{s(ve,W().loading.endpoints)}),Q(()=>W(),()=>{s(Pe,W().errorMessages.endpoints)}),Q(()=>(e(X),e(xe)),()=>{s(K,It(e(X),e(xe)))}),Q(()=>(e(Z),e(K),e(Y),e($)),()=>{s(Z,Math.ceil(e(K).length/e(Y))),e($)>e(Z)&&e(Z)>0&&s($,e(Z))}),Q(()=>(e(K),e($),e(Y)),()=>{s(Fe,Ft(e(K),e($),e(Y)))}),Q(()=>e(t),()=>{s(ie,!(!e(t).name||!e(t).base_url||e(t).endpoint_type==="github"&&!e(t).api_base_url))}),Et(),kt();var ze=Qt();_("keydown",Lt,ct),Rt(a=>{Pt.title="Endpoints - GARM"});var $e=be(ze),qe=o($e);$t(qe,{title:"Endpoints",description:"Manage your GitHub and Gitea endpoints for runner management.",actionLabel:"Add Endpoint",$$events:{action:dt}});var mt=r(qe,2);{let a=Be(()=>e(Pe)||e(ye)),l=Be(()=>!!e(Pe));jt(mt,{get columns(){return at},get data(){return e(Fe)},get loading(){return e(ve)},get error(){return e(a)},get searchTerm(){return e(xe)},searchPlaceholder:"Search endpoints by name, description, or URL...",get currentPage(){return e($)},get perPage(){return e(Y)},get totalPages(){return e(Z)},get totalItems(){return e(K),O(()=>e(K).length)},itemName:"endpoints",emptyIconType:"settings",get showRetry(){return e(l)},get mobileCardConfig(){return rt},$$events:{search:ot,pageChange:it,perPageChange:st,retry:tt,edit:lt,delete:nt},$$slots:{"mobile-card":(p,w)=>{const n=Be(()=>w.item);var f=Ht(),C=o(f),T=o(C),L=o(T),R=o(L,!0);i(L);var v=r(L,2),B=o(v,!0);i(v);var A=r(v,2),D=o(A);At(D,()=>(_e(De),_e(e(n)),O(()=>De(e(n).endpoint_type||"","w-5 h-5"))));var G=r(D,2),ee=o(G,!0);i(G),i(A),i(T),i(C);var J=r(C,2),H=o(J);Je(H,{action:"edit",size:"sm",title:"Edit endpoint",ariaLabel:"Edit endpoint",$$events:{click:()=>Me(e(n))}});var te=r(H,2);Je(te,{action:"delete",size:"sm",title:"Delete endpoint",ariaLabel:"Delete endpoint",$$events:{click:()=>Te(e(n))}}),i(J),i(f),Ue(()=>{ge(R,(_e(e(n)),O(()=>e(n).name))),ge(B,(_e(e(n)),O(()=>e(n).description))),ge(ee,(_e(e(n)),O(()=>e(n).endpoint_type)))}),F(p,f)}}})}i($e);var He=r($e,2);{var ft=a=>{var l=Vt(),p=o(l),w=r(p,2),n=o(w),f=r(o(n),2);i(n);var C=r(n,2),T=o(C);Bt(T,{get selectedForgeType(){return e(q)},set selectedForgeType(b){s(q,b)},$$events:{select:ut},$$legacy:!0});var L=r(T,2),R=r(o(L),2);x(R),i(L);var v=r(L,2),B=r(o(v),2);Se(B),i(v);var A=r(v,2),D=r(o(A),2);x(D),i(A);var G=r(A,2);{var ee=b=>{var N=Nt(),d=be(N),P=r(o(d),2);x(P),i(d);var y=r(d,2),U=r(o(y),2);x(U),i(y),h(P,()=>e(t).api_base_url,E=>u(t,e(t).api_base_url=E)),h(U,()=>e(t).upload_base_url,E=>u(t,e(t).upload_base_url=E)),F(b,N)},J=b=>{var N=St(),d=be(N),P=r(o(d),2);x(P),j(2),i(d);var y=r(d,2),U=o(y),E=r(o(U),2),S=o(E);Le(S,{title:"Tools Metadata URL",content:"URL where GARM checks for act_runner binary downloads and release information. Defaults to https://gitea.com/api/v1/repos/gitea/act_runner/releases if not specified. Use a custom URL to point to your own tools repository or mirror.",position:"top",width:"w-80"}),i(E),i(U);var I=r(U,2);x(I),j(2),i(y);var Re=r(y,2),re=o(Re);x(re);var ue=r(re,4),ce=o(ue);Le(ce,{title:"Internal Tools Metadata",content:"When enabled, GARM uses built-in URLs for nightly act_runner binaries instead of calling the external tools metadata URL. This is useful in air-gapped environments where runner images already include the binaries and don't need to download them.",position:"top",width:"w-80"}),i(ue),i(Re),h(P,()=>e(t).api_base_url,V=>u(t,e(t).api_base_url=V)),h(I,()=>e(t).tools_metadata_url,V=>u(t,e(t).tools_metadata_url=V)),We(re,()=>e(t).use_internal_tools_metadata,V=>u(t,e(t).use_internal_tools_metadata=V)),F(b,N)};me(G,b=>{e(q)==="github"?b(ee):b(J,!1)})}var H=r(G,2),te=r(o(H),2),ae=o(te),se=r(ae,2),le=r(o(se),2),Ce=o(le);j(),i(le),j(2),i(se),i(te),i(H);var ne=r(H,2),Ee=o(ne),de=r(Ee,2);i(ne),i(C),i(w),i(l),Ue(()=>{Ve(R,"placeholder",e(q)==="github"?"e.g., github-enterprise or github-com":"e.g., gitea-main or my-gitea"),Ve(D,"placeholder",e(q)==="github"?"https://github.com or https://github.example.com":"https://gitea.example.com"),de.disabled=!e(ie),Oe(de,1,`px-4 py-2 text-sm font-medium text-white rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors +import"../chunks/DsnmJJEf.js";import{i as kt}from"../chunks/TJn6xDN9.js";import{p as wt,g as e,o as Ct,l as Q,h as Et,f as z,i as _,j as Rt,a as be,b as F,c as Ut,m as c,n as Lt,$ as Pt,d as o,v as Be,s as r,t as Ue,u as O,k as s,w as u,r as i,q as _e,e as ge,x as Se,z as j}from"../chunks/DniTuB_0.js";import{i as me,s as Mt,a as Tt}from"../chunks/DbNhg6mG.js";import{h as At,r as x,c as Ve,s as Oe,g as oe}from"../chunks/DSfKzFV1.js";import{b as h,a as We}from"../chunks/CCQwxxp9.js";import{p as Ke}from"../chunks/D4Caz1gY.js";import{P as $t}from"../chunks/RtJp4Ifn.js";import{F as Bt}from"../chunks/CQIRreSz.js";import{A as Je}from"../chunks/DGZKesLN.js";import{e as Dt,a as Qe}from"../chunks/BE9PkXKz.js";import{t as fe}from"../chunks/CBJzOE8U.js";import{g as De,c as Gt,a as It,p as Ft}from"../chunks/BC4TpgBU.js";import{e as Ge}from"../chunks/BZiHL9L3.js";import{D as jt,G as Ie,A as zt}from"../chunks/BlJ06z1t.js";import"../chunks/CRDKDqj5.js";import{E as qt}from"../chunks/CE0C-N9m.js";import{T as Le}from"../chunks/CwLZz6xi.js";var Ht=z('

'),Nt=z('
',1),St=z('

If empty, Base URL will be used as API Base URL

Leave empty to use default Gitea releases URL

',1),Vt=z(''),Ot=z('
',1),Wt=z('

If empty, Base URL will be used as API Base URL

Leave empty to use default Gitea releases URL

',1),Kt=z(''),Jt=z(''),Qt=z('
',1);function ga(Xe,Ye){wt(Ye,!1);const[Ze,et]=Mt(),W=()=>Tt(Dt,"$eagerCache",Ze),Pe=c(),K=c(),Fe=c(),ie=c();let ve=c(!0),X=c([]),ye=c(""),xe=c(""),$=c(1),Y=c(25),Z=c(1),he=c(!1),ke=c(!1),we=c(!1),q=c("github"),g=c(null),M=c(null),t=c({name:"",description:"",endpoint_type:"",base_url:"",api_base_url:"",upload_base_url:"",ca_cert_bundle:"",tools_metadata_url:"",use_internal_tools_metadata:!1}),m={...e(t)};Ct(async()=>{try{s(ve,!0);const a=await Qe.getEndpoints();a&&Array.isArray(a)&&s(X,a)}catch(a){console.error("Failed to load endpoints:",a),s(ye,a instanceof Error?a.message:"Failed to load endpoints")}finally{s(ve,!1)}});async function tt(){try{await Qe.retryResource("endpoints")}catch(a){console.error("Retry failed:",a)}}const at=[{key:"name",title:"Name",cellComponent:Ie,cellProps:{field:"name"}},{key:"description",title:"Description",cellComponent:Ie,cellProps:{field:"description"}},{key:"api_url",title:"API URL",cellComponent:Ie,cellProps:{field:"api_base_url",fallbackField:"base_url"}},{key:"forge_type",title:"Forge Type",cellComponent:qt},{key:"actions",title:"Actions",align:"right",cellComponent:zt}],rt={entityType:"endpoint",primaryText:{field:"name",isClickable:!1},secondaryText:{field:"description"},customInfo:[{icon:a=>De(a?.endpoint_type||"unknown"),text:a=>a?.api_base_url||"Unknown"}],actions:[{type:"edit",handler:a=>Me(a)},{type:"delete",handler:a=>Te(a)}]};function ot(a){s(xe,a.detail.term),s($,1)}function it(a){s($,a.detail.page)}function st(a){const l=Gt(a.detail.perPage);s(Y,l.newPerPage),s($,l.newCurrentPage)}function lt(a){Me(a.detail.item)}function nt(a){Te(a.detail.item)}function dt(){s(q,"github"),Ae(),u(t,e(t).endpoint_type="github"),s(he,!0)}function ut(a){s(q,a.detail),Ae(),u(t,e(t).endpoint_type=a.detail)}function Me(a){s(g,a),s(t,{name:a.name||"",description:a.description||"",endpoint_type:a.endpoint_type||"",base_url:a.base_url||"",api_base_url:a.api_base_url||"",upload_base_url:a.upload_base_url||"",ca_cert_bundle:typeof a.ca_cert_bundle=="string"?a.ca_cert_bundle:"",tools_metadata_url:a.tools_metadata_url||"",use_internal_tools_metadata:a.use_internal_tools_metadata||!1}),m={...e(t)},s(ke,!0)}function Te(a){s(M,a),s(we,!0)}function Ae(){s(t,{name:"",description:"",endpoint_type:"",base_url:"",api_base_url:"",upload_base_url:"",ca_cert_bundle:"",tools_metadata_url:"",use_internal_tools_metadata:!1}),m={...e(t)}}function ct(a){a.key==="Escape"&&(e(he)||e(ke)||e(we))&&k()}function k(){s(he,!1),s(ke,!1),s(we,!1),s(q,"github"),s(g,null),s(M,null),Ae()}function pt(){const a={};if(e(t).description!==m.description&&(e(t).description.trim()!==""||m.description!=="")&&(a.description=e(t).description.trim()),e(t).base_url!==m.base_url&&e(t).base_url.trim()!==""&&(a.base_url=e(t).base_url.trim()),e(t).api_base_url!==m.api_base_url&&(e(t).api_base_url.trim()!==""||m.api_base_url!=="")&&(a.api_base_url=e(t).api_base_url.trim()),e(g)?.endpoint_type==="github"&&e(t).upload_base_url!==m.upload_base_url&&(e(t).upload_base_url.trim()!==""||m.upload_base_url!=="")&&(a.upload_base_url=e(t).upload_base_url.trim()),e(t).ca_cert_bundle!==m.ca_cert_bundle)if(e(t).ca_cert_bundle!=="")try{const l=atob(e(t).ca_cert_bundle);a.ca_cert_bundle=Array.from(l,p=>p.charCodeAt(0))}catch{m.ca_cert_bundle!==""&&(a.ca_cert_bundle=[])}else m.ca_cert_bundle!==""&&(a.ca_cert_bundle=[]);return e(g)?.endpoint_type==="gitea"&&(e(t).tools_metadata_url!==m.tools_metadata_url&&(a.tools_metadata_url=e(t).tools_metadata_url.trim()),e(t).use_internal_tools_metadata!==m.use_internal_tools_metadata&&(a.use_internal_tools_metadata=e(t).use_internal_tools_metadata)),a}async function bt(){try{const a={name:e(t).name,description:e(t).description,endpoint_type:e(t).endpoint_type,base_url:e(t).base_url,api_base_url:e(t).api_base_url,upload_base_url:e(t).upload_base_url};if(e(t).endpoint_type==="gitea"&&(e(t).tools_metadata_url.trim()!==""&&(a.tools_metadata_url=e(t).tools_metadata_url.trim()),a.use_internal_tools_metadata=e(t).use_internal_tools_metadata),e(t).ca_cert_bundle&&e(t).ca_cert_bundle.trim()!=="")try{const l=atob(e(t).ca_cert_bundle);a.ca_cert_bundle=Array.from(l,p=>p.charCodeAt(0))}catch{}e(t).endpoint_type==="github"?await oe.createGithubEndpoint(a):await oe.createGiteaEndpoint(a),fe.success("Endpoint Created",`Endpoint ${e(t).name} has been created successfully.`),k()}catch(a){s(ye,Ge(a))}}async function _t(){if(e(g))try{const a=pt();if(Object.keys(a).length===0){fe.info("No Changes","No fields were modified."),k();return}e(g).endpoint_type==="github"?await oe.updateGithubEndpoint(e(g).name,a):await oe.updateGiteaEndpoint(e(g).name,a),fe.success("Endpoint Updated",`Endpoint ${e(g).name} has been updated successfully.`),k()}catch(a){s(ye,Ge(a))}}async function gt(){if(e(M)){try{e(M).endpoint_type==="github"?await oe.deleteGithubEndpoint(e(M).name):await oe.deleteGiteaEndpoint(e(M).name),fe.success("Endpoint Deleted",`Endpoint ${e(M).name} has been deleted successfully.`)}catch(a){const l=Ge(a);fe.error("Delete Failed",l)}k()}}function je(a){const p=a.target.files?.[0];if(!p){u(t,e(t).ca_cert_bundle="");return}const w=new FileReader;w.onload=n=>{const f=n.target?.result;u(t,e(t).ca_cert_bundle=btoa(f))},w.readAsText(p)}Q(()=>(e(X),W()),()=>{(!e(X).length||W().loaded.endpoints)&&s(X,W().endpoints)}),Q(()=>W(),()=>{s(ve,W().loading.endpoints)}),Q(()=>W(),()=>{s(Pe,W().errorMessages.endpoints)}),Q(()=>(e(X),e(xe)),()=>{s(K,It(e(X),e(xe)))}),Q(()=>(e(Z),e(K),e(Y),e($)),()=>{s(Z,Math.ceil(e(K).length/e(Y))),e($)>e(Z)&&e(Z)>0&&s($,e(Z))}),Q(()=>(e(K),e($),e(Y)),()=>{s(Fe,Ft(e(K),e($),e(Y)))}),Q(()=>e(t),()=>{s(ie,!(!e(t).name||!e(t).base_url||e(t).endpoint_type==="github"&&!e(t).api_base_url))}),Et(),kt();var ze=Qt();_("keydown",Lt,ct),Rt(a=>{Pt.title="Endpoints - GARM"});var $e=be(ze),qe=o($e);$t(qe,{title:"Endpoints",description:"Manage your GitHub and Gitea endpoints for runner management.",actionLabel:"Add Endpoint",$$events:{action:dt}});var mt=r(qe,2);{let a=Be(()=>e(Pe)||e(ye)),l=Be(()=>!!e(Pe));jt(mt,{get columns(){return at},get data(){return e(Fe)},get loading(){return e(ve)},get error(){return e(a)},get searchTerm(){return e(xe)},searchPlaceholder:"Search endpoints by name, description, or URL...",get currentPage(){return e($)},get perPage(){return e(Y)},get totalPages(){return e(Z)},get totalItems(){return e(K),O(()=>e(K).length)},itemName:"endpoints",emptyIconType:"settings",get showRetry(){return e(l)},get mobileCardConfig(){return rt},$$events:{search:ot,pageChange:it,perPageChange:st,retry:tt,edit:lt,delete:nt},$$slots:{"mobile-card":(p,w)=>{const n=Be(()=>w.item);var f=Ht(),C=o(f),T=o(C),L=o(T),R=o(L,!0);i(L);var v=r(L,2),B=o(v,!0);i(v);var A=r(v,2),D=o(A);At(D,()=>(_e(De),_e(e(n)),O(()=>De(e(n).endpoint_type||"","w-5 h-5"))));var G=r(D,2),ee=o(G,!0);i(G),i(A),i(T),i(C);var J=r(C,2),H=o(J);Je(H,{action:"edit",size:"sm",title:"Edit endpoint",ariaLabel:"Edit endpoint",$$events:{click:()=>Me(e(n))}});var te=r(H,2);Je(te,{action:"delete",size:"sm",title:"Delete endpoint",ariaLabel:"Delete endpoint",$$events:{click:()=>Te(e(n))}}),i(J),i(f),Ue(()=>{ge(R,(_e(e(n)),O(()=>e(n).name))),ge(B,(_e(e(n)),O(()=>e(n).description))),ge(ee,(_e(e(n)),O(()=>e(n).endpoint_type)))}),F(p,f)}}})}i($e);var He=r($e,2);{var ft=a=>{var l=Vt(),p=o(l),w=r(p,2),n=o(w),f=r(o(n),2);i(n);var C=r(n,2),T=o(C);Bt(T,{get selectedForgeType(){return e(q)},set selectedForgeType(b){s(q,b)},$$events:{select:ut},$$legacy:!0});var L=r(T,2),R=r(o(L),2);x(R),i(L);var v=r(L,2),B=r(o(v),2);Se(B),i(v);var A=r(v,2),D=r(o(A),2);x(D),i(A);var G=r(A,2);{var ee=b=>{var N=Nt(),d=be(N),P=r(o(d),2);x(P),i(d);var y=r(d,2),U=r(o(y),2);x(U),i(y),h(P,()=>e(t).api_base_url,E=>u(t,e(t).api_base_url=E)),h(U,()=>e(t).upload_base_url,E=>u(t,e(t).upload_base_url=E)),F(b,N)},J=b=>{var N=St(),d=be(N),P=r(o(d),2);x(P),j(2),i(d);var y=r(d,2),U=o(y),E=r(o(U),2),S=o(E);Le(S,{title:"Tools Metadata URL",content:"URL where GARM checks for act_runner binary downloads and release information. Defaults to https://gitea.com/api/v1/repos/gitea/act_runner/releases if not specified. Use a custom URL to point to your own tools repository or mirror.",position:"top",width:"w-80"}),i(E),i(U);var I=r(U,2);x(I),j(2),i(y);var Re=r(y,2),re=o(Re);x(re);var ue=r(re,4),ce=o(ue);Le(ce,{title:"Internal Tools Metadata",content:"When enabled, GARM uses built-in URLs for nightly act_runner binaries instead of calling the external tools metadata URL. This is useful in air-gapped environments where runner images already include the binaries and don't need to download them.",position:"top",width:"w-80"}),i(ue),i(Re),h(P,()=>e(t).api_base_url,V=>u(t,e(t).api_base_url=V)),h(I,()=>e(t).tools_metadata_url,V=>u(t,e(t).tools_metadata_url=V)),We(re,()=>e(t).use_internal_tools_metadata,V=>u(t,e(t).use_internal_tools_metadata=V)),F(b,N)};me(G,b=>{e(q)==="github"?b(ee):b(J,!1)})}var H=r(G,2),te=r(o(H),2),ae=o(te),se=r(ae,2),le=r(o(se),2),Ce=o(le);j(),i(le),j(2),i(se),i(te),i(H);var ne=r(H,2),Ee=o(ne),de=r(Ee,2);i(ne),i(C),i(w),i(l),Ue(()=>{Ve(R,"placeholder",e(q)==="github"?"e.g., github-enterprise or github-com":"e.g., gitea-main or my-gitea"),Ve(D,"placeholder",e(q)==="github"?"https://github.com or https://github.example.com":"https://gitea.example.com"),de.disabled=!e(ie),Oe(de,1,`px-4 py-2 text-sm font-medium text-white rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors ${e(ie)?"bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 cursor-pointer":"bg-gray-400 cursor-not-allowed"}`)}),_("click",p,k),_("click",f,k),h(R,()=>e(t).name,b=>u(t,e(t).name=b)),h(B,()=>e(t).description,b=>u(t,e(t).description=b)),h(D,()=>e(t).base_url,b=>u(t,e(t).base_url=b)),_("change",ae,je),_("click",Ce,()=>document.getElementById("ca_cert_file")?.click()),_("click",Ee,k),_("submit",C,Ke(bt)),F(a,l)};me(He,a=>{e(he)&&a(ft)})}var Ne=r(He,2);{var vt=a=>{var l=Kt(),p=o(l),w=r(p,2),n=o(w),f=o(n),C=o(f),T=o(C);i(C),j(2),i(f);var L=r(f,2);i(n);var R=r(n,2),v=o(R),B=r(o(v),2);x(B),i(v);var A=r(v,2),D=r(o(A),2);Se(D),i(A);var G=r(A,2),ee=r(o(G),2);x(ee),i(G);var J=r(G,2);{var H=d=>{var P=Ot(),y=be(P),U=r(o(y),2);x(U),i(y);var E=r(y,2),S=r(o(E),2);x(S),i(E),h(U,()=>e(t).api_base_url,I=>u(t,e(t).api_base_url=I)),h(S,()=>e(t).upload_base_url,I=>u(t,e(t).upload_base_url=I)),F(d,P)},te=d=>{var P=Wt(),y=be(P),U=r(o(y),2);x(U),j(2),i(y);var E=r(y,2),S=o(E),I=r(o(S),2),Re=o(I);Le(Re,{title:"Tools Metadata URL",content:"URL where GARM checks for act_runner binary downloads and release information. Defaults to https://gitea.com/api/v1/repos/gitea/act_runner/releases if not specified. Use a custom URL to point to your own tools repository or mirror.",position:"top",width:"w-80"}),i(I),i(S);var re=r(S,2);x(re),j(2),i(E);var ue=r(E,2),ce=o(ue);x(ce);var V=r(ce,4),ht=o(V);Le(ht,{title:"Internal Tools Metadata",content:"When enabled, GARM uses built-in URLs for nightly act_runner binaries instead of calling the external tools metadata URL. This is useful in air-gapped environments where runner images already include the binaries and don't need to download them.",position:"top",width:"w-80"}),i(V),i(ue),h(U,()=>e(t).api_base_url,pe=>u(t,e(t).api_base_url=pe)),h(re,()=>e(t).tools_metadata_url,pe=>u(t,e(t).tools_metadata_url=pe)),We(ce,()=>e(t).use_internal_tools_metadata,pe=>u(t,e(t).use_internal_tools_metadata=pe)),F(d,P)};me(J,d=>{e(g),O(()=>e(g).endpoint_type==="github")?d(H):d(te,!1)})}var ae=r(J,2),se=r(o(ae),2),le=o(se),Ce=r(le,2),ne=r(o(Ce),2),Ee=o(ne);j(),i(ne),j(2),i(Ce),i(se),i(ae);var de=r(ae,2),b=o(de),N=r(b,2);i(de),i(R),i(w),i(l),Ue(()=>{ge(T,`Edit ${e(g),O(()=>e(g).endpoint_type==="github"?"GitHub":"Gitea")??""} Endpoint`),N.disabled=!e(ie),Oe(N,1,`px-4 py-2 text-sm font-medium text-white rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors ${e(ie)?"bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 cursor-pointer":"bg-gray-400 cursor-not-allowed"}`)}),_("click",p,k),_("click",L,k),h(B,()=>e(t).name,d=>u(t,e(t).name=d)),h(D,()=>e(t).description,d=>u(t,e(t).description=d)),h(ee,()=>e(t).base_url,d=>u(t,e(t).base_url=d)),_("change",le,je),_("click",Ee,()=>document.getElementById("edit_ca_cert_file")?.click()),_("click",b,k),_("submit",R,Ke(_t)),F(a,l)};me(Ne,a=>{e(ke)&&e(g)&&a(vt)})}var yt=r(Ne,2);{var xt=a=>{var l=Jt(),p=o(l),w=r(p,2),n=o(w),f=o(n),C=r(o(f),2),T=r(o(C),2),L=o(T);i(T),i(C),i(f),i(n);var R=r(n,2),v=o(R),B=r(v,2);i(R),i(w),i(l),Ue(()=>ge(L,`Are you sure you want to delete the endpoint "${e(M),O(()=>e(M).name)??""}"? This action cannot be undone.`)),_("click",p,k),_("click",v,k),_("click",B,gt),F(a,l)};me(yt,a=>{e(we)&&e(M)&&a(xt)})}F(Xe,ze),Ut(),et()}export{ga as component}; diff --git a/webapp/assets/_app/immutable/nodes/5.C8ox5cnK.js b/webapp/assets/_app/immutable/nodes/5.C8ox5cnK.js new file mode 100644 index 00000000..c120cabf --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/5.C8ox5cnK.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as Ge}from"../chunks/TJn6xDN9.js";import{p as Se,E as Je,o as He,l as w,k as r,m as n,g as e,h as Re,f as M,s as o,d as i,r as l,b as $,t as N,e as K,y as $e,u as b,z as Ve,w as Z,i as Ce,c as Ue,A as We,a as Be,j as Ye,$ as Ke,q as A,v as ee}from"../chunks/DniTuB_0.js";import{a as Le,i as H,s as Ne}from"../chunks/DbNhg6mG.js";import{r as Pe,b as Me,d as De,c as Oe,g as be}from"../chunks/DSfKzFV1.js";import{P as Qe}from"../chunks/RtJp4Ifn.js";import{e as Xe,i as Ze}from"../chunks/Ck5PkeSc.js";import{b as Te}from"../chunks/CCQwxxp9.js";import{p as et}from"../chunks/D4Caz1gY.js";import{M as tt}from"../chunks/l9U2NoST.js";import{e as re}from"../chunks/BZiHL9L3.js";import{e as qe,a as he}from"../chunks/BE9PkXKz.js";import{U as rt}from"../chunks/KogAzbD4.js";import{D as at}from"../chunks/z19xmJI9.js";import{t as te}from"../chunks/CBJzOE8U.js";import{k as ye,l as st}from"../chunks/BC4TpgBU.js";import{B as ot}from"../chunks/Dyp1NLoF.js";import{D as nt,G as it,A as lt}from"../chunks/BlJ06z1t.js";import{A as Ae}from"../chunks/DGZKesLN.js";import{E as dt}from"../chunks/30NlHgQ_.js";import{E as ct}from"../chunks/CE0C-N9m.js";import{S as ut}from"../chunks/BsX_CrDw.js";var pt=M('

'),mt=M('

Loading...

'),ft=M(""),gt=M('

Loading credentials...

'),vt=M('

No GitHub credentials found. Please create GitHub credentials first.

'),bt=M(`

You'll need to manually configure this secret in GitHub's enterprise webhook settings.

`),yt=M('

Create Enterprise

Enterprises are only available for GitHub endpoints.

');function ht(ae,se){Se(se,!1);const[oe,ne]=Ne(),u=()=>Le(qe,"$eagerCache",oe),G=n(),h=n(),p=n(),R=n(),E=Je();let x=n(!1),y=n(""),a=n({name:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin"});async function _(){if(!u().loaded.credentials&&!u().loading.credentials)try{await he.getCredentials()}catch(m){r(y,re(m))}}async function C(){if(!e(a).name||!e(a).name.trim()){r(y,"Enterprise name is required");return}if(!e(a).credentials_name){r(y,"Please select credentials");return}try{r(x,!0),r(y,"");const m={...e(a)};E("submit",m)}catch(m){r(y,re(m)),r(x,!1)}}He(()=>{_()}),w(()=>u(),()=>{r(G,u().credentials)}),w(()=>u(),()=>{r(h,u().loading.credentials)}),w(()=>e(G),()=>{r(p,e(G).filter(m=>m.forge_type==="github"))}),w(()=>e(a),()=>{r(R,e(a).name&&e(a).name.trim()!==""&&e(a).credentials_name!==""&&e(a).webhook_secret&&e(a).webhook_secret.trim()!=="")}),Re(),Ge(),tt(ae,{$$events:{close:()=>E("close")},children:(m,q)=>{var D=yt(),d=o(i(D),4);{var ie=f=>{var g=pt(),T=i(g),U=i(T,!0);l(T),l(g),N(()=>K(U,e(y))),$(f,g)};H(d,f=>{e(y)&&f(ie)})}var le=o(d,2);{var de=f=>{var g=mt();$(f,g)},ce=f=>{var g=bt(),T=i(g),U=o(i(T),2);Pe(U),l(T);var z=o(T,2),B=o(i(z),2);N(()=>{e(a),$e(()=>{e(p)})});var j=i(B);j.value=j.__value="";var ue=o(j);Xe(ue,1,()=>e(p),Ze,(s,c)=>{var P=ft(),v=i(P);l(P);var k={};N(()=>{K(v,`${e(c),b(()=>e(c).name)??""} (${e(c),b(()=>e(c).endpoint?.name||"Unknown endpoint")??""})`),k!==(k=(e(c),b(()=>e(c).name)))&&(P.value=(P.__value=(e(c),b(()=>e(c).name)))??"")}),$(s,P)}),l(B);var pe=o(B,2);{var me=s=>{var c=gt();$(s,c)},O=s=>{var c=We(),P=Be(c);{var v=k=>{var Y=vt();$(k,Y)};H(P,k=>{e(p),b(()=>e(p).length===0)&&k(v)},!0)}$(s,c)};H(pe,s=>{e(h)?s(me):s(O,!1)})}l(z);var S=o(z,2),L=o(i(S),2);N(()=>{e(a),$e(()=>{})});var F=i(L);F.value=F.__value="roundrobin";var I=o(F);I.value=I.__value="pack",l(L),l(S);var J=o(S,2),V=o(i(J),2);Pe(V),Ve(2),l(J);var Q=o(J,2),X=i(Q),W=o(X,2),t=i(W,!0);l(W),l(Q),l(g),N(()=>{W.disabled=(e(x),e(h),e(R),e(p),b(()=>e(x)||e(h)||!e(R)||e(p).length===0)),K(t,e(x)?"Creating...":"Create Enterprise")}),Te(U,()=>e(a).name,s=>Z(a,e(a).name=s)),Me(B,()=>e(a).credentials_name,s=>Z(a,e(a).credentials_name=s)),Me(L,()=>e(a).pool_balancer_type,s=>Z(a,e(a).pool_balancer_type=s)),Te(V,()=>e(a).webhook_secret,s=>Z(a,e(a).webhook_secret=s)),Ce("click",X,()=>E("close")),Ce("submit",g,et(C)),$(f,g)};H(le,f=>{e(x)?f(de):f(ce,!1)})}l(D),$(m,D)},$$slots:{default:!0}}),Ue(),ne()}var _t=M(''),xt=M('
',1);function It(ae,se){Se(se,!1);const[oe,ne]=Ne(),u=()=>Le(qe,"$eagerCache",oe),G=n(),h=n(),p=n(),R=n();let E=n([]),x=n(!0),y=n(""),a=n(""),_=n(1),C=n(25),m=n(!1),q=n(!1),D=n(!1),d=n(null);async function ie(t){try{r(y,""),await be.createEnterprise(t),te.success("Enterprise Created",`Enterprise ${t.name} has been created successfully.`),r(m,!1)}catch(s){throw r(y,re(s)),s}}async function le(t){if(e(d))try{await be.updateEnterprise(e(d).id,t),te.success("Enterprise Updated",`Enterprise ${e(d).name} has been updated successfully.`),r(q,!1),r(d,null)}catch(s){throw s}}async function de(){if(e(d))try{r(y,""),await be.deleteEnterprise(e(d).id),te.success("Enterprise Deleted",`Enterprise ${e(d).name} has been deleted successfully.`),r(D,!1),r(d,null)}catch(t){const s=re(t);te.error("Delete Failed",s)}}function ce(){r(m,!0)}function f(t){r(d,t),r(q,!0)}function g(t){r(d,t),r(D,!0)}He(async()=>{try{r(x,!0);const t=await he.getEnterprises();t&&Array.isArray(t)&&r(E,t)}catch(t){console.error("Failed to load enterprises:",t),r(y,t instanceof Error?t.message:"Failed to load enterprises")}finally{r(x,!1)}});async function T(){try{await he.retryResource("enterprises")}catch(t){console.error("Retry failed:",t)}}const U=[{key:"name",title:"Name",cellComponent:dt,cellProps:{entityType:"enterprise"}},{key:"endpoint",title:"Endpoint",cellComponent:ct},{key:"credentials",title:"Credentials",cellComponent:it,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:ut,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:lt}],z={entityType:"enterprise",primaryText:{field:"name",isClickable:!0,href:"/enterprises/{id}"},secondaryText:{field:"credentials_name"},badges:[{type:"custom",value:t=>ye(t)}],actions:[{type:"edit",handler:t=>f(t)},{type:"delete",handler:t=>g(t)}]};function B(t){r(a,t.detail.term),r(_,1)}function j(t){r(_,t.detail.page)}function ue(t){r(C,t.detail.perPage),r(_,1)}function pe(t){f(t.detail.item)}function me(t){g(t.detail.item)}w(()=>(e(E),u()),()=>{(!e(E).length||u().loaded.enterprises)&&r(E,u().enterprises)}),w(()=>u(),()=>{r(x,u().loading.enterprises)}),w(()=>u(),()=>{r(G,u().errorMessages.enterprises)}),w(()=>(e(E),e(a)),()=>{r(h,st(e(E),e(a)))}),w(()=>(e(h),e(C)),()=>{r(p,Math.ceil(e(h).length/e(C)))}),w(()=>(e(_),e(p)),()=>{e(_)>e(p)&&e(p)>0&&r(_,e(p))}),w(()=>(e(h),e(_),e(C)),()=>{r(R,e(h).slice((e(_)-1)*e(C),e(_)*e(C)))}),Re(),Ge();var O=xt();Ye(t=>{Ke.title="Enterprises - GARM"});var S=Be(O),L=i(S);Qe(L,{title:"Enterprises",description:"Manage GitHub enterprises",actionLabel:"Add Enterprise",$$events:{action:ce}});var F=o(L,2);{let t=ee(()=>e(G)||e(y)),s=ee(()=>!!e(G));nt(F,{get columns(){return U},get data(){return e(R)},get loading(){return e(x)},get error(){return e(t)},get searchTerm(){return e(a)},searchPlaceholder:"Search enterprises...",get currentPage(){return e(_)},get perPage(){return e(C)},get totalPages(){return e(p)},get totalItems(){return e(h),b(()=>e(h).length)},itemName:"enterprises",emptyIconType:"building",get showRetry(){return e(s)},get mobileCardConfig(){return z},$$events:{search:B,pageChange:j,perPageChange:ue,retry:T,edit:pe,delete:me},$$slots:{"mobile-card":(c,P)=>{const v=ee(()=>P.item),k=ee(()=>(A(ye),A(e(v)),b(()=>ye(e(v)))));var Y=_t(),fe=i(Y),ge=i(fe),ve=i(ge),ze=i(ve,!0);l(ve);var _e=o(ve,2),je=i(_e,!0);l(_e),l(ge),l(fe);var xe=o(fe,2),ke=i(xe);ot(ke,{get variant(){return A(e(k)),b(()=>e(k).variant)},get text(){return A(e(k)),b(()=>e(k).text)}});var we=o(ke,2),Ee=i(we);Ae(Ee,{action:"edit",size:"sm",title:"Edit enterprise",ariaLabel:"Edit enterprise",$$events:{click:()=>f(e(v))}});var Fe=o(Ee,2);Ae(Fe,{action:"delete",size:"sm",title:"Delete enterprise",ariaLabel:"Delete enterprise",$$events:{click:()=>g(e(v))}}),l(we),l(xe),l(Y),N(Ie=>{Oe(ge,"href",Ie),K(ze,(A(e(v)),b(()=>e(v).name))),K(je,(A(e(v)),b(()=>e(v).credentials_name)))},[()=>(A(De),A(e(v)),b(()=>De(`/enterprises/${e(v).id}`)))]),$(c,Y)}}})}l(S);var I=o(S,2);{var J=t=>{ht(t,{$$events:{close:()=>r(m,!1),submit:s=>ie(s.detail)}})};H(I,t=>{e(m)&&t(J)})}var V=o(I,2);{var Q=t=>{rt(t,{get entity(){return e(d)},entityType:"enterprise",$$events:{close:()=>{r(q,!1),r(d,null)},submit:s=>le(s.detail)}})};H(V,t=>{e(q)&&e(d)&&t(Q)})}var X=o(V,2);{var W=t=>{at(t,{title:"Delete Enterprise",message:"Are you sure you want to delete this enterprise? This action cannot be undone.",get itemName(){return e(d),b(()=>e(d).name)},$$events:{close:()=>{r(D,!1),r(d,null)},confirm:de}})};H(X,t=>{e(D)&&e(d)&&t(W)})}$(ae,O),Ue(),ne()}export{It as component}; diff --git a/webapp/assets/_app/immutable/nodes/5.COovtNXp.js b/webapp/assets/_app/immutable/nodes/5.COovtNXp.js deleted file mode 100644 index d6230376..00000000 --- a/webapp/assets/_app/immutable/nodes/5.COovtNXp.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as Ge}from"../chunks/TJn6xDN9.js";import{p as Se,E as Je,o as He,l as w,k as r,m as n,g as e,h as Re,f as M,s as o,d as i,r as l,b as $,t as N,e as K,y as $e,u as b,z as Ve,w as Z,i as Ce,c as Ue,A as We,a as Be,j as Ye,$ as Ke,q as A,v as ee}from"../chunks/DniTuB_0.js";import{a as Le,i as H,s as Ne}from"../chunks/DbNhg6mG.js";import{r as Pe,b as Me,d as De,c as Oe,g as be}from"../chunks/BZ2rxtTc.js";import{P as Qe}from"../chunks/CuYqFPEA.js";import{e as Xe,i as Ze}from"../chunks/Ck5PkeSc.js";import{b as Te}from"../chunks/CCQwxxp9.js";import{p as et}from"../chunks/D4Caz1gY.js";import{M as tt}from"../chunks/CHjY0Kaf.js";import{e as re}from"../chunks/BZiHL9L3.js";import{e as qe,a as he}from"../chunks/DKJ_c8yL.js";import{U as rt}from"../chunks/BWuIa3ut.js";import{D as at}from"../chunks/DGVAzkoE.js";import{t as te}from"../chunks/CBJzOE8U.js";import{B as st,k as ye,l as ot}from"../chunks/CTcPpzia.js";import{D as nt,G as it,A as lt}from"../chunks/CKaB5fL4.js";import{A as Ae}from"../chunks/Ok63PiOl.js";import{E as dt}from"../chunks/Dh8uHEF5.js";import{E as ct}from"../chunks/Bz3T1MM4.js";import{S as ut}from"../chunks/C1GM4Goa.js";var pt=M('

'),mt=M('

Loading...

'),ft=M(""),gt=M('

Loading credentials...

'),vt=M('

No GitHub credentials found. Please create GitHub credentials first.

'),bt=M(`

You'll need to manually configure this secret in GitHub's enterprise webhook settings.

`),yt=M('

Create Enterprise

Enterprises are only available for GitHub endpoints.

');function ht(ae,se){Se(se,!1);const[oe,ne]=Ne(),u=()=>Le(qe,"$eagerCache",oe),G=n(),h=n(),p=n(),R=n(),E=Je();let x=n(!1),y=n(""),a=n({name:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin"});async function _(){if(!u().loaded.credentials&&!u().loading.credentials)try{await he.getCredentials()}catch(m){r(y,re(m))}}async function C(){if(!e(a).name||!e(a).name.trim()){r(y,"Enterprise name is required");return}if(!e(a).credentials_name){r(y,"Please select credentials");return}try{r(x,!0),r(y,"");const m={...e(a)};E("submit",m)}catch(m){r(y,re(m)),r(x,!1)}}He(()=>{_()}),w(()=>u(),()=>{r(G,u().credentials)}),w(()=>u(),()=>{r(h,u().loading.credentials)}),w(()=>e(G),()=>{r(p,e(G).filter(m=>m.forge_type==="github"))}),w(()=>e(a),()=>{r(R,e(a).name&&e(a).name.trim()!==""&&e(a).credentials_name!==""&&e(a).webhook_secret&&e(a).webhook_secret.trim()!=="")}),Re(),Ge(),tt(ae,{$$events:{close:()=>E("close")},children:(m,q)=>{var D=yt(),d=o(i(D),4);{var ie=f=>{var g=pt(),T=i(g),U=i(T,!0);l(T),l(g),N(()=>K(U,e(y))),$(f,g)};H(d,f=>{e(y)&&f(ie)})}var le=o(d,2);{var de=f=>{var g=mt();$(f,g)},ce=f=>{var g=bt(),T=i(g),U=o(i(T),2);Pe(U),l(T);var z=o(T,2),B=o(i(z),2);N(()=>{e(a),$e(()=>{e(p)})});var j=i(B);j.value=j.__value="";var ue=o(j);Xe(ue,1,()=>e(p),Ze,(s,c)=>{var P=ft(),v=i(P);l(P);var k={};N(()=>{K(v,`${e(c),b(()=>e(c).name)??""} (${e(c),b(()=>e(c).endpoint?.name||"Unknown endpoint")??""})`),k!==(k=(e(c),b(()=>e(c).name)))&&(P.value=(P.__value=(e(c),b(()=>e(c).name)))??"")}),$(s,P)}),l(B);var pe=o(B,2);{var me=s=>{var c=gt();$(s,c)},O=s=>{var c=We(),P=Be(c);{var v=k=>{var Y=vt();$(k,Y)};H(P,k=>{e(p),b(()=>e(p).length===0)&&k(v)},!0)}$(s,c)};H(pe,s=>{e(h)?s(me):s(O,!1)})}l(z);var S=o(z,2),L=o(i(S),2);N(()=>{e(a),$e(()=>{})});var F=i(L);F.value=F.__value="roundrobin";var I=o(F);I.value=I.__value="pack",l(L),l(S);var J=o(S,2),V=o(i(J),2);Pe(V),Ve(2),l(J);var Q=o(J,2),X=i(Q),W=o(X,2),t=i(W,!0);l(W),l(Q),l(g),N(()=>{W.disabled=(e(x),e(h),e(R),e(p),b(()=>e(x)||e(h)||!e(R)||e(p).length===0)),K(t,e(x)?"Creating...":"Create Enterprise")}),Te(U,()=>e(a).name,s=>Z(a,e(a).name=s)),Me(B,()=>e(a).credentials_name,s=>Z(a,e(a).credentials_name=s)),Me(L,()=>e(a).pool_balancer_type,s=>Z(a,e(a).pool_balancer_type=s)),Te(V,()=>e(a).webhook_secret,s=>Z(a,e(a).webhook_secret=s)),Ce("click",X,()=>E("close")),Ce("submit",g,et(C)),$(f,g)};H(le,f=>{e(x)?f(de):f(ce,!1)})}l(D),$(m,D)},$$slots:{default:!0}}),Ue(),ne()}var _t=M(''),xt=M('
',1);function Ft(ae,se){Se(se,!1);const[oe,ne]=Ne(),u=()=>Le(qe,"$eagerCache",oe),G=n(),h=n(),p=n(),R=n();let E=n([]),x=n(!0),y=n(""),a=n(""),_=n(1),C=n(25),m=n(!1),q=n(!1),D=n(!1),d=n(null);async function ie(t){try{r(y,""),await be.createEnterprise(t),te.success("Enterprise Created",`Enterprise ${t.name} has been created successfully.`),r(m,!1)}catch(s){throw r(y,re(s)),s}}async function le(t){if(e(d))try{await be.updateEnterprise(e(d).id,t),te.success("Enterprise Updated",`Enterprise ${e(d).name} has been updated successfully.`),r(q,!1),r(d,null)}catch(s){throw s}}async function de(){if(e(d))try{r(y,""),await be.deleteEnterprise(e(d).id),te.success("Enterprise Deleted",`Enterprise ${e(d).name} has been deleted successfully.`),r(D,!1),r(d,null)}catch(t){const s=re(t);te.error("Delete Failed",s)}}function ce(){r(m,!0)}function f(t){r(d,t),r(q,!0)}function g(t){r(d,t),r(D,!0)}He(async()=>{try{r(x,!0);const t=await he.getEnterprises();t&&Array.isArray(t)&&r(E,t)}catch(t){console.error("Failed to load enterprises:",t),r(y,t instanceof Error?t.message:"Failed to load enterprises")}finally{r(x,!1)}});async function T(){try{await he.retryResource("enterprises")}catch(t){console.error("Retry failed:",t)}}const U=[{key:"name",title:"Name",cellComponent:dt,cellProps:{entityType:"enterprise"}},{key:"endpoint",title:"Endpoint",cellComponent:ct},{key:"credentials",title:"Credentials",cellComponent:it,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:ut,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:lt}],z={entityType:"enterprise",primaryText:{field:"name",isClickable:!0,href:"/enterprises/{id}"},secondaryText:{field:"credentials_name"},badges:[{type:"custom",value:t=>ye(t)}],actions:[{type:"edit",handler:t=>f(t)},{type:"delete",handler:t=>g(t)}]};function B(t){r(a,t.detail.term),r(_,1)}function j(t){r(_,t.detail.page)}function ue(t){r(C,t.detail.perPage),r(_,1)}function pe(t){f(t.detail.item)}function me(t){g(t.detail.item)}w(()=>(e(E),u()),()=>{(!e(E).length||u().loaded.enterprises)&&r(E,u().enterprises)}),w(()=>u(),()=>{r(x,u().loading.enterprises)}),w(()=>u(),()=>{r(G,u().errorMessages.enterprises)}),w(()=>(e(E),e(a)),()=>{r(h,ot(e(E),e(a)))}),w(()=>(e(h),e(C)),()=>{r(p,Math.ceil(e(h).length/e(C)))}),w(()=>(e(_),e(p)),()=>{e(_)>e(p)&&e(p)>0&&r(_,e(p))}),w(()=>(e(h),e(_),e(C)),()=>{r(R,e(h).slice((e(_)-1)*e(C),e(_)*e(C)))}),Re(),Ge();var O=xt();Ye(t=>{Ke.title="Enterprises - GARM"});var S=Be(O),L=i(S);Qe(L,{title:"Enterprises",description:"Manage GitHub enterprises",actionLabel:"Add Enterprise",$$events:{action:ce}});var F=o(L,2);{let t=ee(()=>e(G)||e(y)),s=ee(()=>!!e(G));nt(F,{get columns(){return U},get data(){return e(R)},get loading(){return e(x)},get error(){return e(t)},get searchTerm(){return e(a)},searchPlaceholder:"Search enterprises...",get currentPage(){return e(_)},get perPage(){return e(C)},get totalPages(){return e(p)},get totalItems(){return e(h),b(()=>e(h).length)},itemName:"enterprises",emptyIconType:"building",get showRetry(){return e(s)},get mobileCardConfig(){return z},$$events:{search:B,pageChange:j,perPageChange:ue,retry:T,edit:pe,delete:me},$$slots:{"mobile-card":(c,P)=>{const v=ee(()=>P.item),k=ee(()=>(A(ye),A(e(v)),b(()=>ye(e(v)))));var Y=_t(),fe=i(Y),ge=i(fe),ve=i(ge),ze=i(ve,!0);l(ve);var _e=o(ve,2),je=i(_e,!0);l(_e),l(ge),l(fe);var xe=o(fe,2),ke=i(xe);st(ke,{get variant(){return A(e(k)),b(()=>e(k).variant)},get text(){return A(e(k)),b(()=>e(k).text)}});var we=o(ke,2),Ee=i(we);Ae(Ee,{action:"edit",size:"sm",title:"Edit enterprise",ariaLabel:"Edit enterprise",$$events:{click:()=>f(e(v))}});var Fe=o(Ee,2);Ae(Fe,{action:"delete",size:"sm",title:"Delete enterprise",ariaLabel:"Delete enterprise",$$events:{click:()=>g(e(v))}}),l(we),l(xe),l(Y),N(Ie=>{Oe(ge,"href",Ie),K(ze,(A(e(v)),b(()=>e(v).name))),K(je,(A(e(v)),b(()=>e(v).credentials_name)))},[()=>(A(De),A(e(v)),b(()=>De(`/enterprises/${e(v).id}`)))]),$(c,Y)}}})}l(S);var I=o(S,2);{var J=t=>{ht(t,{$$events:{close:()=>r(m,!1),submit:s=>ie(s.detail)}})};H(I,t=>{e(m)&&t(J)})}var V=o(I,2);{var Q=t=>{rt(t,{get entity(){return e(d)},entityType:"enterprise",$$events:{close:()=>{r(q,!1),r(d,null)},submit:s=>le(s.detail)}})};H(V,t=>{e(q)&&e(d)&&t(Q)})}var X=o(V,2);{var W=t=>{at(t,{title:"Delete Enterprise",message:"Are you sure you want to delete this enterprise? This action cannot be undone.",get itemName(){return e(d),b(()=>e(d).name)},$$events:{close:()=>{r(D,!1),r(d,null)},confirm:de}})};H(X,t=>{e(D)&&e(d)&&t(W)})}$(ae,O),Ue(),ne()}export{Ft as component}; diff --git a/webapp/assets/_app/immutable/nodes/6.DKl0DvPr.js b/webapp/assets/_app/immutable/nodes/6.DspM8-Gd.js similarity index 94% rename from webapp/assets/_app/immutable/nodes/6.DKl0DvPr.js rename to webapp/assets/_app/immutable/nodes/6.DspM8-Gd.js index 4de5bed4..26cc57f7 100644 --- a/webapp/assets/_app/immutable/nodes/6.DKl0DvPr.js +++ b/webapp/assets/_app/immutable/nodes/6.DspM8-Gd.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as qe}from"../chunks/TJn6xDN9.js";import{p as ze,o as Ge,B as je,l as Re,h as Ve,f as S,j as We,a as F,t as j,b as E,c as Je,u as i,q as le,e as de,g as e,m as l,d as u,s as d,k as s,$ as Ke,r as f,w as Oe,A as ce,v}from"../chunks/DniTuB_0.js";import{i as g,s as Qe,a as Xe}from"../chunks/DbNhg6mG.js";import{d as B,c as Ye,g as y}from"../chunks/BZ2rxtTc.js";import{p as Ze}from"../chunks/DQE8oq0R.js";import{g as pe}from"../chunks/HMJxCnAR.js";import{U as et}from"../chunks/BWuIa3ut.js";import{D as ue}from"../chunks/DGVAzkoE.js";import{E as tt,P as rt,a as at}from"../chunks/BZ_AecKg.js";import{D as st}from"../chunks/J4QHiesY.js";import{I as nt}from"../chunks/d1ceLqrJ.js";import{g as fe}from"../chunks/CTcPpzia.js";import{w as R}from"../chunks/DmHFwzWx.js";import{t as x}from"../chunks/CBJzOE8U.js";import{C as ot}from"../chunks/mwBQAfJV.js";import{e as V}from"../chunks/BZiHL9L3.js";var it=S('

Loading enterprise...

'),lt=S('

'),dt=S(" ",1),ct=S(' ',1);function Tt(me,ve){ze(ve,!1);const[ge,ye]=Qe(),W=()=>Xe(Ze,"$page",ge),$=l();let r=l(null),c=l([]),m=l([]),U=l(!0),P=l(""),T=l(!1),M=l(!1),I=l(!1),C=l(!1),p=l(null),k=null,h=l();async function J(){if(e($))try{s(U,!0),s(P,"");const[t,a,n]=await Promise.all([y.getEnterprise(e($)),y.listEnterprisePools(e($)).catch(()=>[]),y.listEnterpriseInstances(e($)).catch(()=>[])]);s(r,t),s(c,a),s(m,n)}catch(t){s(P,t instanceof Error?t.message:"Failed to load enterprise")}finally{s(U,!1)}}function he(t,a){const{events:n}=t;return{...a,events:n}}async function _e(t){if(e(r))try{await y.updateEnterprise(e(r).id,t),await J(),x.success("Enterprise Updated",`Enterprise ${e(r).name} has been updated successfully.`),s(T,!1)}catch(a){throw a}}async function be(){if(e(r)){try{await y.deleteEnterprise(e(r).id),pe(B("/enterprises"))}catch(t){const a=V(t);x.error("Delete Failed",a)}s(M,!1)}}async function Ee(){if(e(p))try{await y.deleteInstance(e(p).name),x.success("Instance Deleted",`Instance ${e(p).name} has been deleted successfully.`),s(I,!1),s(p,null)}catch(t){const a=V(t);x.error("Delete Failed",a),s(I,!1),s(p,null)}}function xe(t){s(p,t),s(I,!0)}function $e(){s(C,!0)}async function Ie(t){try{if(!e(r))return;await y.createEnterprisePool(e(r).id,t.detail),x.success("Pool Created",`Pool has been created successfully for enterprise ${e(r).name}.`),s(C,!1)}catch(a){const n=V(a);x.error("Pool Creation Failed",n)}}function K(){e(h)&&Oe(h,e(h).scrollTop=e(h).scrollHeight)}function we(t){if(t.operation==="update"){const a=t.payload;if(e(r)&&a.id===e(r).id){const n=e(r).events?.length||0,o=a.events?.length||0;s(r,he(e(r),a)),o>n&&setTimeout(()=>{K()},100)}}else if(t.operation==="delete"){const a=t.payload.id||t.payload;e(r)&&e(r).id===a&&pe(B("/enterprises"))}}function De(t){if(!e(r))return;const a=t.payload;if(a.enterprise_id===e(r).id){if(t.operation==="create")s(c,[...e(c),a]);else if(t.operation==="update")s(c,e(c).map(n=>n.id===a.id?a:n));else if(t.operation==="delete"){const n=a.id||a;s(c,e(c).filter(o=>o.id!==n))}}}function Pe(t){if(!e(r)||!e(c))return;const a=t.payload;if(e(c).some(o=>o.id===a.pool_id)){if(t.operation==="create")s(m,[...e(m),a]);else if(t.operation==="update")s(m,e(m).map(o=>o.id===a.id?a:o));else if(t.operation==="delete"){const o=a.id||a;s(m,e(m).filter(q=>q.id!==o))}}}Ge(()=>{J().then(()=>{e(r)?.events?.length&&setTimeout(()=>{K()},100)});const t=R.subscribeToEntity("enterprise",["update","delete"],we),a=R.subscribeToEntity("pool",["create","update","delete"],De),n=R.subscribeToEntity("instance",["create","update","delete"],Pe);k=()=>{t(),a(),n()}}),je(()=>{k&&(k(),k=null)}),Re(()=>W(),()=>{s($,W().params.id)}),Ve(),qe();var O=ct();We(t=>{j(()=>Ke.title=`${e(r),i(()=>e(r)?`${e(r).name} - Enterprise Details`:"Enterprise Details")??""} - GARM`)});var L=F(O),H=u(L),Q=u(H),N=u(Q),Te=u(N);f(N);var X=d(N,2),Y=u(X),Z=d(u(Y),2),Me=u(Z,!0);f(Z),f(Y),f(X),f(Q),f(H);var Ce=d(H,2);{var ke=t=>{var a=it();E(t,a)},Ae=t=>{var a=ce(),n=F(a);{var o=_=>{var b=lt(),A=u(b),z=u(A,!0);f(A),f(b),j(()=>de(z,e(P))),E(_,b)},q=_=>{var b=ce(),A=F(b);{var z=G=>{var ae=dt(),se=F(ae);{let w=v(()=>(e(r),i(()=>e(r).name||"Enterprise"))),D=v(()=>(e(r),i(()=>e(r).endpoint?.name))),Ne=v(()=>(le(fe),i(()=>fe("github"))));st(se,{get title(){return e(w)},get subtitle(){return`Endpoint: ${e(D)??""} • GitHub Enterprise`},get forgeIcon(){return e(Ne)},onEdit:()=>s(T,!0),onDelete:()=>s(M,!0)})}var ne=d(se,2);tt(ne,{get entity(){return e(r)},entityType:"enterprise"});var oe=d(ne,2);{let w=v(()=>(e(r),i(()=>e(r).id||""))),D=v(()=>(e(r),i(()=>e(r).name||"")));rt(oe,{get pools(){return e(c)},entityType:"enterprise",get entityId(){return e(w)},get entityName(){return e(D)},$$events:{addPool:$e}})}var ie=d(oe,2);nt(ie,{get instances(){return e(m)},entityType:"enterprise",onDeleteInstance:xe});var He=d(ie,2);{let w=v(()=>(e(r),i(()=>e(r)?.events)));at(He,{get events(){return e(w)},get eventsContainer(){return e(h)},set eventsContainer(D){s(h,D)},$$legacy:!0})}E(G,ae)};g(A,G=>{e(r)&&G(z)},!0)}E(_,b)};g(n,_=>{e(P)?_(o):_(q,!1)},!0)}E(t,a)};g(Ce,t=>{e(U)?t(ke):t(Ae,!1)})}f(L);var ee=d(L,2);{var Fe=t=>{et(t,{get entity(){return e(r)},entityType:"enterprise",$$events:{close:()=>s(T,!1),submit:a=>_e(a.detail)}})};g(ee,t=>{e(T)&&e(r)&&t(Fe)})}var te=d(ee,2);{var Be=t=>{ue(t,{title:"Delete Enterprise",message:"Are you sure you want to delete this enterprise? This action cannot be undone and will remove all associated pools and instances.",get itemName(){return e(r),i(()=>e(r).name)},$$events:{close:()=>s(M,!1),confirm:be}})};g(te,t=>{e(M)&&e(r)&&t(Be)})}var re=d(te,2);{var Se=t=>{ue(t,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(p),i(()=>e(p).name)},$$events:{close:()=>{s(I,!1),s(p,null)},confirm:Ee}})};g(re,t=>{e(I)&&e(p)&&t(Se)})}var Ue=d(re,2);{var Le=t=>{{let a=v(()=>(e(r),i(()=>e(r).id||"")));ot(t,{initialEntityType:"enterprise",get initialEntityId(){return e(a)},$$events:{close:()=>s(C,!1),submit:Ie}})}};g(Ue,t=>{e(C)&&e(r)&&t(Le)})}j(t=>{Ye(Te,"href",t),de(Me,(e(r),i(()=>e(r)?e(r).name:"Loading...")))},[()=>(le(B),i(()=>B("/enterprises")))]),E(me,O),Je(),ye()}export{Tt as component}; +import"../chunks/DsnmJJEf.js";import{i as qe}from"../chunks/TJn6xDN9.js";import{p as ze,o as Ge,B as je,l as Re,h as Ve,f as S,j as We,a as F,t as j,b as E,c as Je,u as i,q as le,e as de,g as e,m as l,d as u,s as d,k as s,$ as Ke,r as f,w as Oe,A as ce,v}from"../chunks/DniTuB_0.js";import{i as g,s as Qe,a as Xe}from"../chunks/DbNhg6mG.js";import{d as B,c as Ye,g as y}from"../chunks/DSfKzFV1.js";import{p as Ze}from"../chunks/Dt7jKcR8.js";import{g as pe}from"../chunks/kW9-6GPQ.js";import{U as et}from"../chunks/KogAzbD4.js";import{D as ue}from"../chunks/z19xmJI9.js";import{E as tt,P as rt,a as at}from"../chunks/BehbwORU.js";import{D as st}from"../chunks/DsCgpFQt.js";import{I as nt}from"../chunks/B3d8BqkX.js";import{g as fe}from"../chunks/BC4TpgBU.js";import{w as R}from"../chunks/DmHFwzWx.js";import{t as x}from"../chunks/CBJzOE8U.js";import{C as ot}from"../chunks/CMD3IPWU.js";import{e as V}from"../chunks/BZiHL9L3.js";var it=S('

Loading enterprise...

'),lt=S('

'),dt=S(" ",1),ct=S(' ',1);function Tt(me,ve){ze(ve,!1);const[ge,ye]=Qe(),W=()=>Xe(Ze,"$page",ge),$=l();let r=l(null),c=l([]),m=l([]),U=l(!0),P=l(""),T=l(!1),M=l(!1),I=l(!1),C=l(!1),p=l(null),k=null,h=l();async function J(){if(e($))try{s(U,!0),s(P,"");const[t,a,n]=await Promise.all([y.getEnterprise(e($)),y.listEnterprisePools(e($)).catch(()=>[]),y.listEnterpriseInstances(e($)).catch(()=>[])]);s(r,t),s(c,a),s(m,n)}catch(t){s(P,t instanceof Error?t.message:"Failed to load enterprise")}finally{s(U,!1)}}function he(t,a){const{events:n}=t;return{...a,events:n}}async function _e(t){if(e(r))try{await y.updateEnterprise(e(r).id,t),await J(),x.success("Enterprise Updated",`Enterprise ${e(r).name} has been updated successfully.`),s(T,!1)}catch(a){throw a}}async function be(){if(e(r)){try{await y.deleteEnterprise(e(r).id),pe(B("/enterprises"))}catch(t){const a=V(t);x.error("Delete Failed",a)}s(M,!1)}}async function Ee(){if(e(p))try{await y.deleteInstance(e(p).name),x.success("Instance Deleted",`Instance ${e(p).name} has been deleted successfully.`),s(I,!1),s(p,null)}catch(t){const a=V(t);x.error("Delete Failed",a),s(I,!1),s(p,null)}}function xe(t){s(p,t),s(I,!0)}function $e(){s(C,!0)}async function Ie(t){try{if(!e(r))return;await y.createEnterprisePool(e(r).id,t.detail),x.success("Pool Created",`Pool has been created successfully for enterprise ${e(r).name}.`),s(C,!1)}catch(a){const n=V(a);x.error("Pool Creation Failed",n)}}function K(){e(h)&&Oe(h,e(h).scrollTop=e(h).scrollHeight)}function we(t){if(t.operation==="update"){const a=t.payload;if(e(r)&&a.id===e(r).id){const n=e(r).events?.length||0,o=a.events?.length||0;s(r,he(e(r),a)),o>n&&setTimeout(()=>{K()},100)}}else if(t.operation==="delete"){const a=t.payload.id||t.payload;e(r)&&e(r).id===a&&pe(B("/enterprises"))}}function De(t){if(!e(r))return;const a=t.payload;if(a.enterprise_id===e(r).id){if(t.operation==="create")s(c,[...e(c),a]);else if(t.operation==="update")s(c,e(c).map(n=>n.id===a.id?a:n));else if(t.operation==="delete"){const n=a.id||a;s(c,e(c).filter(o=>o.id!==n))}}}function Pe(t){if(!e(r)||!e(c))return;const a=t.payload;if(e(c).some(o=>o.id===a.pool_id)){if(t.operation==="create")s(m,[...e(m),a]);else if(t.operation==="update")s(m,e(m).map(o=>o.id===a.id?a:o));else if(t.operation==="delete"){const o=a.id||a;s(m,e(m).filter(q=>q.id!==o))}}}Ge(()=>{J().then(()=>{e(r)?.events?.length&&setTimeout(()=>{K()},100)});const t=R.subscribeToEntity("enterprise",["update","delete"],we),a=R.subscribeToEntity("pool",["create","update","delete"],De),n=R.subscribeToEntity("instance",["create","update","delete"],Pe);k=()=>{t(),a(),n()}}),je(()=>{k&&(k(),k=null)}),Re(()=>W(),()=>{s($,W().params.id)}),Ve(),qe();var O=ct();We(t=>{j(()=>Ke.title=`${e(r),i(()=>e(r)?`${e(r).name} - Enterprise Details`:"Enterprise Details")??""} - GARM`)});var L=F(O),H=u(L),Q=u(H),N=u(Q),Te=u(N);f(N);var X=d(N,2),Y=u(X),Z=d(u(Y),2),Me=u(Z,!0);f(Z),f(Y),f(X),f(Q),f(H);var Ce=d(H,2);{var ke=t=>{var a=it();E(t,a)},Ae=t=>{var a=ce(),n=F(a);{var o=_=>{var b=lt(),A=u(b),z=u(A,!0);f(A),f(b),j(()=>de(z,e(P))),E(_,b)},q=_=>{var b=ce(),A=F(b);{var z=G=>{var ae=dt(),se=F(ae);{let w=v(()=>(e(r),i(()=>e(r).name||"Enterprise"))),D=v(()=>(e(r),i(()=>e(r).endpoint?.name))),Ne=v(()=>(le(fe),i(()=>fe("github"))));st(se,{get title(){return e(w)},get subtitle(){return`Endpoint: ${e(D)??""} • GitHub Enterprise`},get forgeIcon(){return e(Ne)},onEdit:()=>s(T,!0),onDelete:()=>s(M,!0)})}var ne=d(se,2);tt(ne,{get entity(){return e(r)},entityType:"enterprise"});var oe=d(ne,2);{let w=v(()=>(e(r),i(()=>e(r).id||""))),D=v(()=>(e(r),i(()=>e(r).name||"")));rt(oe,{get pools(){return e(c)},entityType:"enterprise",get entityId(){return e(w)},get entityName(){return e(D)},$$events:{addPool:$e}})}var ie=d(oe,2);nt(ie,{get instances(){return e(m)},entityType:"enterprise",onDeleteInstance:xe});var He=d(ie,2);{let w=v(()=>(e(r),i(()=>e(r)?.events)));at(He,{get events(){return e(w)},get eventsContainer(){return e(h)},set eventsContainer(D){s(h,D)},$$legacy:!0})}E(G,ae)};g(A,G=>{e(r)&&G(z)},!0)}E(_,b)};g(n,_=>{e(P)?_(o):_(q,!1)},!0)}E(t,a)};g(Ce,t=>{e(U)?t(ke):t(Ae,!1)})}f(L);var ee=d(L,2);{var Fe=t=>{et(t,{get entity(){return e(r)},entityType:"enterprise",$$events:{close:()=>s(T,!1),submit:a=>_e(a.detail)}})};g(ee,t=>{e(T)&&e(r)&&t(Fe)})}var te=d(ee,2);{var Be=t=>{ue(t,{title:"Delete Enterprise",message:"Are you sure you want to delete this enterprise? This action cannot be undone and will remove all associated pools and instances.",get itemName(){return e(r),i(()=>e(r).name)},$$events:{close:()=>s(M,!1),confirm:be}})};g(te,t=>{e(M)&&e(r)&&t(Be)})}var re=d(te,2);{var Se=t=>{ue(t,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(p),i(()=>e(p).name)},$$events:{close:()=>{s(I,!1),s(p,null)},confirm:Ee}})};g(re,t=>{e(I)&&e(p)&&t(Se)})}var Ue=d(re,2);{var Le=t=>{{let a=v(()=>(e(r),i(()=>e(r).id||"")));ot(t,{initialEntityType:"enterprise",get initialEntityId(){return e(a)},$$events:{close:()=>s(C,!1),submit:Ie}})}};g(Ue,t=>{e(C)&&e(r)&&t(Le)})}j(t=>{Ye(Te,"href",t),de(Me,(e(r),i(()=>e(r)?e(r).name:"Loading...")))},[()=>(le(B),i(()=>B("/enterprises")))]),E(me,O),Je(),ye()}export{Tt as component}; diff --git a/webapp/assets/_app/immutable/nodes/7.B3JTpaoM.js b/webapp/assets/_app/immutable/nodes/7.BcY4hrG1.js similarity index 98% rename from webapp/assets/_app/immutable/nodes/7.B3JTpaoM.js rename to webapp/assets/_app/immutable/nodes/7.BcY4hrG1.js index 4906e5bf..2cae3fae 100644 --- a/webapp/assets/_app/immutable/nodes/7.B3JTpaoM.js +++ b/webapp/assets/_app/immutable/nodes/7.BcY4hrG1.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as Ye}from"../chunks/TJn6xDN9.js";import{p as Ze,o as er,l as A,h as rr,f as m,j as ar,t as ee,g as e,i as tr,b as n,c as dr,m as i,$ as lr,d as a,u,q as $e,s as d,k as s,r as t,z as I,C as sr,a as or,D as ir,e as Ue,v as nr}from"../chunks/DniTuB_0.js";import{i as p,s as vr,a as mr}from"../chunks/DbNhg6mG.js";import{B as ze,d as k,c as Me,s as S,r as P}from"../chunks/BZ2rxtTc.js";import{b as q}from"../chunks/CCQwxxp9.js";import{p as cr}from"../chunks/D4Caz1gY.js";import{g as re}from"../chunks/HMJxCnAR.js";import{a as ur,b as pr}from"../chunks/1biM6o9g.js";import{t as br}from"../chunks/CBJzOE8U.js";import{e as gr}from"../chunks/BZiHL9L3.js";var fr=m('

Username is required

'),xr=m('

Please enter a valid email address

'),hr=m('

Full name is required

'),yr=m('

Password must be at least 8 characters long

'),kr=m('

Passwords do not match

'),_r=sr(' Advanced Configuration (Optional)',1),wr=m('

URL where runners can fetch metadata and setup information.

URL where runners send status updates and lifecycle events.

URL where GitHub/Gitea will send webhook events for job notifications.

'),$r=m("
  • Enter a username
  • "),Ur=m("
  • Enter a valid email address
  • "),zr=m("
  • Enter your full name
  • "),Mr=m("
  • Enter a password with at least 8 characters
  • "),Rr=m("
  • Confirm your password
  • "),Ar=m('

    Please complete all required fields

    '),Pr=m('

    '),qr=m('
    GARM

    Welcome to GARM

    Complete the first-run setup to get started

    First-Run Initialization

    GARM needs to be initialized before first use. This will create the admin user and generate a unique controller ID for this installation.

    This will create the admin user, generate a unique controller ID, and configure the required URLs for your GARM installation.
    Make sure to remember these credentials as they cannot be recovered.

    ');function Dr(Re,Ae){Ze(Ae,!1);const[Pe,qe]=vr(),C=()=>mr(ur,"$authStore",Pe),_=i(),w=i(),$=i(),U=i(),z=i(),j=i();let f=i("admin"),b=i("admin@garm.local"),c=i(""),x=i(""),h=i("Administrator"),G=i(!1),W=i(""),H=i(!1),E=i(""),V=i(""),B=i("");async function Ce(){if(e(j))try{s(G,!0),s(W,""),await pr.initialize(e(f).trim(),e(b).trim(),e(c),e(h).trim(),{callbackUrl:e(E).trim()||void 0,metadataUrl:e(V).trim()||void 0,webhookUrl:e(B).trim()||void 0}),br.success("GARM Initialized","GARM has been successfully initialized. Welcome!")}catch(r){s(W,gr(r))}finally{s(G,!1)}}er(()=>{if(C().isAuthenticated){re(k("/"));return}!C().needsInitialization&&!C().loading&&re(k("/login"))}),A(()=>(e(E),e(V),e(B)),()=>{if(typeof window<"u"){const r=window.location.origin;e(E)||s(E,`${r}/api/v1/callbacks`),e(V)||s(V,`${r}/api/v1/metadata`),e(B)||s(B,`${r}/webhooks`)}}),A(()=>e(b),()=>{s(_,e(b).trim()!==""&&e(b).includes("@"))}),A(()=>e(c),()=>{s(w,e(c).length>=8)}),A(()=>(e(x),e(c)),()=>{s($,e(x).length>0&&e(c)===e(x))}),A(()=>e(f),()=>{s(U,e(f).trim()!=="")}),A(()=>e(h),()=>{s(z,e(h).trim()!=="")}),A(()=>(e(U),e(_),e(z),e(w),e($)),()=>{s(j,e(U)&&e(_)&&e(z)&&e(w)&&e($))}),A(()=>(e(G),C(),k),()=>{e(G)||(C().isAuthenticated?re(k("/")):!C().needsInitialization&&!C().loading&&re(k("/login")))}),rr(),Ye();var ae=qr();ar(r=>{lr.title="Initialize GARM - First Run Setup"});var te=a(ae),me=a(te),ce=a(me),Ge=d(ce,2);t(me),I(4),t(te);var ue=d(te,2),pe=d(a(ue),2),de=a(pe),le=a(de),be=d(a(le),2),T=a(be);P(T);var Le=d(T,2);{var Ie=r=>{var l=fr();n(r,l)};p(Le,r=>{e(U),e(f),u(()=>!e(U)&&e(f).length>0)&&r(Ie)})}t(be),t(le);var se=d(le,2),ge=d(a(se),2),O=a(ge);P(O);var Ee=d(O,2);{var Ve=r=>{var l=xr();n(r,l)};p(Ee,r=>{e(_),e(b),u(()=>!e(_)&&e(b).length>0)&&r(Ve)})}t(ge),t(se);var oe=d(se,2),fe=d(a(oe),2),J=a(fe);P(J);var Be=d(J,2);{var Ne=r=>{var l=hr();n(r,l)};p(Be,r=>{e(z),e(h),u(()=>!e(z)&&e(h).length>0)&&r(Ne)})}t(fe),t(oe);var ie=d(oe,2),xe=d(a(ie),2),K=a(xe);P(K);var Se=d(K,2);{var je=r=>{var l=yr();n(r,l)};p(Se,r=>{e(w),e(c),u(()=>!e(w)&&e(c).length>0)&&r(je)})}t(xe),t(ie);var ne=d(ie,2),he=d(a(ne),2),Q=a(he);P(Q);var Fe=d(Q,2);{var De=r=>{var l=kr();n(r,l)};p(Fe,r=>{e($),e(x),u(()=>!e($)&&e(x).length>0)&&r(De)})}t(he),t(ne);var ve=d(ne,2),ye=a(ve);ze(ye,{type:"button",variant:"ghost",size:"sm",$$events:{click:()=>s(H,!e(H))},children:(r,l)=>{var g=_r(),v=or(g);I(),ee(()=>S(v,0,`w-4 h-4 mr-2 transition-transform ${e(H)?"rotate-90":""}`)),n(r,g)},$$slots:{default:!0}});var We=d(ye,2);{var He=r=>{var l=wr(),g=a(l),v=a(g),M=d(a(v),2),L=a(M);P(L),I(2),t(M),t(v);var N=d(v,2),X=d(a(N),2),F=a(X);P(F),I(2),t(X),t(N);var Y=d(N,2),D=d(a(Y),2),Z=a(D);P(Z),I(2),t(D),t(Y),t(g),t(l),q(L,()=>e(V),R=>s(V,R)),q(F,()=>e(E),R=>s(E,R)),q(Z,()=>e(B),R=>s(B,R)),n(r,l)};p(We,r=>{e(H)&&r(He)})}t(ve);var ke=d(ve,2);{var Te=r=>{var l=Ar(),g=a(l),v=d(a(g),2),M=d(a(v),2),L=a(M),N=a(L);{var X=o=>{var y=$r();n(o,y)};p(N,o=>{e(U)||o(X)})}var F=d(N,2);{var Y=o=>{var y=Ur();n(o,y)};p(F,o=>{e(_)||o(Y)})}var D=d(F,2);{var Z=o=>{var y=zr();n(o,y)};p(D,o=>{e(z)||o(Z)})}var R=d(D,2);{var Ke=o=>{var y=Mr();n(o,y)};p(R,o=>{e(w)||o(Ke)})}var Qe=d(R,2);{var Xe=o=>{var y=Rr();n(o,y)};p(Qe,o=>{e($)||o(Xe)})}t(L),t(M),t(v),t(g),t(l),n(r,l)};p(ke,r=>{e(j),e(f),e(b),e(h),e(c),e(x),u(()=>!e(j)&&(e(f).length>0||e(b).length>0||e(h).length>0||e(c).length>0||e(x).length>0))&&r(Te)})}var _e=d(ke,2);{var Oe=r=>{var l=Pr(),g=a(l),v=d(a(g),2),M=a(v),L=a(M,!0);t(M),t(v),t(g),t(l),ee(()=>Ue(L,e(W))),n(r,l)};p(_e,r=>{e(W)&&r(Oe)})}var we=d(_e,2),Je=a(we);{let r=nr(()=>!e(j)||e(G));ze(Je,{type:"submit",variant:"primary",size:"lg",fullWidth:!0,get loading(){return e(G)},get disabled(){return e(r)},children:(l,g)=>{I();var v=ir();ee(()=>Ue(v,e(G)?"Initializing...":"Initialize GARM")),n(l,v)},$$slots:{default:!0}})}t(we),t(de),I(2),t(pe),t(ue),t(ae),ee((r,l)=>{Me(ce,"src",r),Me(Ge,"src",l),S(T,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(U),e(f),u(()=>!e(U)&&e(f).length>0?"border-red-300 dark:border-red-600":"")??""}`),S(O,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(_),e(b),u(()=>!e(_)&&e(b).length>0?"border-red-300 dark:border-red-600":"")??""}`),S(J,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(z),e(h),u(()=>!e(z)&&e(h).length>0?"border-red-300 dark:border-red-600":"")??""}`),S(K,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(w),e(c),u(()=>!e(w)&&e(c).length>0?"border-red-300 dark:border-red-600":"")??""}`),S(Q,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e($),e(x),u(()=>!e($)&&e(x).length>0?"border-red-300 dark:border-red-600":"")??""}`)},[()=>($e(k),u(()=>k("/assets/garm-light.svg"))),()=>($e(k),u(()=>k("/assets/garm-dark.svg")))]),q(T,()=>e(f),r=>s(f,r)),q(O,()=>e(b),r=>s(b,r)),q(J,()=>e(h),r=>s(h,r)),q(K,()=>e(c),r=>s(c,r)),q(Q,()=>e(x),r=>s(x,r)),tr("submit",de,cr(Ce)),n(Re,ae),dr(),qe()}export{Dr as component}; +import"../chunks/DsnmJJEf.js";import{i as Ye}from"../chunks/TJn6xDN9.js";import{p as Ze,o as er,l as A,h as rr,f as m,j as ar,t as ee,g as e,i as tr,b as n,c as dr,m as i,$ as lr,d as a,u,q as $e,s as d,k as s,r as t,z as I,C as sr,a as or,D as ir,e as Ue,v as nr}from"../chunks/DniTuB_0.js";import{i as p,s as vr,a as mr}from"../chunks/DbNhg6mG.js";import{B as ze,d as k,c as Me,s as S,r as P}from"../chunks/DSfKzFV1.js";import{b as q}from"../chunks/CCQwxxp9.js";import{p as cr}from"../chunks/D4Caz1gY.js";import{g as re}from"../chunks/kW9-6GPQ.js";import{a as ur,b as pr}from"../chunks/Dt70yZzL.js";import{t as br}from"../chunks/CBJzOE8U.js";import{e as gr}from"../chunks/BZiHL9L3.js";var fr=m('

    Username is required

    '),xr=m('

    Please enter a valid email address

    '),hr=m('

    Full name is required

    '),yr=m('

    Password must be at least 8 characters long

    '),kr=m('

    Passwords do not match

    '),_r=sr(' Advanced Configuration (Optional)',1),wr=m('

    URL where runners can fetch metadata and setup information.

    URL where runners send status updates and lifecycle events.

    URL where GitHub/Gitea will send webhook events for job notifications.

    '),$r=m("
  • Enter a username
  • "),Ur=m("
  • Enter a valid email address
  • "),zr=m("
  • Enter your full name
  • "),Mr=m("
  • Enter a password with at least 8 characters
  • "),Rr=m("
  • Confirm your password
  • "),Ar=m('

    Please complete all required fields

    '),Pr=m('

    '),qr=m('
    GARM

    Welcome to GARM

    Complete the first-run setup to get started

    First-Run Initialization

    GARM needs to be initialized before first use. This will create the admin user and generate a unique controller ID for this installation.

    This will create the admin user, generate a unique controller ID, and configure the required URLs for your GARM installation.
    Make sure to remember these credentials as they cannot be recovered.

    ');function Dr(Re,Ae){Ze(Ae,!1);const[Pe,qe]=vr(),C=()=>mr(ur,"$authStore",Pe),_=i(),w=i(),$=i(),U=i(),z=i(),j=i();let f=i("admin"),b=i("admin@garm.local"),c=i(""),x=i(""),h=i("Administrator"),G=i(!1),W=i(""),H=i(!1),E=i(""),V=i(""),B=i("");async function Ce(){if(e(j))try{s(G,!0),s(W,""),await pr.initialize(e(f).trim(),e(b).trim(),e(c),e(h).trim(),{callbackUrl:e(E).trim()||void 0,metadataUrl:e(V).trim()||void 0,webhookUrl:e(B).trim()||void 0}),br.success("GARM Initialized","GARM has been successfully initialized. Welcome!")}catch(r){s(W,gr(r))}finally{s(G,!1)}}er(()=>{if(C().isAuthenticated){re(k("/"));return}!C().needsInitialization&&!C().loading&&re(k("/login"))}),A(()=>(e(E),e(V),e(B)),()=>{if(typeof window<"u"){const r=window.location.origin;e(E)||s(E,`${r}/api/v1/callbacks`),e(V)||s(V,`${r}/api/v1/metadata`),e(B)||s(B,`${r}/webhooks`)}}),A(()=>e(b),()=>{s(_,e(b).trim()!==""&&e(b).includes("@"))}),A(()=>e(c),()=>{s(w,e(c).length>=8)}),A(()=>(e(x),e(c)),()=>{s($,e(x).length>0&&e(c)===e(x))}),A(()=>e(f),()=>{s(U,e(f).trim()!=="")}),A(()=>e(h),()=>{s(z,e(h).trim()!=="")}),A(()=>(e(U),e(_),e(z),e(w),e($)),()=>{s(j,e(U)&&e(_)&&e(z)&&e(w)&&e($))}),A(()=>(e(G),C(),k),()=>{e(G)||(C().isAuthenticated?re(k("/")):!C().needsInitialization&&!C().loading&&re(k("/login")))}),rr(),Ye();var ae=qr();ar(r=>{lr.title="Initialize GARM - First Run Setup"});var te=a(ae),me=a(te),ce=a(me),Ge=d(ce,2);t(me),I(4),t(te);var ue=d(te,2),pe=d(a(ue),2),de=a(pe),le=a(de),be=d(a(le),2),T=a(be);P(T);var Le=d(T,2);{var Ie=r=>{var l=fr();n(r,l)};p(Le,r=>{e(U),e(f),u(()=>!e(U)&&e(f).length>0)&&r(Ie)})}t(be),t(le);var se=d(le,2),ge=d(a(se),2),O=a(ge);P(O);var Ee=d(O,2);{var Ve=r=>{var l=xr();n(r,l)};p(Ee,r=>{e(_),e(b),u(()=>!e(_)&&e(b).length>0)&&r(Ve)})}t(ge),t(se);var oe=d(se,2),fe=d(a(oe),2),J=a(fe);P(J);var Be=d(J,2);{var Ne=r=>{var l=hr();n(r,l)};p(Be,r=>{e(z),e(h),u(()=>!e(z)&&e(h).length>0)&&r(Ne)})}t(fe),t(oe);var ie=d(oe,2),xe=d(a(ie),2),K=a(xe);P(K);var Se=d(K,2);{var je=r=>{var l=yr();n(r,l)};p(Se,r=>{e(w),e(c),u(()=>!e(w)&&e(c).length>0)&&r(je)})}t(xe),t(ie);var ne=d(ie,2),he=d(a(ne),2),Q=a(he);P(Q);var Fe=d(Q,2);{var De=r=>{var l=kr();n(r,l)};p(Fe,r=>{e($),e(x),u(()=>!e($)&&e(x).length>0)&&r(De)})}t(he),t(ne);var ve=d(ne,2),ye=a(ve);ze(ye,{type:"button",variant:"ghost",size:"sm",$$events:{click:()=>s(H,!e(H))},children:(r,l)=>{var g=_r(),v=or(g);I(),ee(()=>S(v,0,`w-4 h-4 mr-2 transition-transform ${e(H)?"rotate-90":""}`)),n(r,g)},$$slots:{default:!0}});var We=d(ye,2);{var He=r=>{var l=wr(),g=a(l),v=a(g),M=d(a(v),2),L=a(M);P(L),I(2),t(M),t(v);var N=d(v,2),X=d(a(N),2),F=a(X);P(F),I(2),t(X),t(N);var Y=d(N,2),D=d(a(Y),2),Z=a(D);P(Z),I(2),t(D),t(Y),t(g),t(l),q(L,()=>e(V),R=>s(V,R)),q(F,()=>e(E),R=>s(E,R)),q(Z,()=>e(B),R=>s(B,R)),n(r,l)};p(We,r=>{e(H)&&r(He)})}t(ve);var ke=d(ve,2);{var Te=r=>{var l=Ar(),g=a(l),v=d(a(g),2),M=d(a(v),2),L=a(M),N=a(L);{var X=o=>{var y=$r();n(o,y)};p(N,o=>{e(U)||o(X)})}var F=d(N,2);{var Y=o=>{var y=Ur();n(o,y)};p(F,o=>{e(_)||o(Y)})}var D=d(F,2);{var Z=o=>{var y=zr();n(o,y)};p(D,o=>{e(z)||o(Z)})}var R=d(D,2);{var Ke=o=>{var y=Mr();n(o,y)};p(R,o=>{e(w)||o(Ke)})}var Qe=d(R,2);{var Xe=o=>{var y=Rr();n(o,y)};p(Qe,o=>{e($)||o(Xe)})}t(L),t(M),t(v),t(g),t(l),n(r,l)};p(ke,r=>{e(j),e(f),e(b),e(h),e(c),e(x),u(()=>!e(j)&&(e(f).length>0||e(b).length>0||e(h).length>0||e(c).length>0||e(x).length>0))&&r(Te)})}var _e=d(ke,2);{var Oe=r=>{var l=Pr(),g=a(l),v=d(a(g),2),M=a(v),L=a(M,!0);t(M),t(v),t(g),t(l),ee(()=>Ue(L,e(W))),n(r,l)};p(_e,r=>{e(W)&&r(Oe)})}var we=d(_e,2),Je=a(we);{let r=nr(()=>!e(j)||e(G));ze(Je,{type:"submit",variant:"primary",size:"lg",fullWidth:!0,get loading(){return e(G)},get disabled(){return e(r)},children:(l,g)=>{I();var v=ir();ee(()=>Ue(v,e(G)?"Initializing...":"Initialize GARM")),n(l,v)},$$slots:{default:!0}})}t(we),t(de),I(2),t(pe),t(ue),t(ae),ee((r,l)=>{Me(ce,"src",r),Me(Ge,"src",l),S(T,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(U),e(f),u(()=>!e(U)&&e(f).length>0?"border-red-300 dark:border-red-600":"")??""}`),S(O,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(_),e(b),u(()=>!e(_)&&e(b).length>0?"border-red-300 dark:border-red-600":"")??""}`),S(J,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(z),e(h),u(()=>!e(z)&&e(h).length>0?"border-red-300 dark:border-red-600":"")??""}`),S(K,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(w),e(c),u(()=>!e(w)&&e(c).length>0?"border-red-300 dark:border-red-600":"")??""}`),S(Q,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e($),e(x),u(()=>!e($)&&e(x).length>0?"border-red-300 dark:border-red-600":"")??""}`)},[()=>($e(k),u(()=>k("/assets/garm-light.svg"))),()=>($e(k),u(()=>k("/assets/garm-dark.svg")))]),q(T,()=>e(f),r=>s(f,r)),q(O,()=>e(b),r=>s(b,r)),q(J,()=>e(h),r=>s(h,r)),q(K,()=>e(c),r=>s(c,r)),q(Q,()=>e(x),r=>s(x,r)),tr("submit",de,cr(Ce)),n(Re,ae),dr(),qe()}export{Dr as component}; diff --git a/webapp/assets/_app/immutable/nodes/8.BKBJGVMe.js b/webapp/assets/_app/immutable/nodes/8.DgZlDX0m.js similarity index 93% rename from webapp/assets/_app/immutable/nodes/8.BKBJGVMe.js rename to webapp/assets/_app/immutable/nodes/8.DgZlDX0m.js index 16dc61be..bb8de649 100644 --- a/webapp/assets/_app/immutable/nodes/8.BKBJGVMe.js +++ b/webapp/assets/_app/immutable/nodes/8.DgZlDX0m.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as z}from"../chunks/TJn6xDN9.js";import{p as J,f as C,b as x,c as K,d as y,q as f,u as g,r as b,t as M,e as R,A as ce,a as O,o as de,B as ue,l as w,h as me,j as pe,g as e,m as u,$ as fe,v as ge,s as T,k as s}from"../chunks/DniTuB_0.js";import{p as ve,i as A}from"../chunks/DbNhg6mG.js";import{d as D,c as $,g as H}from"../chunks/BZ2rxtTc.js";import{D as he}from"../chunks/DGVAzkoE.js";import{P as _e}from"../chunks/CuYqFPEA.js";import{w as ye}from"../chunks/DmHFwzWx.js";import{t as be}from"../chunks/CBJzOE8U.js";import{D as xe,G as Ce,A as Pe}from"../chunks/CKaB5fL4.js";import{e as ke}from"../chunks/BZiHL9L3.js";import{E as Ie}from"../chunks/Dh8uHEF5.js";import"../chunks/CGAsTaG2.js";import{S as W}from"../chunks/C1GM4Goa.js";var Se=C(' '),we=C(' '),Te=C('-'),De=C('
    ');function $e(E,k){J(k,!1);let a=ve(k,"item",8);z();var m=De(),I=y(m);{var i=r=>{var p=Se(),h=y(p);b(p),M(n=>{$(p,"href",n),$(p,"title",`Pool: ${f(a()),g(()=>a().pool_id)??""}`),R(h,`Pool: ${f(a()),g(()=>a().pool_id)??""}`)},[()=>(f(D),f(a()),g(()=>D(`/pools/${a().pool_id}`)))]),x(r,p)},P=r=>{var p=ce(),h=O(p);{var n=l=>{var o=we(),c=y(o);b(o),M(S=>{$(o,"href",S),$(o,"title",`Scale Set: ${f(a()),g(()=>a().scale_set_id)??""}`),R(c,`Scale Set: ${f(a()),g(()=>a().scale_set_id)??""}`)},[()=>(f(D),f(a()),g(()=>D(`/scalesets/${a().scale_set_id}`)))]),x(l,o)},v=l=>{var o=Te();x(l,o)};A(h,l=>{f(a()),g(()=>a()?.scale_set_id)?l(n):l(v,!1)},!0)}x(r,p)};A(I,r=>{f(a()),g(()=>a()?.pool_id)?r(i):r(P,!1)})}b(m),x(E,m),K()}var Ae=C('

    Error

    '),Ee=C('
    ',1);function Oe(E,k){J(k,!1);const a=u(),m=u(),I=u();let i=u([]),P=u(!0),r=u(""),p="",h=null,n=u(1),v=u(25),l=u(""),o=u(!1),c=u(null);async function S(){try{s(P,!0),s(r,""),s(i,await H.listInstances())}catch(t){s(r,t instanceof Error?t.message:"Failed to load instances")}finally{s(P,!1)}}function F(t){s(c,t),s(o,!0)}async function Q(){if(e(c))try{await H.deleteInstance(e(c).name),be.success("Instance Deleted",`Instance ${e(c).name} has been deleted successfully.`)}catch(t){s(r,ke(t))}finally{s(o,!1),s(c,null)}}const U=[{key:"name",title:"Name",cellComponent:Ie,cellProps:{entityType:"instance",showId:!0}},{key:"pool_scale_set",title:"Pool/Scale Set",flexible:!0,cellComponent:$e},{key:"created",title:"Created",cellComponent:Ce,cellProps:{field:"created_at",type:"date"}},{key:"status",title:"Status",cellComponent:W,cellProps:{statusType:"instance",statusField:"status"}},{key:"runner_status",title:"Runner Status",cellComponent:W,cellProps:{statusType:"instance",statusField:"runner_status"}},{key:"actions",title:"Actions",align:"right",cellComponent:Pe,cellProps:{actions:[{type:"delete",title:"Delete",ariaLabel:"Delete instance",action:"delete"}]}}],V={entityType:"instance",primaryText:{field:"name",isClickable:!0,href:"/instances/{name}"},secondaryText:{field:"provider_id"},badges:[{type:"status",field:"status"},{type:"status",field:"runner_status"}],actions:[{type:"delete",handler:t=>F(t)}]};function X(t){s(l,t.detail.term),s(n,1)}function Y(t){s(n,t.detail.page)}function Z(t){s(v,t.detail.perPage),s(n,1)}async function ee(){try{await S()}catch(t){console.error("Retry failed:",t)}}function te(t){}function ae(t){F(t.detail.item)}function se(t){if(t.operation==="create"){const d=t.payload;s(i,[...e(i),d])}else if(t.operation==="update"){const d=t.payload;s(i,e(i).map(_=>_.name===d.name?d:_))}else if(t.operation==="delete"){const d=t.payload.name||t.payload;s(i,e(i).filter(_=>_.name!==d))}}de(()=>{S(),h=ye.subscribeToEntity("instance",["create","update","delete"],se)}),ue(()=>{h&&(h(),h=null)}),w(()=>(e(i),e(l)),()=>{s(a,e(i).filter(t=>(e(l)===""||t.name?.toLowerCase().includes(e(l).toLowerCase())||t.provider_id?.toLowerCase().includes(e(l).toLowerCase()))&&p===""))}),w(()=>(e(a),e(v)),()=>{s(m,Math.ceil(e(a).length/e(v)))}),w(()=>(e(n),e(m)),()=>{e(n)>e(m)&&e(m)>0&&s(n,e(m))}),w(()=>(e(a),e(n),e(v)),()=>{s(I,e(a).slice((e(n)-1)*e(v),e(n)*e(v)))}),me(),z();var N=Ee();pe(t=>{fe.title="Instances - GARM"});var L=O(N),G=y(L);_e(G,{title:"Runner Instances",description:"Monitor your running instances",showAction:!1});var q=T(G,2);{var re=t=>{var d=Ae(),_=y(d),j=y(_),B=T(y(j),2),ie=y(B,!0);b(B),b(j),b(_),b(d),M(()=>R(ie,e(r))),x(t,d)};A(q,t=>{e(r)&&t(re)})}var ne=T(q,2);{let t=ge(()=>!!e(r));xe(ne,{get columns(){return U},get data(){return e(I)},get loading(){return e(P)},get error(){return e(r)},get searchTerm(){return e(l)},searchPlaceholder:"Search instances...",get currentPage(){return e(n)},get perPage(){return e(v)},get totalPages(){return e(m)},get totalItems(){return e(a),g(()=>e(a).length)},itemName:"instances",emptyIconType:"cog",get showRetry(){return e(t)},get mobileCardConfig(){return V},$$events:{search:X,pageChange:Y,perPageChange:Z,retry:ee,edit:te,delete:ae}})}b(L);var le=T(L,2);{var oe=t=>{he(t,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(c),g(()=>e(c).name)},$$events:{close:()=>{s(o,!1),s(c,null)},confirm:Q}})};A(le,t=>{e(o)&&e(c)&&t(oe)})}x(E,N),K()}export{Oe as component}; +import"../chunks/DsnmJJEf.js";import{i as z}from"../chunks/TJn6xDN9.js";import{p as J,f as C,b as x,c as K,d as y,q as f,u as g,r as b,t as M,e as R,A as ce,a as O,o as de,B as ue,l as w,h as me,j as pe,g as e,m as u,$ as fe,v as ge,s as T,k as s}from"../chunks/DniTuB_0.js";import{p as ve,i as A}from"../chunks/DbNhg6mG.js";import{d as D,c as $,g as H}from"../chunks/DSfKzFV1.js";import{D as he}from"../chunks/z19xmJI9.js";import{P as _e}from"../chunks/RtJp4Ifn.js";import{w as ye}from"../chunks/DmHFwzWx.js";import{t as be}from"../chunks/CBJzOE8U.js";import{D as xe,G as Ce,A as Pe}from"../chunks/BlJ06z1t.js";import{e as ke}from"../chunks/BZiHL9L3.js";import{E as Ie}from"../chunks/30NlHgQ_.js";import"../chunks/CRDKDqj5.js";import{S as W}from"../chunks/BsX_CrDw.js";var Se=C(' '),we=C(' '),Te=C('-'),De=C('
    ');function $e(E,k){J(k,!1);let a=ve(k,"item",8);z();var m=De(),I=y(m);{var i=r=>{var p=Se(),h=y(p);b(p),M(n=>{$(p,"href",n),$(p,"title",`Pool: ${f(a()),g(()=>a().pool_id)??""}`),R(h,`Pool: ${f(a()),g(()=>a().pool_id)??""}`)},[()=>(f(D),f(a()),g(()=>D(`/pools/${a().pool_id}`)))]),x(r,p)},P=r=>{var p=ce(),h=O(p);{var n=l=>{var o=we(),c=y(o);b(o),M(S=>{$(o,"href",S),$(o,"title",`Scale Set: ${f(a()),g(()=>a().scale_set_id)??""}`),R(c,`Scale Set: ${f(a()),g(()=>a().scale_set_id)??""}`)},[()=>(f(D),f(a()),g(()=>D(`/scalesets/${a().scale_set_id}`)))]),x(l,o)},v=l=>{var o=Te();x(l,o)};A(h,l=>{f(a()),g(()=>a()?.scale_set_id)?l(n):l(v,!1)},!0)}x(r,p)};A(I,r=>{f(a()),g(()=>a()?.pool_id)?r(i):r(P,!1)})}b(m),x(E,m),K()}var Ae=C('

    Error

    '),Ee=C('
    ',1);function Oe(E,k){J(k,!1);const a=u(),m=u(),I=u();let i=u([]),P=u(!0),r=u(""),p="",h=null,n=u(1),v=u(25),l=u(""),o=u(!1),c=u(null);async function S(){try{s(P,!0),s(r,""),s(i,await H.listInstances())}catch(t){s(r,t instanceof Error?t.message:"Failed to load instances")}finally{s(P,!1)}}function F(t){s(c,t),s(o,!0)}async function Q(){if(e(c))try{await H.deleteInstance(e(c).name),be.success("Instance Deleted",`Instance ${e(c).name} has been deleted successfully.`)}catch(t){s(r,ke(t))}finally{s(o,!1),s(c,null)}}const U=[{key:"name",title:"Name",cellComponent:Ie,cellProps:{entityType:"instance",showId:!0}},{key:"pool_scale_set",title:"Pool/Scale Set",flexible:!0,cellComponent:$e},{key:"created",title:"Created",cellComponent:Ce,cellProps:{field:"created_at",type:"date"}},{key:"status",title:"Status",cellComponent:W,cellProps:{statusType:"instance",statusField:"status"}},{key:"runner_status",title:"Runner Status",cellComponent:W,cellProps:{statusType:"instance",statusField:"runner_status"}},{key:"actions",title:"Actions",align:"right",cellComponent:Pe,cellProps:{actions:[{type:"delete",title:"Delete",ariaLabel:"Delete instance",action:"delete"}]}}],V={entityType:"instance",primaryText:{field:"name",isClickable:!0,href:"/instances/{name}"},secondaryText:{field:"provider_id"},badges:[{type:"status",field:"status"},{type:"status",field:"runner_status"}],actions:[{type:"delete",handler:t=>F(t)}]};function X(t){s(l,t.detail.term),s(n,1)}function Y(t){s(n,t.detail.page)}function Z(t){s(v,t.detail.perPage),s(n,1)}async function ee(){try{await S()}catch(t){console.error("Retry failed:",t)}}function te(t){}function ae(t){F(t.detail.item)}function se(t){if(t.operation==="create"){const d=t.payload;s(i,[...e(i),d])}else if(t.operation==="update"){const d=t.payload;s(i,e(i).map(_=>_.name===d.name?d:_))}else if(t.operation==="delete"){const d=t.payload.name||t.payload;s(i,e(i).filter(_=>_.name!==d))}}de(()=>{S(),h=ye.subscribeToEntity("instance",["create","update","delete"],se)}),ue(()=>{h&&(h(),h=null)}),w(()=>(e(i),e(l)),()=>{s(a,e(i).filter(t=>(e(l)===""||t.name?.toLowerCase().includes(e(l).toLowerCase())||t.provider_id?.toLowerCase().includes(e(l).toLowerCase()))&&p===""))}),w(()=>(e(a),e(v)),()=>{s(m,Math.ceil(e(a).length/e(v)))}),w(()=>(e(n),e(m)),()=>{e(n)>e(m)&&e(m)>0&&s(n,e(m))}),w(()=>(e(a),e(n),e(v)),()=>{s(I,e(a).slice((e(n)-1)*e(v),e(n)*e(v)))}),me(),z();var N=Ee();pe(t=>{fe.title="Instances - GARM"});var L=O(N),G=y(L);_e(G,{title:"Runner Instances",description:"Monitor your running instances",showAction:!1});var q=T(G,2);{var re=t=>{var d=Ae(),_=y(d),j=y(_),B=T(y(j),2),ie=y(B,!0);b(B),b(j),b(_),b(d),M(()=>R(ie,e(r))),x(t,d)};A(q,t=>{e(r)&&t(re)})}var ne=T(q,2);{let t=ge(()=>!!e(r));xe(ne,{get columns(){return U},get data(){return e(I)},get loading(){return e(P)},get error(){return e(r)},get searchTerm(){return e(l)},searchPlaceholder:"Search instances...",get currentPage(){return e(n)},get perPage(){return e(v)},get totalPages(){return e(m)},get totalItems(){return e(a),g(()=>e(a).length)},itemName:"instances",emptyIconType:"cog",get showRetry(){return e(t)},get mobileCardConfig(){return V},$$events:{search:X,pageChange:Y,perPageChange:Z,retry:ee,edit:te,delete:ae}})}b(L);var le=T(L,2);{var oe=t=>{he(t,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(c),g(()=>e(c).name)},$$events:{close:()=>{s(o,!1),s(c,null)},confirm:Q}})};A(le,t=>{e(o)&&e(c)&&t(oe)})}x(E,N),K()}export{Oe as component}; diff --git a/webapp/assets/_app/immutable/nodes/9.CWuD2pQA.js b/webapp/assets/_app/immutable/nodes/9.CWuD2pQA.js new file mode 100644 index 00000000..b2ed1c27 --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/9.CWuD2pQA.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as $e}from"../chunks/TJn6xDN9.js";import{p as Ue,o as Le,B as Oe,l as Pe,h as Ve,f as u,j as ze,a as P,t as f,b as v,c as Re,u as r,q as p,e as m,g as t,m as A,d as s,s as d,k as h,$ as qe,r as a,A as Tt,i as Fe,v as $t,D as Ut}from"../chunks/DniTuB_0.js";import{i as g,s as Ge,a as He}from"../chunks/DbNhg6mG.js";import{e as Lt,i as Ot}from"../chunks/Ck5PkeSc.js";import{d as j,c as nt,g as Pt,s as Vt}from"../chunks/DSfKzFV1.js";import{b as We}from"../chunks/C-xTH-sp.js";import{p as Je}from"../chunks/Dt7jKcR8.js";import{g as zt}from"../chunks/kW9-6GPQ.js";import{D as Ke}from"../chunks/z19xmJI9.js";import{w as Qe}from"../chunks/DmHFwzWx.js";import{g as V,f as z}from"../chunks/ow_oMtSd.js";import{s as Rt,b as B,d as qt}from"../chunks/BC4TpgBU.js";import{e as Xe}from"../chunks/BZiHL9L3.js";import{B as Ft}from"../chunks/Dyp1NLoF.js";var Ye=u('

    Error

    '),Ze=u('

    Loading instance details...

    '),ta=u(' '),ea=u(' '),aa=u('-'),sa=u('
    Updated At:
    '),ra=u('
    '),da=u('
    Network Addresses:
    '),ia=u('
    Network Addresses:
    No addresses available
    '),na=u('
    OS Type:
    '),la=u('
    OS Name:
    '),oa=u('
    OS Version:
    '),va=u('
    OS Architecture:
    '),xa=u('

    '),ca=u('

    Status Messages

    '),ma=u('

    Status Messages

    No status messages available

    '),ua=u('

    Instance Information

    ID:
    Name:
    Provider ID:
    Provider:
    Pool/Scale Set:
    Agent ID:
    Created At:

    Status & Network

    Instance Status:
    Runner Status:
    ',1),ga=u('
    Instance not found.
    '),_a=u(' ',1);function Ca(Gt,Ht){Ue(Ht,!1);const[Wt,Jt]=Ge(),lt=()=>He(Je,"$page",Wt),R=A();let e=A(null),q=A(!0),N=A(""),E=A(!1),T=null,$=A();async function Kt(){if(t(R))try{h(q,!0),h(N,""),h(e,await Pt.getInstance(t(R)))}catch(l){h(N,l instanceof Error?l.message:"Failed to load instance")}finally{h(q,!1)}}async function Qt(){if(t(e)){try{await Pt.deleteInstance(t(e).name),zt(j("/instances"))}catch(l){h(N,Xe(l))}h(E,!1)}}function Xt(l){if(t(e))if(l.operation==="update"&&l.payload.id===t(e).id){const b=t(e).status_messages?.length||0,D={...t(e),...l.payload},M=D.status_messages?.length||0;h(e,D),M>b&&setTimeout(()=>{Rt(t($))},100)}else l.operation==="delete"&&(l.payload.id||l.payload)===t(e).id&&zt(j("/instances"))}Le(()=>{Kt().then(()=>{t(e)?.status_messages?.length&&setTimeout(()=>{Rt(t($))},100)}),T=Qe.subscribeToEntity("instance",["update","delete"],Xt)}),Oe(()=>{T&&(T(),T=null)}),Pe(()=>lt(),()=>{h(R,decodeURIComponent(lt().params.id||""))}),Ve(),$e();var ot=_a();ze(l=>{f(()=>qe.title=`${t(e),r(()=>t(e)?`${t(e).name} - Instance Details`:"Instance Details")??""} - GARM`)});var F=P(ot),G=s(F),vt=s(G),H=s(vt),Yt=s(H);a(H);var xt=d(H,2),ct=s(xt),mt=d(s(ct),2),Zt=s(mt,!0);a(mt),a(ct),a(xt),a(vt),a(G);var ut=d(G,2);{var te=l=>{var b=Ye(),D=s(b),M=s(D),U=d(s(M),2),I=s(U,!0);a(U),a(M),a(D),a(b),f(()=>m(I,t(N))),v(l,b)};g(ut,l=>{t(N)&&l(te)})}var ee=d(ut,2);{var ae=l=>{var b=Ze();v(l,b)},se=l=>{var b=Tt(),D=P(b);{var M=I=>{var L=ua(),W=P(L),J=s(W),K=s(J),gt=d(s(K),2),ie=s(gt);a(gt),a(K);var _t=d(K,2),Q=s(_t),ft=d(s(Q),2),ne=s(ft,!0);a(ft),a(Q);var X=d(Q,2),yt=d(s(X),2),le=s(yt,!0);a(yt),a(X);var Y=d(X,2),pt=d(s(Y),2),oe=s(pt,!0);a(pt),a(Y);var Z=d(Y,2),ht=d(s(Z),2),ve=s(ht,!0);a(ht),a(Z);var tt=d(Z,2),bt=d(s(tt),2),xe=s(bt);{var ce=i=>{var n=ta(),o=s(n,!0);a(n),f(x=>{nt(n,"href",x),m(o,(t(e),r(()=>t(e).pool_id)))},[()=>(p(j),t(e),r(()=>j(`/pools/${t(e).pool_id}`)))]),v(i,n)},me=i=>{var n=Tt(),o=P(n);{var x=_=>{var y=ea(),S=s(y,!0);a(y),f(C=>{nt(y,"href",C),m(S,(t(e),r(()=>t(e).scale_set_id)))},[()=>(p(j),t(e),r(()=>j(`/scalesets/${t(e).scale_set_id}`)))]),v(_,y)},c=_=>{var y=aa();v(_,y)};g(o,_=>{t(e),r(()=>t(e).scale_set_id)?_(x):_(c,!1)},!0)}v(i,n)};g(xe,i=>{t(e),r(()=>t(e).pool_id)?i(ce):i(me,!1)})}a(bt),a(tt);var et=d(tt,2),kt=d(s(et),2),ue=s(kt,!0);a(kt),a(et);var at=d(et,2),wt=d(s(at),2),ge=s(wt,!0);a(wt),a(at);var _e=d(at,2);{var fe=i=>{var n=sa(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(c=>m(x,c),[()=>(p(B),t(e),r(()=>B(t(e).updated_at)))]),v(i,n)};g(_e,i=>{t(e),r(()=>t(e).updated_at&&t(e).updated_at!==t(e).created_at)&&i(fe)})}a(_t),a(J);var It=d(J,2),jt=d(s(It),2),st=s(jt),Dt=d(s(st),2),rt=s(Dt),ye=s(rt,!0);a(rt),a(Dt),a(st);var dt=d(st,2),St=d(s(dt),2),it=s(St),pe=s(it,!0);a(it),a(St),a(dt);var Mt=d(dt,2);{var he=i=>{var n=da(),o=d(s(n),2);Lt(o,5,()=>(t(e),r(()=>t(e).addresses)),Ot,(x,c)=>{var _=ra(),y=s(_),S=s(y,!0);a(y);var C=d(y,2);{let O=$t(()=>(t(c),r(()=>t(c).type||"Unknown")));Ft(C,{variant:"info",get text(){return t(O)}})}a(_),f(()=>m(S,(t(c),r(()=>t(c).address)))),v(x,_)}),a(o),a(n),v(i,n)},be=i=>{var n=ia();v(i,n)};g(Mt,i=>{t(e),r(()=>t(e).addresses&&t(e).addresses.length>0)?i(he):i(be,!1)})}var At=d(Mt,2);{var ke=i=>{var n=na(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(()=>m(x,(t(e),r(()=>t(e).os_type)))),v(i,n)};g(At,i=>{t(e),r(()=>t(e).os_type)&&i(ke)})}var Bt=d(At,2);{var we=i=>{var n=la(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(()=>m(x,(t(e),r(()=>t(e).os_name)))),v(i,n)};g(Bt,i=>{t(e),r(()=>t(e).os_name)&&i(we)})}var Nt=d(Bt,2);{var Ie=i=>{var n=oa(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(()=>m(x,(t(e),r(()=>t(e).os_version)))),v(i,n)};g(Nt,i=>{t(e),r(()=>t(e).os_version)&&i(Ie)})}var je=d(Nt,2);{var De=i=>{var n=va(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(()=>m(x,(t(e),r(()=>t(e).os_arch)))),v(i,n)};g(je,i=>{t(e),r(()=>t(e).os_arch)&&i(De)})}a(jt),a(It),a(W);var Se=d(W,2);{var Me=i=>{var n=ca(),o=d(s(n),2);Lt(o,5,()=>(t(e),r(()=>t(e).status_messages)),Ot,(x,c)=>{var _=xa(),y=s(_),S=s(y),C=s(S,!0);a(S);var O=d(S,2),Ct=s(O);{var Be=k=>{const w=$t(()=>(p(qt),t(c),r(()=>qt(t(c).event_level))));Ft(k,{get variant(){return p(t(w)),r(()=>t(w).variant)},get text(){return p(t(w)),r(()=>t(w).text)}})};g(Ct,k=>{t(c),r(()=>t(c).event_level)&&k(Be)})}var Et=d(Ct,2),Ne=s(Et);{var Ce=k=>{var w=Ut();f(Te=>m(w,Te),[()=>(p(B),t(c),r(()=>B(t(c).created_at)))]),v(k,w)},Ee=k=>{var w=Ut("Unknown date");v(k,w)};g(Ne,k=>{t(c),r(()=>t(c).created_at)?k(Ce):k(Ee,!1)})}a(Et),a(O),a(y),a(_),f(()=>m(C,(t(c),r(()=>t(c).message)))),v(x,_)}),a(o),We(o,x=>h($,x),()=>t($)),a(n),v(i,n)},Ae=i=>{var n=ma();v(i,n)};g(Se,i=>{t(e),r(()=>t(e).status_messages&&t(e).status_messages.length>0)?i(Me):i(Ae,!1)})}f((i,n,o,x,c)=>{m(ne,(t(e),r(()=>t(e).id))),m(le,(t(e),r(()=>t(e).name))),m(oe,(t(e),r(()=>t(e).provider_id))),m(ve,(t(e),r(()=>t(e).provider_name||"Unknown"))),m(ue,(t(e),r(()=>t(e).agent_id||"Not assigned"))),m(ge,i),Vt(rt,1,`inline-flex px-2 py-1 text-xs font-semibold rounded-full ring-1 ring-inset ${n??""}`),m(ye,o),Vt(it,1,`inline-flex px-2 py-1 text-xs font-semibold rounded-full ring-1 ring-inset ${x??""}`),m(pe,c)},[()=>(p(B),t(e),r(()=>B(t(e).created_at))),()=>(p(V),t(e),r(()=>V(t(e).status||"unknown"))),()=>(p(z),t(e),r(()=>z(t(e).status||"unknown"))),()=>(p(V),t(e),r(()=>V(t(e).runner_status||"unknown"))),()=>(p(z),t(e),r(()=>z(t(e).runner_status||"unknown")))]),Fe("click",ie,()=>h(E,!0)),v(I,L)},U=I=>{var L=ga();v(I,L)};g(D,I=>{t(e)?I(M):I(U,!1)},!0)}v(l,b)};g(ee,l=>{t(q)?l(ae):l(se,!1)})}a(F);var re=d(F,2);{var de=l=>{Ke(l,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(e),r(()=>t(e).name)},$$events:{close:()=>h(E,!1),confirm:Qt}})};g(re,l=>{t(E)&&t(e)&&l(de)})}f(l=>{nt(Yt,"href",l),m(Zt,(t(e),r(()=>t(e)?t(e).name:"Instance Details")))},[()=>(p(j),r(()=>j("/instances")))]),v(Gt,ot),Re(),Jt()}export{Ca as component}; diff --git a/webapp/assets/_app/immutable/nodes/9.DexPXc_f.js b/webapp/assets/_app/immutable/nodes/9.DexPXc_f.js deleted file mode 100644 index 93b45523..00000000 --- a/webapp/assets/_app/immutable/nodes/9.DexPXc_f.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as $e}from"../chunks/TJn6xDN9.js";import{p as Ue,o as Le,B as Oe,l as Pe,h as Ve,f as u,j as ze,a as P,t as f,b as v,c as Re,u as r,q as p,e as m,g as t,m as A,d as s,s as d,k as h,$ as qe,r as a,A as Tt,i as Fe,v as $t,D as Ut}from"../chunks/DniTuB_0.js";import{i as g,s as Ge,a as He}from"../chunks/DbNhg6mG.js";import{e as Lt,i as Ot}from"../chunks/Ck5PkeSc.js";import{d as j,c as nt,g as Pt,s as Vt}from"../chunks/BZ2rxtTc.js";import{b as We}from"../chunks/C-xTH-sp.js";import{p as Je}from"../chunks/DQE8oq0R.js";import{g as zt}from"../chunks/HMJxCnAR.js";import{D as Ke}from"../chunks/DGVAzkoE.js";import{w as Qe}from"../chunks/DmHFwzWx.js";import{g as V,f as z}from"../chunks/ow_oMtSd.js";import{s as Rt,b as B,B as qt,d as Ft}from"../chunks/CTcPpzia.js";import{e as Xe}from"../chunks/BZiHL9L3.js";var Ye=u('

    Error

    '),Ze=u('

    Loading instance details...

    '),ta=u(' '),ea=u(' '),aa=u('-'),sa=u('
    Updated At:
    '),ra=u('
    '),da=u('
    Network Addresses:
    '),ia=u('
    Network Addresses:
    No addresses available
    '),na=u('
    OS Type:
    '),la=u('
    OS Name:
    '),oa=u('
    OS Version:
    '),va=u('
    OS Architecture:
    '),xa=u('

    '),ca=u('

    Status Messages

    '),ma=u('

    Status Messages

    No status messages available

    '),ua=u('

    Instance Information

    ID:
    Name:
    Provider ID:
    Provider:
    Pool/Scale Set:
    Agent ID:
    Created At:

    Status & Network

    Instance Status:
    Runner Status:
    ',1),ga=u('
    Instance not found.
    '),_a=u(' ',1);function Na(Gt,Ht){Ue(Ht,!1);const[Wt,Jt]=Ge(),lt=()=>He(Je,"$page",Wt),R=A();let e=A(null),q=A(!0),N=A(""),E=A(!1),T=null,$=A();async function Kt(){if(t(R))try{h(q,!0),h(N,""),h(e,await Pt.getInstance(t(R)))}catch(l){h(N,l instanceof Error?l.message:"Failed to load instance")}finally{h(q,!1)}}async function Qt(){if(t(e)){try{await Pt.deleteInstance(t(e).name),zt(j("/instances"))}catch(l){h(N,Xe(l))}h(E,!1)}}function Xt(l){if(t(e))if(l.operation==="update"&&l.payload.id===t(e).id){const b=t(e).status_messages?.length||0,D={...t(e),...l.payload},M=D.status_messages?.length||0;h(e,D),M>b&&setTimeout(()=>{Rt(t($))},100)}else l.operation==="delete"&&(l.payload.id||l.payload)===t(e).id&&zt(j("/instances"))}Le(()=>{Kt().then(()=>{t(e)?.status_messages?.length&&setTimeout(()=>{Rt(t($))},100)}),T=Qe.subscribeToEntity("instance",["update","delete"],Xt)}),Oe(()=>{T&&(T(),T=null)}),Pe(()=>lt(),()=>{h(R,decodeURIComponent(lt().params.id||""))}),Ve(),$e();var ot=_a();ze(l=>{f(()=>qe.title=`${t(e),r(()=>t(e)?`${t(e).name} - Instance Details`:"Instance Details")??""} - GARM`)});var F=P(ot),G=s(F),vt=s(G),H=s(vt),Yt=s(H);a(H);var xt=d(H,2),ct=s(xt),mt=d(s(ct),2),Zt=s(mt,!0);a(mt),a(ct),a(xt),a(vt),a(G);var ut=d(G,2);{var te=l=>{var b=Ye(),D=s(b),M=s(D),U=d(s(M),2),I=s(U,!0);a(U),a(M),a(D),a(b),f(()=>m(I,t(N))),v(l,b)};g(ut,l=>{t(N)&&l(te)})}var ee=d(ut,2);{var ae=l=>{var b=Ze();v(l,b)},se=l=>{var b=Tt(),D=P(b);{var M=I=>{var L=ua(),W=P(L),J=s(W),K=s(J),gt=d(s(K),2),ie=s(gt);a(gt),a(K);var _t=d(K,2),Q=s(_t),ft=d(s(Q),2),ne=s(ft,!0);a(ft),a(Q);var X=d(Q,2),yt=d(s(X),2),le=s(yt,!0);a(yt),a(X);var Y=d(X,2),pt=d(s(Y),2),oe=s(pt,!0);a(pt),a(Y);var Z=d(Y,2),ht=d(s(Z),2),ve=s(ht,!0);a(ht),a(Z);var tt=d(Z,2),bt=d(s(tt),2),xe=s(bt);{var ce=i=>{var n=ta(),o=s(n,!0);a(n),f(x=>{nt(n,"href",x),m(o,(t(e),r(()=>t(e).pool_id)))},[()=>(p(j),t(e),r(()=>j(`/pools/${t(e).pool_id}`)))]),v(i,n)},me=i=>{var n=Tt(),o=P(n);{var x=_=>{var y=ea(),S=s(y,!0);a(y),f(C=>{nt(y,"href",C),m(S,(t(e),r(()=>t(e).scale_set_id)))},[()=>(p(j),t(e),r(()=>j(`/scalesets/${t(e).scale_set_id}`)))]),v(_,y)},c=_=>{var y=aa();v(_,y)};g(o,_=>{t(e),r(()=>t(e).scale_set_id)?_(x):_(c,!1)},!0)}v(i,n)};g(xe,i=>{t(e),r(()=>t(e).pool_id)?i(ce):i(me,!1)})}a(bt),a(tt);var et=d(tt,2),kt=d(s(et),2),ue=s(kt,!0);a(kt),a(et);var at=d(et,2),wt=d(s(at),2),ge=s(wt,!0);a(wt),a(at);var _e=d(at,2);{var fe=i=>{var n=sa(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(c=>m(x,c),[()=>(p(B),t(e),r(()=>B(t(e).updated_at)))]),v(i,n)};g(_e,i=>{t(e),r(()=>t(e).updated_at&&t(e).updated_at!==t(e).created_at)&&i(fe)})}a(_t),a(J);var It=d(J,2),jt=d(s(It),2),st=s(jt),Dt=d(s(st),2),rt=s(Dt),ye=s(rt,!0);a(rt),a(Dt),a(st);var dt=d(st,2),St=d(s(dt),2),it=s(St),pe=s(it,!0);a(it),a(St),a(dt);var Mt=d(dt,2);{var he=i=>{var n=da(),o=d(s(n),2);Lt(o,5,()=>(t(e),r(()=>t(e).addresses)),Ot,(x,c)=>{var _=ra(),y=s(_),S=s(y,!0);a(y);var C=d(y,2);{let O=$t(()=>(t(c),r(()=>t(c).type||"Unknown")));qt(C,{variant:"info",get text(){return t(O)}})}a(_),f(()=>m(S,(t(c),r(()=>t(c).address)))),v(x,_)}),a(o),a(n),v(i,n)},be=i=>{var n=ia();v(i,n)};g(Mt,i=>{t(e),r(()=>t(e).addresses&&t(e).addresses.length>0)?i(he):i(be,!1)})}var At=d(Mt,2);{var ke=i=>{var n=na(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(()=>m(x,(t(e),r(()=>t(e).os_type)))),v(i,n)};g(At,i=>{t(e),r(()=>t(e).os_type)&&i(ke)})}var Bt=d(At,2);{var we=i=>{var n=la(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(()=>m(x,(t(e),r(()=>t(e).os_name)))),v(i,n)};g(Bt,i=>{t(e),r(()=>t(e).os_name)&&i(we)})}var Nt=d(Bt,2);{var Ie=i=>{var n=oa(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(()=>m(x,(t(e),r(()=>t(e).os_version)))),v(i,n)};g(Nt,i=>{t(e),r(()=>t(e).os_version)&&i(Ie)})}var je=d(Nt,2);{var De=i=>{var n=va(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(()=>m(x,(t(e),r(()=>t(e).os_arch)))),v(i,n)};g(je,i=>{t(e),r(()=>t(e).os_arch)&&i(De)})}a(jt),a(It),a(W);var Se=d(W,2);{var Me=i=>{var n=ca(),o=d(s(n),2);Lt(o,5,()=>(t(e),r(()=>t(e).status_messages)),Ot,(x,c)=>{var _=xa(),y=s(_),S=s(y),C=s(S,!0);a(S);var O=d(S,2),Ct=s(O);{var Be=k=>{const w=$t(()=>(p(Ft),t(c),r(()=>Ft(t(c).event_level))));qt(k,{get variant(){return p(t(w)),r(()=>t(w).variant)},get text(){return p(t(w)),r(()=>t(w).text)}})};g(Ct,k=>{t(c),r(()=>t(c).event_level)&&k(Be)})}var Et=d(Ct,2),Ne=s(Et);{var Ce=k=>{var w=Ut();f(Te=>m(w,Te),[()=>(p(B),t(c),r(()=>B(t(c).created_at)))]),v(k,w)},Ee=k=>{var w=Ut("Unknown date");v(k,w)};g(Ne,k=>{t(c),r(()=>t(c).created_at)?k(Ce):k(Ee,!1)})}a(Et),a(O),a(y),a(_),f(()=>m(C,(t(c),r(()=>t(c).message)))),v(x,_)}),a(o),We(o,x=>h($,x),()=>t($)),a(n),v(i,n)},Ae=i=>{var n=ma();v(i,n)};g(Se,i=>{t(e),r(()=>t(e).status_messages&&t(e).status_messages.length>0)?i(Me):i(Ae,!1)})}f((i,n,o,x,c)=>{m(ne,(t(e),r(()=>t(e).id))),m(le,(t(e),r(()=>t(e).name))),m(oe,(t(e),r(()=>t(e).provider_id))),m(ve,(t(e),r(()=>t(e).provider_name||"Unknown"))),m(ue,(t(e),r(()=>t(e).agent_id||"Not assigned"))),m(ge,i),Vt(rt,1,`inline-flex px-2 py-1 text-xs font-semibold rounded-full ring-1 ring-inset ${n??""}`),m(ye,o),Vt(it,1,`inline-flex px-2 py-1 text-xs font-semibold rounded-full ring-1 ring-inset ${x??""}`),m(pe,c)},[()=>(p(B),t(e),r(()=>B(t(e).created_at))),()=>(p(V),t(e),r(()=>V(t(e).status||"unknown"))),()=>(p(z),t(e),r(()=>z(t(e).status||"unknown"))),()=>(p(V),t(e),r(()=>V(t(e).runner_status||"unknown"))),()=>(p(z),t(e),r(()=>z(t(e).runner_status||"unknown")))]),Fe("click",ie,()=>h(E,!0)),v(I,L)},U=I=>{var L=ga();v(I,L)};g(D,I=>{t(e)?I(M):I(U,!1)},!0)}v(l,b)};g(ee,l=>{t(q)?l(ae):l(se,!1)})}a(F);var re=d(F,2);{var de=l=>{Ke(l,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(e),r(()=>t(e).name)},$$events:{close:()=>h(E,!1),confirm:Qt}})};g(re,l=>{t(E)&&t(e)&&l(de)})}f(l=>{nt(Yt,"href",l),m(Zt,(t(e),r(()=>t(e)?t(e).name:"Instance Details")))},[()=>(p(j),r(()=>j("/instances")))]),v(Gt,ot),Re(),Jt()}export{Na as component}; diff --git a/webapp/assets/_app/version.json b/webapp/assets/_app/version.json index e6d76e80..3bc8d4c3 100644 --- a/webapp/assets/_app/version.json +++ b/webapp/assets/_app/version.json @@ -1 +1 @@ -{"version":"1758898720212"} \ No newline at end of file +{"version":"1759861710563"} \ No newline at end of file diff --git a/webapp/assets/index.html b/webapp/assets/index.html index c8e4c847..84d33a59 100644 --- a/webapp/assets/index.html +++ b/webapp/assets/index.html @@ -71,11 +71,11 @@ })(); - - + + - - + + @@ -85,7 +85,7 @@
    + +
    +
    + + +
    + +
    diff --git a/webapp/src/lib/components/BackendSearchBar.svelte b/webapp/src/lib/components/BackendSearchBar.svelte new file mode 100644 index 00000000..66323cf3 --- /dev/null +++ b/webapp/src/lib/components/BackendSearchBar.svelte @@ -0,0 +1,56 @@ + + +
    +
    +
    +
    + +
    + {#if showButton} + + {/if} +
    + {#if helpText} +

    + {helpText} +

    + {/if} +
    +
    diff --git a/webapp/src/lib/components/DataTable.svelte b/webapp/src/lib/components/DataTable.svelte index 7d98c443..da882224 100644 --- a/webapp/src/lib/components/DataTable.svelte +++ b/webapp/src/lib/components/DataTable.svelte @@ -4,6 +4,7 @@ import ErrorState from './ErrorState.svelte'; import EmptyState from './EmptyState.svelte'; import SearchFilterBar from './SearchFilterBar.svelte'; + import BackendSearchBar from './BackendSearchBar.svelte'; import TablePagination from './TablePagination.svelte'; import MobileCard from './MobileCard.svelte'; @@ -32,6 +33,8 @@ export let searchTerm: string = ''; export let searchPlaceholder: string = 'Search...'; export let showSearch: boolean = true; + export let searchType: 'client' | 'backend' = 'client'; // Type of search + export let searchHelpText: string = ''; // Help text for backend search export let currentPage: number = 1; export let perPage: number = 25; export let totalPages: number = 1; @@ -63,9 +66,11 @@ clone: { item: any }; action: { type: string; item: any }; }>(); - - function handleSearch(event: CustomEvent<{ term: string }>) { - dispatch('search', event.detail); + + function handleSearch(event: CustomEvent<{ term: string }> | CustomEvent) { + // Backend search sends string directly, client search sends object + const term = typeof (event as any).detail === 'string' ? (event as any).detail : (event as any).detail.term; + dispatch('search', { term }); } function handlePageChange(event: CustomEvent<{ page: number }>) { @@ -138,14 +143,24 @@
    {#if showSearch} - + {#if searchType === 'backend'} + + {:else} + + {/if} {/if}
    diff --git a/webapp/src/lib/components/Navigation.svelte b/webapp/src/lib/components/Navigation.svelte index 60180574..8b86c5e0 100644 --- a/webapp/src/lib/components/Navigation.svelte +++ b/webapp/src/lib/components/Navigation.svelte @@ -40,58 +40,63 @@ // Navigation items with pools and scale sets grouped together, instances after scale sets const mainNavItems = [ - { - href: resolve('/'), - label: 'Dashboard', - icon: ['M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z', 'M8 5a2 2 0 012-2h4a2 2 0 012 2v2H8V5z'] + { + href: resolve('/'), + label: 'Dashboard', + icon: 'M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6' // Home icon }, - { - href: resolve('/repositories'), - label: 'Repositories', - icon: ['M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z', 'M8 5a2 2 0 012-2h4a2 2 0 012 2v2H8V5z'] + { + href: resolve('/repositories'), + label: 'Repositories', + icon: 'M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z' // Folder icon }, - { - href: resolve('/organizations'), - label: 'Organizations', - icon: 'M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4' + { + href: resolve('/organizations'), + label: 'Organizations', + icon: 'M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z' // Users/group icon }, - { - href: resolve('/enterprises'), - label: 'Enterprises', - icon: 'M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4' + { + href: resolve('/enterprises'), + label: 'Enterprises', + icon: 'M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4' // Building/office icon }, - { - href: resolve('/pools'), - label: 'Pools', - icon: 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z' + { + href: resolve('/pools'), + label: 'Pools', + icon: 'M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10' // Server/stack icon }, - { - href: resolve('/scalesets'), - label: 'Scale Sets', - icon: 'M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4' + { + href: resolve('/scalesets'), + label: 'Scale Sets', + icon: 'M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4' // Database layers icon }, - { - href: resolve('/instances'), - label: 'Runners', - icon: 'M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z' + { + href: resolve('/instances'), + label: 'Runners', + icon: 'M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z' // CPU/chip icon } ]; const configNavItems = [ - { - href: resolve('/credentials'), - label: 'Credentials', + { + href: resolve('/credentials'), + label: 'Credentials', icon: 'M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1721 9z' }, - { - href: resolve('/endpoints'), - label: 'Endpoints', + { + href: resolve('/endpoints'), + label: 'Endpoints', icon: 'M13 10V3L4 14h7v7l9-11h-7z' }, - { - href: resolve('/templates'), - label: 'Runner Install Templates', + { + href: resolve('/templates'), + label: 'Runner Install Templates', icon: 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z' + }, + { + href: resolve('/objects'), + label: 'Object Storage', + icon: 'M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4' } ]; diff --git a/webapp/src/lib/components/PageHeader.svelte b/webapp/src/lib/components/PageHeader.svelte index 4ac247af..09da752b 100644 --- a/webapp/src/lib/components/PageHeader.svelte +++ b/webapp/src/lib/components/PageHeader.svelte @@ -25,7 +25,11 @@ {description}

    - {#if showAction && actionLabel} + {#if $$slots.actions} +
    + +
    + {:else if showAction && actionLabel}
    \ No newline at end of file diff --git a/webapp/src/lib/components/cells/EntityCell.svelte b/webapp/src/lib/components/cells/EntityCell.svelte index e83f23af..3a995799 100644 --- a/webapp/src/lib/components/cells/EntityCell.svelte +++ b/webapp/src/lib/components/cells/EntityCell.svelte @@ -2,7 +2,7 @@ import { resolve } from '$app/paths'; export let item: any; - export let entityType: 'repository' | 'organization' | 'enterprise' | 'pool' | 'scaleset' | 'instance' | 'template' = 'repository'; + export let entityType: 'repository' | 'organization' | 'enterprise' | 'pool' | 'scaleset' | 'instance' | 'template' | 'object' = 'repository'; export let showOwner: boolean = false; export let showId: boolean = false; export let fontMono: boolean = false; @@ -28,6 +28,8 @@ return item.name || 'Unknown'; case 'template': return item.name || 'Unknown'; + case 'object': + return item.name || 'Unknown'; default: return item.name || item.id || 'Unknown'; } @@ -66,6 +68,8 @@ return resolve(`/instances/${encodeURIComponent(entityId)}`); case 'template': return resolve(`/templates/${entityId}`); + case 'object': + return resolve(`/objects/${entityId}`); default: return '#'; } @@ -73,11 +77,29 @@
    - {entityName}{#if entityType === 'instance' && item?.provider_id} +
    + {entityName} + {#if entityType === 'object' && item?.description} +
    + + + + +
    + {/if} +
    + {#if entityType === 'instance' && item?.provider_id}
    {item.provider_id}
    diff --git a/webapp/src/lib/components/cells/GenericCell.svelte b/webapp/src/lib/components/cells/GenericCell.svelte index edbca9f1..0f389075 100644 --- a/webapp/src/lib/components/cells/GenericCell.svelte +++ b/webapp/src/lib/components/cells/GenericCell.svelte @@ -1,19 +1,28 @@ + +{#if !tags || tags.length === 0} + - +{:else} +
    + {#each visibleTags as tag} + + {tag} + + {/each} + {#if hiddenCount > 0} + + +{hiddenCount} more + + {/if} + + + {#if tags.length > MAX_VISIBLE_TAGS} + + {/if} +
    +{/if} diff --git a/webapp/src/lib/components/cells/index.ts b/webapp/src/lib/components/cells/index.ts index b54e5f74..8ec2ff9d 100644 --- a/webapp/src/lib/components/cells/index.ts +++ b/webapp/src/lib/components/cells/index.ts @@ -5,4 +5,5 @@ export { default as ActionsCell } from './ActionsCell.svelte'; export { default as GenericCell } from './GenericCell.svelte'; export { default as PoolEntityCell } from './PoolEntityCell.svelte'; export { default as InstancePoolCell } from './InstancePoolCell.svelte'; +export { default as TagsCell } from './TagsCell.svelte'; export { default as MobileCard } from '../MobileCard.svelte'; \ No newline at end of file diff --git a/webapp/src/lib/stores/websocket.ts b/webapp/src/lib/stores/websocket.ts index 9e1eb5d6..e3f73ca5 100644 --- a/webapp/src/lib/stores/websocket.ts +++ b/webapp/src/lib/stores/websocket.ts @@ -1,20 +1,21 @@ import { writable, get } from 'svelte/store'; // Event types that match the websocket API -export type EntityType = - | 'repository' - | 'organization' - | 'enterprise' - | 'pool' - | 'user' - | 'instance' - | 'job' - | 'controller' - | 'github_credentials' - | 'gitea_credentials' - | 'github_endpoint' +export type EntityType = + | 'repository' + | 'organization' + | 'enterprise' + | 'pool' + | 'user' + | 'instance' + | 'job' + | 'controller' + | 'github_credentials' + | 'gitea_credentials' + | 'github_endpoint' | 'scaleset' - | 'template'; + | 'template' + | 'file_object'; export type Operation = 'create' | 'update' | 'delete'; diff --git a/webapp/src/lib/utils/format.ts b/webapp/src/lib/utils/format.ts new file mode 100644 index 00000000..d77a13e6 --- /dev/null +++ b/webapp/src/lib/utils/format.ts @@ -0,0 +1,29 @@ +/** + * Format file size in bytes to human-readable format + */ +export function formatFileSize(bytes: number): string { + const units = ['B', 'KB', 'MB', 'GB', 'TB']; + let size = bytes; + let unitIndex = 0; + + while (size >= 1024 && unitIndex < units.length - 1) { + size /= 1024; + unitIndex++; + } + + return `${size.toFixed(unitIndex === 0 ? 0 : 1)} ${units[unitIndex]}`; +} + +/** + * Format datetime string to readable format + */ +export function formatDateTime(dateString: string | undefined): string { + if (!dateString) return 'N/A'; + + try { + const date = new Date(dateString); + return date.toLocaleString(); + } catch { + return dateString; + } +} diff --git a/webapp/src/routes/objects/+page.svelte b/webapp/src/routes/objects/+page.svelte new file mode 100644 index 00000000..0b7f4232 --- /dev/null +++ b/webapp/src/routes/objects/+page.svelte @@ -0,0 +1,912 @@ + + + + + + + + + +
    + + + {#if showDescription} +
    + {objectStorageDescription} +
    + {/if} +
    + + + openUpdateModal(e.detail.item)} + on:delete={(e) => openDeleteModal(e.detail.item)} + on:action={(e) => e.detail.type === 'download' && handleDownload(e.detail.item)} +/> + + +{#if !loading && !error && totalObjects > 0} + +{/if} + + +{#if showUploadModal} + !uploading && (showUploadModal = false)}> +
    +

    Upload New Object

    + +
    +
    + + +
    + +
    + +
    + + + + {uploadForm.file ? uploadForm.file.name : 'No file chosen'} + +
    +
    + +
    + +
    + {#each uploadForm.tags as tag, index} + + {tag} + + + {/each} + handleTagKeydown(e, 'upload')} + on:blur={() => handleTagBlur('upload')} + disabled={uploading} + class="flex-1 min-w-[120px] outline-none bg-transparent text-gray-900 dark:text-white text-sm" + placeholder={uploadForm.tags.length === 0 ? "Type and press space to add tags..." : ""} + /> +
    +

    + Press Space or Enter to add a tag. Press Backspace to remove the last tag. +

    +
    + +
    + + +

    + {uploadForm.description.length} / 8192 characters +

    +
    + + {#if uploading} +
    +
    + Uploading... + {uploadProgress}% +
    +
    +
    +
    +
    + {/if} + +
    + + +
    +
    +
    +
    +{/if} + + +{#if showUpdateModal && selectedObject} + showUpdateModal = false}> +
    +

    Update Object

    + +
    +
    + + +
    + +
    + +
    + {#each updateForm.tags as tag, index} + + {tag} + + + {/each} + handleTagKeydown(e, 'update')} + on:blur={() => handleTagBlur('update')} + class="flex-1 min-w-[120px] outline-none bg-transparent text-gray-900 dark:text-white text-sm" + placeholder={updateForm.tags.length === 0 ? "Type and press space to add tags..." : ""} + /> +
    +

    + Press Space or Enter to add a tag. Press Backspace to remove the last tag. +

    +
    + +
    + + +

    + {updateForm.description.length} / 8192 characters +

    +
    + +
    + + +
    +
    +
    +
    +{/if} + + +{#if showDeleteModal && selectedObject} + { + showDeleteModal = false; + selectedObject = null; + }} + /> +{/if} diff --git a/webapp/src/routes/objects/[id]/+page.svelte b/webapp/src/routes/objects/[id]/+page.svelte new file mode 100644 index 00000000..b6e28b76 --- /dev/null +++ b/webapp/src/routes/objects/[id]/+page.svelte @@ -0,0 +1,429 @@ + + + + + +{#if error} +
    +
    +
    +

    Error

    +
    {error}
    +
    +
    +
    +{/if} + +{#if loading} +
    +
    +
    +

    Loading object details...

    +
    +
    +{:else if object} + +
    + +
    +
    +

    File Information

    +
    + + + +
    +
    +
    +
    +
    ID:
    +
    {object.id}
    +
    +
    +
    Name:
    +
    {object.name}
    +
    +
    +
    Size:
    +
    {formatFileSize(object.size || 0)}
    +
    +
    +
    File Type:
    +
    {object.file_type || 'N/A'}
    +
    +
    +
    SHA256:
    +
    + {object.sha256 || 'N/A'} +
    +
    +
    +
    + + +
    +

    Metadata & Timestamps

    +
    +
    +
    Created At:
    +
    {formatDateTime(object.created_at)}
    +
    +
    +
    Updated At:
    +
    {formatDateTime(object.updated_at)}
    +
    +
    +
    Tags:
    +
    + {#if object.tags && object.tags.length > 0} +
    + {#each object.tags as tag} + + {/each} +
    + {:else} + No tags + {/if} +
    +
    +
    +
    +
    + + + {#if object.description} +
    +

    Description

    +
    + {object.description} +
    +
    + {/if} +{/if} + + +{#if showUpdateModal && object} + showUpdateModal = false}> +
    +

    Update Object

    + +
    +
    + + +
    + +
    + +
    + {#each updateForm.tags as tag, index} + + {tag} + + + {/each} + +
    +

    + Press Space or Enter to add a tag. Press Backspace on empty field to remove last tag. +

    +
    + +
    + + +

    + {updateForm.description.length} / 8192 characters +

    +
    + +
    + + +
    +
    +
    +
    +{/if} + + +{#if showDeleteModal && object} + showDeleteModal = false} + /> +{/if} diff --git a/webapp/src/routes/objects/[id]/+page.svelte.backup b/webapp/src/routes/objects/[id]/+page.svelte.backup new file mode 100644 index 00000000..a03da0d3 --- /dev/null +++ b/webapp/src/routes/objects/[id]/+page.svelte.backup @@ -0,0 +1,277 @@ + + + + + + {#if object} + + showDeleteModal = true} + variant="danger" + /> + {/if} + + + +{#if loading} +
    +
    +
    +{:else if error} +
    +

    {error}

    +
    +{:else if object} +
    +
    +

    + File Information +

    +
    +
    +
    +
    +
    + ID +
    +
    + {object.id} +
    +
    + +
    +
    + Name +
    +
    + {object.name} +
    +
    + +
    +
    + Description +
    +
    + {#if object.description} +
    + {object.description} +
    + {:else} + No description + {/if} +
    +
    + +
    +
    + Size +
    +
    + {formatFileSize(object.size || 0)} +
    +
    + +
    +
    + SHA256 +
    +
    + {object.sha256 || 'N/A'} +
    +
    + +
    +
    + File Type +
    +
    + {object.file_type || 'N/A'} +
    +
    + +
    +
    + Created At +
    +
    + {formatDateTime(object.created_at)} +
    +
    + +
    +
    + Updated At +
    +
    + {formatDateTime(object.updated_at)} +
    +
    + +
    +
    + Tags +
    +
    + {#if object.tags && object.tags.length > 0} +
    + {#each object.tags as tag} + + {/each} +
    + {:else} + No tags + {/if} +
    +
    +
    +
    +
    +{/if} + + +{#if showDeleteModal && object} + showDeleteModal = false} + /> +{/if} diff --git a/webapp/src/routes/objects/[id]/page.integration.test.ts b/webapp/src/routes/objects/[id]/page.integration.test.ts new file mode 100644 index 00000000..109fc9e4 --- /dev/null +++ b/webapp/src/routes/objects/[id]/page.integration.test.ts @@ -0,0 +1,283 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { render, screen, fireEvent, waitFor } from '@testing-library/svelte'; +import ObjectDetailPage from './+page.svelte'; +import { createMockFileObject } from '../../../test/factories.js'; + +// Only mock the GARM API +vi.mock('$lib/api/client.js', () => ({ + garmApi: { + getFileObject: vi.fn(), + deleteFileObject: vi.fn() + } +})); + +vi.mock('$lib/stores/toast.js', () => ({ + toastStore: { + add: vi.fn() + } +})); + +vi.mock('$app/stores', () => ({ + page: { + subscribe: vi.fn((callback) => { + callback({ params: { id: '1' } }); + return () => {}; + }) + } +})); + +vi.mock('$app/navigation', () => ({ + goto: vi.fn() +})); + +vi.mock('$app/paths', () => ({ + resolve: vi.fn((path: string) => path) +})); + +const mockObject = createMockFileObject({ + id: 1, + name: 'test-file.bin', + size: 2048, + tags: ['test', 'binary'] +}); + +describe('Object Detail Page - Integration Tests', () => { + beforeEach(async () => { + vi.clearAllMocks(); + + const { garmApi } = await import('$lib/api/client.js'); + (garmApi.getFileObject as any).mockResolvedValue(mockObject); + }); + + describe('Navigation', () => { + it('should navigate back when back button is clicked', async () => { + const { goto } = await import('$app/navigation'); + + render(ObjectDetailPage); + await waitFor(() => screen.getByText('test-file.bin')); + + const backButton = screen.getByText('Back'); + await fireEvent.click(backButton); + + expect(goto).toHaveBeenCalledWith('/objects'); + }); + }); + + describe('Delete Functionality', () => { + it('should open delete modal when delete button is clicked', async () => { + render(ObjectDetailPage); + await waitFor(() => screen.getByText('test-file.bin')); + + const deleteButton = screen.getByRole('button', { name: 'Delete' }); + await fireEvent.click(deleteButton); + + // Delete modal should appear + await waitFor(() => { + expect(screen.getByText(/Are you sure you want to delete/i)).toBeInTheDocument(); + }); + }); + + it('should close delete modal when cancel is clicked', async () => { + render(ObjectDetailPage); + await waitFor(() => screen.getByText('test-file.bin')); + + // Open delete modal + const deleteButton = screen.getByRole('button', { name: 'Delete' }); + await fireEvent.click(deleteButton); + await waitFor(() => screen.getByText(/Are you sure/i)); + + // Cancel deletion + const cancelButton = screen.getByRole('button', { name: 'Cancel' }); + await fireEvent.click(cancelButton); + + await waitFor(() => { + expect(screen.queryByText(/Are you sure/i)).not.toBeInTheDocument(); + }); + }); + + it('should call delete API when confirmed', async () => { + const { garmApi } = await import('$lib/api/client.js'); + (garmApi.deleteFileObject as any).mockResolvedValue(undefined); + + render(ObjectDetailPage); + await waitFor(() => screen.getByText('test-file.bin')); + + // Open delete modal + const deleteButton = screen.getByRole('button', { name: 'Delete' }); + await fireEvent.click(deleteButton); + await waitFor(() => screen.getByText(/Are you sure/i)); + + // Confirm deletion + const confirmButton = screen.getByRole('button', { name: 'Confirm' }); + await fireEvent.click(confirmButton); + + // Should call delete API + await waitFor(() => { + expect(garmApi.deleteFileObject).toHaveBeenCalledWith('1'); + }); + }); + + it('should navigate to list page after successful deletion', async () => { + const { garmApi } = await import('$lib/api/client.js'); + const { goto } = await import('$app/navigation'); + + (garmApi.deleteFileObject as any).mockResolvedValue(undefined); + + render(ObjectDetailPage); + await waitFor(() => screen.getByText('test-file.bin')); + + // Delete object + const deleteButton = screen.getByRole('button', { name: 'Delete' }); + await fireEvent.click(deleteButton); + await waitFor(() => screen.getByText(/Are you sure/i)); + + const confirmButton = screen.getByRole('button', { name: 'Confirm' }); + await fireEvent.click(confirmButton); + + // Should navigate to list + await waitFor(() => { + expect(goto).toHaveBeenCalledWith('/objects'); + }); + }); + + it('should show success toast after deletion', async () => { + const { garmApi } = await import('$lib/api/client.js'); + const { toastStore } = await import('$lib/stores/toast.js'); + + (garmApi.deleteFileObject as any).mockResolvedValue(undefined); + + render(ObjectDetailPage); + await waitFor(() => screen.getByText('test-file.bin')); + + // Delete object + const deleteButton = screen.getByRole('button', { name: 'Delete' }); + await fireEvent.click(deleteButton); + await waitFor(() => screen.getByText(/Are you sure/i)); + + const confirmButton = screen.getByRole('button', { name: 'Confirm' }); + await fireEvent.click(confirmButton); + + // Should show success toast + await waitFor(() => { + expect(toastStore.add).toHaveBeenCalledWith( + expect.objectContaining({ + type: 'success', + title: 'Object deleted' + }) + ); + }); + }); + + it('should show error toast on delete failure', async () => { + const { garmApi } = await import('$lib/api/client.js'); + const { toastStore } = await import('$lib/stores/toast.js'); + + (garmApi.deleteFileObject as any).mockRejectedValue(new Error('Delete failed')); + + render(ObjectDetailPage); + await waitFor(() => screen.getByText('test-file.bin')); + + // Try to delete + const deleteButton = screen.getByRole('button', { name: 'Delete' }); + await fireEvent.click(deleteButton); + await waitFor(() => screen.getByText(/Are you sure/i)); + + const confirmButton = screen.getByRole('button', { name: 'Confirm' }); + await fireEvent.click(confirmButton); + + // Should show error toast + await waitFor(() => { + expect(toastStore.add).toHaveBeenCalledWith( + expect.objectContaining({ + type: 'error', + title: 'Failed to delete object' + }) + ); + }); + }); + }); + + describe('Download Functionality', () => { + it('should trigger download when download button is clicked', async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + blob: () => Promise.resolve(new Blob(['test content'])) + }); + + const createElementSpy = vi.spyOn(document, 'createElement'); + const appendChildSpy = vi.spyOn(document.body, 'appendChild'); + const removeChildSpy = vi.spyOn(document.body, 'removeChild'); + + render(ObjectDetailPage); + await waitFor(() => screen.getByText('test-file.bin')); + + const downloadButton = screen.getByRole('button', { name: 'Download' }); + await fireEvent.click(downloadButton); + + // Should create temporary link and trigger download + await waitFor(() => { + expect(createElementSpy).toHaveBeenCalledWith('a'); + }); + }); + + it('should show success toast on download start', async () => { + const { toastStore } = await import('$lib/stores/toast.js'); + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + blob: () => Promise.resolve(new Blob(['test content'])) + }); + + render(ObjectDetailPage); + await waitFor(() => screen.getByText('test-file.bin')); + + const downloadButton = screen.getByRole('button', { name: 'Download' }); + await fireEvent.click(downloadButton); + + await waitFor(() => { + expect(toastStore.add).toHaveBeenCalledWith( + expect.objectContaining({ + type: 'success', + title: 'Download started' + }) + ); + }); + }); + + it('should show error toast on download failure', async () => { + const { toastStore } = await import('$lib/stores/toast.js'); + + global.fetch = vi.fn().mockResolvedValue({ + ok: false, + status: 500 + }); + + render(ObjectDetailPage); + await waitFor(() => screen.getByText('test-file.bin')); + + const downloadButton = screen.getByRole('button', { name: 'Download' }); + await fireEvent.click(downloadButton); + + await waitFor(() => { + expect(toastStore.add).toHaveBeenCalledWith( + expect.objectContaining({ + type: 'error', + title: 'Download failed' + }) + ); + }); + }); + }); + + describe('Data Loading', () => { + it('should reload object data if it changes', async () => { + const { garmApi } = await import('$lib/api/client.js'); + + render(ObjectDetailPage); + await waitFor(() => screen.getByText('test-file.bin')); + + // Initially loaded once + expect(garmApi.getFileObject).toHaveBeenCalledTimes(1); + }); + }); +}); diff --git a/webapp/src/routes/objects/[id]/page.render.test.ts b/webapp/src/routes/objects/[id]/page.render.test.ts new file mode 100644 index 00000000..e3f8dcee --- /dev/null +++ b/webapp/src/routes/objects/[id]/page.render.test.ts @@ -0,0 +1,200 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { render, screen } from '@testing-library/svelte'; +import ObjectDetailPage from './+page.svelte'; +import { createMockFileObject } from '../../../test/factories.js'; + +// Only mock the GARM API +vi.mock('$lib/api/client.js', () => ({ + garmApi: { + getFileObject: vi.fn(), + deleteFileObject: vi.fn() + } +})); + +vi.mock('$lib/stores/toast.js', () => ({ + toastStore: { + add: vi.fn() + } +})); + +vi.mock('$app/stores', () => ({ + page: { + subscribe: vi.fn((callback) => { + callback({ params: { id: '1' } }); + return () => {}; + }) + } +})); + +vi.mock('$app/navigation', () => ({ + goto: vi.fn() +})); + +vi.mock('$app/paths', () => ({ + resolve: vi.fn((path: string) => path) +})); + +const mockObject = createMockFileObject({ + id: 1, + name: 'test-file.bin', + size: 1024000, + sha256: 'a'.repeat(64), + file_type: 'application/octet-stream', + tags: ['test', 'binary', 'linux'] +}); + +describe('Object Detail Page - Render Tests', () => { + beforeEach(async () => { + vi.clearAllMocks(); + + const { garmApi } = await import('$lib/api/client.js'); + (garmApi.getFileObject as any).mockResolvedValue(mockObject); + }); + + describe('Basic Rendering', () => { + it('should render without crashing', () => { + const { container } = render(ObjectDetailPage); + expect(container).toBeInTheDocument(); + }); + + it('should set page title', async () => { + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(document.title).toBe('test-file.bin - GARM'); + }); + + it('should render page header', async () => { + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(screen.getByRole('heading', { name: 'test-file.bin' })).toBeInTheDocument(); + }); + }); + + describe('Object Details Display', () => { + it('should call API to load object on mount', async () => { + const { garmApi } = await import('$lib/api/client.js'); + + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 0)); + + expect(garmApi.getFileObject).toHaveBeenCalledWith('1'); + }); + + it('should display object ID', async () => { + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(screen.getByText('1')).toBeInTheDocument(); + }); + + it('should display object name', async () => { + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(screen.getByText('test-file.bin')).toBeInTheDocument(); + }); + + it('should display formatted file size', async () => { + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + // 1024000 bytes = 1000.0 KB + expect(screen.getByText(/1000\.0 KB/i)).toBeInTheDocument(); + }); + + it('should display SHA256 hash', async () => { + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(screen.getByText('a'.repeat(64))).toBeInTheDocument(); + }); + + it('should display file type', async () => { + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(screen.getByText('application/octet-stream')).toBeInTheDocument(); + }); + + it('should display tags', async () => { + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(screen.getByText('test')).toBeInTheDocument(); + expect(screen.getByText('binary')).toBeInTheDocument(); + expect(screen.getByText('linux')).toBeInTheDocument(); + }); + }); + + describe('Action Buttons', () => { + it('should render back button', async () => { + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(screen.getByText('Back')).toBeInTheDocument(); + }); + + it('should render download button', async () => { + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(screen.getByRole('button', { name: 'Download' })).toBeInTheDocument(); + }); + + it('should render delete button', async () => { + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(screen.getByRole('button', { name: 'Delete' })).toBeInTheDocument(); + }); + }); + + describe('Loading State', () => { + it('should show loading state initially', async () => { + const { garmApi } = await import('$lib/api/client.js'); + (garmApi.getFileObject as any).mockImplementation(() => new Promise(() => {})); // Never resolves + + render(ObjectDetailPage); + + expect(screen.getByText(/Loading/i)).toBeInTheDocument(); + }); + }); + + describe('Error Handling', () => { + it('should handle API errors gracefully', async () => { + const { garmApi } = await import('$lib/api/client.js'); + (garmApi.getFileObject as any).mockRejectedValue(new Error('API Error')); + + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + // Should show error message + expect(screen.getByText(/Failed to load object/i)).toBeInTheDocument(); + }); + + it('should handle invalid object ID', async () => { + const { page } = await import('$app/stores'); + vi.mocked(page.subscribe).mockImplementation((callback) => { + callback({ params: { id: '' } } as any); + return () => {}; + }); + + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + // Should show error + expect(screen.getByText(/Invalid object ID/i)).toBeInTheDocument(); + }); + }); + + describe('Delete Modal', () => { + it('should not show delete modal initially', async () => { + render(ObjectDetailPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(screen.queryByText(/Are you sure you want to delete/i)).not.toBeInTheDocument(); + }); + }); +}); diff --git a/webapp/src/routes/objects/page.integration.test.ts b/webapp/src/routes/objects/page.integration.test.ts new file mode 100644 index 00000000..5abdde89 --- /dev/null +++ b/webapp/src/routes/objects/page.integration.test.ts @@ -0,0 +1,352 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { render, screen, fireEvent, waitFor } from '@testing-library/svelte'; +import ObjectsPage from './+page.svelte'; +import { createMockFileObject } from '../../test/factories.js'; + +// Only mock the GARM API +vi.mock('$lib/api/client.js', () => ({ + garmApi: { + listFileObjects: vi.fn(), + deleteFileObject: vi.fn(), + updateFileObject: vi.fn() + } +})); + +vi.mock('$lib/stores/toast.js', () => ({ + toastStore: { + add: vi.fn() + } +})); + +vi.mock('$app/stores', () => ({})); +vi.mock('$app/navigation', () => ({ + goto: vi.fn() +})); +vi.mock('$app/paths', () => ({ + resolve: vi.fn((path: string) => path) +})); + +const mockObject1 = createMockFileObject({ + id: 1, + name: 'file1.bin', + size: 1024, + tags: ['binary', 'linux'] +}); + +const mockObject2 = createMockFileObject({ + id: 2, + name: 'file2.txt', + size: 2048, + tags: ['text', 'config'] +}); + +describe('Objects Page - Integration Tests', () => { + beforeEach(async () => { + vi.clearAllMocks(); + + const { garmApi } = await import('$lib/api/client.js'); + (garmApi.listFileObjects as any).mockResolvedValue({ + results: [mockObject1, mockObject2], + pages: 1, + total_count: 2 + }); + }); + + describe('Search Functionality', () => { + it('should search objects when search button is clicked', async () => { + const { garmApi } = await import('$lib/api/client.js'); + + render(ObjectsPage); + await waitFor(() => expect(garmApi.listFileObjects).toHaveBeenCalledTimes(1)); + + const searchInput = screen.getByPlaceholderText(/Search by tags/i); + const searchButton = screen.getByRole('button', { name: 'Search' }); + + await fireEvent.input(searchInput, { target: { value: 'binary linux' } }); + await fireEvent.click(searchButton); + + // Should call API with comma-separated tags + await waitFor(() => { + expect(garmApi.listFileObjects).toHaveBeenCalledWith('binary,linux', 1, 25); + }); + }); + + it('should search when Enter key is pressed', async () => { + const { garmApi } = await import('$lib/api/client.js'); + + render(ObjectsPage); + await waitFor(() => expect(garmApi.listFileObjects).toHaveBeenCalledTimes(1)); + + const searchInput = screen.getByPlaceholderText(/Search by tags/i); + + await fireEvent.input(searchInput, { target: { value: 'test' } }); + await fireEvent.keyDown(searchInput, { key: 'Enter' }); + + await waitFor(() => { + expect(garmApi.listFileObjects).toHaveBeenCalledWith('test', 1, 25); + }); + }); + + it('should reset to page 1 when searching', async () => { + const { garmApi } = await import('$lib/api/client.js'); + + render(ObjectsPage); + await waitFor(() => expect(garmApi.listFileObjects).toHaveBeenCalled()); + + const searchInput = screen.getByPlaceholderText(/Search by tags/i); + const searchButton = screen.getByRole('button', { name: 'Search' }); + + await fireEvent.input(searchInput, { target: { value: 'test' } }); + await fireEvent.click(searchButton); + + // Should call with page 1 + await waitFor(() => { + const calls = (garmApi.listFileObjects as any).mock.calls; + const lastCall = calls[calls.length - 1]; + expect(lastCall[1]).toBe(1); // page parameter + }); + }); + }); + + describe('Upload Modal', () => { + it('should open upload modal when button is clicked', async () => { + render(ObjectsPage); + await waitFor(() => screen.getByText('Upload New Object')); + + const uploadButton = screen.getByRole('button', { name: 'Upload New Object' }); + await fireEvent.click(uploadButton); + + // Modal should open + await waitFor(() => { + expect(screen.getByLabelText('File Name')).toBeInTheDocument(); + }); + }); + + it('should close upload modal when cancel is clicked', async () => { + render(ObjectsPage); + await waitFor(() => screen.getByText('Upload New Object')); + + // Open modal + const uploadButton = screen.getByRole('button', { name: 'Upload New Object' }); + await fireEvent.click(uploadButton); + await waitFor(() => screen.getByLabelText('File Name')); + + // Close modal + const cancelButton = screen.getByRole('button', { name: 'Cancel' }); + await fireEvent.click(cancelButton); + + await waitFor(() => { + expect(screen.queryByLabelText('File Name')).not.toBeInTheDocument(); + }); + }); + }); + + describe('Delete Functionality', () => { + it('should show delete modal when delete action is clicked', async () => { + render(ObjectsPage); + await waitFor(() => screen.getByText('file1.bin')); + + // Find and click delete button + const deleteButtons = screen.getAllByRole('button', { name: 'Delete' }); + await fireEvent.click(deleteButtons[0]); + + // Delete modal should appear + await waitFor(() => { + expect(screen.getByText(/Are you sure you want to delete/i)).toBeInTheDocument(); + }); + }); + + it('should call delete API when confirmed', async () => { + const { garmApi } = await import('$lib/api/client.js'); + (garmApi.deleteFileObject as any).mockResolvedValue(undefined); + + render(ObjectsPage); + await waitFor(() => screen.getByText('file1.bin')); + + // Click delete button + const deleteButtons = screen.getAllByRole('button', { name: 'Delete' }); + await fireEvent.click(deleteButtons[0]); + + // Confirm deletion + await waitFor(() => screen.getByText(/Are you sure/i)); + const confirmButton = screen.getByRole('button', { name: 'Confirm' }); + await fireEvent.click(confirmButton); + + // Should call delete API + await waitFor(() => { + expect(garmApi.deleteFileObject).toHaveBeenCalledWith('1'); + }); + }); + + it('should reload objects after successful deletion', async () => { + const { garmApi } = await import('$lib/api/client.js'); + (garmApi.deleteFileObject as any).mockResolvedValue(undefined); + + render(ObjectsPage); + await waitFor(() => screen.getByText('file1.bin')); + + const initialCallCount = (garmApi.listFileObjects as any).mock.calls.length; + + // Delete object + const deleteButtons = screen.getAllByRole('button', { name: 'Delete' }); + await fireEvent.click(deleteButtons[0]); + await waitFor(() => screen.getByText(/Are you sure/i)); + + const confirmButton = screen.getByRole('button', { name: 'Confirm' }); + await fireEvent.click(confirmButton); + + // Should reload list + await waitFor(() => { + expect((garmApi.listFileObjects as any).mock.calls.length).toBeGreaterThan(initialCallCount); + }); + }); + }); + + describe('Update Functionality', () => { + it('should open update modal when update button is clicked', async () => { + render(ObjectsPage); + await waitFor(() => screen.getByText('file1.bin')); + + // Click update button + const updateButtons = screen.getAllByRole('button', { name: 'Update' }); + await fireEvent.click(updateButtons[0]); + + // Update modal should appear + await waitFor(() => { + expect(screen.getByText('Update Object')).toBeInTheDocument(); + }); + }); + + it('should populate form with current object data', async () => { + render(ObjectsPage); + await waitFor(() => screen.getByText('file1.bin')); + + // Click update button for first object + const updateButtons = screen.getAllByRole('button', { name: 'Update' }); + await fireEvent.click(updateButtons[0]); + + await waitFor(() => { + const nameInput = screen.getByLabelText('File Name') as HTMLInputElement; + expect(nameInput.value).toBe('file1.bin'); + }); + }); + + it('should call update API when form is submitted', async () => { + const { garmApi } = await import('$lib/api/client.js'); + (garmApi.updateFileObject as any).mockResolvedValue(mockObject1); + + render(ObjectsPage); + await waitFor(() => screen.getByText('file1.bin')); + + // Open update modal + const updateButtons = screen.getAllByRole('button', { name: 'Update' }); + await fireEvent.click(updateButtons[0]); + await waitFor(() => screen.getByText('Update Object')); + + // Submit form + const submitButton = screen.getAllByRole('button', { name: 'Update' })[1]; // Second one is in modal + await fireEvent.click(submitButton); + + // Should call update API + await waitFor(() => { + expect(garmApi.updateFileObject).toHaveBeenCalledWith('1', expect.any(Object)); + }); + }); + }); + + describe('Pagination', () => { + it('should pass page size to API', async () => { + const { garmApi } = await import('$lib/api/client.js'); + + render(ObjectsPage); + + await waitFor(() => { + const calls = (garmApi.listFileObjects as any).mock.calls; + const lastCall = calls[calls.length - 1]; + expect(lastCall[2]).toBe(25); // pageSize parameter + }); + }); + }); + + describe('What\'s This Description', () => { + it('should toggle description when clicked', async () => { + render(ObjectsPage); + await waitFor(() => screen.getByText("What's this?")); + + const toggleButton = screen.getByText("What's this?"); + + // Description should not be visible initially + expect(screen.queryByText(/primary goal of this is/i)).not.toBeInTheDocument(); + + // Click to show + await fireEvent.click(toggleButton); + await waitFor(() => { + expect(screen.getByText(/primary goal of this is/i)).toBeInTheDocument(); + }); + + // Click to hide + await fireEvent.click(toggleButton); + await waitFor(() => { + expect(screen.queryByText(/primary goal of this is/i)).not.toBeInTheDocument(); + }); + }); + }); + + describe('Error Handling', () => { + it('should show toast on delete error', async () => { + const { garmApi } = await import('$lib/api/client.js'); + const { toastStore } = await import('$lib/stores/toast.js'); + + (garmApi.deleteFileObject as any).mockRejectedValue(new Error('Delete failed')); + + render(ObjectsPage); + await waitFor(() => screen.getByText('file1.bin')); + + // Try to delete + const deleteButtons = screen.getAllByRole('button', { name: 'Delete' }); + await fireEvent.click(deleteButtons[0]); + await waitFor(() => screen.getByText(/Are you sure/i)); + + const confirmButton = screen.getByRole('button', { name: 'Confirm' }); + await fireEvent.click(confirmButton); + + // Should show error toast + await waitFor(() => { + expect(toastStore.add).toHaveBeenCalledWith( + expect.objectContaining({ + type: 'error', + title: 'Failed to delete object' + }) + ); + }); + }); + + it('should show toast on update error', async () => { + const { garmApi } = await import('$lib/api/client.js'); + const { toastStore } = await import('$lib/stores/toast.js'); + + (garmApi.updateFileObject as any).mockRejectedValue(new Error('Update failed')); + + render(ObjectsPage); + await waitFor(() => screen.getByText('file1.bin')); + + // Open update modal and submit + const updateButtons = screen.getAllByRole('button', { name: 'Update' }); + await fireEvent.click(updateButtons[0]); + await waitFor(() => screen.getByText('Update Object')); + + const submitButton = screen.getAllByRole('button', { name: 'Update' })[1]; + await fireEvent.click(submitButton); + + // Should show error toast + await waitFor(() => { + expect(toastStore.add).toHaveBeenCalledWith( + expect.objectContaining({ + type: 'error', + title: 'Failed to update object' + }) + ); + }); + }); + }); +}); diff --git a/webapp/src/routes/objects/page.render.test.ts b/webapp/src/routes/objects/page.render.test.ts new file mode 100644 index 00000000..678ad94f --- /dev/null +++ b/webapp/src/routes/objects/page.render.test.ts @@ -0,0 +1,172 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { render, screen } from '@testing-library/svelte'; +import ObjectsPage from './+page.svelte'; +import { createMockFileObject } from '../../test/factories.js'; + +// Only mock the GARM API - nothing else +vi.mock('$lib/api/client.js', () => ({ + garmApi: { + listFileObjects: vi.fn(), + deleteFileObject: vi.fn(), + updateFileObject: vi.fn() + } +})); + +vi.mock('$lib/stores/toast.js', () => ({ + toastStore: { + add: vi.fn() + } +})); + +// Mock app stores +vi.mock('$app/stores', () => ({})); +vi.mock('$app/navigation', () => ({ + goto: vi.fn() +})); +vi.mock('$app/paths', () => ({ + resolve: vi.fn((path: string) => path) +})); + +const mockObject = createMockFileObject({ + id: 1, + name: 'test-file.bin', + size: 1024000, + tags: ['test', 'binary'] +}); + +describe('Objects Page - Render Tests', () => { + beforeEach(async () => { + vi.clearAllMocks(); + + const { garmApi } = await import('$lib/api/client.js'); + (garmApi.listFileObjects as any).mockResolvedValue({ + results: [mockObject], + pages: 1, + total_count: 1 + }); + }); + + describe('Basic Rendering', () => { + it('should render without crashing', () => { + const { container } = render(ObjectsPage); + expect(container).toBeInTheDocument(); + }); + + it('should set page title', () => { + render(ObjectsPage); + expect(document.title).toBe('Object Storage - GARM'); + }); + + it('should render page header with correct title', async () => { + render(ObjectsPage); + await new Promise(resolve => setTimeout(resolve, 0)); + + expect(screen.getByRole('heading', { name: 'Object Storage' })).toBeInTheDocument(); + expect(screen.getByText(/Manage files stored in GARM/i)).toBeInTheDocument(); + }); + + it('should render upload button', async () => { + render(ObjectsPage); + await new Promise(resolve => setTimeout(resolve, 0)); + + expect(screen.getByText('Upload New Object')).toBeInTheDocument(); + }); + }); + + describe('Search Functionality', () => { + it('should render search input', async () => { + render(ObjectsPage); + await new Promise(resolve => setTimeout(resolve, 0)); + + expect(screen.getByPlaceholderText(/Search by tags/i)).toBeInTheDocument(); + }); + + it('should render search button', async () => { + render(ObjectsPage); + await new Promise(resolve => setTimeout(resolve, 0)); + + expect(screen.getByRole('button', { name: 'Search' })).toBeInTheDocument(); + }); + }); + + describe('Data Display', () => { + it('should call API to load objects on mount', async () => { + const { garmApi } = await import('$lib/api/client.js'); + + render(ObjectsPage); + await new Promise(resolve => setTimeout(resolve, 0)); + + expect(garmApi.listFileObjects).toHaveBeenCalled(); + }); + + it('should display object name in table', async () => { + render(ObjectsPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(screen.getByText('test-file.bin')).toBeInTheDocument(); + }); + + it('should show empty state when no objects', async () => { + const { garmApi } = await import('$lib/api/client.js'); + (garmApi.listFileObjects as any).mockResolvedValue({ + results: [], + pages: 0, + total_count: 0 + }); + + render(ObjectsPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + expect(screen.getByText(/No objects found/i)).toBeInTheDocument(); + }); + }); + + describe('Modals', () => { + it('should not show upload modal initially', () => { + render(ObjectsPage); + + expect(screen.queryByText('Upload New Object')).toBeInTheDocument(); // button + expect(screen.queryByLabelText('File Name')).not.toBeInTheDocument(); // modal input + }); + + it('should not show update modal initially', () => { + render(ObjectsPage); + + expect(screen.queryByText(/Update Object/i)).not.toBeInTheDocument(); + }); + + it('should not show delete modal initially', () => { + render(ObjectsPage); + + expect(screen.queryByText(/Delete Object/i)).not.toBeInTheDocument(); + }); + }); + + describe('Error Handling', () => { + it('should handle API errors gracefully', async () => { + const { garmApi } = await import('$lib/api/client.js'); + (garmApi.listFileObjects as any).mockRejectedValue(new Error('API Error')); + + const { container } = render(ObjectsPage); + await new Promise(resolve => setTimeout(resolve, 100)); + + // Should still render the container without crashing + expect(container).toBeInTheDocument(); + }); + }); + + describe('What\'s This Description', () => { + it('should render expandable description button', async () => { + render(ObjectsPage); + await new Promise(resolve => setTimeout(resolve, 0)); + + expect(screen.getByText("What's this?")).toBeInTheDocument(); + }); + + it('should not show description text initially', () => { + render(ObjectsPage); + + expect(screen.queryByText(/primary goal of this is/i)).not.toBeInTheDocument(); + }); + }); +}); diff --git a/webapp/src/test/factories.ts b/webapp/src/test/factories.ts index ca282158..087cd749 100644 --- a/webapp/src/test/factories.ts +++ b/webapp/src/test/factories.ts @@ -1,4 +1,4 @@ -import type { Repository, Organization, Enterprise, Instance, Pool, ScaleSet, ForgeCredentials, ForgeEndpoint, Tag } from '$lib/api/generated/api.js'; +import type { Repository, Organization, Enterprise, Instance, Pool, ScaleSet, ForgeCredentials, ForgeEndpoint, Tag, FileObject } from '$lib/api/generated/api.js'; export function createMockRepository(overrides: Partial = {}): Repository { return { @@ -257,4 +257,18 @@ export function createMockScaleSet(overrides: Partial = {}): ScaleSet status_messages: [], ...overrides }; +} + +export function createMockFileObject(overrides: Partial = {}): FileObject { + return { + id: 1, + name: 'test-file.bin', + size: 1024000, + sha256: 'a'.repeat(64), + file_type: 'application/octet-stream', + created_at: '2024-01-01T00:00:00Z', + updated_at: '2024-01-01T00:00:00Z', + tags: ['test', 'binary'], + ...overrides + }; } \ No newline at end of file diff --git a/webapp/swagger.yaml b/webapp/swagger.yaml index ad52de1b..0f55f6c7 100644 --- a/webapp/swagger.yaml +++ b/webapp/swagger.yaml @@ -109,6 +109,25 @@ definitions: x-go-name: WebhookSecret type: object x-go-package: github.com/cloudbase/garm/params + CreateFileObjectParams: + properties: + description: + type: string + x-go-name: Description + name: + type: string + x-go-name: Name + size: + format: int64 + type: integer + x-go-name: Size + tags: + items: + type: string + type: array + x-go-name: Tags + type: object + x-go-package: github.com/cloudbase/garm/params CreateGiteaCredentialsParams: properties: app: @@ -466,6 +485,106 @@ definitions: EventType: type: string x-go-package: github.com/cloudbase/garm/params + FileObject: + properties: + created_at: + format: date-time + type: string + x-go-name: CreatedAt + description: + type: string + x-go-name: Description + file_type: + type: string + x-go-name: FileType + id: + format: uint64 + type: integer + x-go-name: ID + name: + type: string + x-go-name: Name + sha256: + type: string + x-go-name: SHA256 + size: + format: int64 + type: integer + x-go-name: Size + tags: + items: + type: string + type: array + x-go-name: Tags + updated_at: + format: date-time + type: string + x-go-name: UpdatedAt + type: object + x-go-package: github.com/cloudbase/garm/params + FileObjectPaginatedResponse: + properties: + current_page: + format: uint64 + type: integer + x-go-name: CurrentPage + next_page: + format: uint64 + type: integer + x-go-name: NextPage + pages: + format: uint64 + type: integer + x-go-name: Pages + previous_page: + format: uint64 + type: integer + x-go-name: PreviousPage + results: + items: + properties: + created_at: + format: date-time + type: string + x-go-name: CreatedAt + description: + type: string + x-go-name: Description + file_type: + type: string + x-go-name: FileType + id: + format: uint64 + type: integer + x-go-name: ID + name: + type: string + x-go-name: Name + sha256: + type: string + x-go-name: SHA256 + size: + format: int64 + type: integer + x-go-name: Size + tags: + items: + type: string + type: array + x-go-name: Tags + updated_at: + format: date-time + type: string + x-go-name: UpdatedAt + type: object + type: array + x-go-name: Results + total_count: + format: uint64 + type: integer + x-go-name: TotalCount + type: object + x-go-package: github.com/cloudbase/garm/params ForgeAuthType: type: string x-go-package: github.com/cloudbase/garm/params @@ -578,18 +697,33 @@ definitions: x-go-package: github.com/cloudbase/garm/params ForgeEntity: properties: - agent_id: - format: int64 - type: integer - x-go-name: AgentID - os_name: + created_at: + format: date-time type: string - x-go-name: OSName - os_version: + x-go-name: CreatedAt + credentials: + $ref: '#/definitions/ForgeCredentials' + entity_type: + $ref: '#/definitions/ForgeEntityType' + id: type: string - x-go-name: OSVersion + x-go-name: ID + name: + type: string + x-go-name: Name + owner: + type: string + x-go-name: Owner + pool_balancing_type: + $ref: '#/definitions/PoolBalancerType' + updated_at: + format: date-time + type: string + x-go-name: UpdatedAt type: object - x-go-name: UpdateSystemInfoParams + x-go-package: github.com/cloudbase/garm/params + ForgeEntityType: + type: string x-go-package: github.com/cloudbase/garm/params GithubApp: properties: @@ -1426,6 +1560,21 @@ definitions: x-go-name: WebhookSecret type: object x-go-package: github.com/cloudbase/garm/params + UpdateFileObjectParams: + properties: + description: + type: string + x-go-name: Description + name: + type: string + x-go-name: Name + tags: + items: + type: string + type: array + x-go-name: Tags + type: object + x-go-package: github.com/cloudbase/garm/params UpdateGiteaCredentialsParams: properties: description: @@ -2574,6 +2723,99 @@ paths: summary: Returns a JWT token that can be used to access the metrics endpoint. tags: - metrics-token + /objects: + get: + operationId: ListFileObjects + parameters: + - description: List of tags to filter by. + in: query + name: tags + type: string + - description: The page at which to list. + in: query + name: page + type: integer + - description: Number of items per page. + in: query + name: pageSize + type: integer + responses: + "200": + description: FileObjectPaginatedResponse + schema: + $ref: '#/definitions/FileObjectPaginatedResponse' + "400": + description: APIErrorResponse + schema: + $ref: '#/definitions/APIErrorResponse' + summary: List file objects. + tags: + - objects + /objects/{objectID}: + delete: + operationId: DeleteFileObject + parameters: + - description: The ID of the file object. + in: path + name: objectID + required: true + type: string + responses: + default: + description: APIErrorResponse + schema: + $ref: '#/definitions/APIErrorResponse' + summary: Delete a file object. + tags: + - objects + get: + operationId: GetFileObject + parameters: + - description: The ID of the file object. + in: path + name: objectID + required: true + type: string + responses: + "200": + description: FileObject + schema: + $ref: '#/definitions/FileObject' + "400": + description: APIErrorResponse + schema: + $ref: '#/definitions/APIErrorResponse' + summary: Get a file object. + tags: + - objects + put: + operationId: UpdateFileObject + parameters: + - description: The ID of the file object. + in: path + name: objectID + required: true + type: string + - description: Parameters used when updating a file object. + in: body + name: Body + required: true + schema: + $ref: '#/definitions/UpdateFileObjectParams' + description: Parameters used when updating a file object. + type: object + responses: + "200": + description: FileObject + schema: + $ref: '#/definitions/FileObject' + "400": + description: APIErrorResponse + schema: + $ref: '#/definitions/APIErrorResponse' + summary: Update a file object. + tags: + - objects /organizations: get: operationId: ListOrgs diff --git a/workers/websocket/events/params.go b/workers/websocket/events/params.go index fb93f7db..ccc818ed 100644 --- a/workers/websocket/events/params.go +++ b/workers/websocket/events/params.go @@ -28,7 +28,7 @@ func (f Filter) Validate() error { common.PoolEntityType, common.UserEntityType, common.InstanceEntityType, common.JobEntityType, common.ControllerEntityType, common.GithubCredentialsEntityType, common.GiteaCredentialsEntityType, common.ScaleSetEntityType, common.GithubEndpointEntityType, - common.TemplateEntityType: + common.TemplateEntityType, common.FileObjectEntityType: default: return common.ErrInvalidEntityType }