diff --git a/backend/go-app/docker.go b/backend/go-app/docker.go
index a6dfc67d..57d4aaf8 100755
--- a/backend/go-app/docker.go
+++ b/backend/go-app/docker.go
@@ -289,7 +289,7 @@ func buildImageMemory(fs billy.Filesystem, tags []string, dockerfileFolder strin
// Handles pulling of the same image if applicable
// This fixes some issues with older versions of Docker which can't build
// on their own ( <17.05 )
- pullOptions := types.ImagePullOptions{}
+ pullOptions := image.PullOptions{}
downloaded := false
for _, image := range tags {
// Is this ok? Not sure. Tags shouldn't be controlled here prolly.
@@ -555,7 +555,7 @@ func imageCheckBuilder(images []string) error {
return err
}
- allImages, err := client.ImageList(ctx, types.ImageListOptions{
+ allImages, err := client.ImageList(ctx, image.ListOptions{
All: true,
})
@@ -631,7 +631,7 @@ func getDockerImage(resp http.ResponseWriter, request *http.Request) {
}
ctx := context.Background()
- images, err := dockercli.ImageList(ctx, types.ImageListOptions{
+ images, err := dockercli.ImageList(ctx, image.ListOptions{
All: true,
})
@@ -665,7 +665,7 @@ func getDockerImage(resp http.ResponseWriter, request *http.Request) {
}
}
- pullOptions := types.ImagePullOptions{}
+ pullOptions := image.PullOptions{}
if len(img.ID) == 0 {
_, err := dockercli.ImagePull(context.Background(), version.Name, pullOptions)
if err == nil {
diff --git a/backend/go-app/go.mod b/backend/go-app/go.mod
index 8ab7f06b..b7537de8 100644
--- a/backend/go-app/go.mod
+++ b/backend/go-app/go.mod
@@ -1,29 +1,27 @@
module shuffle
-go 1.22.0
+go 1.22.2
//replace github.com/shuffle/shuffle-shared => ../../../shuffle-shared
-toolchain go1.22.2
-
require (
cloud.google.com/go/datastore v1.15.0
cloud.google.com/go/storage v1.40.0
github.com/basgys/goxml2json v1.1.0
github.com/carlescere/scheduler v0.0.0-20170109141437-ee74d2f83d82
- github.com/docker/docker v26.1.5+incompatible
+ github.com/docker/docker v27.5.0+incompatible
github.com/frikky/kin-openapi v0.42.0
github.com/fsouza/go-dockerclient v1.11.0
github.com/ghodss/yaml v1.0.0
- github.com/go-git/go-billy/v5 v5.5.0
- github.com/go-git/go-git/v5 v5.12.0
+ github.com/go-git/go-billy/v5 v5.6.0
+ github.com/go-git/go-git/v5 v5.13.0
github.com/gorilla/mux v1.8.1
github.com/h2non/filetype v1.1.3
github.com/satori/go.uuid v1.2.0
github.com/shuffle/shuffle-shared v0.7.0
- golang.org/x/crypto v0.22.0
+ golang.org/x/crypto v0.32.0
google.golang.org/api v0.176.1
- google.golang.org/grpc v1.63.2
+ google.golang.org/grpc v1.68.1
gopkg.in/src-d/go-git.v4 v4.13.1
gopkg.in/yaml.v3 v3.0.1
k8s.io/api v0.30.2
@@ -35,13 +33,14 @@ require (
cloud.google.com/go v0.112.1 // indirect
cloud.google.com/go/auth v0.3.0 // indirect
cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect
- cloud.google.com/go/compute/metadata v0.3.0 // indirect
+ cloud.google.com/go/compute/metadata v0.5.0 // indirect
cloud.google.com/go/iam v1.1.7 // indirect
+ cloud.google.com/go/scheduler v1.10.6 // indirect
dario.cat/mergo v1.0.0 // indirect
- github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
+ github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
github.com/Masterminds/semver v1.5.0 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
- github.com/ProtonMail/go-crypto v1.0.0 // indirect
+ github.com/ProtonMail/go-crypto v1.1.3 // indirect
github.com/adrg/strutil v0.2.3 // indirect
github.com/algolia/algoliasearch-client-go/v3 v3.18.1 // indirect
github.com/bitly/go-simplejson v0.5.1 // indirect
@@ -50,17 +49,17 @@ require (
github.com/cloudflare/circl v1.3.7 // indirect
github.com/containerd/containerd v1.6.26 // indirect
github.com/containerd/log v0.1.0 // indirect
- github.com/cyphar/filepath-securejoin v0.2.4 // indirect
+ github.com/cyphar/filepath-securejoin v0.2.5 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/distribution/reference v0.6.0 // indirect
- github.com/docker/go-connections v0.4.0 // indirect
+ github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/emirpasic/gods v1.18.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/frikky/schemaless v0.0.13 // indirect
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
- github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/jsonpointer v0.19.6 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
@@ -87,13 +86,14 @@ require (
github.com/moby/patternmatcher v0.6.0 // indirect
github.com/moby/sys/sequential v0.5.0 // indirect
github.com/moby/sys/user v0.1.0 // indirect
- github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
+ github.com/moby/sys/userns v0.1.0 // indirect
+ github.com/moby/term v0.5.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b // indirect
+ github.com/opencontainers/image-spec v1.1.0 // indirect
github.com/opensearch-project/opensearch-go v1.1.0 // indirect
github.com/opensearch-project/opensearch-go/v2 v2.3.0 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
@@ -104,32 +104,33 @@ require (
github.com/sendgrid/sendgrid-go v3.14.0+incompatible // indirect
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
- github.com/skeema/knownhosts v1.2.2 // indirect
+ github.com/skeema/knownhosts v1.3.0 // indirect
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/src-d/gcfg v1.4.0 // indirect
github.com/xanzy/ssh-agent v0.3.3 // indirect
go.opencensus.io v0.24.0 // indirect
+ go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
- go.opentelemetry.io/otel v1.24.0 // indirect
- go.opentelemetry.io/otel/metric v1.24.0 // indirect
- go.opentelemetry.io/otel/trace v1.24.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect
+ go.opentelemetry.io/otel v1.33.0 // indirect
+ go.opentelemetry.io/otel/metric v1.33.0 // indirect
+ go.opentelemetry.io/otel/trace v1.33.0 // indirect
go4.org v0.0.0-20201209231011-d4a079459e60 // indirect
- golang.org/x/mod v0.15.0 // indirect
- golang.org/x/net v0.24.0 // indirect
- golang.org/x/oauth2 v0.19.0 // indirect
- golang.org/x/sync v0.7.0 // indirect
- golang.org/x/sys v0.19.0 // indirect
- golang.org/x/term v0.19.0 // indirect
- golang.org/x/text v0.14.0 // indirect
+ golang.org/x/mod v0.17.0 // indirect
+ golang.org/x/net v0.34.0 // indirect
+ golang.org/x/oauth2 v0.23.0 // indirect
+ golang.org/x/sync v0.10.0 // indirect
+ golang.org/x/sys v0.29.0 // indirect
+ golang.org/x/term v0.28.0 // indirect
+ golang.org/x/text v0.21.0 // indirect
golang.org/x/time v0.5.0 // indirect
- golang.org/x/tools v0.18.0 // indirect
+ golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
google.golang.org/appengine v1.6.8 // indirect
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect
- google.golang.org/protobuf v1.33.0 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 // indirect
+ google.golang.org/protobuf v1.35.2 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
diff --git a/backend/go-app/go.sum b/backend/go-app/go.sum
index eb35434b..5e8420ff 100644
--- a/backend/go-app/go.sum
+++ b/backend/go-app/go.sum
@@ -17,6 +17,8 @@ cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbf
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
+cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY=
+cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.15.0 h1:0P9WcsQeTWjuD1H14JIY7XQscIPQ4Laje8ti96IC5vg=
cloud.google.com/go/datastore v1.15.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8=
@@ -24,6 +26,8 @@ cloud.google.com/go/iam v1.1.7 h1:z4VHOhwKLF/+UYXAJDFwGtNF0b6gjsW1Pk9Ml0U/IoM=
cloud.google.com/go/iam v1.1.7/go.mod h1:J4PMPg8TtyurAUvSmPj8FF3EDgY1SPRZxcUGrn7WXGA=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
+cloud.google.com/go/scheduler v1.10.6 h1:5U8iXLoQ03qOB+ZXlAecU7fiE33+u3QiM9nh4cd0eTE=
+cloud.google.com/go/scheduler v1.10.6/go.mod h1:pe2pNCtJ+R01E06XCDOJs1XvAMbv28ZsQEbqknxGOuE=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.40.0 h1:VEpDQV5CJxFmJ6ueWNsKxcr1QAYOXEgxDa+sBbJahPw=
@@ -35,6 +39,8 @@ github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8 h1:V8krn
github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
+github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
+github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
@@ -46,6 +52,8 @@ github.com/Microsoft/hcsshim v0.9.10 h1:TxXGNmcbQxBKVWvjvTocNb6jrPyeHlk5EiDhhgHg
github.com/Microsoft/hcsshim v0.9.10/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc=
github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78=
github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
+github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk=
+github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
github.com/adrg/strutil v0.2.3 h1:WZVn3ItPBovFmP4wMHHVXUr8luRaHrbyIuLlHt32GZQ=
github.com/adrg/strutil v0.2.3/go.mod h1:+SNxbiH6t+O+5SZqIj5n/9i5yUjR+S3XXVrjEcN2mxg=
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs=
@@ -103,6 +111,8 @@ github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
+github.com/cyphar/filepath-securejoin v0.2.5 h1:6iR5tXJ/e6tJZzzdMc1km3Sa7RRIVBKAK32O2s7AYfo=
+github.com/cyphar/filepath-securejoin v0.2.5/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -110,8 +120,12 @@ github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5Qvfr
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/docker/docker v26.1.5+incompatible h1:NEAxTwEjxV6VbBMBoGG3zPqbiJosIApZjxlbrG9q3/g=
github.com/docker/docker v26.1.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v27.5.0+incompatible h1:um++2NcQtGRTz5eEgO6aJimo6/JxrTXC941hd05JO6U=
+github.com/docker/docker v27.5.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
+github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU=
@@ -143,15 +157,21 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66D
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow=
+github.com/go-git/go-billy/v5 v5.6.0 h1:w2hPNtoehvJIxR00Vb4xX94qHQi/ApZfX+nBE2Cjio8=
+github.com/go-git/go-billy/v5 v5.6.0/go.mod h1:sFDq7xD3fn3E0GOwUSZqHo9lrkmx8xJhA0ZrfvjBRGM=
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4=
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys=
github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY=
+github.com/go-git/go-git/v5 v5.13.0 h1:vLn5wlGIh/X78El6r3Jr+30W16Blk0CTcxTYcYPWi5E=
+github.com/go-git/go-git/v5 v5.13.0/go.mod h1:Wjo7/JyVKtQgUNdXYXIepzWfJQkUEIGvkvVkiXRR/zw=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
+github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
@@ -285,8 +305,12 @@ github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
+github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
+github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc=
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
+github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ=
+github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -304,6 +328,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8=
github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ=
+github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/opensearch-project/opensearch-go v1.1.0 h1:eG5sh3843bbU1itPRjA9QXbxcg8LaZ+DjEzQH9aLN3M=
github.com/opensearch-project/opensearch-go v1.1.0/go.mod h1:+6/XHCuTH+fwsMJikZEWsucZ4eZMma3zNSeLrTtVGbo=
github.com/opensearch-project/opensearch-go/v2 v2.3.0 h1:nQIEMr+A92CkhHrZgUhcfsrZjibvB3APXf2a1VwCmMQ=
@@ -338,11 +364,15 @@ github.com/shuffle/shuffle-shared v0.6.77 h1:KKtM50xW2DLuRHINxhp3uXrNH0AhiwkeiiU
github.com/shuffle/shuffle-shared v0.6.77/go.mod h1:RAJiSFjmuKmijKTbbEf9A6Ojb+3/te7g71lED7JjPus=
github.com/shuffle/shuffle-shared v0.6.90 h1:FzIYtEt44eWgEsW/9tj2ki7qq8FEm/HWXUok+THp72M=
github.com/shuffle/shuffle-shared v0.6.90/go.mod h1:RAJiSFjmuKmijKTbbEf9A6Ojb+3/te7g71lED7JjPus=
+github.com/shuffle/shuffle-shared v0.7.0 h1:T7nbC5An/K9ePx1pwvYqSnnNZuafwK3GVy6wPDuog18=
+github.com/shuffle/shuffle-shared v0.7.0/go.mod h1:bBXhEsPKjxln0mFnSeri7gIJ3tL/636Sh5NyTyNrvIQ=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A=
github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo=
+github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY=
+github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
@@ -377,12 +407,18 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
+go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
+go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q=
go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
+go.opentelemetry.io/otel v1.33.0 h1:/FerN9bax5LoK51X/sI0SVYrjSE0/yUL7DpxW4K3FWw=
+go.opentelemetry.io/otel v1.33.0/go.mod h1:SUUkR6csvUQl+yjReHu5uM3EtVV7MBm5FHKRlNx4I8I=
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0 h1:R/OBkMoGgfy2fLhs2QhkCI1w4HLEQX92GCcJB6SSdNk=
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0 h1:giGm8w67Ja7amYNfYMdme7xSp2pIxThWopw8+QP51Yk=
@@ -391,10 +427,14 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0 h1:Ydage/
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE=
go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
+go.opentelemetry.io/otel/metric v1.33.0 h1:r+JOocAyeRVXD8lZpjdQjzMadVZp2M4WmQ+5WtEnklQ=
+go.opentelemetry.io/otel/metric v1.33.0/go.mod h1:L9+Fyctbp6HFTddIxClbQkjtubW6O9QS3Ann/M82u6M=
go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw=
go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc=
go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
+go.opentelemetry.io/otel/trace v1.33.0 h1:cCJuF7LRjUFso9LPnEAHJDB2pqzp+hbO8eu1qqW2d/s=
+go.opentelemetry.io/otel/trace v1.33.0/go.mod h1:uIcdVUZMpTAmz0tI1z04GoVSezK37CbGV4fr1f2nBck=
go.opentelemetry.io/proto/otlp v0.11.0 h1:cLDgIBTf4lLOlztkhzAEdQsJ4Lj+i5Wc9k6Nn0K1VyU=
go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ=
go4.org v0.0.0-20201209231011-d4a079459e60 h1:iqAGo78tVOJXELHQFRjR6TMwItrvXH4hrGJ32I/NFF8=
@@ -412,6 +452,8 @@ golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2Uz
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
+golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
+golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -442,6 +484,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8=
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
+golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -470,6 +514,8 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
+golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
+golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -477,6 +523,8 @@ golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4Iltr
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg=
golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8=
+golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
+golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -488,6 +536,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
+golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -519,6 +569,8 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
+golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -527,6 +579,8 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
+golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
+golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -540,6 +594,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
+golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
@@ -576,6 +632,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ=
golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg=
+golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
+golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -617,8 +675,12 @@ google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUE
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c h1:kaI7oewGK5YnVwj+Y+EJBO/YN1ht8iTL9XkFHtVZLsc=
google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s=
+google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q=
+google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be h1:LG9vZxsWGOmUKieR8wPAUR3u3MpnYFQZROPIMaXh7/A=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 h1:8ZmaLZE4XWrtU3MyClkYqqtl6Oegr3235h7jxsDyqCY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -630,6 +692,8 @@ google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
+google.golang.org/grpc v1.68.1 h1:oI5oTa11+ng8r8XMMN7jAOmWfPZWbYpCFaMUTACxkM0=
+google.golang.org/grpc v1.68.1/go.mod h1:+q1XYFJjShcqn0QZHvCyeR4CXPA+llXIeUIfIe00waw=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -643,6 +707,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io=
+google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go
index d6cac1fe..09e2bc11 100755
--- a/backend/go-app/walkoff.go
+++ b/backend/go-app/walkoff.go
@@ -20,8 +20,8 @@ import (
"strings"
"time"
- "github.com/docker/docker/api/types"
dockerclient "github.com/docker/docker/client"
+ "github.com/docker/docker/api/types/image"
//gyaml "github.com/ghodss/yaml"
@@ -4094,12 +4094,12 @@ func LoadSpecificApps(resp http.ResponseWriter, request *http.Request) {
appSdk := os.Getenv("SHUFFLE_APP_SDK_VERSION")
if len(appSdk) == 0 {
- _, err := dockercli.ImagePull(ctx, "frikky/shuffle:app_sdk", types.ImagePullOptions{})
+ _, err := dockercli.ImagePull(ctx, "frikky/shuffle:app_sdk", image.PullOptions{})
if err != nil {
log.Printf("[WARNING] Failed to download new App SDK: %s", err)
}
} else {
- _, err := dockercli.ImagePull(ctx, fmt.Sprintf("%s/%s/shuffle-app_sdk:%s", "ghcr.io", "frikky", appSdk), types.ImagePullOptions{})
+ _, err := dockercli.ImagePull(ctx, fmt.Sprintf("%s/%s/shuffle-app_sdk:%s", "ghcr.io", "frikky", appSdk), image.PullOptions{})
if err != nil {
log.Printf("[WARNING] Failed to download new App SDK %s: %s", err)
}
diff --git a/frontend/src/components/EditWorkflow.jsx b/frontend/src/components/EditWorkflow.jsx
index 296612b8..46e04def 100644
--- a/frontend/src/components/EditWorkflow.jsx
+++ b/frontend/src/components/EditWorkflow.jsx
@@ -1149,7 +1149,7 @@ const EditWorkflow = (props) => {
: null}
- {!isEditing ? <>
+ {/*!isEditing ? <>
}
@@ -1164,7 +1164,7 @@ const EditWorkflow = (props) => {
/>
- > : null}
+ > : null*/}
- "example": fixExample(selectedActionParameters[count].example),
- })
- }}
- />
-
{datafield}
diff --git a/frontend/src/components/ShuffleCodeEditor1.jsx b/frontend/src/components/ShuffleCodeEditor1.jsx
index b2c684a5..f7bcfccc 100644
--- a/frontend/src/components/ShuffleCodeEditor1.jsx
+++ b/frontend/src/components/ShuffleCodeEditor1.jsx
@@ -14,6 +14,7 @@ import {
Menu,
MenuItem,
Button,
+ ButtonGroup,
} from '@mui/material';
import theme from '../theme.jsx';
@@ -77,16 +78,21 @@ const liquidFilters = [
{ "name": "URL decode ", "value": `url_decode`, "example": `{{ "https://www.google.com/search?q=hello%20world" | url_decode }}` },
{ "name": "base64_encode", "value": `base64_encode`, "example": `{{ "https://www.google.com/search?q=hello%20world" | base64_encode }}` },
{ "name": "base64_decode", "value": `base64_decode`, "example": `{{ "aGVsbG8K" | base64_encode }}` },
-]
-
-const mathFilters = [
{ "name": "Plus", "value": "plus: 1", "example": `{{ "1" | plus: 1 }}` },
{ "name": "Minus", "value": "minus: 1", "example": `{{ "1" | minus: 1 }}` },
]
const pythonFilters = [
- { "name": "Hello World", "value": `{% python %}\nprint("hello world")\n{% endpython %}`, "example": `` },
- { "name": "Handle JSON", "value": `{% python %}\nimport json\njsondata = json.loads(r"""$nodename""")\n{% endpython %}`, "example": `` },
+ { "name": "Hello World", "value": `print("hello world")`, "example": `` },
+ { "name": "Using Shuffle variables", "value": `import json\nnodevalue = r\"\"\"$exec\"\"\"\nif not nodevalue:\n nodevalue = r\"\"\"{\"sample\": \"string\", \"int\": 1}\"\"\"\n \njsondata = json.loads(nodevalue)\nprint(jsondata)`, "example": `` },
+ { "name": "Print Execution ID", "value": `print(self.current_execution_id)`, "example": `` },
+ { "name": "Get full execution details", "value": `print(self.full_execution)`, "example": `` },
+ { "name": "Use files", "value": `# Create a sample file\nfiles = [{\n \"name\": \"test.txt\",\n \"data\": \"Testdata\"\n}]\nret = self.set_files(files)\n\n# Get the content of the file from Shuffle storage\n# Originally a byte string in the \"data\" key\nfile_content = (self.get_file(ret[0])[\"data\"]).decode()\nprint(file_content)`, "example": `` },
+
+ { "name": "Use datastore", "value": `key = \"testkey\"\nvalue = \"The value of the testkey\"\n\nself.set_cache(key, value)\n\n# Print the details of the key after it's been updated\n# To get the value, use self.get_cache(key)[\"value\"]\nprint(self.get_cache(key))`, "example": `` },
+ { "name": "Run an App Action", "value": `response = self.run_app(app_id="app", action="action_name", auth="authentication_id", params={})\nprint(response)`, "example": ``, "disabled": true, },
+ { "name": "Run a Singul AI Action", "value": `response = self.create_ticket(app="jira/iris/ticketingsystem", fields={"title": "Test ticket!"})\nprint(response)`, "example": ``, "disabled": true, },
+
]
const extensions = []
@@ -105,6 +111,7 @@ const CodeEditor = (props) => {
toolsAppId,
parameterName,
selectedAction,
+ selectedTrigger,
workflowExecutions,
getParents,
activeDialog,
@@ -112,7 +119,7 @@ const CodeEditor = (props) => {
fieldname,
contentLoading,
editorData,
-
+ handleSubflowParamChange,
setAiQueryModalOpen,
fullScreenMode,
environment,
@@ -1010,12 +1017,14 @@ const CodeEditor = (props) => {
var currentLineData = codedatasplit[currentLine]
// Remove newlines from item.value
+ /*
if (item.value.includes("% python %")) {
item.value = item.value.replaceAll("\n", ";")
item.value = item.value.replaceAll("python %};", "python %}")
} else {
item.value = item.value.replaceAll("\n", "")
}
+ */
currentLineData = currentLineData.slice(0, currentCharacter) + item.value + currentLineData.slice(currentCharacter)
codedatasplit[currentLine] = currentLineData
@@ -1093,9 +1102,9 @@ const CodeEditor = (props) => {
toast(responseJson.reason)
newResult = { "valid": false, "result": responseJson.reason }
} else if (responseJson.success === true) {
- newResult = { "valid": false, "result": "Couldn't finish execution. Please fill all the required fields, and retry the execution." }
+ newResult = { "valid": false, "result": "Result is Empty or Couldn't finish execution (1). If using python, use print('value') to see the result" }
} else {
- newResult = { "valid": false, "result": "Couldn't finish execution (2). Please fill all the required fields, and validate the execution." }
+ newResult = { "valid": false, "result": "Result is Empty or Couldn't finish execution (2). If using python, use print('value') to see the result" }
}
if (responseJson.errors !== undefined && responseJson.errors !== null && responseJson.errors.length > 0) {
@@ -1187,7 +1196,6 @@ const CodeEditor = (props) => {
overflowY: "auto",
whiteSpace: "pre-wrap",
wordWrap: "break-word",
- backgroundColor: "rgba(40,40,40,1)",
zIndex: activeDialog === "codeeditor" ? 1200 : 1100,
}}
@@ -1213,6 +1221,7 @@ const CodeEditor = (props) => {
hideBackdrop={true}
open={expansionModalOpen}
onClose={() => {
+ navigate("")
console.log("In closer")
if (changeActionParameterCodeMirror !== undefined) {
@@ -1237,7 +1246,7 @@ const CodeEditor = (props) => {
maxWidth: isMobile ? "100%" : isFileEditor ? 650 : 1100,
minHeight: isMobile ? "100%" : "auto",
maxHeight: isMobile ? "100%" : 700,
- border: theme.palette.defaultBorder,
+ border: "3px solid rgba(255,255,255,0.3)",
padding: isMobile ? "25px 10px 25px 10px" : 25,
// zoom: 0.8,
backgroundColor: "black",
@@ -1291,6 +1300,7 @@ const CodeEditor = (props) => {
color: "grey",
}}
onClick={() => {
+ navigate("")
setExpansionModalOpen(false)
}}
>
@@ -1337,413 +1347,374 @@ const CodeEditor = (props) => {
*/}
{isFileEditor ? null :
- {selectedAction?.name === "execute_python" ?
-
- Run Python Code
-
- :
- selectedAction.name === "execute_bash" ?
-
- Run Bash Code
-
- :
-
-
-
-
-
-
-
-
- }
+
+
+
+
+
- anchorOrigin={{
- vertical: 'bottom',
- horizontal: 'left',
- }}
- keepMounted
- transformOrigin={{
- vertical: 'top',
- horizontal: 'left',
- }}
- //MenuListProps={{
- // style: adjustPosition(),
- //}}
+
- onClose={() => {
- handleMenuClose();
- }}
- open={!!menuPosition}
- style={{
- color: "white",
- marginTop: 2,
- maxHeight: 650,
- }}
- >
- {actionlist?.map((innerdata) => {
- const icon =
- innerdata.type === "action" ? (
-
- ) : innerdata.type === "workflow_variable" ||
- innerdata.type === "execution_variable" ? (
-
- ) : (
-
- );
+
+ const coverColor = "#82ccc3"
+ //menuPosition.left -= 50
+ //menuPosition.top -= 250
+ //console.log("POS: ", menuPosition1)
+ var menuPosition1 = menuPosition
+ if (menuPosition1 === null) {
+ menuPosition1 = {
+ "left": 0,
+ "top": 0,
}
- parentMenuOpen={!!menuPosition}
- style={{
- color: "white",
- minWidth: 250,
- maxWidth: 250,
- maxHeight: 50,
- overflow: "hidden",
- }}
- onClick={() => {
- console.log("CLICKED: ", innerdata);
- console.log(innerdata.example)
+ } else if (menuPosition1.top === null || menuPosition1.top === undefined) {
+ menuPosition1.top = 0
+ } else if (menuPosition1.left === null || menuPosition1.left === undefined) {
+ menuPosition1.left = 0
+ }
- //const handleClick = (item) => {
- handleItemClick([innerdata]);
- }}
- >
-
-
- {parsedPaths.map((pathdata, index) => {
- // FIXME: Should be recursive in here
- //
- const icon =
- pathdata.type === "value" ? (
-
- ) : pathdata.type === "list" ? (
-
- ) : (
-
- );
- //
+ //console.log("POS1: ", menuPosition1)
- const indentation_count = (pathdata.name.match(/\./g) || []).length + 1
- //const boxPadding = pathdata.type === "object" ? "10px 0px 0px 0px" : 0
- const boxPadding = 0
- const namesplit = pathdata.name.split(".")
- const newname = namesplit[namesplit.length - 1]
- return (
-
- );
- })}
-
-
- ) : (
-
- );
- })}
-
+
+
+ {parsedPaths.map((pathdata, index) => {
+ // FIXME: Should be recursive in here
+ //
+ const icon =
+ pathdata.type === "value" ? (
+
+ ) : pathdata.type === "list" ? (
+
+ ) : (
+
+ );
+ //
+
+ const indentation_count = (pathdata.name.match(/\./g) || []).length + 1
+ //const boxPadding = pathdata.type === "object" ? "10px 0px 0px 0px" : 0
+ const boxPadding = 0
+ const namesplit = pathdata.name.split(".")
+ const newname = namesplit[namesplit.length - 1]
+ return (
+
+ );
+ })}
+
+
+ ) : (
+
+ );
+ })}
+
+
}
@@ -1890,8 +1861,7 @@ const CodeEditor = (props) => {
>
-
- {selectedAction === undefined ? "" : selectedAction.name === "execute_python" || selectedAction.name === "execute_bash" ? "Code to run" : `Expected Output for '${selectedAction.name}'`}
+ {selectedAction === undefined ? "" : selectedAction.name === "execute_python" || selectedAction.name === "execute_bash" ? "Code to run" : `Expected Output'`}
@@ -2055,6 +2025,7 @@ const CodeEditor = (props) => {
variant="outlined"
color="secondary"
onClick={() => {
+ navigate("")
setExpansionModalOpen(false);
}}
>
@@ -2070,6 +2041,15 @@ const CodeEditor = (props) => {
marginTop: 5,
}}
onClick={(event) => {
+ /*
+ const clickedFieldId = "rightside_field_" + fieldCount
+ const clickedField = document.getElementById(clickedFieldId)
+ if (clickedField !== undefined && clickedField !== null) {
+ clickedField.focus()
+ }
+ */
+
+ navigate("")
// Take localcodedata through the Shuffle JSON parser just in case
// This is to make it so we don't need to handle these fixes on the
// backend by itself
@@ -2087,7 +2067,7 @@ const CodeEditor = (props) => {
setExpansionModalOpen(false)
} else if (changeActionParameterCodeMirror !== undefined) {
//changeActionParameterCodeMirror(event, fieldCount, fixedcodedata)
- changeActionParameterCodeMirror(event, fieldCount, fixedcodedata, actionlist)
+ changeActionParameterCodeMirror(event, fieldCount, fixedcodedata, actionlist, parameterName)
setExpansionModalOpen(false)
setcodedata(fixedcodedata)
}
@@ -2097,7 +2077,12 @@ const CodeEditor = (props) => {
const foundfield = document.getElementById(fieldname)
if (foundfield !== undefined && foundfield !== null) {
foundfield.value = fixedcodedata
+ if(selectedTrigger !== undefined && selectedTrigger !== null && selectedTrigger.name === "Shuffle Workflow") {
+ handleSubflowParamChange(fixedcodedata)
+ }
}
+ } else {
+ //toast("No fieldname found: " + fieldname)
}
setExpansionModalOpen(false)
diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx
index 516a1a60..21bf78fa 100755
--- a/frontend/src/views/AngularWorkflow.jsx
+++ b/frontend/src/views/AngularWorkflow.jsx
@@ -128,7 +128,7 @@ import {
ErrorOutline as ErrorOutlineIcon,
ArrowForward as ArrowForwardIcon,
-
+ OpenInFull as OpenInFullIcon,
} from "@mui/icons-material";
import SwapHorizIcon from '@mui/icons-material/SwapHoriz';
//import * as cytoscape from "cytoscape";
@@ -499,6 +499,9 @@ const AngularWorkflow = (defaultprops) => {
const [activeDialog, setActiveDialog] = React.useState("");
const [visited, setVisited] = React.useState([]);
const [allRevisions, setAllRevisions] = useState([])
+ const [menuPosition, setMenuPosition] = useState(null);
+ const [showDropdown, setShowDropdown] = React.useState(false);
+ const [subflowActionList, setSubflowActionList] = React.useState([]);
const [apps, setApps] = React.useState([]);
const [filteredApps, setFilteredApps] = React.useState([]);
@@ -699,7 +702,7 @@ const releaseToConnectLabel = "Release to Connect"
}
if (loadedApps.includes(appId)) {
- console.log("App already loaded: ", appId)
+ //console.log("App already loaded: ", appId)
// 1. Find the app and check if it has actions
// 2. If it doesn't have actions, reload once again
@@ -1019,6 +1022,127 @@ const releaseToConnectLabel = "Release to Connect"
}
}, [workflow])
+ useEffect(() => {
+ // if (subflowActionList.length === 0) {
+ const newActionList = [];
+ // FIXME: Have previous execution values in here
+ newActionList.push({
+ type: "Execution Argument",
+ name: "Execution Argument",
+ value: "$exec",
+ highlight: "exec",
+ autocomplete: "exec",
+ example: "hello",
+ })
+ newActionList.push({
+ type: "Shuffle Database",
+ name: "Shuffle Database",
+ value: "$shuffle_cache",
+ highlight: "shuffle_db",
+ autocomplete: "shuffle_cache",
+ example: "hello",
+ })
+ if (
+ workflow.workflow_variables !== null &&
+ workflow.workflow_variables !== undefined &&
+ workflow.workflow_variables.length > 0
+ ) {
+ for (let varkey in workflow.workflow_variables) {
+ const item = workflow.workflow_variables[varkey];
+ newActionList.push({
+ type: "workflow_variable",
+ name: item.name,
+ value: item.value,
+ id: item.id,
+ autocomplete: `${item.name.split(" ").join("_")}`,
+ example: item.value,
+ });
+ }
+ }
+
+ // FIXME: Add values from previous executions if they exist
+ if (
+ workflow.execution_variables !== null &&
+ workflow.execution_variables !== undefined &&
+ workflow.execution_variables.length > 0
+ ) {
+ for (let varkey in workflow.execution_variables) {
+ const item = workflow.execution_variables[varkey];
+ newActionList.push({
+ type: "execution_variable",
+ name: item.name,
+ value: item.value,
+ id: item.id,
+ autocomplete: `${item.name.split(" ").join("_")}`,
+ example: "",
+ });
+ }
+ }
+
+ var parents = getParents(selectedTrigger);
+ if (parents.length > 1) {
+ for (let parentkey in parents) {
+ const item = parents[parentkey];
+ if (item.label === "Execution Argument") {
+ continue;
+ }
+
+ var exampledata = item.example === undefined ? "" : item.example;
+ // Find previous execution and their variables
+ if (workflowExecutions.length > 0) {
+ // Look for the ID
+ for (let execkey in workflowExecutions) {
+ if (
+ workflowExecutions[execkey].results === undefined ||
+ workflowExecutions[execkey].results === null
+ ) {
+ continue;
+ }
+
+ var foundResult = workflowExecutions[execkey].results.find(
+ (result) => result.action.id === item.id
+ );
+ if (foundResult === undefined) {
+ continue;
+ }
+
+ const validated = validateJson(foundResult.result)
+ if (validated.valid) {
+ exampledata = validateJson.result
+ break
+ }
+ }
+ }
+
+ // 1. Take
+ const actionvalue = {
+ type: "action",
+ id: item.id,
+ name: item.label,
+ autocomplete: `${item?.label?.split(" ")?.join("_")}`,
+ example: exampledata,
+ }
+ newActionList.push(actionvalue);
+ }
+ }
+
+ setSubflowActionList(newActionList);
+ }, [workflow.workflow_variables, workflow.execution_variables, workflow, selectedTrigger]);
+
+
+ useEffect(() => {
+
+ const found = workflows?.find(w => w.id === workflow?.triggers[selectedTriggerIndex]?.parameters[0]?.value);
+
+ setSubworkflow(found)
+
+ if(found){
+ const startNode = found.actions?.find((action) => action.id === workflow?.triggers[selectedTriggerIndex]?.parameters[3]?.value)
+ setSubworkflowStartnode(startNode)
+ }
+
+ }, [selectedTrigger,selectedTriggerIndex])
+
useEffect(() => {
// Current variable + future state controlled
// This is so that the loop can stop itself as well
@@ -1920,7 +2044,7 @@ const releaseToConnectLabel = "Release to Connect"
})
}
- const saveWorkflow = (curworkflow, executionArgument, startNode, duplicationOrg) => {
+ const saveWorkflow = (curworkflow, executionArgument, startNode, duplicationOrg, skip_popup) => {
var success = false;
if (isCloud && !isLoggedIn) {
@@ -2015,62 +2139,82 @@ const releaseToConnectLabel = "Release to Connect"
} else {
if (type === "ACTION") {
- const cyelement = cyelements[cyelementsKey].data();
+ const cyelement = cyelements[cyelementsKey].data()
const elementid =
cyelement.id === undefined || cyelement.id === null
? cyelement["_id"]
: cyelement.id;
- var curworkflowAction = useworkflow.actions.find(
- (a) =>
- a !== undefined &&
- (a["id"] === elementid || a["_id"] === elementid)
- );
+ var curworkflowAction = useworkflow.actions.find((a) => a !== undefined && (a["id"] === elementid || a["_id"] === elementid))
+
if (curworkflowAction === undefined) {
- curworkflowAction = cyelements[cyelementsKey].data();
+ curworkflowAction = cyelements[cyelementsKey].data()
}
curworkflowAction.position = cyelements[cyelementsKey].position();
- // workaround to fix some edgecases
- if (
- curworkflowAction.parameters === "" ||
- curworkflowAction.parameters === null
- ) {
- curworkflowAction.parameters = [];
- }
+ // workaround to fix some edgecases
+ if (curworkflowAction.parameters === "" || curworkflowAction.parameters === null) {
+ curworkflowAction.parameters = [];
+ }
- if (
- curworkflowAction.example === undefined ||
- curworkflowAction.example === "" ||
- curworkflowAction.example === null
- ) {
- if (cyelements[cyelementsKey].data().example !== undefined) {
- curworkflowAction.example = cyelements[cyelementsKey].data().example;
- }
- }
+ if (
+ curworkflowAction.example === undefined ||
+ curworkflowAction.example === "" ||
+ curworkflowAction.example === null
+ ) {
+ if (cyelements[cyelementsKey].data().example !== undefined) {
+ curworkflowAction.example = cyelements[cyelementsKey].data().example;
+ }
+ }
- // Override just in this place
- curworkflowAction.errors = [];
- curworkflowAction.isValid = true;
+ // Override just in this place
+ //console.log("WORKFLOWACTION: ", curworkflowAction, "CY: ", cyelements[cyelementsKey].data())
+ const foundLabel = cyelements[cyelementsKey].data("label")
+ if (foundLabel !== undefined && foundLabel !== null && foundLabel.length > 0) {
+ curworkflowAction.label = foundLabel
+ }
- // Cleans up OpenAPI items
- var newparams = [];
- for (let parametersKey in curworkflowAction.parameters) {
- const thisitem = curworkflowAction.parameters[parametersKey];
- if (thisitem.name.startsWith("${") && thisitem.name.endsWith("}")) {
- continue;
- }
+ const foundAuth = cyelements[cyelementsKey].data("authentication_id")
+ if (foundAuth !== undefined && foundAuth !== null && foundAuth.length > 0) {
+ curworkflowAction.authentication_id = foundAuth
+ }
- if (thisitem.value !== undefined && thisitem.value !== null && Array.isArray(thisitem.value)) {
- thisitem.value = thisitem.value.join(",")
- }
+ const executionDelay = cyelements[cyelementsKey].data("execution_delay")
+ if (executionDelay !== undefined && executionDelay !== null && executionDelay.length > 0) {
+ curworkflowAction.execution_delay = executionDelay
+ }
- newparams.push(thisitem);
- }
+ const executionVariable = cyelements[cyelementsKey].data("execution_variable")
+ if (executionVariable !== undefined && executionVariable !== null) {
+ curworkflowAction.execution_variable = executionVariable
+ }
- curworkflowAction.parameters = newparams;
- newActions.push(curworkflowAction);
+ const cyParams = cyelements[cyelementsKey].data("parameters")
+ if (cyParams !== undefined && cyParams !== null && cyParams.length > 0) {
+ curworkflowAction.parameters = cyParams
+ }
+
+ curworkflowAction.errors = [];
+ curworkflowAction.isValid = true;
+
+ // Cleans up OpenAPI items
+ var newparams = [];
+ for (let parametersKey in curworkflowAction.parameters) {
+ const thisitem = curworkflowAction.parameters[parametersKey];
+ if (thisitem.name.startsWith("${") && thisitem.name.endsWith("}")) {
+ continue;
+ }
+
+ if (thisitem.value !== undefined && thisitem.value !== null && Array.isArray(thisitem.value)) {
+ thisitem.value = thisitem.value.join(",")
+ }
+
+ newparams.push(thisitem);
+ }
+
+ curworkflowAction.parameters = newparams;
+ newActions.push(curworkflowAction);
} else if (type === "TRIGGER") {
if (useworkflow.triggers === undefined || useworkflow.triggers === null) {
useworkflow.triggers = [];
@@ -2224,7 +2368,7 @@ const releaseToConnectLabel = "Release to Connect"
if (executionArgument !== undefined && startNode !== undefined) {
//console.log("Running execution AFTER saving");
setSavingState(0);
- executeWorkflow(executionArgument, startNode, true);
+ executeWorkflow(executionArgument, startNode, true, skip_popup);
return;
}
@@ -2411,11 +2555,11 @@ const releaseToConnectLabel = "Release to Connect"
return true;
};
- const executeWorkflow = (executionArgument, startNode, hasSaved) => {
+ const executeWorkflow = (executionArgument, startNode, hasSaved, skip_popup) => {
if (hasSaved === false) {
setExecutionRequestStarted(true)
- saveWorkflow(workflow, executionArgument, startNode);
+ saveWorkflow(workflow, executionArgument, startNode, undefined, skip_popup);
//console.log("FIXME: Might have forgotten to save before executing.");
return;
}
@@ -2439,7 +2583,7 @@ const releaseToConnectLabel = "Release to Connect"
// FIXME: Check if any node contains $exec in a param
// If they do, show a popup asking if they want to execute it without an execution argument, or to use a previous one
- if (executionArgument === undefined || executionArgument === null || executionArgument.length === 0)
+ if (skip_popup !== true && executionArgument === undefined || executionArgument === null || executionArgument.length === 0)
if (workflow.actions !== undefined && workflow.actions !== null && workflow.actions.length > 0) {
var foundmissing = false
@@ -4937,8 +5081,6 @@ const releaseToConnectLabel = "Release to Connect"
}, 100)
const findaction = data.label
- console.log("CLICKED: ", findaction, apps.length)
-
for (let appkey in apps) {
const curapp = apps[appkey]
if (curapp.name !== parentitem.app_name) {
@@ -5312,7 +5454,12 @@ const releaseToConnectLabel = "Release to Connect"
setSelectedComment({})
// FIXME: is this what is mapping it an actual action in the workflow? wtf?
- var curaction = workflow.actions.find((a) => a.id === data.id)
+ var curactionIndex = workflow.actions.findIndex((a) => a.id === data.id)
+ var curaction = undefined
+ if (curactionIndex >= 0) {
+ curaction = workflow.actions[curactionIndex]
+ }
+
if (!curaction || curaction === undefined) {
if (data.id !== undefined && data.app_name !== undefined) {
workflow.actions.push(data)
@@ -5330,10 +5477,16 @@ const releaseToConnectLabel = "Release to Connect"
}
}
- // FIXME: This change may cause... something
+ // FIXME: This change may have caused... something
+ // FIXME: Somehow there is a referencing problem between the action in
+ // cytoscape and the one in the "workflow.actions" state
curaction = data
+ //workflow.actions[curactionIndex] = curaction
+
+ //const data = event.target.data()
+ //event.target.data(curaction)
+ //event.target.data(curaction)
- //var newapps = JSON.parse(JSON.stringify(apps))
var newapps = apps
if (apps === null || apps === undefined || apps.length === 0) {
newapps = filteredApps
@@ -6364,7 +6517,6 @@ const releaseToConnectLabel = "Release to Connect"
const node = event.target;
const nodedata = JSON.parse(JSON.stringify(event.target.data()))
-
if (nodedata.finished === false || (nodedata.id !== undefined && nodedata.is_valid === undefined)) {
return
}
@@ -8663,7 +8815,7 @@ const releaseToConnectLabel = "Release to Connect"
})
.then((responseJson) => {
if (responseJson === null) {
- console.log("No revisions found")
+ //console.log("No revisions found")
return
}
@@ -9015,7 +9167,7 @@ const releaseToConnectLabel = "Release to Connect"
}
toast("Creating schedule")
- const data = {
+ var data = {
name: trigger.name,
frequency: workflow.triggers[triggerindex].parameters[0].value,
execution_argument: workflow.triggers[triggerindex].parameters[1].value,
@@ -9024,6 +9176,18 @@ const releaseToConnectLabel = "Release to Connect"
start: mappedStartnode,
}
+ if (data.frequency === undefined || data.frequency === null || data.frequency.length === 0) {
+ if (isCloud || selectedTrigger?.environment === "cloud") {
+ data.frequency = "*/25 * * * *"
+ workflow.triggers[triggerindex].parameters[0].value = "*/25 * * * *"
+ } else {
+ data.frequency = "60"
+ workflow.triggers[triggerindex].parameters[0].value = "60"
+ }
+
+ setWorkflow(workflow)
+ }
+
fetch(
`${globalUrl}/api/v1/workflows/${props.match.params.key}/schedule`,
{
@@ -9698,9 +9862,9 @@ const releaseToConnectLabel = "Release to Connect"
const handleDragStop = (e, app) => {
var currentnode = cy.getElementById(newNodeId);
- if (currentnode === undefined || currentnode === null || currentnode.length === 0
- ) {
- return;
+
+ if (currentnode === undefined || currentnode === null || currentnode.length === 0) {
+ return;
}
if (parsedApp === undefined || parsedApp === null || parsedApp.data === undefined || parsedApp.data === null) {
@@ -9709,9 +9873,10 @@ const releaseToConnectLabel = "Release to Connect"
return
}
+
// Using remove & replace, as this triggers the function
// onNodeAdded() with this node after it's added
- console.log("Nodedata: ", parsedApp.data)
+ //console.log("DRAG STOP 3: ", parsedApp.data)
currentnode.remove()
parsedApp.data.finished = true
@@ -9822,6 +9987,18 @@ const releaseToConnectLabel = "Release to Connect"
newAppData.authentication_id = "";
newAppData.selectedAuthentication = {};
}
+
+ /*
+ if (workflow.actions === undefined || workflow.actions === null) {
+ workflow.actions = []
+ }
+
+ for (var key in workflow.actions) {
+ const action = workflow.actions[key]
+ console.log("Action: ", action)
+ }
+ */
+
parsedApp.data = newAppData;
cy.add(parsedApp)
@@ -9848,7 +10025,6 @@ const releaseToConnectLabel = "Release to Connect"
const handleAppDrag = (e, app) => {
const cycontainer = cy.container()
-
// Handling drag of public apps
if (app.objectID !== undefined && app.objectID !== null && app.objectID.length > 0) {
// FIXME: This is still buggy for now. Not allowed
@@ -10044,11 +10220,11 @@ const releaseToConnectLabel = "Release to Connect"
x: e.pageX - cycontainer.offsetLeft,
y: e.pageY - cycontainer.offsetTop,
},
- };
+ }
- parsedApp = nodeToBeAdded;
- cy.add(nodeToBeAdded);
- return;
+ parsedApp = nodeToBeAdded
+ cy.add(nodeToBeAdded)
+ return
}
} else {
}
@@ -11004,13 +11180,6 @@ const releaseToConnectLabel = "Release to Connect"
}
}
- /*
- console.log("PARAM CHANGE: ", param, newSelectedAction.parameters[newParamIndex])
- if (param?.value?.includes("Secret. Replaced") && (param.configuration !== true || newSelectedAction.parameters[newParamIndex].configuration !== true)) {
- continue
- }
- */
-
newSelectedAction.parameters[newParamIndex].value = param.value
newSelectedAction.parameters[newParamIndex].autocompleted = true
if (param.options !== undefined && param.options !== null && param.options.length > 0) {
@@ -12608,7 +12777,6 @@ const releaseToConnectLabel = "Release to Connect"
};
const menuClick = (event) => {
- console.log("MENU CLICK");
setOpen(!open);
setAnchorEl(event.currentTarget);
};
@@ -13161,156 +13329,6 @@ const releaseToConnectLabel = "Release to Connect"
);
};
- const SubflowSidebar = () => {
- const [menuPosition, setMenuPosition] = useState(null);
- const [showDropdown, setShowDropdown] = React.useState(false);
- const [actionlist, setActionlist] = React.useState([]);
-
- if (actionlist.length === 0) {
- // FIXME: Have previous execution values in here
- actionlist.push({
- type: "Execution Argument",
- name: "Execution Argument",
- value: "$exec",
- highlight: "exec",
- autocomplete: "exec",
- example: "hello",
- })
- actionlist.push({
- type: "Shuffle Database",
- name: "Shuffle Database",
- value: "$shuffle_cache",
- highlight: "shuffle_db",
- autocomplete: "shuffle_cache",
- example: "hello",
- })
- if (
- workflow.workflow_variables !== null &&
- workflow.workflow_variables !== undefined &&
- workflow.workflow_variables.length > 0
- ) {
- for (let varkey in workflow.workflow_variables) {
- const item = workflow.workflow_variables[varkey];
- actionlist.push({
- type: "workflow_variable",
- name: item.name,
- value: item.value,
- id: item.id,
- autocomplete: `${item.name.split(" ").join("_")}`,
- example: item.value,
- });
- }
- }
-
- // FIXME: Add values from previous executions if they exist
- if (
- workflow.execution_variables !== null &&
- workflow.execution_variables !== undefined &&
- workflow.execution_variables.length > 0
- ) {
- for (let varkey in workflow.execution_variables) {
- const item = workflow.execution_variables[varkey];
- actionlist.push({
- type: "execution_variable",
- name: item.name,
- value: item.value,
- id: item.id,
- autocomplete: `${item.name.split(" ").join("_")}`,
- example: "",
- });
- }
- }
-
- var parents = getParents(selectedTrigger);
- if (parents.length > 1) {
- for (let parentkey in parents) {
- const item = parents[parentkey];
- if (item.label === "Execution Argument") {
- continue;
- }
-
- var exampledata = item.example === undefined ? "" : item.example;
- // Find previous execution and their variables
- if (workflowExecutions.length > 0) {
- // Look for the ID
- for (let execkey in workflowExecutions) {
- if (
- workflowExecutions[execkey].results === undefined ||
- workflowExecutions[execkey].results === null
- ) {
- continue;
- }
-
- var foundResult = workflowExecutions[execkey].results.find(
- (result) => result.action.id === item.id
- );
- if (foundResult === undefined) {
- continue;
- }
-
- const validated = validateJson(foundResult.result)
- if (validated.valid) {
- exampledata = validateJson.result
- break
- }
- }
- }
-
- // 1. Take
- const actionvalue = {
- type: "action",
- id: item.id,
- name: item.label,
- autocomplete: `${item?.label?.split(" ")?.join("_")}`,
- example: exampledata,
- }
- actionlist.push(actionvalue);
- }
- }
-
- setActionlist(actionlist);
- }
-
-
- const handleMenuClose = () => {
- setUpdate(Math.random());
- setMenuPosition(null);
- };
-
- const handleItemClick = (values) => {
- console.log("VALUES: ", values)
- if (values === undefined || values === null || values.length === 0) {
- return;
- }
-
-
- /*
- workflow.triggers[selectedTriggerIndex].parameters[1].value
- .trim()
- .endsWith("$")
- ? values[0].autocomplete
- : "$" + values[0].autocomplete;
-
- for (var key in values) {
- if (key === 0 || values[key].autocomplete.length === 0) {
- continue;
- }
-
- toComplete += values[key].autocomplete
- }
- */
-
- console.log("SELECTED TRIGGER: ", selectedTrigger)
- if (selectedTrigger.name === "Shuffle Workflow") {
- const toComplete = selectedTrigger.parameters[1].value + "$" + values[0].autocomplete
- selectedTrigger.parameters[1].value = toComplete
- setSelectedTrigger(selectedTrigger)
- }
-
- setUpdate(Math.random());
- setShowDropdown(false);
- setMenuPosition(null);
- };
const iconStyle = {
marginRight: 15,
@@ -13372,7 +13390,7 @@ const releaseToConnectLabel = "Release to Connect"
*/
}
- const handleSubflowStartnodeSelection = (e) => {
+ var handleSubflowStartnodeSelection = (e) => {
setSubworkflowStartnode(e.target.value);
if (e.target.value === null || e.target.value === undefined) {
@@ -13445,7 +13463,51 @@ const releaseToConnectLabel = "Release to Connect"
setWorkflow(workflow);
}
+ }
+ const handleMenuClose = () => {
+ setUpdate(Math.random());
+ setMenuPosition(null);
+ };
+
+ const handleItemClick = (values) => {
+ console.log("VALUES: ", values)
+ if (values === undefined || values === null || values.length === 0) {
+ return;
+ }
+
+
+ /*
+ workflow.triggers[selectedTriggerIndex].parameters[1].value
+ .trim()
+ .endsWith("$")
+ ? values[0].autocomplete
+ : "$" + values[0].autocomplete;
+
+ for (var key in values) {
+ if (key === 0 || values[key].autocomplete.length === 0) {
+ continue;
+ }
+
+ toComplete += values[key].autocomplete
+ }
+ */
+
+ if (selectedTrigger.name === "Shuffle Workflow") {
+ const toComplete = workflow?.triggers?.[selectedTriggerIndex]?.parameters?.[1]?.value + "$" + values[0]?.autocomplete
+ // selectedTrigger.parameters[1].value = toComplete
+ workflow.triggers[selectedTriggerIndex].parameters[1].value = toComplete
+ const foundfield = document.getElementById("subflow_exec_field")
+ if (foundfield !== undefined && foundfield !== null) {
+ foundfield.value = toComplete
+ }
+ setWorkflow(workflow)
+ }
+
+ setUpdate(Math.random());
+ setShowDropdown(false);
+ setMenuPosition(null);
+ };
const subflowtypes = [
{
@@ -13456,7 +13518,26 @@ const releaseToConnectLabel = "Release to Connect"
}
]
- return (
+ const handleSubflowParamChange = (value) => {
+
+ if (!workflow?.triggers || !workflow.triggers[selectedTriggerIndex]?.parameters) {
+ console.log("Required workflow properties are undefined")
+ return
+ }
+
+ if (!workflow.triggers[selectedTriggerIndex].parameters[1]) {
+ workflow.triggers[selectedTriggerIndex].parameters[1] = {
+ name: "execution_argument",
+ value: ""
+ }
+ }
+
+ workflow.triggers[selectedTriggerIndex].parameters[1].value = value
+ setWorkflow(workflow)
+ setLastSaved(false)
+ }
+
+ const SubflowSidebar = Object.getOwnPropertyNames(selectedTrigger).length === 0 || workflow.triggers[selectedTriggerIndex] === undefined || selectedTrigger.trigger_type !== "SUBFLOW" ? null :
@@ -13540,16 +13621,20 @@ const releaseToConnectLabel = "Release to Connect"
Name
@@ -13564,14 +13649,18 @@ const releaseToConnectLabel = "Release to Connect"
Delay
{
if (isNaN(event.target.value)) {
console.log("NAN: ", event.target.value)
@@ -13662,8 +13751,7 @@ const releaseToConnectLabel = "Release to Connect"
@@ -13862,6 +13951,7 @@ const releaseToConnectLabel = "Release to Connect"
value: action
}
})
+ document.activeElement.blur()
}}
style={{
backgroundColor: theme.palette.inputColor,
@@ -13889,15 +13979,43 @@ const releaseToConnectLabel = "Release to Connect"
-
+
Execution Argument
+
+ {
+ event.preventDefault()
+ setCodeEditorModalOpen(true)
+ setActiveDialog("codeeditor")
+ var parsedvalue = workflow?.triggers[selectedTriggerIndex]?.parameters[1]?.value
+
+ setEditorData({
+ "name": workflow.triggers[selectedTriggerIndex].parameters[1].name,
+ "value": parsedvalue,
+ "field_number": 1,
+ "actionlist": subflowActionList,
+ "field_id": "subflow_exec_field",
+ })
+ }}
+ >
+
+
+
{
- setLastSaved(false)
-
+ onChange={(e) => {
workflow.triggers[selectedTriggerIndex].parameters[1].value = e.target.value
setWorkflow(workflow)
+ setLastSaved(false)
}}
/>
{!showDropdown ? null :
@@ -13949,7 +14066,7 @@ const releaseToConnectLabel = "Release to Connect"
marginTop: 2,
}}
>
- {actionlist.map((innerdata) => {
+ {subflowActionList.map((innerdata) => {
const icon =
innerdata.type === "action" ? (
@@ -14123,17 +14240,16 @@ const releaseToConnectLabel = "Release to Connect"
overflow: "hidden",
}}
onClick={() => {
- console.log("CLICKED: ", innerdata);
console.log(innerdata.example)
handleItemClick([innerdata]);
}}
>
-
+
- );
- }
-
- return null;
- };
+
const CommentSidebar = () => {
if (Object.getOwnPropertyNames(selectedComment).length > 0) {
@@ -14705,7 +14817,6 @@ const releaseToConnectLabel = "Release to Connect"
>
);
})}
@@ -18655,8 +18766,6 @@ const releaseToConnectLabel = "Release to Connect"
left: event.screenY,
}
- console.log("POS CLICK: ", pos)
-
setAnchorPosition(pos)
}}
onSelect={(select) => {
@@ -19260,10 +19369,12 @@ const releaseToConnectLabel = "Release to Connect"
color="primary"
style={{ float: "right", marginTop: 20, marginLeft: 10 }}
onClick={() => {
+ const skip_popup = true
executeWorkflow(
executionData.execution_argument,
executionData.start,
- lastSaved
+ lastSaved,
+ skip_popup,
)
if (executionText === undefined || executionText === null || executionText.length === 0) {
@@ -20823,7 +20934,7 @@ const releaseToConnectLabel = "Release to Connect"
{/* Looks for triggers" */}
{/* Only fixed the ones that require scrolling on a small screen */}
{/* Most important: Actions. But these are a lot more complex */}
- {rightSideBarOpen && (selectedTrigger.trigger_type === "SCHEDULE" || selectedTrigger.trigger_type === "WEBHOOK" || selectedTrigger.trigger_type === "PIPELINE" || selectedTrigger.trigger_type === "USERINPUT") ?
+ {rightSideBarOpen && (selectedTrigger.trigger_type === "SCHEDULE" || selectedTrigger.trigger_type === "WEBHOOK" || selectedTrigger.trigger_type === "PIPELINE" || selectedTrigger.trigger_type === "USERINPUT" || selectedTrigger.trigger_type === "SUBFLOW") ?
{Object.getOwnPropertyNames(selectedTrigger)?.length > 0 ?
selectedTrigger.trigger_type === "SCHEDULE" ?
@@ -20834,17 +20945,19 @@ const releaseToConnectLabel = "Release to Connect"
WebhookSidebar
: selectedTrigger.trigger_type === "USERINPUT" ?
UserinputSidebar
+ : selectedTrigger.trigger_type === "SUBFLOW" ?
+ SubflowSidebar
: null
: null}
: null}
-
+{/*
{
rightSideBarOpen && selectedTrigger?.trigger_type === "SUBFLOW"&& Object.getOwnPropertyNames(selectedTrigger)?.length > 0 ?
: null
- }
+ } */}
{/*
- const changeActionParameterCodeMirror = (event, count, data, actionlist) => {
- // Check if event.target.value is an array. If it is, split with comma
+ const changeActionParameterCodeMirror = (event, count, data, actionlist, parametername) => {
+ // FIXME: This exists ONLY to make sure focus + blur actually changes the field value
+ // in fields from ParsedAction.jsx such as rightside_field_2
+ const simulateTyping = (inputElement, text) => {
+ if (!inputElement) {
+ console.error("Target element not found!")
+ return;
+ }
+
+ //console.log("Simulating typing for: ", text, "in", inputElement)
+
+ inputElement.value = ""
+ setTimeout(() => {
+ text.split("").forEach((char, index) => {
+ setTimeout(() => {
+ inputElement.value = text.slice(0, index + 1)
+
+ // Simulate an event object like React's synthetic event
+ const event = {
+ target: {
+ value: inputElement.value,
+ },
+ };
+
+ // Find the onChange handler, assuming you're calling it from here
+ if (typeof inputElement.onchange === 'function') {
+ inputElement.onchange(event); // Call onChange with the synthetic event
+ }
+
+ // Dispatch the input event for React's internal event system
+ const inputEvent = new Event("input", { bubbles: true });
+ inputElement.dispatchEvent(inputEvent);
+
+ }, 10)
+ })
+ }, 50)
+
+ setTimeout(() => {
+ inputElement.focus()
+ }, 500)
+ };
+
+ // Check if event.target.value is an array. If it is, split with comma
+ if (parametername !== undefined && parametername.startsWith("${") && parametername.endsWith("}")) {
+ var paramcheckIndex = selectedAction.parameters.findIndex(param => param.name === parametername)
+ if (paramcheckIndex !== -1) {
+ // Replace the value in the field
+ const toReplace = data.replaceAll("\\\"", "\"").replaceAll("\"", "\\\"");
+ selectedAction.parameters[paramcheckIndex].value = toReplace
+ setSelectedAction(selectedAction)
+ setUpdate(Math.random())
+
+ // Find the fieldname
+ const clickedFieldId = "rightside_field_" + count;
+ const clickedField = document.getElementById(clickedFieldId)
+ if (clickedField !== undefined && clickedField !== null) {
+ simulateTyping(clickedField, toReplace)
+
+ /*
+ clickedField.value = toReplace
+ const newEvent = new Event("input", { bubbles: true })
+ Object.defineProperty(event, "target", {
+ value: { ...clickedField, value: toReplace },
+ writable: false,
+ })
+
+
+ //const newEvent = new Event("input", { bubbles: true })
+ clickedField.dispatchEvent(newEvent)
+ console.log("Found field: ", clickedField)
+ */
+ }
+
+ //toast("Replaced field!")
+
+ return
+ }
+ }
+
if (data.startsWith("${") && data.endsWith("}")) {
+ console.log("Changing field with variable: ", data)
+
// PARAM FIX - Gonna use the ID field, even though it's a hack
- const paramcheck = selectedAction.parameters.find(param => param.name === "body")
+ var paramcheck = selectedAction.parameters.find(param => param.name === "body")
if (paramcheck !== undefined) {
// Escapes all double quotes
- const toReplace = event.target.value.trim().replaceAll("\\\"", "\"").replaceAll("\"", "\\\"");
+ const toReplace = event.target.value.replaceAll("\\\"", "\"").replaceAll("\"", "\\\"");
if (paramcheck["value_replace"] === undefined || paramcheck["value_replace"] === null) {
paramcheck["value_replace"] = [{
"key": data.name,
@@ -22532,8 +22724,8 @@ const releaseToConnectLabel = "Release to Connect"
//selectedActionParameters[count]["value_replace"] = paramcheck["value_replace"]
selectedAction.parameters[count]["value_replace"] = paramcheck["value_replace"]
}
+
setSelectedAction(selectedAction)
- //setUpdate(Math.random())
return
}
}
@@ -22686,9 +22878,10 @@ const releaseToConnectLabel = "Release to Connect"
workflowExecutions={workflowExecutions}
getParents={getParents}
selectedAction={selectedAction}
+ selectedTrigger={selectedTrigger}
aiSubmit={aiSubmit}
toolsAppId={toolsApp.id}
-
+ handleSubflowParamChange={handleSubflowParamChange}
codedata={editorData.value}
setcodedata={setcodedata}
diff --git a/frontend/src/views/ApiExplorerWrapper.jsx b/frontend/src/views/ApiExplorerWrapper.jsx
index 197e0d08..57070c8e 100644
--- a/frontend/src/views/ApiExplorerWrapper.jsx
+++ b/frontend/src/views/ApiExplorerWrapper.jsx
@@ -215,7 +215,12 @@ const ApiExplorerWrapper = (props) => {
})
.then((responseJson) => {
if (responseJson.success === true) {
- handleDecodeOfOpenApiData(responseJson);
+ if (responseJson.openapi === undefined || responseJson.openapi === null) {
+ toast.warning("Loaded App, but no API found. Redirecting to app search..")
+ navigate(`/apps/${appid}`)
+ } else {
+ handleDecodeOfOpenApiData(responseJson);
+ }
} else {
toast.error("Failed to get app data or App doesn't exist (4)");
}
diff --git a/frontend/src/views/Docs.jsx b/frontend/src/views/Docs.jsx
index 0af12280..68ab392b 100755
--- a/frontend/src/views/Docs.jsx
+++ b/frontend/src/views/Docs.jsx
@@ -100,7 +100,7 @@ export const CopyToClipboard = (props) => {
)
}
-export const Paragrah = (props) => {
+export const Paragraph = (props) => {
const element = React.createElement(
`p`,
{},
@@ -123,7 +123,7 @@ export const Paragrah = (props) => {
return (
-
+
{element}
)
@@ -793,7 +793,7 @@ const Docs = (defaultprops) => {
maxWidth: "100%",
minWidth: "100%",
overflow: "hidden",
- fontSize: isMobile ? "1.3rem" : "0.8rem",
+ fontSize: isMobile ? "1.3rem" : "1rem",
};
const alertNote = {
@@ -935,7 +935,7 @@ const Docs = (defaultprops) => {
h5: Heading,
h6: Heading,
a: OuterLink,
- p: Paragrah,
+ p: Paragraph,
blockquote: Blockquote,
}
diff --git a/frontend/src/views/UpdateAuthentication.jsx b/frontend/src/views/UpdateAuthentication.jsx
index 01e4e730..c3309cf4 100644
--- a/frontend/src/views/UpdateAuthentication.jsx
+++ b/frontend/src/views/UpdateAuthentication.jsx
@@ -148,7 +148,7 @@ const SetAuthentication = (props) => {
console.log("App: ", app)
return (
-
+
{loadFail !== "" ?
loadFail
:
diff --git a/frontend/src/views/Workflows2.jsx b/frontend/src/views/Workflows2.jsx
index 1ead2cd2..c58001da 100644
--- a/frontend/src/views/Workflows2.jsx
+++ b/frontend/src/views/Workflows2.jsx
@@ -649,7 +649,6 @@ const DropzoneWrapper = memo(({ onDrop, WorkflowView }) => {
const Workflows2 = (props) => {
const { globalUrl, isLoggedIn, isLoaded, userdata, checkLogin } = props;
- const { leftSideBarOpenByClick } = useContext(Context);
const location = useLocation();
const navigate = useNavigate();
const [currTab, setCurrTab] = useState(0);