diff --git a/go.mod b/go.mod index 91148ca1..af8e532d 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,7 @@ require ( github.com/google/uuid v1.6.0 github.com/iancoleman/strcase v0.3.0 github.com/launchdarkly/api-client-go/v14 v14.0.0 + github.com/launchdarkly/sdk-meta/api v0.1.1 github.com/mitchellh/go-homedir v1.1.0 github.com/muesli/reflow v0.3.0 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c @@ -19,6 +20,7 @@ require ( github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.18.2 github.com/stretchr/testify v1.9.0 + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 golang.org/x/term v0.18.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -69,9 +71,8 @@ require ( github.com/yuin/goldmark-emoji v1.0.1 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.9.0 // indirect - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect golang.org/x/net v0.23.0 // indirect - golang.org/x/oauth2 v0.15.0 // indirect + golang.org/x/oauth2 v0.18.0 // indirect golang.org/x/sync v0.5.0 // indirect golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect diff --git a/go.sum b/go.sum index 08b870c8..84778c44 100644 --- a/go.sum +++ b/go.sum @@ -166,6 +166,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/launchdarkly/api-client-go/v14 v14.0.0 h1:fZfi5zKwgjpaOgK4NKcU5mJT2C8sYsR8nnuJYTaFvNU= github.com/launchdarkly/api-client-go/v14 v14.0.0/go.mod h1:K7ejD5nn9ar94p/5qrQ0t9iJygdIQyH70U9M9rYvw5Y= +github.com/launchdarkly/sdk-meta/api v0.1.1 h1:B9UaOFTDGQSDzbSTwqiBmaTN3xDfrlIu1JQ9LCs2UiA= +github.com/launchdarkly/sdk-meta/api v0.1.1/go.mod h1:vXfR0z4XBz49IYT/2GDEza+Iat3PcuBCC438AZT6oDg= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -345,8 +347,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= -golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= +golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= +golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= 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= diff --git a/internal/quickstart/choose_sdk.go b/internal/quickstart/choose_sdk.go index a310e6fe..097c21e8 100644 --- a/internal/quickstart/choose_sdk.go +++ b/internal/quickstart/choose_sdk.go @@ -3,8 +3,14 @@ package quickstart import ( "fmt" "io" + "io/fs" + "path/filepath" "strings" + "github.com/launchdarkly/ldcli/internal/sdks" + "github.com/launchdarkly/sdk-meta/api/sdkmeta" + "golang.org/x/exp/slices" + "github.com/charmbracelet/bubbles/help" "github.com/charmbracelet/bubbles/key" "github.com/charmbracelet/bubbles/list" @@ -18,23 +24,18 @@ var ( titleBarStyle = lipgloss.NewStyle().MarginBottom(1) ) -const ( - clientSideSDK = "client" - mobileSDK = "mobile" - serverSideSDK = "server" -) - type chooseSDKModel struct { help help.Model helpKeys keyMap list list.Model + sdkDetails []sdkDetail selectedIndex int selectedSDK sdkDetail } func NewChooseSDKModel(selectedIndex int) tea.Model { - initSDKs() - l := list.New(sdksToItems(), sdkDelegate{}, 30, 9) + sdkDetails := initSDKs() + l := list.New(sdksToItems(sdkDetails), sdkDelegate{}, 30, 9) l.FilterInput.PromptStyle = lipgloss.NewStyle() l.Title = "Select your SDK:" @@ -61,15 +62,90 @@ func NewChooseSDKModel(selectedIndex int) tea.Model { Quit: BindingQuit, }, list: l, + sdkDetails: sdkDetails, selectedIndex: selectedIndex, } } -// initSDKs sets the index of each SDK based on place in list. -func initSDKs() { - for i := range SDKs { - SDKs[i].index = i +// The CLI uses the sdkmeta project to obtain metadata about each SDK, including the display names +// and types (client, server, etc.) +// Currently, there is no sdkmeta for code examples associated with each SDK, so we hard-code the examples here. +// Once they are part of sdkmeta we can remove this list. +var sdkExamples = map[string]string{ + "react-client-sdk": "https://github.com/launchdarkly/react-client-sdk/tree/main/examples/typescript", + "vue": "https://github.com/launchdarkly/vue-client-sdk/tree/main/example", + "react-native": "https://github.com/launchdarkly/js-core/tree/main/packages/sdk/react-native/example", + "cpp-client-sdk": "https://github.com/launchdarkly/cpp-sdks/tree/main/examples/hello-cpp-client", + "cpp-server-sdk": "https://github.com/launchdarkly/cpp-sdks/tree/main/examples/hello-cpp-server", + "lua-server-server": "https://github.com/launchdarkly/lua-server-sdk/tree/main/examples/hello-lua-server", +} + +// sdkOrder is a list of IDs the SDKs in order that they should be rendered based on popularity. +var sdkOrder = []string{ + "react-client-sdk", + "node-server", + "python-server-sdk", + "java-server-sdk", + "dotnet-server-sdk", + "js-client-sdk", + "vue", + "swift-client-sdk", + "go-server-sdk", + "android", + "react-native", + "ruby-server-sdk", + "flutter-client-sdk", + "dotnet-client-sdk", + "erlang-server-sdk", + "rust-server-sdk", + "cpp-client-sdk", + "roku", + "node-client-sdk", + "cpp-server-sdk", + "lua-server-sdk", + "haskell-server-sdk", + "php-server-sdk", +} + +// initSDKs is responsible for loading SDK quickstart instructions from the embedded filesystem. +// +// The names of the files are special: they are the ID of the SDK (e.g. react-native), and are used as an index or +// key to lookup associated sdk metadata (display name, SDK type, etc.) +// +// Therefore, take care when naming the files. A list of valid SDK IDs can be found here: +// https://github.com/launchdarkly/sdk-meta/blob/main/products/names.json +func initSDKs() []sdkDetail { + items, err := sdks.InstructionFiles.ReadDir("sdk_instructions") + if err != nil { + panic("failed to load embedded SDK quickstart instructions: " + err.Error()) } + + slices.SortFunc(items, func(a fs.DirEntry, b fs.DirEntry) int { + return strings.Compare(a.Name(), b.Name()) + }) + + details := make([]sdkDetail, 0, len(items)) + for _, item := range items { + id, _, _ := strings.Cut(filepath.Base(item.Name()), ".") + if _, ok := sdkmeta.Names[id]; !ok { + continue + } + index := slices.Index(sdkOrder, id) + if index == -1 { + // if we missed an SDK don't add it with an invalid index + continue + } + + details = append(details, sdkDetail{ + id: id, + index: index, + displayName: sdkmeta.Names[id], + sdkType: sdkmeta.Types[id], + url: sdkExamples[id], + }) + } + + return details } // Init sends commands when the model is created that will: @@ -116,145 +192,20 @@ func (m chooseSDKModel) View() string { } type sdkDetail struct { - canonicalName string - displayName string - index int - kind string - url string // custom URL if it differs from the other SDKs + id string + displayName string + index int + sdkType sdkmeta.Type + url string // custom URL if it differs from the other SDKs } func (s sdkDetail) FilterValue() string { return s.displayName } -var SDKs = []sdkDetail{ - { - canonicalName: "react", - displayName: "React", - kind: clientSideSDK, - url: "https://github.com/launchdarkly/react-client-sdk/tree/main/examples/typescript", - }, - { - canonicalName: "node-server", - displayName: "Node.js (server-side)", - kind: serverSideSDK, - }, - { - canonicalName: "python", - displayName: "Python", - kind: serverSideSDK, - }, - { - canonicalName: "java", - displayName: "Java", - kind: serverSideSDK, - }, - { - canonicalName: "dotnet-server", - displayName: ".NET (server-side)", - kind: serverSideSDK, - }, - { - canonicalName: "js", - displayName: "JavaScript", - kind: clientSideSDK, - }, - { - canonicalName: "vue", - displayName: "Vue", - kind: clientSideSDK, - url: "https://github.com/launchdarkly/vue-client-sdk/tree/main/example", - }, - { - canonicalName: "ios-swift", - displayName: "iOS", - kind: mobileSDK, - }, - { - canonicalName: "go", - displayName: "Go", - kind: serverSideSDK, - }, - { - canonicalName: "android", - displayName: "Android", - kind: mobileSDK, - }, - { - canonicalName: "react-native", - displayName: "React Native", - kind: mobileSDK, - url: "https://github.com/launchdarkly/js-core/tree/main/packages/sdk/react-native/example", - }, - { - canonicalName: "ruby", - displayName: "Ruby", - kind: serverSideSDK, - }, - { - canonicalName: "flutter", - displayName: "Flutter", - kind: mobileSDK, - }, - { - canonicalName: "dotnet-client", - displayName: ".NET (client-side)", - kind: clientSideSDK, - }, - { - canonicalName: "erlang", - displayName: "Erlang", - kind: serverSideSDK, - }, - { - canonicalName: "rust", - displayName: "Rust", - kind: serverSideSDK, - }, - { - canonicalName: "c-client", - displayName: "C/C++ (client-side)", - kind: clientSideSDK, - url: "https://github.com/launchdarkly/cpp-sdks/tree/main/examples/hello-cpp-client", - }, - { - canonicalName: "roku", - displayName: "Roku", - kind: clientSideSDK, - }, - { - canonicalName: "node-client", - displayName: "Node.js (client-side)", - kind: clientSideSDK, - }, - { - canonicalName: "c-server", - displayName: "C/C++ (server-side)", - kind: serverSideSDK, - url: "https://github.com/launchdarkly/cpp-sdks/tree/main/examples/hello-cpp-server", - }, - { - canonicalName: "lua-server", - displayName: "Lua", - kind: serverSideSDK, - url: "https://github.com/launchdarkly/lua-server-sdk/tree/main/examples/hello-lua-server", - }, - { - canonicalName: "haskell-server", - displayName: "Haskell", - kind: serverSideSDK, - }, - { - canonicalName: "php", - displayName: "PHP", - kind: serverSideSDK, - }, -} - -func sdksToItems() []list.Item { - items := make([]list.Item, len(SDKs)) - for i, sdk := range SDKs { - items[i] = list.Item(sdk) +func sdksToItems(sdkDetails []sdkDetail) []list.Item { + items := make([]list.Item, len(sdkDetails)) + for _, info := range sdkDetails { + items[info.index] = list.Item(info) } - return items } diff --git a/internal/quickstart/container.go b/internal/quickstart/container.go index 870fd423..d299327d 100644 --- a/internal/quickstart/container.go +++ b/internal/quickstart/container.go @@ -125,10 +125,10 @@ func (m ContainerModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.baseURI, m.height, m.width, - m.sdk.canonicalName, + m.sdk.id, m.sdk.displayName, m.sdk.url, - m.sdk.kind, + m.sdk.sdkType, m.flagKey, m.environment, ) @@ -153,10 +153,10 @@ func (m ContainerModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.baseURI, m.height, m.width, - msg.sdk.canonicalName, + msg.sdk.id, msg.sdk.displayName, msg.sdk.url, - msg.sdk.kind, + msg.sdk.sdkType, m.flagKey, m.environment, ) @@ -196,7 +196,7 @@ func (m ContainerModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.accessToken, m.baseURI, m.flagKey, - m.sdk.kind, + m.sdk.id, ) cmd = m.currentModel.Init() m.currentStep += 1 @@ -213,7 +213,7 @@ func (m ContainerModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { cmd = tea.Batch( cmd, trackSetupStepStartedEvent(m.analyticsTracker, m.currentStep.String()), - trackSetupSDKSelectedEvent(m.analyticsTracker, m.sdk.canonicalName), + trackSetupSDKSelectedEvent(m.analyticsTracker, m.sdk.id), ) case m.currentStep == stepToggleFlag && !m.flagToggled: // the first time we get to the flag toggled view diff --git a/internal/quickstart/messages.go b/internal/quickstart/messages.go index 769304b5..1443d697 100644 --- a/internal/quickstart/messages.go +++ b/internal/quickstart/messages.go @@ -146,7 +146,7 @@ type choseSDKMsg struct { func chooseSDK(sdk sdkDetail) tea.Cmd { return func() tea.Msg { if sdk.url == "" { - sdk.url = fmt.Sprintf("https://github.com/launchdarkly/hello-%s", sdk.canonicalName) + sdk.url = fmt.Sprintf("https://github.com/launchdarkly/hello-%s", sdk.id) } return choseSDKMsg{ diff --git a/internal/quickstart/show_sdk_instructions.go b/internal/quickstart/show_sdk_instructions.go index ce0ef771..5dfab305 100644 --- a/internal/quickstart/show_sdk_instructions.go +++ b/internal/quickstart/show_sdk_instructions.go @@ -2,6 +2,7 @@ package quickstart import ( "fmt" + "github.com/launchdarkly/sdk-meta/api/sdkmeta" "github.com/charmbracelet/bubbles/help" "github.com/charmbracelet/bubbles/key" @@ -39,7 +40,7 @@ type showSDKInstructionsModel struct { help help.Model helpKeys keyMap instructions string - sdkKind string + sdkKind sdkmeta.Type spinner spinner.Model url string viewport viewport.Model @@ -55,7 +56,7 @@ func NewShowSDKInstructionsModel( canonicalName string, displayName string, url string, - sdkKind string, + sdkKind sdkmeta.Type, flagKey string, environment *environment, ) tea.Model { @@ -104,7 +105,7 @@ func (m showSDKInstructionsModel) Init() tea.Cmd { cmds = append(cmds, fetchEnv(m.environmentsClient, m.accessToken, m.baseUri, defaultEnvKey, defaultProjKey)) } - if m.sdkKind == clientSideSDK { + if m.sdkKind == sdkmeta.ClientSideType { cmds = append(cmds, updateClientSideFlag(m.flagsClient, m.accessToken, m.baseUri, m.flagKey)) } @@ -169,7 +170,7 @@ func (m showSDKInstructionsModel) headerView() string { return style.Render( fmt.Sprintf(` Here are the steps to set up a test app to see feature flagging in action -using the %s SDK in your Default project & Test environment. +using the %s in your Default project & Test environment. You should have everything you need to get started, including the flag from the previous step and your environment key from your Test environment already diff --git a/internal/quickstart/toggle_flag.go b/internal/quickstart/toggle_flag.go index 61419c7f..34df0441 100644 --- a/internal/quickstart/toggle_flag.go +++ b/internal/quickstart/toggle_flag.go @@ -9,6 +9,7 @@ import ( "github.com/charmbracelet/bubbles/spinner" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" + "github.com/launchdarkly/sdk-meta/api/sdkmeta" "github.com/launchdarkly/ldcli/internal/errors" "github.com/launchdarkly/ldcli/internal/flags" @@ -30,7 +31,7 @@ type toggleFlagModel struct { flagWasFetched bool help help.Model helpKeys keyMap - sdkKind string + sdkID string spinner spinner.Model // Throttling fields to control how quickly a user can press (or hold) tab to toggle the flag. @@ -42,7 +43,7 @@ type toggleFlagModel struct { throttling bool // flag to decide when the user is throttled } -func NewToggleFlagModel(client flags.Client, accessToken string, baseUri string, flagKey string, sdkKind string) tea.Model { +func NewToggleFlagModel(client flags.Client, accessToken string, baseUri string, flagKey string, sdkID string) tea.Model { s := spinner.New() s.Spinner = spinner.Points @@ -56,7 +57,7 @@ func NewToggleFlagModel(client flags.Client, accessToken string, baseUri string, Back: BindingBack, Quit: BindingQuit, }, - sdkKind: sdkKind, + sdkID: sdkID, spinner: s, } } @@ -128,10 +129,17 @@ func (m toggleFlagModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, cmd } -var logTypeMap = map[string]string{ - serverSideSDK: "application logs", - mobileSDK: "application", - clientSideSDK: "browser", +func getLogType(sdkID string) string { + switch sdkmeta.Types[sdkID] { + case sdkmeta.ServerSideType, sdkmeta.EdgeType: + return "application logs" + case sdkmeta.ClientSideType: + if sdkID == "js-client-sdk" { + return "browser" + } + return "application" + } + return "logs" } func (m toggleFlagModel) View() string { @@ -151,7 +159,7 @@ func (m toggleFlagModel) View() string { } if m.flagWasEnabled && m.err == nil { - furtherInstructions = fmt.Sprintf("\n\nCheck your %s to see the change!", logTypeMap[m.sdkKind]) + furtherInstructions = fmt.Sprintf("\n\nCheck your %s to see the change!", getLogType(m.sdkID)) furtherInstructions += "\nDidn't see this change in your application? Check https://docs.launchdarkly.com/home/flags/toggle#watch-for-changes-in-your-application for details." } diff --git a/internal/sdks/sdk_instructions/c-client.md b/internal/sdks/sdk_instructions/cpp-client-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/c-client.md rename to internal/sdks/sdk_instructions/cpp-client-sdk.md diff --git a/internal/sdks/sdk_instructions/c-server.md b/internal/sdks/sdk_instructions/cpp-server-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/c-server.md rename to internal/sdks/sdk_instructions/cpp-server-sdk.md diff --git a/internal/sdks/sdk_instructions/dotnet-client.md b/internal/sdks/sdk_instructions/dotnet-client-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/dotnet-client.md rename to internal/sdks/sdk_instructions/dotnet-client-sdk.md diff --git a/internal/sdks/sdk_instructions/dotnet-server.md b/internal/sdks/sdk_instructions/dotnet-server-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/dotnet-server.md rename to internal/sdks/sdk_instructions/dotnet-server-sdk.md diff --git a/internal/sdks/sdk_instructions/erlang.md b/internal/sdks/sdk_instructions/erlang-server-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/erlang.md rename to internal/sdks/sdk_instructions/erlang-server-sdk.md diff --git a/internal/sdks/sdk_instructions/flutter.md b/internal/sdks/sdk_instructions/flutter-client-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/flutter.md rename to internal/sdks/sdk_instructions/flutter-client-sdk.md diff --git a/internal/sdks/sdk_instructions/go.md b/internal/sdks/sdk_instructions/go-server-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/go.md rename to internal/sdks/sdk_instructions/go-server-sdk.md diff --git a/internal/sdks/sdk_instructions/haskell-server.md b/internal/sdks/sdk_instructions/haskell-server-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/haskell-server.md rename to internal/sdks/sdk_instructions/haskell-server-sdk.md diff --git a/internal/sdks/sdk_instructions/java.md b/internal/sdks/sdk_instructions/java-server-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/java.md rename to internal/sdks/sdk_instructions/java-server-sdk.md diff --git a/internal/sdks/sdk_instructions/js.md b/internal/sdks/sdk_instructions/js-client-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/js.md rename to internal/sdks/sdk_instructions/js-client-sdk.md diff --git a/internal/sdks/sdk_instructions/lua-server.md b/internal/sdks/sdk_instructions/lua-server-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/lua-server.md rename to internal/sdks/sdk_instructions/lua-server-sdk.md diff --git a/internal/sdks/sdk_instructions/node-client.md b/internal/sdks/sdk_instructions/node-client-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/node-client.md rename to internal/sdks/sdk_instructions/node-client-sdk.md diff --git a/internal/sdks/sdk_instructions/php.md b/internal/sdks/sdk_instructions/php-server-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/php.md rename to internal/sdks/sdk_instructions/php-server-sdk.md diff --git a/internal/sdks/sdk_instructions/python.md b/internal/sdks/sdk_instructions/python-server-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/python.md rename to internal/sdks/sdk_instructions/python-server-sdk.md diff --git a/internal/sdks/sdk_instructions/react.md b/internal/sdks/sdk_instructions/react-client-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/react.md rename to internal/sdks/sdk_instructions/react-client-sdk.md diff --git a/internal/sdks/sdk_instructions/ruby.md b/internal/sdks/sdk_instructions/ruby-server-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/ruby.md rename to internal/sdks/sdk_instructions/ruby-server-sdk.md diff --git a/internal/sdks/sdk_instructions/rust.md b/internal/sdks/sdk_instructions/rust-server-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/rust.md rename to internal/sdks/sdk_instructions/rust-server-sdk.md diff --git a/internal/sdks/sdk_instructions/ios-swift.md b/internal/sdks/sdk_instructions/swift-client-sdk.md similarity index 100% rename from internal/sdks/sdk_instructions/ios-swift.md rename to internal/sdks/sdk_instructions/swift-client-sdk.md diff --git a/tools.go b/tools.go deleted file mode 100644 index 06ab7d0f..00000000 --- a/tools.go +++ /dev/null @@ -1 +0,0 @@ -package main diff --git a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/circularRef/base.yml b/vendor/github.com/getkin/kin-openapi/openapi3/testdata/circularRef/base.yml deleted file mode 100644 index ff8240eb..00000000 --- a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/circularRef/base.yml +++ /dev/null @@ -1,16 +0,0 @@ -openapi: "3.0.3" -info: - title: Recursive cyclic refs example - version: "1.0" -components: - schemas: - Foo: - properties: - foo2: - $ref: "other.yml#/components/schemas/Foo2" - bar: - $ref: "#/components/schemas/Bar" - Bar: - properties: - foo: - $ref: "#/components/schemas/Foo" diff --git a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/circularRef/other.yml b/vendor/github.com/getkin/kin-openapi/openapi3/testdata/circularRef/other.yml deleted file mode 100644 index 29b72d98..00000000 --- a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/circularRef/other.yml +++ /dev/null @@ -1,10 +0,0 @@ -openapi: "3.0.3" -info: - title: Recursive cyclic refs example - version: "1.0" -components: - schemas: - Foo2: - properties: - id: - type: string diff --git a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/Bar.yml b/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/Bar.yml deleted file mode 100644 index cc59fc27..00000000 --- a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/Bar.yml +++ /dev/null @@ -1,2 +0,0 @@ -type: string -example: bar diff --git a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/Cat.yml b/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/Cat.yml deleted file mode 100644 index c476aa1a..00000000 --- a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/Cat.yml +++ /dev/null @@ -1,4 +0,0 @@ -type: object -properties: - cat: - $ref: ../openapi.yml#/components/schemas/Cat diff --git a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/Foo.yml b/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/Foo.yml deleted file mode 100644 index 53a23366..00000000 --- a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/Foo.yml +++ /dev/null @@ -1,4 +0,0 @@ -type: object -properties: - bar: - $ref: ../openapi.yml#/components/schemas/Bar diff --git a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/Foo/Foo2.yml b/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/Foo/Foo2.yml deleted file mode 100644 index aeac81f4..00000000 --- a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/Foo/Foo2.yml +++ /dev/null @@ -1,4 +0,0 @@ -type: object -properties: - foo: - $ref: ../../openapi.yml#/components/schemas/Foo diff --git a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/models/error.yaml b/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/models/error.yaml deleted file mode 100644 index b4d40479..00000000 --- a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/components/models/error.yaml +++ /dev/null @@ -1,2 +0,0 @@ -type: object -title: ErrorDetails diff --git a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/issue615.yml b/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/issue615.yml deleted file mode 100644 index d1370e32..00000000 --- a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/issue615.yml +++ /dev/null @@ -1,60 +0,0 @@ -openapi: "3.0.3" -info: - title: Deep recursive cyclic refs example - version: "1.0" -paths: - /foo: - $ref: ./paths/foo.yml -components: - schemas: - FilterColumnIncludes: - type: object - properties: - $includes: - $ref: '#/components/schemas/FilterPredicate' - additionalProperties: false - maxProperties: 1 - minProperties: 1 - FilterPredicate: - oneOf: - - $ref: '#/components/schemas/FilterValue' - - type: array - items: - $ref: '#/components/schemas/FilterPredicate' - minLength: 1 - - $ref: '#/components/schemas/FilterPredicateOp' - - $ref: '#/components/schemas/FilterPredicateRangeOp' - FilterPredicateOp: - type: object - properties: - $any: - oneOf: - - type: array - items: - $ref: '#/components/schemas/FilterPredicate' - $none: - oneOf: - - $ref: '#/components/schemas/FilterPredicate' - - type: array - items: - $ref: '#/components/schemas/FilterPredicate' - additionalProperties: false - maxProperties: 1 - minProperties: 1 - FilterPredicateRangeOp: - type: object - properties: - $lt: - $ref: '#/components/schemas/FilterRangeValue' - additionalProperties: false - maxProperties: 2 - minProperties: 2 - FilterRangeValue: - oneOf: - - type: number - - type: string - FilterValue: - oneOf: - - type: number - - type: string - - type: boolean \ No newline at end of file diff --git a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/openapi.yml b/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/openapi.yml deleted file mode 100644 index 9f884c71..00000000 --- a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/openapi.yml +++ /dev/null @@ -1,33 +0,0 @@ -openapi: "3.0.3" -info: - title: Recursive refs example - version: "1.0" -paths: - /foo: - $ref: ./paths/foo.yml - /double-ref-foo: - get: - summary: Double ref response - description: Reference response with double reference. - responses: - "400": - $ref: "#/components/responses/400" -components: - schemas: - Foo: - $ref: ./components/Foo.yml - Foo2: - $ref: ./components/Foo/Foo2.yml - Bar: - $ref: ./components/Bar.yml - Cat: - $ref: ./components/Cat.yml - Error: - $ref: ./components/models/error.yaml - responses: - "400": - description: 400 Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/Error" diff --git a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/openapi.yml.internalized.yml b/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/openapi.yml.internalized.yml deleted file mode 100644 index 0d508527..00000000 --- a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/openapi.yml.internalized.yml +++ /dev/null @@ -1,110 +0,0 @@ -{ - "components": { - "parameters": { - "number": { - "in": "query", - "name": "someNumber", - "schema": { - "type": "string" - } - } - }, - "responses": { - "400": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "400 Bad Request" - } - }, - "schemas": { - "Bar": { - "example": "bar", - "type": "string" - }, - "Error":{ - "title":"ErrorDetails", - "type":"object" - }, - "Foo": { - "properties": { - "bar": { - "$ref": "#/components/schemas/Bar" - } - }, - "type": "object" - }, - "Foo2": { - "properties": { - "foo": { - "$ref": "#/components/schemas/Foo" - } - }, - "type": "object" - }, - "error":{ - "title":"ErrorDetails", - "type":"object" - }, - "Cat": { - "properties": { - "cat": { - "$ref": "#/components/schemas/Cat" - } - }, - "type": "object" - } - } - }, - "info": { - "title": "Recursive refs example", - "version": "1.0" - }, - "openapi": "3.0.3", - "paths": { - "/double-ref-foo": { - "get": { - "description": "Reference response with double reference.", - "responses": { - "400": { - "$ref": "#/components/responses/400" - } - }, - "summary": "Double ref response" - } - }, - "/foo": { - "get": { - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "foo2": { - "$ref": "#/components/schemas/Foo2" - } - }, - "type": "object" - } - } - }, - "description": "OK" - }, - "400": { - "$ref": "#/components/responses/400" - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/number" - } - ] - } - } -} diff --git a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/parameters/number.yml b/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/parameters/number.yml deleted file mode 100644 index 29f0f264..00000000 --- a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/parameters/number.yml +++ /dev/null @@ -1,4 +0,0 @@ -name: someNumber -in: query -schema: - type: string diff --git a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/paths/foo.yml b/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/paths/foo.yml deleted file mode 100644 index 4c845b53..00000000 --- a/vendor/github.com/getkin/kin-openapi/openapi3/testdata/recursiveRef/paths/foo.yml +++ /dev/null @@ -1,15 +0,0 @@ -parameters: - - $ref: ../parameters/number.yml -get: - responses: - "200": - description: OK - content: - application/json: - schema: - type: object - properties: - foo2: - $ref: ../openapi.yml#/components/schemas/Foo2 - "400": - $ref: "../openapi.yml#/components/responses/400" diff --git a/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/languages.json b/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/languages.json new file mode 100644 index 00000000..53b3bac3 --- /dev/null +++ b/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/languages.json @@ -0,0 +1,108 @@ +{ + "akamai-base": [ + "JavaScript", + "TypeScript" + ], + "akamai-edgekv": [ + "JavaScript", + "TypeScript" + ], + "android": [ + "Java", + "Kotlin" + ], + "apex-server-sdk": [ + "Apex" + ], + "cloudflare": [ + "JavaScript", + "TypeScript" + ], + "cpp-client-sdk": [ + "C++", + "C" + ], + "cpp-server-sdk": [ + "C++", + "C" + ], + "dotnet-client-sdk": [ + "C#" + ], + "dotnet-server-sdk": [ + "C#" + ], + "electron": [ + "JavaScript", + "TypeScript" + ], + "erlang-server-sdk": [ + "Erlang", + "Elixir" + ], + "flutter-client-sdk": [ + "Dart" + ], + "go-server-sdk": [ + "Go" + ], + "haskell-server-sdk": [ + "Haskell" + ], + "java-server-sdk": [ + "Java" + ], + "js-client-sdk": [ + "JavaScript", + "TypeScript" + ], + "lua-server-sdk": [ + "Lua" + ], + "node-client-sdk": [ + "JavaScript", + "TypeScript" + ], + "node-server": [ + "JavaScript", + "TypeScript" + ], + "php-server-sdk": [ + "PHP" + ], + "python-server-sdk": [ + "Python" + ], + "react-client-sdk": [ + "JavaScript", + "TypeScript" + ], + "react-native": [ + "JavaScript", + "TypeScript" + ], + "relay-proxy": [ + "Go" + ], + "roku": [ + "BrightScript" + ], + "ruby-server-sdk": [ + "Ruby" + ], + "rust-server-sdk": [ + "Rust" + ], + "swift-client-sdk": [ + "Swift", + "Objective-C" + ], + "vercel": [ + "JavaScript", + "TypeScript" + ], + "vue": [ + "JavaScript", + "TypeScript" + ] +} diff --git a/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/names.json b/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/names.json new file mode 100644 index 00000000..167ac3b7 --- /dev/null +++ b/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/names.json @@ -0,0 +1,32 @@ +{ + "akamai-base": "Akamai SDK", + "akamai-edgekv": "Akamai SDK for EdgeKV", + "android": "Android SDK", + "apex-server-sdk": "Apex Server SDK", + "cloudflare": "Cloudflare SDK", + "cpp-client-sdk": "C++ Client SDK", + "cpp-server-sdk": "C++ Server SDK", + "dotnet-client-sdk": ".NET Client SDK", + "dotnet-server-sdk": ".NET Server SDK", + "electron": "Electron SDK", + "erlang-server-sdk": "Erlang Server SDK", + "flutter-client-sdk": "Flutter Client SDK", + "go-server-sdk": "Go Server SDK", + "haskell-server-sdk": "Haskell Server SDK", + "java-server-sdk": "Java Server SDK", + "js-client-sdk": "JavaScript Client SDK", + "lua-server-sdk": "Lua Server SDK", + "node-client-sdk": "Node.js Client SDK", + "node-server": "Node.js Server SDK", + "php-server-sdk": "PHP SDK", + "python-server-sdk": "Python Server SDK", + "react-client-sdk": "React Web SDK", + "react-native": "React Native SDK", + "relay-proxy": "Relay Proxy", + "roku": "Roku SDK", + "ruby-server-sdk": "Ruby Server SDK", + "rust-server-sdk": "Rust Server SDK", + "swift-client-sdk": "iOS SDK", + "vercel": "Vercel Edge SDK", + "vue": "Vue SDK" +} diff --git a/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/releases.json b/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/releases.json new file mode 100644 index 00000000..3cf85160 --- /dev/null +++ b/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/releases.json @@ -0,0 +1,3812 @@ +{ + "akamai-base": [ + { + "major": 2, + "minor": 1, + "date": "2024-02-06T21:34:15Z", + "eol": null + }, + { + "major": 2, + "minor": 0, + "date": "2023-10-16T21:58:59Z", + "eol": "2025-02-06T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2023-07-05T21:32:41Z", + "eol": "2024-10-16T00:00:00Z" + } + ], + "akamai-edgekv": [ + { + "major": 1, + "minor": 1, + "date": "2024-02-06T21:34:16Z", + "eol": null + }, + { + "major": 1, + "minor": 0, + "date": "2023-07-05T21:32:43Z", + "eol": "2025-02-06T00:00:00Z" + } + ], + "android": [ + { + "major": 5, + "minor": 3, + "date": "2024-05-13T19:18:32Z", + "eol": null + }, + { + "major": 5, + "minor": 2, + "date": "2024-04-25T21:45:10Z", + "eol": "2025-05-13T00:00:00Z" + }, + { + "major": 5, + "minor": 1, + "date": "2024-03-14T20:47:22Z", + "eol": "2025-04-25T00:00:00Z" + }, + { + "major": 5, + "minor": 0, + "date": "2023-08-03T21:29:52Z", + "eol": "2025-03-14T00:00:00Z" + }, + { + "major": 4, + "minor": 3, + "date": "2023-08-03T19:03:14Z", + "eol": "2024-08-03T00:00:00Z" + }, + { + "major": 4, + "minor": 2, + "date": "2023-01-12T01:28:44Z", + "eol": "2024-08-03T00:00:00Z" + }, + { + "major": 4, + "minor": 1, + "date": "2022-12-23T01:21:02Z", + "eol": "2024-01-12T00:00:00Z" + }, + { + "major": 4, + "minor": 0, + "date": "2022-12-07T19:09:31Z", + "eol": "2023-12-23T00:00:00Z" + }, + { + "major": 3, + "minor": 6, + "date": "2023-01-11T23:18:39Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 3, + "minor": 5, + "date": "2022-12-23T01:38:35Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 3, + "minor": 4, + "date": "2022-12-23T01:07:55Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 3, + "minor": 3, + "date": "2022-12-02T23:23:14Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 3, + "minor": 2, + "date": "2022-08-23T22:12:21Z", + "eol": "2023-12-02T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2021-08-06T22:16:25Z", + "eol": "2023-08-23T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2021-05-08T00:10:29Z", + "eol": "2022-08-06T00:00:00Z" + }, + { + "major": 2, + "minor": 14, + "date": "2020-12-18T02:42:57Z", + "eol": "2022-05-08T00:00:00Z" + }, + { + "major": 2, + "minor": 13, + "date": "2020-08-07T21:07:28Z", + "eol": "2021-12-18T00:00:00Z" + }, + { + "major": 2, + "minor": 12, + "date": "2020-05-29T20:09:19Z", + "eol": "2021-08-07T00:00:00Z" + }, + { + "major": 2, + "minor": 11, + "date": "2020-02-28T18:19:57Z", + "eol": "2021-05-29T00:00:00Z" + }, + { + "major": 2, + "minor": 10, + "date": "2020-01-30T18:20:51Z", + "eol": "2021-02-28T00:00:00Z" + }, + { + "major": 2, + "minor": 9, + "date": "2019-10-25T21:07:46Z", + "eol": "2021-01-30T00:00:00Z" + }, + { + "major": 2, + "minor": 8, + "date": "2019-05-03T22:15:30Z", + "eol": "2020-10-25T00:00:00Z" + }, + { + "major": 2, + "minor": 7, + "date": "2019-04-02T23:00:02Z", + "eol": "2020-05-03T00:00:00Z" + }, + { + "major": 2, + "minor": 6, + "date": "2019-01-29T23:03:06Z", + "eol": "2020-04-02T00:00:00Z" + }, + { + "major": 2, + "minor": 5, + "date": "2018-06-13T00:57:19Z", + "eol": "2020-01-29T00:00:00Z" + }, + { + "major": 2, + "minor": 4, + "date": "2018-06-04T05:52:45Z", + "eol": "2019-06-13T00:00:00Z" + }, + { + "major": 2, + "minor": 3, + "date": "2018-03-22T01:07:54Z", + "eol": "2019-06-04T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2018-01-26T02:41:59Z", + "eol": "2019-03-22T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2017-10-14T07:08:06Z", + "eol": "2019-01-26T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2017-04-11T21:36:26Z", + "eol": "2018-10-14T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2016-09-29T21:35:40Z", + "eol": "2018-04-11T00:00:00Z" + } + ], + "apex-server-sdk": [ + { + "major": 1, + "minor": 3, + "date": "2024-01-23T18:15:30Z", + "eol": null + }, + { + "major": 1, + "minor": 2, + "date": "2022-09-27T21:50:39Z", + "eol": "2025-01-23T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2021-07-21T02:15:51Z", + "eol": "2023-09-27T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2021-06-08T20:39:58Z", + "eol": "2022-07-21T00:00:00Z" + } + ], + "cloudflare": [ + { + "major": 2, + "minor": 5, + "date": "2024-04-09T19:42:09Z", + "eol": null + }, + { + "major": 2, + "minor": 4, + "date": "2024-02-06T21:34:11Z", + "eol": "2025-04-09T00:00:00Z" + }, + { + "major": 2, + "minor": 3, + "date": "2023-11-14T23:44:24Z", + "eol": "2025-02-06T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2023-09-21T20:58:30Z", + "eol": "2024-11-14T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2023-08-14T23:12:37Z", + "eol": "2024-09-21T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2023-04-26T20:45:36Z", + "eol": "2024-08-14T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2022-10-13T10:53:45Z", + "eol": "2024-04-26T00:00:00Z" + } + ], + "cpp-client-sdk": [ + { + "major": 3, + "minor": 6, + "date": "2024-05-31T17:33:17Z", + "eol": null + }, + { + "major": 3, + "minor": 5, + "date": "2024-05-14T01:03:53Z", + "eol": "2025-05-31T00:00:00Z" + }, + { + "major": 3, + "minor": 4, + "date": "2023-12-26T22:54:02Z", + "eol": "2025-05-14T00:00:00Z" + }, + { + "major": 3, + "minor": 3, + "date": "2023-12-04T21:11:21Z", + "eol": "2024-12-26T00:00:00Z" + }, + { + "major": 3, + "minor": 2, + "date": "2023-10-23T18:43:03Z", + "eol": "2024-12-04T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2023-10-16T17:16:13Z", + "eol": "2024-10-23T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2023-06-01T16:10:37Z", + "eol": "2024-10-16T00:00:00Z" + }, + { + "major": 2, + "minor": 5, + "date": "2022-08-01T21:38:24Z", + "eol": "2024-06-01T00:00:00Z" + }, + { + "major": 2, + "minor": 4, + "date": "2021-12-10T16:41:22Z", + "eol": "2023-08-01T00:00:00Z" + }, + { + "major": 2, + "minor": 3, + "date": "2021-01-26T18:00:53Z", + "eol": "2022-12-10T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2020-11-24T14:55:17Z", + "eol": "2022-01-26T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2020-07-28T19:38:59Z", + "eol": "2021-11-24T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2020-06-15T19:44:17Z", + "eol": "2021-07-28T00:00:00Z" + }, + { + "major": 1, + "minor": 7, + "date": "2019-09-26T20:22:09Z", + "eol": "2021-06-15T00:00:00Z" + }, + { + "major": 1, + "minor": 6, + "date": "2019-09-11T20:45:55Z", + "eol": "2020-09-26T00:00:00Z" + }, + { + "major": 1, + "minor": 5, + "date": "2019-07-30T00:14:41Z", + "eol": "2020-09-11T00:00:00Z" + }, + { + "major": 1, + "minor": 4, + "date": "2019-07-03T18:43:03Z", + "eol": "2020-07-30T00:00:00Z" + }, + { + "major": 1, + "minor": 3, + "date": "2019-04-19T00:20:26Z", + "eol": "2020-07-03T00:00:00Z" + }, + { + "major": 1, + "minor": 2, + "date": "2019-04-12T17:02:38Z", + "eol": "2020-04-19T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2019-02-02T00:03:01Z", + "eol": "2020-04-12T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2019-01-10T22:59:33Z", + "eol": "2020-02-02T00:00:00Z" + } + ], + "cpp-server-sdk": [ + { + "major": 3, + "minor": 5, + "date": "2024-05-31T17:33:18Z", + "eol": null + }, + { + "major": 3, + "minor": 4, + "date": "2024-05-14T01:03:45Z", + "eol": "2025-05-31T00:00:00Z" + }, + { + "major": 3, + "minor": 3, + "date": "2023-12-26T22:54:04Z", + "eol": "2025-05-14T00:00:00Z" + }, + { + "major": 3, + "minor": 2, + "date": "2023-12-22T02:03:36Z", + "eol": "2024-12-26T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2023-12-21T18:47:13Z", + "eol": "2024-12-22T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2023-12-04T22:32:04Z", + "eol": "2024-12-21T00:00:00Z" + }, + { + "major": 2, + "minor": 9, + "date": "2023-01-27T21:57:42Z", + "eol": "2024-12-04T00:00:00Z" + }, + { + "major": 2, + "minor": 8, + "date": "2022-07-13T00:23:09Z", + "eol": "2024-01-27T00:00:00Z" + }, + { + "major": 2, + "minor": 7, + "date": "2022-06-02T20:59:31Z", + "eol": "2023-07-13T00:00:00Z" + }, + { + "major": 2, + "minor": 6, + "date": "2022-04-20T23:55:41Z", + "eol": "2023-06-02T00:00:00Z" + }, + { + "major": 2, + "minor": 5, + "date": "2022-02-23T21:13:12Z", + "eol": "2023-04-20T00:00:00Z" + }, + { + "major": 2, + "minor": 4, + "date": "2021-06-21T01:48:18Z", + "eol": "2023-02-23T00:00:00Z" + }, + { + "major": 2, + "minor": 3, + "date": "2021-01-28T22:15:23Z", + "eol": "2022-06-21T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2020-11-24T15:04:22Z", + "eol": "2022-01-28T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2020-05-12T16:05:18Z", + "eol": "2021-11-24T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2020-04-30T21:55:17Z", + "eol": "2021-05-12T00:00:00Z" + }, + { + "major": 1, + "minor": 2, + "date": "2020-01-22T19:09:22Z", + "eol": "2021-04-30T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2019-09-26T20:25:08Z", + "eol": "2021-01-22T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2019-07-05T23:02:42Z", + "eol": "2020-09-26T00:00:00Z" + } + ], + "dotnet-client-sdk": [ + { + "major": 5, + "minor": 2, + "date": "2024-05-08T17:01:33Z", + "eol": null + }, + { + "major": 5, + "minor": 1, + "date": "2024-03-14T18:58:04Z", + "eol": "2025-05-08T00:00:00Z" + }, + { + "major": 5, + "minor": 0, + "date": "2024-02-13T20:30:17Z", + "eol": "2025-03-14T00:00:00Z" + }, + { + "major": 4, + "minor": 0, + "date": "2023-10-18T18:20:16Z", + "eol": "2025-02-13T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2023-10-11T15:04:25Z", + "eol": "2024-10-18T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2022-12-22T00:38:32Z", + "eol": "2024-10-11T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2022-01-07T19:32:35Z", + "eol": "2023-12-22T00:00:00Z" + }, + { + "major": 1, + "minor": 2, + "date": "2020-01-16T00:30:44Z", + "eol": "2023-01-07T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2019-10-17T22:52:17Z", + "eol": "2021-01-16T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2019-09-14T01:23:41Z", + "eol": "2020-10-17T00:00:00Z" + } + ], + "dotnet-server-sdk": [ + { + "major": 8, + "minor": 5, + "date": "2024-05-10T16:46:36Z", + "eol": null + }, + { + "major": 8, + "minor": 4, + "date": "2024-04-23T20:14:21Z", + "eol": "2025-05-10T00:00:00Z" + }, + { + "major": 8, + "minor": 3, + "date": "2024-04-03T18:41:43Z", + "eol": "2025-04-23T00:00:00Z" + }, + { + "major": 8, + "minor": 2, + "date": "2024-03-14T15:52:45Z", + "eol": "2025-04-03T00:00:00Z" + }, + { + "major": 8, + "minor": 1, + "date": "2024-03-06T23:26:28Z", + "eol": "2025-03-14T00:00:00Z" + }, + { + "major": 8, + "minor": 0, + "date": "2023-10-16T16:53:00Z", + "eol": "2025-03-06T00:00:00Z" + }, + { + "major": 7, + "minor": 1, + "date": "2023-10-16T21:23:17Z", + "eol": "2024-10-16T00:00:00Z" + }, + { + "major": 7, + "minor": 0, + "date": "2022-12-07T18:08:08Z", + "eol": "2024-10-16T00:00:00Z" + }, + { + "major": 6, + "minor": 3, + "date": "2021-10-25T22:38:47Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 6, + "minor": 2, + "date": "2021-07-23T00:09:10Z", + "eol": "2022-10-25T00:00:00Z" + }, + { + "major": 6, + "minor": 1, + "date": "2021-06-22T16:30:16Z", + "eol": "2022-07-23T00:00:00Z" + }, + { + "major": 6, + "minor": 0, + "date": "2021-06-09T23:54:15Z", + "eol": "2022-06-22T00:00:00Z" + }, + { + "major": 5, + "minor": 14, + "date": "2021-01-27T00:38:28Z", + "eol": "2022-06-09T00:00:00Z" + }, + { + "major": 5, + "minor": 13, + "date": "2020-02-11T00:58:59Z", + "eol": "2022-01-27T00:00:00Z" + }, + { + "major": 5, + "minor": 12, + "date": "2020-01-06T23:58:03Z", + "eol": "2021-02-11T00:00:00Z" + }, + { + "major": 5, + "minor": 11, + "date": "2019-12-13T22:08:12Z", + "eol": "2021-01-06T00:00:00Z" + }, + { + "major": 5, + "minor": 10, + "date": "2019-11-12T22:28:45Z", + "eol": "2020-12-13T00:00:00Z" + }, + { + "major": 5, + "minor": 9, + "date": "2019-10-08T00:29:28Z", + "eol": "2020-11-12T00:00:00Z" + }, + { + "major": 5, + "minor": 8, + "date": "2019-10-01T22:57:01Z", + "eol": "2020-10-08T00:00:00Z" + }, + { + "major": 5, + "minor": 7, + "date": "2019-09-13T04:41:33Z", + "eol": "2020-10-01T00:00:00Z" + }, + { + "major": 5, + "minor": 6, + "date": "2019-01-11T21:19:06Z", + "eol": "2020-09-13T00:00:00Z" + }, + { + "major": 5, + "minor": 5, + "date": "2019-01-11T21:18:24Z", + "eol": "2020-01-11T00:00:00Z" + }, + { + "major": 5, + "minor": 4, + "date": "2018-08-30T22:52:57Z", + "eol": "2020-01-11T00:00:00Z" + }, + { + "major": 5, + "minor": 3, + "date": "2018-08-27T20:37:37Z", + "eol": "2019-08-30T00:00:00Z" + }, + { + "major": 5, + "minor": 2, + "date": "2018-07-28T00:16:26Z", + "eol": "2019-08-27T00:00:00Z" + }, + { + "major": 5, + "minor": 1, + "date": "2018-06-27T23:00:52Z", + "eol": "2019-07-28T00:00:00Z" + }, + { + "major": 5, + "minor": 0, + "date": "2018-05-11T00:09:59Z", + "eol": "2019-06-27T00:00:00Z" + }, + { + "major": 4, + "minor": 1, + "date": "2018-03-05T23:59:40Z", + "eol": "2019-05-11T00:00:00Z" + }, + { + "major": 4, + "minor": 0, + "date": "2018-02-23T23:29:36Z", + "eol": "2019-03-05T00:00:00Z" + }, + { + "major": 3, + "minor": 6, + "date": "2018-02-23T23:28:09Z", + "eol": "2019-02-23T00:00:00Z" + }, + { + "major": 3, + "minor": 5, + "date": "2018-01-29T23:00:03Z", + "eol": "2019-02-23T00:00:00Z" + }, + { + "major": 3, + "minor": 4, + "date": "2017-11-29T22:23:13Z", + "eol": "2019-01-29T00:00:00Z" + }, + { + "major": 3, + "minor": 3, + "date": "2017-06-16T22:59:56Z", + "eol": "2018-11-29T00:00:00Z" + }, + { + "major": 3, + "minor": 2, + "date": "2017-05-25T23:53:46Z", + "eol": "2018-06-16T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2016-12-08T00:17:31Z", + "eol": "2018-05-25T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2016-10-28T17:35:14Z", + "eol": "2017-12-08T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2016-08-10T23:10:50Z", + "eol": "2017-10-28T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2016-05-17T17:02:17Z", + "eol": "2017-08-10T00:00:00Z" + } + ], + "electron": [ + { + "major": 1, + "minor": 7, + "date": "2022-10-21T16:47:09Z", + "eol": null + }, + { + "major": 1, + "minor": 6, + "date": "2021-01-27T20:30:09Z", + "eol": "2023-10-21T00:00:00Z" + }, + { + "major": 1, + "minor": 5, + "date": "2020-02-14T23:22:49Z", + "eol": "2022-01-27T00:00:00Z" + }, + { + "major": 1, + "minor": 4, + "date": "2019-12-16T20:33:28Z", + "eol": "2021-02-14T00:00:00Z" + }, + { + "major": 1, + "minor": 3, + "date": "2019-11-06T00:33:33Z", + "eol": "2020-12-16T00:00:00Z" + }, + { + "major": 1, + "minor": 2, + "date": "2019-10-10T23:33:40Z", + "eol": "2020-11-06T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2019-05-07T23:02:47Z", + "eol": "2020-10-10T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2019-02-02T01:31:09Z", + "eol": "2020-05-07T00:00:00Z" + } + ], + "erlang-server-sdk": [ + { + "major": 3, + "minor": 3, + "date": "2024-05-20T20:43:51Z", + "eol": null + }, + { + "major": 3, + "minor": 2, + "date": "2024-03-14T15:53:47Z", + "eol": "2025-05-20T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2024-01-04T17:32:03Z", + "eol": "2025-03-14T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2023-09-14T16:22:25Z", + "eol": "2025-01-04T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2023-08-01T22:05:10Z", + "eol": "2024-09-14T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2023-02-22T23:30:31Z", + "eol": "2024-08-01T00:00:00Z" + }, + { + "major": 1, + "minor": 6, + "date": "2023-01-30T23:00:52Z", + "eol": "2024-02-22T00:00:00Z" + }, + { + "major": 1, + "minor": 5, + "date": "2022-06-23T16:32:50Z", + "eol": "2024-01-30T00:00:00Z" + }, + { + "major": 1, + "minor": 4, + "date": "2022-04-20T22:53:42Z", + "eol": "2023-06-23T00:00:00Z" + }, + { + "major": 1, + "minor": 3, + "date": "2021-11-03T22:06:31Z", + "eol": "2023-04-20T00:00:00Z" + }, + { + "major": 1, + "minor": 2, + "date": "2021-10-18T20:23:06Z", + "eol": "2022-11-03T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2021-05-06T22:39:02Z", + "eol": "2022-10-18T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2021-02-23T00:05:47Z", + "eol": "2022-05-06T00:00:00Z" + } + ], + "flutter-client-sdk": [ + { + "major": 4, + "minor": 7, + "date": "2024-08-01T22:01:30Z", + "eol": null + }, + { + "major": 4, + "minor": 6, + "date": "2024-05-03T16:42:52Z", + "eol": "2025-08-01T00:00:00Z" + }, + { + "major": 4, + "minor": 5, + "date": "2024-04-23T21:42:44Z", + "eol": "2025-05-03T00:00:00Z" + }, + { + "major": 4, + "minor": 4, + "date": "2024-03-28T17:35:52Z", + "eol": "2025-04-23T00:00:00Z" + }, + { + "major": 4, + "minor": 3, + "date": "2024-03-18T17:19:41Z", + "eol": "2025-03-28T00:00:00Z" + }, + { + "major": 4, + "minor": 2, + "date": "2024-03-08T18:38:01Z", + "eol": "2025-03-18T00:00:00Z" + }, + { + "major": 4, + "minor": 1, + "date": "2024-02-15T21:56:41Z", + "eol": "2025-03-08T00:00:00Z" + }, + { + "major": 4, + "minor": 0, + "date": "2024-01-31T18:38:33Z", + "eol": "2025-02-15T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2024-04-09T18:26:38Z", + "eol": "2025-01-31T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2023-08-25T22:19:27Z", + "eol": "2025-01-31T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2023-08-17T20:54:14Z", + "eol": "2024-08-25T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2023-04-26T22:54:30Z", + "eol": "2024-08-17T00:00:00Z" + }, + { + "major": 1, + "minor": 3, + "date": "2023-04-04T20:54:11Z", + "eol": "2024-04-26T00:00:00Z" + }, + { + "major": 1, + "minor": 2, + "date": "2022-11-07T21:08:53Z", + "eol": "2024-04-04T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2022-06-23T23:17:26Z", + "eol": "2023-11-07T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2021-10-29T19:26:30Z", + "eol": "2023-06-23T00:00:00Z" + } + ], + "go-server-sdk": [ + { + "major": 7, + "minor": 6, + "date": "2024-07-25T17:01:08Z", + "eol": null + }, + { + "major": 7, + "minor": 5, + "date": "2024-06-26T18:06:19Z", + "eol": "2025-07-25T00:00:00Z" + }, + { + "major": 7, + "minor": 4, + "date": "2024-04-11T16:21:21Z", + "eol": "2025-06-26T00:00:00Z" + }, + { + "major": 7, + "minor": 3, + "date": "2024-04-03T21:00:50Z", + "eol": "2025-04-11T00:00:00Z" + }, + { + "major": 7, + "minor": 2, + "date": "2024-03-25T22:54:22Z", + "eol": "2025-04-03T00:00:00Z" + }, + { + "major": 7, + "minor": 1, + "date": "2024-03-14T13:57:34Z", + "eol": "2025-03-25T00:00:00Z" + }, + { + "major": 7, + "minor": 0, + "date": "2023-10-11T20:39:15Z", + "eol": "2025-03-14T00:00:00Z" + }, + { + "major": 6, + "minor": 2, + "date": "2024-03-27T22:34:57Z", + "eol": "2024-10-11T00:00:00Z" + }, + { + "major": 6, + "minor": 1, + "date": "2023-04-13T20:08:54Z", + "eol": "2024-10-11T00:00:00Z" + }, + { + "major": 6, + "minor": 0, + "date": "2022-12-07T17:43:00Z", + "eol": "2024-04-13T00:00:00Z" + }, + { + "major": 5, + "minor": 10, + "date": "2022-07-06T02:40:59Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 5, + "minor": 9, + "date": "2022-03-23T03:06:39Z", + "eol": "2023-07-06T00:00:00Z" + }, + { + "major": 5, + "minor": 8, + "date": "2022-01-11T00:19:39Z", + "eol": "2023-03-23T00:00:00Z" + }, + { + "major": 5, + "minor": 7, + "date": "2022-01-08T00:42:46Z", + "eol": "2023-01-11T00:00:00Z" + }, + { + "major": 5, + "minor": 6, + "date": "2021-08-20T19:25:26Z", + "eol": "2023-01-08T00:00:00Z" + }, + { + "major": 5, + "minor": 5, + "date": "2021-07-21T03:11:20Z", + "eol": "2022-08-20T00:00:00Z" + }, + { + "major": 5, + "minor": 4, + "date": "2021-06-17T19:52:23Z", + "eol": "2022-07-21T00:00:00Z" + }, + { + "major": 5, + "minor": 3, + "date": "2021-04-22T21:53:35Z", + "eol": "2022-06-17T00:00:00Z" + }, + { + "major": 5, + "minor": 2, + "date": "2021-01-26T19:09:22Z", + "eol": "2022-04-22T00:00:00Z" + }, + { + "major": 5, + "minor": 1, + "date": "2020-12-18T03:27:18Z", + "eol": "2022-01-26T00:00:00Z" + }, + { + "major": 5, + "minor": 0, + "date": "2020-09-19T00:12:08Z", + "eol": "2021-12-18T00:00:00Z" + }, + { + "major": 4, + "minor": 17, + "date": "2020-03-30T19:37:38Z", + "eol": "2021-09-19T00:00:00Z" + }, + { + "major": 4, + "minor": 16, + "date": "2020-02-04T20:10:34Z", + "eol": "2021-03-30T00:00:00Z" + }, + { + "major": 4, + "minor": 15, + "date": "2020-01-23T21:15:06Z", + "eol": "2021-02-04T00:00:00Z" + }, + { + "major": 4, + "minor": 14, + "date": "2020-01-09T21:04:14Z", + "eol": "2021-01-23T00:00:00Z" + }, + { + "major": 4, + "minor": 13, + "date": "2019-10-10T18:52:09Z", + "eol": "2021-01-09T00:00:00Z" + }, + { + "major": 4, + "minor": 12, + "date": "2019-09-12T21:50:09Z", + "eol": "2020-10-10T00:00:00Z" + }, + { + "major": 4, + "minor": 11, + "date": "2019-08-20T01:38:44Z", + "eol": "2020-09-12T00:00:00Z" + }, + { + "major": 4, + "minor": 10, + "date": "2019-07-31T02:44:58Z", + "eol": "2020-08-20T00:00:00Z" + }, + { + "major": 4, + "minor": 9, + "date": "2019-07-23T22:57:55Z", + "eol": "2020-07-31T00:00:00Z" + }, + { + "major": 4, + "minor": 8, + "date": "2019-06-11T20:24:17Z", + "eol": "2020-07-23T00:00:00Z" + }, + { + "major": 4, + "minor": 7, + "date": "2019-04-29T22:07:54Z", + "eol": "2020-06-11T00:00:00Z" + } + ], + "haskell-server-sdk": [ + { + "major": 4, + "minor": 1, + "date": "2024-03-18T19:42:06Z", + "eol": null + }, + { + "major": 4, + "minor": 0, + "date": "2023-02-21T22:45:41Z", + "eol": "2025-03-18T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2023-01-27T20:12:10Z", + "eol": "2024-02-21T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2022-06-27T19:14:48Z", + "eol": "2024-01-27T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2021-06-17T23:11:08Z", + "eol": "2023-06-27T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2021-02-04T21:10:33Z", + "eol": "2022-06-17T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2020-04-22T04:27:52Z", + "eol": "2022-02-04T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2020-02-24T23:05:36Z", + "eol": "2021-04-22T00:00:00Z" + } + ], + "java-server-sdk": [ + { + "major": 7, + "minor": 5, + "date": "2024-05-23T15:30:09Z", + "eol": null + }, + { + "major": 7, + "minor": 4, + "date": "2024-04-26T17:04:24Z", + "eol": "2025-05-23T00:00:00Z" + }, + { + "major": 7, + "minor": 3, + "date": "2024-03-14T15:41:25Z", + "eol": "2025-04-26T00:00:00Z" + }, + { + "major": 7, + "minor": 2, + "date": "2024-02-09T21:59:30Z", + "eol": "2025-03-14T00:00:00Z" + }, + { + "major": 7, + "minor": 1, + "date": "2023-11-02T21:37:17Z", + "eol": "2025-02-09T00:00:00Z" + }, + { + "major": 7, + "minor": 0, + "date": "2023-10-16T16:13:15Z", + "eol": "2024-11-02T00:00:00Z" + }, + { + "major": 6, + "minor": 3, + "date": "2023-10-16T20:52:43Z", + "eol": "2024-10-16T00:00:00Z" + }, + { + "major": 6, + "minor": 2, + "date": "2023-06-13T17:15:43Z", + "eol": "2024-10-16T00:00:00Z" + }, + { + "major": 6, + "minor": 1, + "date": "2023-04-13T17:52:29Z", + "eol": "2024-06-13T00:00:00Z" + }, + { + "major": 6, + "minor": 0, + "date": "2022-12-07T18:14:46Z", + "eol": "2024-04-13T00:00:00Z" + }, + { + "major": 5, + "minor": 10, + "date": "2022-07-29T00:12:59Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 5, + "minor": 9, + "date": "2022-05-26T19:54:51Z", + "eol": "2023-07-29T00:00:00Z" + }, + { + "major": 5, + "minor": 8, + "date": "2022-04-18T20:15:25Z", + "eol": "2023-05-26T00:00:00Z" + }, + { + "major": 5, + "minor": 7, + "date": "2022-01-29T01:58:38Z", + "eol": "2023-04-18T00:00:00Z" + }, + { + "major": 5, + "minor": 6, + "date": "2021-07-02T22:10:01Z", + "eol": "2023-01-29T00:00:00Z" + }, + { + "major": 5, + "minor": 5, + "date": "2021-06-18T01:25:53Z", + "eol": "2022-07-02T00:00:00Z" + }, + { + "major": 5, + "minor": 4, + "date": "2021-04-22T23:30:21Z", + "eol": "2022-06-18T00:00:00Z" + }, + { + "major": 5, + "minor": 3, + "date": "2021-03-09T17:51:22Z", + "eol": "2022-04-22T00:00:00Z" + }, + { + "major": 5, + "minor": 2, + "date": "2020-10-10T01:50:39Z", + "eol": "2022-03-09T00:00:00Z" + }, + { + "major": 5, + "minor": 1, + "date": "2020-09-04T23:44:13Z", + "eol": "2021-10-10T00:00:00Z" + }, + { + "major": 5, + "minor": 0, + "date": "2020-06-02T20:11:08Z", + "eol": "2021-09-04T00:00:00Z" + }, + { + "major": 4, + "minor": 14, + "date": "2020-05-13T17:35:06Z", + "eol": "2021-06-02T00:00:00Z" + }, + { + "major": 4, + "minor": 13, + "date": "2020-04-22T00:48:16Z", + "eol": "2021-05-13T00:00:00Z" + }, + { + "major": 4, + "minor": 12, + "date": "2020-01-31T03:03:02Z", + "eol": "2021-04-22T00:00:00Z" + }, + { + "major": 4, + "minor": 11, + "date": "2020-01-16T21:04:13Z", + "eol": "2021-01-31T00:00:00Z" + }, + { + "major": 4, + "minor": 10, + "date": "2019-12-13T22:15:10Z", + "eol": "2021-01-16T00:00:00Z" + }, + { + "major": 4, + "minor": 9, + "date": "2019-10-18T19:36:51Z", + "eol": "2020-12-13T00:00:00Z" + }, + { + "major": 4, + "minor": 8, + "date": "2019-09-30T22:55:00Z", + "eol": "2020-10-18T00:00:00Z" + }, + { + "major": 4, + "minor": 7, + "date": "2019-08-03T00:35:14Z", + "eol": "2020-09-30T00:00:00Z" + }, + { + "major": 4, + "minor": 6, + "date": "2019-01-15T01:26:50Z", + "eol": "2020-08-03T00:00:00Z" + }, + { + "major": 4, + "minor": 5, + "date": "2018-10-26T22:59:24Z", + "eol": "2020-01-15T00:00:00Z" + }, + { + "major": 4, + "minor": 4, + "date": "2018-10-02T00:19:46Z", + "eol": "2019-10-26T00:00:00Z" + }, + { + "major": 4, + "minor": 3, + "date": "2018-08-27T21:11:18Z", + "eol": "2019-10-02T00:00:00Z" + }, + { + "major": 4, + "minor": 2, + "date": "2018-06-26T21:23:38Z", + "eol": "2019-08-27T00:00:00Z" + }, + { + "major": 4, + "minor": 1, + "date": "2018-05-15T22:12:04Z", + "eol": "2019-06-26T00:00:00Z" + }, + { + "major": 4, + "minor": 0, + "date": "2018-05-11T00:10:22Z", + "eol": "2019-05-15T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2018-02-21T19:34:30Z", + "eol": "2019-05-11T00:00:00Z" + }, + { + "major": 2, + "minor": 6, + "date": "2018-02-13T01:14:41Z", + "eol": "2019-02-21T00:00:00Z" + }, + { + "major": 2, + "minor": 5, + "date": "2018-01-08T20:17:29Z", + "eol": "2019-02-13T00:00:00Z" + }, + { + "major": 2, + "minor": 4, + "date": "2017-12-21T06:51:36Z", + "eol": "2019-01-08T00:00:00Z" + }, + { + "major": 2, + "minor": 3, + "date": "2017-07-10T22:42:51Z", + "eol": "2018-12-21T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2017-04-11T21:11:55Z", + "eol": "2018-07-10T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2017-03-02T19:05:19Z", + "eol": "2018-04-11T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2016-08-10T22:27:32Z", + "eol": "2018-03-02T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2016-04-12T20:43:04Z", + "eol": "2017-08-10T00:00:00Z" + } + ], + "js-client-sdk": [ + { + "major": 3, + "minor": 4, + "date": "2024-06-20T16:30:33Z", + "eol": null + }, + { + "major": 3, + "minor": 3, + "date": "2024-05-01T17:32:10Z", + "eol": "2025-06-20T00:00:00Z" + }, + { + "major": 3, + "minor": 2, + "date": "2024-03-19T19:00:57Z", + "eol": "2025-05-01T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2023-01-18T23:49:33Z", + "eol": "2025-03-19T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2022-12-07T17:03:16Z", + "eol": "2024-01-18T00:00:00Z" + }, + { + "major": 2, + "minor": 24, + "date": "2022-10-18T16:51:53Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 2, + "minor": 23, + "date": "2022-10-05T17:32:28Z", + "eol": "2023-10-18T00:00:00Z" + }, + { + "major": 2, + "minor": 22, + "date": "2022-04-26T19:28:49Z", + "eol": "2023-10-05T00:00:00Z" + }, + { + "major": 2, + "minor": 21, + "date": "2022-03-21T19:58:50Z", + "eol": "2023-04-26T00:00:00Z" + }, + { + "major": 2, + "minor": 20, + "date": "2021-10-15T20:05:49Z", + "eol": "2023-03-21T00:00:00Z" + }, + { + "major": 2, + "minor": 19, + "date": "2021-01-27T19:37:23Z", + "eol": "2022-10-15T00:00:00Z" + }, + { + "major": 2, + "minor": 18, + "date": "2020-07-16T23:18:09Z", + "eol": "2022-01-27T00:00:00Z" + }, + { + "major": 2, + "minor": 17, + "date": "2020-02-14T21:08:04Z", + "eol": "2021-07-16T00:00:00Z" + }, + { + "major": 2, + "minor": 16, + "date": "2019-12-16T22:26:16Z", + "eol": "2021-02-14T00:00:00Z" + }, + { + "major": 2, + "minor": 15, + "date": "2019-11-05T23:50:26Z", + "eol": "2020-12-16T00:00:00Z" + }, + { + "major": 2, + "minor": 14, + "date": "2019-10-10T20:47:45Z", + "eol": "2020-11-05T00:00:00Z" + }, + { + "major": 2, + "minor": 13, + "date": "2019-08-15T16:38:58Z", + "eol": "2020-10-10T00:00:00Z" + }, + { + "major": 2, + "minor": 12, + "date": "2019-06-25T23:19:15Z", + "eol": "2020-08-15T00:00:00Z" + }, + { + "major": 2, + "minor": 11, + "date": "2019-06-07T03:35:33Z", + "eol": "2020-06-25T00:00:00Z" + }, + { + "major": 2, + "minor": 10, + "date": "2019-04-20T00:20:32Z", + "eol": "2020-06-07T00:00:00Z" + }, + { + "major": 2, + "minor": 9, + "date": "2019-02-08T21:58:34Z", + "eol": "2020-04-20T00:00:00Z" + }, + { + "major": 2, + "minor": 8, + "date": "2018-12-03T23:34:14Z", + "eol": "2020-02-08T00:00:00Z" + }, + { + "major": 2, + "minor": 7, + "date": "2018-09-27T01:13:05Z", + "eol": "2019-12-03T00:00:00Z" + }, + { + "major": 2, + "minor": 6, + "date": "2018-09-07T19:58:28Z", + "eol": "2019-09-27T00:00:00Z" + }, + { + "major": 2, + "minor": 5, + "date": "2018-08-27T20:50:22Z", + "eol": "2019-09-07T00:00:00Z" + }, + { + "major": 2, + "minor": 4, + "date": "2018-07-13T22:47:53Z", + "eol": "2019-08-27T00:00:00Z" + }, + { + "major": 2, + "minor": 3, + "date": "2018-06-27T18:26:40Z", + "eol": "2019-07-13T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2018-06-22T21:24:39Z", + "eol": "2019-06-27T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2018-06-01T00:10:05Z", + "eol": "2019-06-22T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2018-05-26T01:06:09Z", + "eol": "2019-06-01T00:00:00Z" + }, + { + "major": 1, + "minor": 7, + "date": "2018-04-27T19:56:05Z", + "eol": "2019-05-26T00:00:00Z" + }, + { + "major": 1, + "minor": 6, + "date": "2018-03-28T22:56:10Z", + "eol": "2019-04-27T00:00:00Z" + }, + { + "major": 1, + "minor": 5, + "date": "2018-03-05T21:25:41Z", + "eol": "2019-03-28T00:00:00Z" + }, + { + "major": 1, + "minor": 4, + "date": "2018-02-07T21:00:48Z", + "eol": "2019-03-05T00:00:00Z" + }, + { + "major": 1, + "minor": 3, + "date": "2018-01-22T20:21:45Z", + "eol": "2019-02-07T00:00:00Z" + }, + { + "major": 1, + "minor": 2, + "date": "2017-12-15T14:26:07Z", + "eol": "2019-01-22T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2016-09-14T18:00:40Z", + "eol": "2018-12-15T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2016-08-12T17:43:37Z", + "eol": "2017-09-14T00:00:00Z" + } + ], + "lua-server-sdk": [ + { + "major": 2, + "minor": 1, + "date": "2024-03-11T23:37:23Z", + "eol": null + }, + { + "major": 2, + "minor": 0, + "date": "2023-12-28T20:01:01Z", + "eol": "2025-03-11T00:00:00Z" + }, + { + "major": 1, + "minor": 2, + "date": "2022-02-08T00:20:09Z", + "eol": "2024-12-28T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2021-02-04T19:50:59Z", + "eol": "2023-02-08T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2020-07-27T22:52:55Z", + "eol": "2022-02-04T00:00:00Z" + } + ], + "node-client-sdk": [ + { + "major": 3, + "minor": 2, + "date": "2024-05-01T20:27:26Z", + "eol": null + }, + { + "major": 3, + "minor": 1, + "date": "2024-03-19T19:02:27Z", + "eol": "2025-05-01T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2023-01-12T20:34:26Z", + "eol": "2025-03-19T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2022-10-18T17:29:57Z", + "eol": "2024-01-12T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2022-10-06T16:07:45Z", + "eol": "2023-10-18T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2022-01-26T21:33:50Z", + "eol": "2023-10-06T00:00:00Z" + }, + { + "major": 1, + "minor": 5, + "date": "2021-01-27T19:12:39Z", + "eol": "2023-01-26T00:00:00Z" + }, + { + "major": 1, + "minor": 4, + "date": "2020-02-14T21:21:42Z", + "eol": "2022-01-27T00:00:00Z" + }, + { + "major": 1, + "minor": 3, + "date": "2019-12-16T17:29:45Z", + "eol": "2021-02-14T00:00:00Z" + }, + { + "major": 1, + "minor": 2, + "date": "2019-11-06T01:06:40Z", + "eol": "2020-12-16T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2019-10-10T23:37:55Z", + "eol": "2020-11-06T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2019-07-03T23:13:07Z", + "eol": "2020-10-10T00:00:00Z" + } + ], + "node-server": [ + { + "major": 9, + "minor": 5, + "date": "2024-07-31T19:45:34Z", + "eol": null + }, + { + "major": 9, + "minor": 4, + "date": "2024-04-16T17:41:07Z", + "eol": "2025-07-31T00:00:00Z" + }, + { + "major": 9, + "minor": 3, + "date": "2024-04-10T20:03:25Z", + "eol": "2025-04-16T00:00:00Z" + }, + { + "major": 9, + "minor": 2, + "date": "2024-02-14T16:57:00Z", + "eol": "2025-04-10T00:00:00Z" + }, + { + "major": 9, + "minor": 1, + "date": "2024-02-06T21:34:13Z", + "eol": "2025-02-14T00:00:00Z" + }, + { + "major": 9, + "minor": 0, + "date": "2023-10-16T21:58:54Z", + "eol": "2025-02-06T00:00:00Z" + }, + { + "major": 8, + "minor": 2, + "date": "2023-08-14T23:12:35Z", + "eol": "2024-10-16T00:00:00Z" + }, + { + "major": 8, + "minor": 1, + "date": "2023-07-05T22:45:29Z", + "eol": "2024-08-14T00:00:00Z" + }, + { + "major": 8, + "minor": 0, + "date": "2023-06-26T20:49:27Z", + "eol": "2024-07-05T00:00:00Z" + }, + { + "major": 7, + "minor": 0, + "date": "2022-12-07T17:57:36Z", + "eol": "2024-06-26T00:00:00Z" + }, + { + "major": 6, + "minor": 4, + "date": "2022-03-23T03:07:56Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 6, + "minor": 3, + "date": "2022-02-19T03:13:24Z", + "eol": "2023-03-23T00:00:00Z" + }, + { + "major": 6, + "minor": 2, + "date": "2021-07-22T22:00:57Z", + "eol": "2023-02-19T00:00:00Z" + }, + { + "major": 6, + "minor": 1, + "date": "2021-06-21T23:59:53Z", + "eol": "2022-07-22T00:00:00Z" + }, + { + "major": 6, + "minor": 0, + "date": "2021-06-17T18:57:58Z", + "eol": "2022-06-21T00:00:00Z" + }, + { + "major": 5, + "minor": 14, + "date": "2021-01-29T18:58:54Z", + "eol": "2022-06-17T00:00:00Z" + }, + { + "major": 5, + "minor": 13, + "date": "2020-04-07T20:08:29Z", + "eol": "2022-01-29T00:00:00Z" + }, + { + "major": 5, + "minor": 12, + "date": "2020-04-03T23:29:39Z", + "eol": "2021-04-07T00:00:00Z" + }, + { + "major": 5, + "minor": 11, + "date": "2020-02-12T22:48:05Z", + "eol": "2021-04-03T00:00:00Z" + }, + { + "major": 5, + "minor": 10, + "date": "2019-12-11T19:36:19Z", + "eol": "2021-02-12T00:00:00Z" + }, + { + "major": 5, + "minor": 9, + "date": "2019-10-23T19:10:54Z", + "eol": "2020-12-11T00:00:00Z" + }, + { + "major": 5, + "minor": 8, + "date": "2019-05-07T23:12:16Z", + "eol": "2020-10-10T00:00:00Z" + }, + { + "major": 5, + "minor": 7, + "date": "2019-01-16T00:13:55Z", + "eol": "2020-05-07T00:00:00Z" + }, + { + "major": 5, + "minor": 6, + "date": "2018-11-14T18:19:17Z", + "eol": "2020-01-16T00:00:00Z" + }, + { + "major": 5, + "minor": 5, + "date": "2018-10-08T20:56:23Z", + "eol": "2019-11-14T00:00:00Z" + }, + { + "major": 5, + "minor": 4, + "date": "2018-08-30T19:57:00Z", + "eol": "2019-10-08T00:00:00Z" + }, + { + "major": 5, + "minor": 3, + "date": "2018-08-27T20:47:05Z", + "eol": "2019-08-30T00:00:00Z" + }, + { + "major": 5, + "minor": 2, + "date": "2018-08-01T22:58:20Z", + "eol": "2019-08-27T00:00:00Z" + }, + { + "major": 5, + "minor": 1, + "date": "2018-06-26T21:59:06Z", + "eol": "2019-08-01T00:00:00Z" + }, + { + "major": 5, + "minor": 0, + "date": "2018-05-11T00:26:49Z", + "eol": "2019-06-26T00:00:00Z" + }, + { + "major": 4, + "minor": 0, + "date": "2018-02-21T22:16:30Z", + "eol": "2019-05-11T00:00:00Z" + }, + { + "major": 3, + "minor": 4, + "date": "2018-02-13T19:05:51Z", + "eol": "2019-02-21T00:00:00Z" + }, + { + "major": 3, + "minor": 3, + "date": "2018-01-19T21:09:33Z", + "eol": "2019-02-13T00:00:00Z" + }, + { + "major": 3, + "minor": 2, + "date": "2017-12-13T17:45:34Z", + "eol": "2019-01-19T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2017-12-11T19:10:34Z", + "eol": "2018-12-13T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2016-08-10T22:59:04Z", + "eol": "2018-12-11T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2016-06-02T17:45:05Z", + "eol": "2017-08-10T00:00:00Z" + }, + { + "major": 1, + "minor": 6, + "date": "2016-05-17T17:10:41Z", + "eol": "2017-06-02T00:00:00Z" + }, + { + "major": 1, + "minor": 5, + "date": "2015-12-10T05:51:48Z", + "eol": "2017-05-17T00:00:00Z" + }, + { + "major": 1, + "minor": 4, + "date": "2015-10-05T22:00:24Z", + "eol": "2016-12-10T00:00:00Z" + }, + { + "major": 1, + "minor": 3, + "date": "2015-09-24T23:08:10Z", + "eol": "2016-10-05T00:00:00Z" + }, + { + "major": 1, + "minor": 2, + "date": "2015-09-12T00:08:20Z", + "eol": "2016-09-24T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2015-05-13T16:55:00Z", + "eol": "2016-09-12T00:00:00Z" + } + ], + "php-server-sdk": [ + { + "major": 6, + "minor": 2, + "date": "2024-06-11T15:59:34Z", + "eol": null + }, + { + "major": 6, + "minor": 1, + "date": "2024-03-15T19:25:38Z", + "eol": "2025-06-11T00:00:00Z" + }, + { + "major": 6, + "minor": 0, + "date": "2023-10-23T20:04:09Z", + "eol": "2025-03-15T00:00:00Z" + }, + { + "major": 5, + "minor": 2, + "date": "2023-10-23T16:08:19Z", + "eol": "2024-10-23T00:00:00Z" + }, + { + "major": 5, + "minor": 1, + "date": "2023-01-31T20:01:24Z", + "eol": "2024-10-23T00:00:00Z" + }, + { + "major": 5, + "minor": 0, + "date": "2023-01-05T02:06:42Z", + "eol": "2024-01-31T00:00:00Z" + }, + { + "major": 4, + "minor": 3, + "date": "2023-01-31T19:18:34Z", + "eol": "2024-01-05T00:00:00Z" + }, + { + "major": 4, + "minor": 2, + "date": "2022-04-13T15:12:38Z", + "eol": "2024-01-05T00:00:00Z" + }, + { + "major": 4, + "minor": 1, + "date": "2022-02-16T20:10:07Z", + "eol": "2023-04-13T00:00:00Z" + }, + { + "major": 4, + "minor": 0, + "date": "2021-08-07T00:20:36Z", + "eol": "2023-02-16T00:00:00Z" + }, + { + "major": 3, + "minor": 9, + "date": "2021-06-21T21:35:14Z", + "eol": "2022-08-07T00:00:00Z" + }, + { + "major": 3, + "minor": 8, + "date": "2021-04-19T21:17:36Z", + "eol": "2022-06-21T00:00:00Z" + }, + { + "major": 3, + "minor": 7, + "date": "2019-12-13T22:14:57Z", + "eol": "2022-04-19T00:00:00Z" + }, + { + "major": 3, + "minor": 6, + "date": "2019-10-01T23:28:33Z", + "eol": "2020-12-13T00:00:00Z" + }, + { + "major": 3, + "minor": 5, + "date": "2019-04-03T18:39:40Z", + "eol": "2020-10-01T00:00:00Z" + }, + { + "major": 3, + "minor": 4, + "date": "2018-09-04T20:56:20Z", + "eol": "2020-04-03T00:00:00Z" + }, + { + "major": 3, + "minor": 3, + "date": "2018-08-27T20:48:27Z", + "eol": "2019-09-04T00:00:00Z" + }, + { + "major": 3, + "minor": 2, + "date": "2018-06-27T22:53:48Z", + "eol": "2019-08-27T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2018-05-04T20:20:13Z", + "eol": "2019-06-27T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2018-02-21T22:06:00Z", + "eol": "2019-05-04T00:00:00Z" + }, + { + "major": 2, + "minor": 5, + "date": "2018-02-13T20:01:18Z", + "eol": "2019-02-21T00:00:00Z" + }, + { + "major": 2, + "minor": 4, + "date": "2018-01-12T00:42:22Z", + "eol": "2019-02-13T00:00:00Z" + }, + { + "major": 2, + "minor": 3, + "date": "2017-10-06T23:15:21Z", + "eol": "2019-01-12T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2017-06-06T17:37:06Z", + "eol": "2018-10-06T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2017-03-23T17:44:04Z", + "eol": "2018-06-06T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2016-08-10T22:55:03Z", + "eol": "2018-03-23T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2016-07-25T16:44:33Z", + "eol": "2017-08-10T00:00:00Z" + } + ], + "python-server-sdk": [ + { + "major": 9, + "minor": 5, + "date": "2024-07-25T18:37:35Z", + "eol": null + }, + { + "major": 9, + "minor": 4, + "date": "2024-04-29T17:29:10Z", + "eol": "2025-07-25T00:00:00Z" + }, + { + "major": 9, + "minor": 3, + "date": "2024-03-14T17:32:06Z", + "eol": "2025-04-29T00:00:00Z" + }, + { + "major": 9, + "minor": 2, + "date": "2024-02-14T17:18:25Z", + "eol": "2025-03-14T00:00:00Z" + }, + { + "major": 9, + "minor": 1, + "date": "2023-12-20T14:46:36Z", + "eol": "2025-02-14T00:00:00Z" + }, + { + "major": 9, + "minor": 0, + "date": "2023-10-17T19:16:15Z", + "eol": "2024-12-20T00:00:00Z" + }, + { + "major": 8, + "minor": 3, + "date": "2024-02-14T17:13:20Z", + "eol": "2024-10-17T00:00:00Z" + }, + { + "major": 8, + "minor": 2, + "date": "2023-10-17T16:29:32Z", + "eol": "2024-10-17T00:00:00Z" + }, + { + "major": 8, + "minor": 1, + "date": "2023-01-31T17:36:55Z", + "eol": "2024-10-17T00:00:00Z" + }, + { + "major": 8, + "minor": 0, + "date": "2022-12-30T20:17:58Z", + "eol": "2024-01-31T00:00:00Z" + }, + { + "major": 7, + "minor": 6, + "date": "2023-01-31T15:33:04Z", + "eol": "2023-12-30T00:00:00Z" + }, + { + "major": 7, + "minor": 5, + "date": "2022-07-01T19:44:34Z", + "eol": "2023-12-30T00:00:00Z" + }, + { + "major": 7, + "minor": 4, + "date": "2022-02-16T18:01:04Z", + "eol": "2023-07-01T00:00:00Z" + }, + { + "major": 7, + "minor": 3, + "date": "2021-12-10T23:23:44Z", + "eol": "2023-02-16T00:00:00Z" + }, + { + "major": 7, + "minor": 2, + "date": "2021-06-17T22:18:27Z", + "eol": "2022-12-10T00:00:00Z" + }, + { + "major": 7, + "minor": 1, + "date": "2021-03-12T01:01:39Z", + "eol": "2022-06-17T00:00:00Z" + }, + { + "major": 7, + "minor": 0, + "date": "2020-10-28T18:57:31Z", + "eol": "2022-03-12T00:00:00Z" + }, + { + "major": 6, + "minor": 13, + "date": "2020-03-30T23:31:31Z", + "eol": "2021-10-28T00:00:00Z" + }, + { + "major": 6, + "minor": 12, + "date": "2020-02-11T22:10:28Z", + "eol": "2021-03-30T00:00:00Z" + }, + { + "major": 6, + "minor": 11, + "date": "2019-10-31T21:23:39Z", + "eol": "2021-02-11T00:00:00Z" + }, + { + "major": 6, + "minor": 10, + "date": "2019-08-20T16:06:17Z", + "eol": "2020-10-31T00:00:00Z" + }, + { + "major": 6, + "minor": 9, + "date": "2019-04-10T00:10:12Z", + "eol": "2020-08-20T00:00:00Z" + }, + { + "major": 6, + "minor": 8, + "date": "2019-01-31T18:47:32Z", + "eol": "2020-04-10T00:00:00Z" + }, + { + "major": 6, + "minor": 7, + "date": "2019-01-16T01:35:17Z", + "eol": "2020-01-31T00:00:00Z" + }, + { + "major": 6, + "minor": 6, + "date": "2018-11-14T23:27:15Z", + "eol": "2020-01-16T00:00:00Z" + }, + { + "major": 6, + "minor": 5, + "date": "2018-10-17T22:53:52Z", + "eol": "2019-11-14T00:00:00Z" + }, + { + "major": 6, + "minor": 4, + "date": "2018-08-30T17:50:31Z", + "eol": "2019-10-17T00:00:00Z" + }, + { + "major": 6, + "minor": 3, + "date": "2018-08-27T20:44:43Z", + "eol": "2019-08-30T00:00:00Z" + }, + { + "major": 6, + "minor": 2, + "date": "2018-08-03T23:58:46Z", + "eol": "2019-08-27T00:00:00Z" + }, + { + "major": 6, + "minor": 1, + "date": "2018-06-18T17:45:24Z", + "eol": "2019-08-03T00:00:00Z" + }, + { + "major": 6, + "minor": 0, + "date": "2018-05-11T00:22:53Z", + "eol": "2019-06-18T00:00:00Z" + }, + { + "major": 5, + "minor": 0, + "date": "2018-02-21T23:17:51Z", + "eol": "2019-05-11T00:00:00Z" + }, + { + "major": 4, + "minor": 3, + "date": "2018-02-07T22:37:56Z", + "eol": "2019-02-21T00:00:00Z" + }, + { + "major": 4, + "minor": 2, + "date": "2018-01-12T21:44:45Z", + "eol": "2019-02-07T00:00:00Z" + }, + { + "major": 4, + "minor": 1, + "date": "2017-12-22T18:04:19Z", + "eol": "2019-01-12T00:00:00Z" + }, + { + "major": 4, + "minor": 0, + "date": "2016-11-18T23:43:07Z", + "eol": "2018-12-22T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2016-08-23T01:51:47Z", + "eol": "2017-11-18T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2016-08-10T22:41:51Z", + "eol": "2017-08-23T00:00:00Z" + } + ], + "react-client-sdk": [ + { + "major": 3, + "minor": 3, + "date": "2024-05-23T21:53:04Z", + "eol": null + }, + { + "major": 3, + "minor": 2, + "date": "2024-05-01T18:23:49Z", + "eol": "2025-05-23T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2024-03-21T14:00:02Z", + "eol": "2025-05-01T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2022-12-07T18:56:44Z", + "eol": "2025-03-21T00:00:00Z" + }, + { + "major": 2, + "minor": 29, + "date": "2022-10-18T17:16:19Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 2, + "minor": 28, + "date": "2022-10-05T18:19:13Z", + "eol": "2023-10-18T00:00:00Z" + }, + { + "major": 2, + "minor": 27, + "date": "2022-08-31T15:51:59Z", + "eol": "2023-10-05T00:00:00Z" + }, + { + "major": 2, + "minor": 26, + "date": "2022-04-27T21:59:16Z", + "eol": "2023-08-31T00:00:00Z" + }, + { + "major": 2, + "minor": 25, + "date": "2022-02-08T17:59:00Z", + "eol": "2023-04-27T00:00:00Z" + }, + { + "major": 2, + "minor": 24, + "date": "2021-12-09T18:06:43Z", + "eol": "2023-02-08T00:00:00Z" + }, + { + "major": 2, + "minor": 23, + "date": "2021-07-16T17:45:57Z", + "eol": "2022-12-09T00:00:00Z" + }, + { + "major": 2, + "minor": 22, + "date": "2021-01-27T20:42:07Z", + "eol": "2022-07-16T00:00:00Z" + }, + { + "major": 2, + "minor": 21, + "date": "2020-11-17T20:25:39Z", + "eol": "2022-01-27T00:00:00Z" + }, + { + "major": 2, + "minor": 20, + "date": "2020-07-17T18:07:28Z", + "eol": "2021-11-17T00:00:00Z" + }, + { + "major": 2, + "minor": 19, + "date": "2020-07-15T23:06:54Z", + "eol": "2021-07-17T00:00:00Z" + }, + { + "major": 2, + "minor": 18, + "date": "2020-02-20T01:50:58Z", + "eol": "2021-07-15T00:00:00Z" + }, + { + "major": 2, + "minor": 17, + "date": "2019-12-18T22:28:26Z", + "eol": "2021-02-20T00:00:00Z" + }, + { + "major": 2, + "minor": 16, + "date": "2019-12-17T00:23:48Z", + "eol": "2020-12-18T00:00:00Z" + }, + { + "major": 2, + "minor": 15, + "date": "2019-11-06T20:29:15Z", + "eol": "2020-12-17T00:00:00Z" + }, + { + "major": 2, + "minor": 14, + "date": "2019-09-13T00:53:12Z", + "eol": "2020-11-06T00:00:00Z" + } + ], + "react-native": [ + { + "major": 10, + "minor": 3, + "date": "2024-07-22T21:42:19Z", + "eol": null + }, + { + "major": 10, + "minor": 2, + "date": "2024-07-02T18:42:03Z", + "eol": "2025-07-22T00:00:00Z" + }, + { + "major": 10, + "minor": 1, + "date": "2024-04-09T19:42:10Z", + "eol": "2025-07-02T00:00:00Z" + }, + { + "major": 10, + "minor": 0, + "date": "2024-02-08T19:00:25Z", + "eol": "2025-04-09T00:00:00Z" + }, + { + "major": 9, + "minor": 3, + "date": "2024-06-11T19:14:14Z", + "eol": "2025-02-08T00:00:00Z" + }, + { + "major": 9, + "minor": 2, + "date": "2024-03-20T21:59:00Z", + "eol": "2025-02-08T00:00:00Z" + }, + { + "major": 9, + "minor": 1, + "date": "2024-03-07T06:25:35Z", + "eol": "2025-02-08T00:00:00Z" + }, + { + "major": 9, + "minor": 0, + "date": "2024-01-09T19:48:35Z", + "eol": "2025-02-08T00:00:00Z" + }, + { + "major": 8, + "minor": 2, + "date": "2024-03-18T21:43:22Z", + "eol": "2025-01-09T00:00:00Z" + }, + { + "major": 8, + "minor": 1, + "date": "2024-03-07T19:50:45Z", + "eol": "2025-01-09T00:00:00Z" + }, + { + "major": 8, + "minor": 0, + "date": "2023-08-25T23:01:17Z", + "eol": "2025-01-09T00:00:00Z" + }, + { + "major": 7, + "minor": 2, + "date": "2024-03-08T17:52:19Z", + "eol": "2024-08-25T00:00:00Z" + }, + { + "major": 7, + "minor": 1, + "date": "2023-03-06T23:00:37Z", + "eol": "2024-08-25T00:00:00Z" + }, + { + "major": 7, + "minor": 0, + "date": "2023-02-24T20:08:11Z", + "eol": "2024-03-06T00:00:00Z" + }, + { + "major": 6, + "minor": 3, + "date": "2023-01-30T21:15:54Z", + "eol": "2024-02-24T00:00:00Z" + }, + { + "major": 6, + "minor": 2, + "date": "2022-05-17T21:53:11Z", + "eol": "2024-01-30T00:00:00Z" + }, + { + "major": 6, + "minor": 1, + "date": "2022-02-26T01:07:35Z", + "eol": "2023-05-17T00:00:00Z" + }, + { + "major": 6, + "minor": 0, + "date": "2022-02-10T21:50:09Z", + "eol": "2023-02-26T00:00:00Z" + }, + { + "major": 5, + "minor": 1, + "date": "2021-09-30T21:48:47Z", + "eol": "2023-02-10T00:00:00Z" + }, + { + "major": 5, + "minor": 0, + "date": "2021-08-20T23:29:43Z", + "eol": "2022-09-30T00:00:00Z" + }, + { + "major": 4, + "minor": 2, + "date": "2021-05-19T23:53:52Z", + "eol": "2022-08-20T00:00:00Z" + }, + { + "major": 4, + "minor": 1, + "date": "2021-04-14T02:13:23Z", + "eol": "2022-05-19T00:00:00Z" + }, + { + "major": 4, + "minor": 0, + "date": "2021-04-01T02:05:08Z", + "eol": "2022-04-14T00:00:00Z" + }, + { + "major": 3, + "minor": 2, + "date": "2020-07-10T23:41:32Z", + "eol": "2022-04-01T00:00:00Z" + }, + { + "major": 3, + "minor": 1, + "date": "2020-04-01T15:55:17Z", + "eol": "2021-07-10T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2020-02-20T22:34:11Z", + "eol": "2021-04-01T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2020-01-25T01:12:23Z", + "eol": "2021-02-20T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2019-12-24T03:44:21Z", + "eol": "2021-01-25T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2019-06-27T20:40:31Z", + "eol": "2020-12-24T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2019-04-19T18:00:02Z", + "eol": "2020-06-27T00:00:00Z" + } + ], + "relay-proxy": [ + { + "major": 8, + "minor": 9, + "date": "2024-07-25T17:51:14Z", + "eol": null + }, + { + "major": 8, + "minor": 8, + "date": "2024-06-25T23:06:03Z", + "eol": "2025-07-25T00:00:00Z" + }, + { + "major": 8, + "minor": 7, + "date": "2024-06-17T16:09:20Z", + "eol": "2025-06-25T00:00:00Z" + }, + { + "major": 8, + "minor": 6, + "date": "2024-06-10T23:49:33Z", + "eol": "2025-06-17T00:00:00Z" + }, + { + "major": 8, + "minor": 5, + "date": "2024-05-14T18:57:05Z", + "eol": "2025-06-10T00:00:00Z" + }, + { + "major": 8, + "minor": 4, + "date": "2024-03-14T20:46:25Z", + "eol": "2025-05-14T00:00:00Z" + }, + { + "major": 8, + "minor": 3, + "date": "2024-02-09T18:38:13Z", + "eol": "2025-03-14T00:00:00Z" + }, + { + "major": 8, + "minor": 2, + "date": "2023-10-24T13:32:40Z", + "eol": "2025-02-09T00:00:00Z" + }, + { + "major": 8, + "minor": 1, + "date": "2023-10-17T20:20:17Z", + "eol": "2024-10-24T00:00:00Z" + }, + { + "major": 8, + "minor": 0, + "date": "2023-10-12T20:31:10Z", + "eol": "2024-10-17T00:00:00Z" + }, + { + "major": 7, + "minor": 6, + "date": "2024-06-10T23:06:10Z", + "eol": "2024-10-12T00:00:00Z" + }, + { + "major": 7, + "minor": 5, + "date": "2024-02-12T18:54:48Z", + "eol": "2024-10-12T00:00:00Z" + }, + { + "major": 7, + "minor": 4, + "date": "2023-10-17T19:59:26Z", + "eol": "2024-10-12T00:00:00Z" + }, + { + "major": 7, + "minor": 3, + "date": "2023-05-24T16:54:30Z", + "eol": "2024-10-12T00:00:00Z" + }, + { + "major": 7, + "minor": 2, + "date": "2023-02-21T22:20:54Z", + "eol": "2024-05-24T00:00:00Z" + }, + { + "major": 7, + "minor": 1, + "date": "2023-02-11T00:13:28Z", + "eol": "2024-02-21T00:00:00Z" + }, + { + "major": 7, + "minor": 0, + "date": "2022-12-07T18:45:03Z", + "eol": "2024-02-11T00:00:00Z" + }, + { + "major": 6, + "minor": 9, + "date": "2023-10-17T23:49:54Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 6, + "minor": 8, + "date": "2023-03-17T22:32:01Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 6, + "minor": 7, + "date": "2022-03-24T20:28:27Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 6, + "minor": 6, + "date": "2022-01-06T03:17:39Z", + "eol": "2023-03-24T00:00:00Z" + }, + { + "major": 6, + "minor": 5, + "date": "2021-10-11T22:51:21Z", + "eol": "2023-01-06T00:00:00Z" + }, + { + "major": 6, + "minor": 4, + "date": "2021-07-22T21:06:58Z", + "eol": "2022-10-11T00:00:00Z" + }, + { + "major": 6, + "minor": 3, + "date": "2021-06-17T22:04:47Z", + "eol": "2022-07-22T00:00:00Z" + }, + { + "major": 6, + "minor": 2, + "date": "2021-05-08T00:25:54Z", + "eol": "2022-06-17T00:00:00Z" + }, + { + "major": 6, + "minor": 1, + "date": "2020-11-10T02:36:10Z", + "eol": "2022-05-08T00:00:00Z" + }, + { + "major": 6, + "minor": 0, + "date": "2020-10-07T17:32:45Z", + "eol": "2021-11-10T00:00:00Z" + }, + { + "major": 5, + "minor": 12, + "date": "2020-08-06T22:41:02Z", + "eol": "2021-10-07T00:00:00Z" + }, + { + "major": 5, + "minor": 11, + "date": "2020-03-18T01:03:30Z", + "eol": "2021-08-06T00:00:00Z" + }, + { + "major": 5, + "minor": 10, + "date": "2020-01-22T22:04:50Z", + "eol": "2021-03-18T00:00:00Z" + }, + { + "major": 5, + "minor": 9, + "date": "2019-12-20T17:52:40Z", + "eol": "2021-01-22T00:00:00Z" + }, + { + "major": 5, + "minor": 8, + "date": "2019-10-11T21:16:35Z", + "eol": "2020-12-20T00:00:00Z" + }, + { + "major": 5, + "minor": 7, + "date": "2019-09-19T00:15:11Z", + "eol": "2020-10-11T00:00:00Z" + }, + { + "major": 5, + "minor": 6, + "date": "2019-08-03T00:49:03Z", + "eol": "2020-09-19T00:00:00Z" + }, + { + "major": 5, + "minor": 5, + "date": "2018-11-28T00:06:18Z", + "eol": "2020-08-03T00:00:00Z" + }, + { + "major": 5, + "minor": 4, + "date": "2018-08-09T21:31:16Z", + "eol": "2019-11-28T00:00:00Z" + }, + { + "major": 5, + "minor": 3, + "date": "2018-07-30T23:29:27Z", + "eol": "2019-08-09T00:00:00Z" + }, + { + "major": 5, + "minor": 2, + "date": "2018-07-13T23:45:35Z", + "eol": "2019-07-30T00:00:00Z" + }, + { + "major": 5, + "minor": 1, + "date": "2018-07-13T23:28:43Z", + "eol": "2019-07-13T00:00:00Z" + }, + { + "major": 5, + "minor": 0, + "date": "2018-05-30T00:12:30Z", + "eol": "2019-07-13T00:00:00Z" + }, + { + "major": 4, + "minor": 1, + "date": "2018-05-25T23:45:54Z", + "eol": "2019-05-30T00:00:00Z" + }, + { + "major": 4, + "minor": 0, + "date": "2018-05-11T02:57:25Z", + "eol": "2019-05-25T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2018-02-20T18:11:41Z", + "eol": "2019-05-11T00:00:00Z" + }, + { + "major": 2, + "minor": 3, + "date": "2018-02-09T23:55:36Z", + "eol": "2019-02-20T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2017-06-05T21:29:11Z", + "eol": "2019-02-09T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2016-11-07T18:33:49Z", + "eol": "2018-06-05T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2016-10-26T16:50:57Z", + "eol": "2017-11-07T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2016-11-07T18:08:20Z", + "eol": "2017-10-26T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2016-10-28T18:06:53Z", + "eol": "2017-10-26T00:00:00Z" + } + ], + "roku": [ + { + "major": 2, + "minor": 1, + "date": "2024-03-14T17:13:12Z", + "eol": null + }, + { + "major": 2, + "minor": 0, + "date": "2023-04-13T20:39:19Z", + "eol": "2025-03-14T00:00:00Z" + }, + { + "major": 1, + "minor": 3, + "date": "2023-04-12T00:33:37Z", + "eol": "2024-04-13T00:00:00Z" + }, + { + "major": 1, + "minor": 2, + "date": "2021-07-23T23:59:19Z", + "eol": "2024-04-12T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2019-11-13T19:29:54Z", + "eol": "2022-07-23T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2019-11-04T22:45:15Z", + "eol": "2020-11-13T00:00:00Z" + } + ], + "ruby-server-sdk": [ + { + "major": 8, + "minor": 7, + "date": "2024-07-25T18:07:55Z", + "eol": null + }, + { + "major": 8, + "minor": 6, + "date": "2024-06-26T18:03:32Z", + "eol": "2025-07-25T00:00:00Z" + }, + { + "major": 8, + "minor": 5, + "date": "2024-06-10T17:14:25Z", + "eol": "2025-06-26T00:00:00Z" + }, + { + "major": 8, + "minor": 4, + "date": "2024-04-05T14:45:00Z", + "eol": "2025-06-10T00:00:00Z" + }, + { + "major": 8, + "minor": 3, + "date": "2024-03-14T17:32:55Z", + "eol": "2025-04-05T00:00:00Z" + }, + { + "major": 8, + "minor": 2, + "date": "2024-02-22T20:17:12Z", + "eol": "2025-03-14T00:00:00Z" + }, + { + "major": 8, + "minor": 1, + "date": "2024-01-03T16:53:05Z", + "eol": "2025-02-22T00:00:00Z" + }, + { + "major": 8, + "minor": 0, + "date": "2023-10-17T21:01:47Z", + "eol": "2025-01-03T00:00:00Z" + }, + { + "major": 7, + "minor": 3, + "date": "2023-10-16T19:42:20Z", + "eol": "2024-10-17T00:00:00Z" + }, + { + "major": 7, + "minor": 2, + "date": "2023-05-04T12:47:52Z", + "eol": "2024-10-16T00:00:00Z" + }, + { + "major": 7, + "minor": 1, + "date": "2023-04-13T19:43:13Z", + "eol": "2024-05-04T00:00:00Z" + }, + { + "major": 7, + "minor": 0, + "date": "2022-12-30T20:15:48Z", + "eol": "2024-04-13T00:00:00Z" + }, + { + "major": 6, + "minor": 4, + "date": "2022-09-07T23:36:59Z", + "eol": "2023-12-30T00:00:00Z" + }, + { + "major": 6, + "minor": 3, + "date": "2021-12-09T23:39:46Z", + "eol": "2023-09-07T00:00:00Z" + }, + { + "major": 6, + "minor": 2, + "date": "2021-06-17T18:07:26Z", + "eol": "2022-12-09T00:00:00Z" + }, + { + "major": 6, + "minor": 1, + "date": "2021-02-04T21:20:00Z", + "eol": "2022-06-17T00:00:00Z" + }, + { + "major": 6, + "minor": 0, + "date": "2021-01-26T22:43:41Z", + "eol": "2022-02-04T00:00:00Z" + }, + { + "major": 5, + "minor": 8, + "date": "2020-05-27T20:57:33Z", + "eol": "2022-01-26T00:00:00Z" + }, + { + "major": 5, + "minor": 7, + "date": "2020-03-10T22:53:42Z", + "eol": "2021-05-27T00:00:00Z" + }, + { + "major": 5, + "minor": 6, + "date": "2019-08-20T18:28:46Z", + "eol": "2021-03-10T00:00:00Z" + }, + { + "major": 5, + "minor": 5, + "date": "2019-01-18T01:07:13Z", + "eol": "2020-08-20T00:00:00Z" + }, + { + "major": 5, + "minor": 4, + "date": "2018-11-05T20:08:36Z", + "eol": "2020-01-18T00:00:00Z" + }, + { + "major": 5, + "minor": 3, + "date": "2018-10-24T16:47:47Z", + "eol": "2019-11-05T00:00:00Z" + }, + { + "major": 5, + "minor": 2, + "date": "2018-08-30T18:29:23Z", + "eol": "2019-10-24T00:00:00Z" + }, + { + "major": 5, + "minor": 1, + "date": "2018-08-27T20:42:11Z", + "eol": "2019-08-30T00:00:00Z" + }, + { + "major": 5, + "minor": 0, + "date": "2018-06-26T20:19:12Z", + "eol": "2019-08-27T00:00:00Z" + }, + { + "major": 4, + "minor": 0, + "date": "2018-05-11T00:16:11Z", + "eol": "2019-06-26T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2018-02-22T23:38:36Z", + "eol": "2019-05-11T00:00:00Z" + }, + { + "major": 2, + "minor": 5, + "date": "2018-02-13T01:49:58Z", + "eol": "2019-02-22T00:00:00Z" + }, + { + "major": 2, + "minor": 4, + "date": "2018-01-12T21:49:07Z", + "eol": "2019-02-13T00:00:00Z" + }, + { + "major": 2, + "minor": 3, + "date": "2017-11-16T16:05:12Z", + "eol": "2019-01-12T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2017-05-12T18:48:43Z", + "eol": "2018-11-16T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2017-03-08T20:29:05Z", + "eol": "2018-05-12T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2016-08-10T22:57:42Z", + "eol": "2018-03-08T00:00:00Z" + } + ], + "rust-server-sdk": [ + { + "major": 2, + "minor": 2, + "date": "2024-07-19T13:54:09Z", + "eol": null + }, + { + "major": 2, + "minor": 1, + "date": "2024-03-15T20:59:34Z", + "eol": "2025-07-19T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2023-11-17T21:53:08Z", + "eol": "2025-03-15T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2023-05-03T19:12:28Z", + "eol": "2024-11-17T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2022-12-07T18:29:29Z", + "eol": "2024-05-03T00:00:00Z" + } + ], + "swift-client-sdk": [ + { + "major": 9, + "minor": 9, + "date": "2024-08-02T21:47:02Z", + "eol": null + }, + { + "major": 9, + "minor": 8, + "date": "2024-05-20T21:31:06Z", + "eol": "2025-08-02T00:00:00Z" + }, + { + "major": 9, + "minor": 7, + "date": "2024-05-02T19:49:00Z", + "eol": "2025-05-20T00:00:00Z" + }, + { + "major": 9, + "minor": 6, + "date": "2024-03-25T13:21:48Z", + "eol": "2025-05-02T00:00:00Z" + }, + { + "major": 9, + "minor": 5, + "date": "2024-03-14T18:41:22Z", + "eol": "2025-03-25T00:00:00Z" + }, + { + "major": 9, + "minor": 4, + "date": "2024-02-22T14:53:55Z", + "eol": "2025-03-14T00:00:00Z" + }, + { + "major": 9, + "minor": 3, + "date": "2024-01-03T19:18:39Z", + "eol": "2025-02-22T00:00:00Z" + }, + { + "major": 9, + "minor": 2, + "date": "2023-10-24T21:42:53Z", + "eol": "2025-01-03T00:00:00Z" + }, + { + "major": 9, + "minor": 1, + "date": "2023-09-11T14:43:26Z", + "eol": "2024-10-24T00:00:00Z" + }, + { + "major": 9, + "minor": 0, + "date": "2023-08-02T21:39:00Z", + "eol": "2024-09-11T00:00:00Z" + }, + { + "major": 8, + "minor": 4, + "date": "2024-01-03T17:53:57Z", + "eol": "2024-08-02T00:00:00Z" + }, + { + "major": 8, + "minor": 3, + "date": "2023-09-08T15:31:18Z", + "eol": "2024-08-02T00:00:00Z" + }, + { + "major": 8, + "minor": 2, + "date": "2023-08-02T19:17:36Z", + "eol": "2024-08-02T00:00:00Z" + }, + { + "major": 8, + "minor": 1, + "date": "2023-06-06T19:39:28Z", + "eol": "2024-08-02T00:00:00Z" + }, + { + "major": 8, + "minor": 0, + "date": "2022-12-07T16:37:04Z", + "eol": "2024-06-06T00:00:00Z" + }, + { + "major": 7, + "minor": 1, + "date": "2022-11-08T16:36:40Z", + "eol": "2023-12-07T00:00:00Z" + }, + { + "major": 7, + "minor": 0, + "date": "2022-10-12T19:31:20Z", + "eol": "2023-11-08T00:00:00Z" + }, + { + "major": 6, + "minor": 2, + "date": "2022-09-02T13:54:25Z", + "eol": "2023-10-12T00:00:00Z" + }, + { + "major": 6, + "minor": 1, + "date": "2022-05-17T16:30:13Z", + "eol": "2023-09-02T00:00:00Z" + }, + { + "major": 6, + "minor": 0, + "date": "2022-05-04T18:46:02Z", + "eol": "2023-05-17T00:00:00Z" + }, + { + "major": 5, + "minor": 4, + "date": "2021-02-26T19:56:15Z", + "eol": "2023-05-04T00:00:00Z" + }, + { + "major": 5, + "minor": 3, + "date": "2020-11-06T21:51:42Z", + "eol": "2022-02-26T00:00:00Z" + }, + { + "major": 5, + "minor": 2, + "date": "2020-10-09T12:46:09Z", + "eol": "2021-11-06T00:00:00Z" + }, + { + "major": 5, + "minor": 1, + "date": "2020-08-04T22:12:44Z", + "eol": "2021-10-09T00:00:00Z" + }, + { + "major": 5, + "minor": 0, + "date": "2020-07-23T17:55:07Z", + "eol": "2021-08-04T00:00:00Z" + }, + { + "major": 4, + "minor": 7, + "date": "2020-06-04T22:33:07Z", + "eol": "2021-07-23T00:00:00Z" + }, + { + "major": 4, + "minor": 6, + "date": "2020-05-27T01:18:19Z", + "eol": "2021-06-04T00:00:00Z" + }, + { + "major": 4, + "minor": 5, + "date": "2020-03-27T04:22:01Z", + "eol": "2021-05-27T00:00:00Z" + }, + { + "major": 4, + "minor": 4, + "date": "2020-01-15T21:31:46Z", + "eol": "2021-03-27T00:00:00Z" + }, + { + "major": 4, + "minor": 3, + "date": "2019-12-03T23:24:37Z", + "eol": "2021-01-15T00:00:00Z" + }, + { + "major": 4, + "minor": 2, + "date": "2019-10-25T20:47:24Z", + "eol": "2020-12-03T00:00:00Z" + }, + { + "major": 4, + "minor": 1, + "date": "2019-06-19T23:18:02Z", + "eol": "2020-10-25T00:00:00Z" + }, + { + "major": 4, + "minor": 0, + "date": "2019-05-10T18:16:54Z", + "eol": "2020-06-19T00:00:00Z" + }, + { + "major": 3, + "minor": 0, + "date": "2019-04-18T12:11:07Z", + "eol": "2020-05-10T00:00:00Z" + }, + { + "major": 2, + "minor": 14, + "date": "2018-12-06T00:49:22Z", + "eol": "2020-04-18T00:00:00Z" + }, + { + "major": 2, + "minor": 13, + "date": "2018-06-01T23:40:21Z", + "eol": "2019-12-06T00:00:00Z" + }, + { + "major": 2, + "minor": 12, + "date": "2018-04-23T04:16:42Z", + "eol": "2019-06-01T00:00:00Z" + }, + { + "major": 2, + "minor": 11, + "date": "2018-03-22T01:06:40Z", + "eol": "2019-04-23T00:00:00Z" + }, + { + "major": 2, + "minor": 10, + "date": "2018-02-02T04:23:57Z", + "eol": "2019-03-22T00:00:00Z" + }, + { + "major": 2, + "minor": 9, + "date": "2017-12-05T05:26:57Z", + "eol": "2019-02-02T00:00:00Z" + }, + { + "major": 2, + "minor": 8, + "date": "2017-10-13T21:20:27Z", + "eol": "2018-12-05T00:00:00Z" + }, + { + "major": 2, + "minor": 7, + "date": "2017-09-26T18:46:05Z", + "eol": "2018-10-13T00:00:00Z" + }, + { + "major": 2, + "minor": 6, + "date": "2017-08-26T00:55:05Z", + "eol": "2018-09-26T00:00:00Z" + }, + { + "major": 2, + "minor": 5, + "date": "2017-07-09T07:48:34Z", + "eol": "2018-08-26T00:00:00Z" + }, + { + "major": 2, + "minor": 4, + "date": "2017-06-13T17:52:37Z", + "eol": "2018-07-09T00:00:00Z" + }, + { + "major": 2, + "minor": 3, + "date": "2017-04-20T20:56:39Z", + "eol": "2018-06-13T00:00:00Z" + }, + { + "major": 2, + "minor": 2, + "date": "2017-04-06T05:07:58Z", + "eol": "2018-04-20T00:00:00Z" + }, + { + "major": 2, + "minor": 1, + "date": "2016-12-20T00:12:21Z", + "eol": "2018-04-06T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2016-09-01T18:00:00Z", + "eol": "2017-12-20T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2016-08-19T16:29:26Z", + "eol": "2017-09-01T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2016-07-13T19:45:55Z", + "eol": "2017-08-19T00:00:00Z" + } + ], + "vercel": [ + { + "major": 1, + "minor": 3, + "date": "2024-02-06T21:34:14Z", + "eol": null + }, + { + "major": 1, + "minor": 2, + "date": "2023-11-14T23:44:25Z", + "eol": "2025-02-06T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2023-08-14T23:12:38Z", + "eol": "2024-11-14T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2023-06-30T12:07:35Z", + "eol": "2024-08-14T00:00:00Z" + } + ], + "vue": [ + { + "major": 2, + "minor": 2, + "date": "2024-05-01T21:55:21Z", + "eol": null + }, + { + "major": 2, + "minor": 1, + "date": "2024-03-21T13:57:44Z", + "eol": "2025-05-01T00:00:00Z" + }, + { + "major": 2, + "minor": 0, + "date": "2023-06-30T19:58:44Z", + "eol": "2025-03-21T00:00:00Z" + }, + { + "major": 1, + "minor": 2, + "date": "2022-10-18T17:19:37Z", + "eol": "2024-06-30T00:00:00Z" + }, + { + "major": 1, + "minor": 1, + "date": "2022-10-05T18:22:46Z", + "eol": "2023-10-18T00:00:00Z" + }, + { + "major": 1, + "minor": 0, + "date": "2022-07-13T19:44:36Z", + "eol": "2023-10-05T00:00:00Z" + } + ] +} diff --git a/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/repos.json b/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/repos.json new file mode 100644 index 00000000..37653f56 --- /dev/null +++ b/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/repos.json @@ -0,0 +1,92 @@ +{ + "akamai-base": { + "github": "launchdarkly/js-core" + }, + "akamai-edgekv": { + "github": "launchdarkly/js-core" + }, + "android": { + "github": "launchdarkly/android-client-sdk" + }, + "apex-server-sdk": { + "github": "launchdarkly/apex-server-sdk" + }, + "cloudflare": { + "github": "launchdarkly/js-core" + }, + "cpp-client-sdk": { + "github": "launchdarkly/cpp-sdks" + }, + "cpp-server-sdk": { + "github": "launchdarkly/cpp-sdks" + }, + "dotnet-client-sdk": { + "github": "launchdarkly/dotnet-core" + }, + "dotnet-server-sdk": { + "github": "launchdarkly/dotnet-core" + }, + "electron": { + "github": "launchdarkly/electron-client-sdk" + }, + "erlang-server-sdk": { + "github": "launchdarkly/erlang-server-sdk" + }, + "flutter-client-sdk": { + "github": "launchdarkly/flutter-client-sdk" + }, + "go-server-sdk": { + "github": "launchdarkly/go-server-sdk" + }, + "haskell-server-sdk": { + "github": "launchdarkly/haskell-server-sdk" + }, + "java-server-sdk": { + "github": "launchdarkly/java-core" + }, + "js-client-sdk": { + "github": "launchdarkly/js-client-sdk" + }, + "lua-server-sdk": { + "github": "launchdarkly/lua-server-sdk" + }, + "node-client-sdk": { + "github": "launchdarkly/node-client-sdk" + }, + "node-server": { + "github": "launchdarkly/js-core" + }, + "php-server-sdk": { + "github": "launchdarkly/php-server-sdk" + }, + "python-server-sdk": { + "github": "launchdarkly/python-server-sdk" + }, + "react-client-sdk": { + "github": "launchdarkly/react-client-sdk" + }, + "react-native": { + "github": "launchdarkly/js-core" + }, + "relay-proxy": { + "github": "launchdarkly/ld-relay" + }, + "roku": { + "github": "launchdarkly/roku-client-sdk" + }, + "ruby-server-sdk": { + "github": "launchdarkly/ruby-server-sdk" + }, + "rust-server-sdk": { + "github": "launchdarkly/rust-server-sdk" + }, + "swift-client-sdk": { + "github": "launchdarkly/ios-client-sdk" + }, + "vercel": { + "github": "launchdarkly/js-core" + }, + "vue": { + "github": "launchdarkly/vue-client-sdk" + } +} diff --git a/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/types.json b/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/types.json new file mode 100644 index 00000000..670b6bda --- /dev/null +++ b/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/data/types.json @@ -0,0 +1,32 @@ +{ + "akamai-base": "edge", + "akamai-edgekv": "edge", + "android": "client-side", + "apex-server-sdk": "server-side", + "cloudflare": "edge", + "cpp-client-sdk": "client-side", + "cpp-server-sdk": "server-side", + "dotnet-client-sdk": "client-side", + "dotnet-server-sdk": "server-side", + "electron": "client-side", + "erlang-server-sdk": "server-side", + "flutter-client-sdk": "client-side", + "go-server-sdk": "server-side", + "haskell-server-sdk": "server-side", + "java-server-sdk": "server-side", + "js-client-sdk": "client-side", + "lua-server-sdk": "server-side", + "node-client-sdk": "client-side", + "node-server": "server-side", + "php-server-sdk": "server-side", + "python-server-sdk": "server-side", + "react-client-sdk": "client-side", + "react-native": "client-side", + "relay-proxy": "relay", + "roku": "client-side", + "ruby-server-sdk": "server-side", + "rust-server-sdk": "server-side", + "swift-client-sdk": "client-side", + "vercel": "edge", + "vue": "client-side" +} diff --git a/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/sdkmeta.go b/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/sdkmeta.go new file mode 100644 index 00000000..a8a90a87 --- /dev/null +++ b/vendor/github.com/launchdarkly/sdk-meta/api/sdkmeta/sdkmeta.go @@ -0,0 +1,115 @@ +package sdkmeta + +import ( + _ "embed" + "encoding/json" + "fmt" + "time" +) + +//go:embed data/names.json +var namesJSON []byte + +// Names is a map of SDK IDs to display names. +var Names map[string]string + +//go:embed data/repos.json +var reposJSON []byte + +// Repo contains the location of an SDK. +type Repo struct { + // GitHub is the GitHub repo path including the owner and repo name (e.g. launchdarkly/js-core). + GitHub string `json:"github"` +} + +// Repos is a map of SDK IDs to repository information. +var Repos map[string]Repo + +//go:embed data/languages.json +var languagesJSON []byte + +// Languages is a map of SDK IDs to supported languages. +var Languages map[string][]string + +//go:embed data/types.json +var typesJSON []byte + +// Type represents the most common use-case for an SDK. +type Type string + +const ( + // ClientSideType is an SDK that runs in a client context. + ClientSideType Type = "client-side" + // ServerSideType is an SDK that runs in a server context. + ServerSideType Type = "server-side" + // EdgeType is an SDK that runs in an edge deployment scenario. + EdgeType Type = "edge" + // RelayType is Relay Proxy. + RelayType Type = "relay" +) + +// Types is a map of SDK IDs to SDK types. +var Types map[string]Type + +//go:embed data/releases.json +var releasesJSON []byte + +type Release struct { + Major int `json:"major"` + Minor int `json:"minor"` + Date time.Time `json:"date"` + EOL *time.Time `json:"eol"` +} + +// MajorMinor returns a version string comprised of the major and minor version. For example, +// '2.1'. +func (r Release) MajorMinor() string { + return fmt.Sprintf("%d.%d", r.Major, r.Minor) +} + +// IsLatest returns true if the release is the latest release, meaning there is no EOL date set. +func (r Release) IsLatest() bool { + return r.EOL == nil +} + +// IsEOL returns true if the release is not the latest release and the current time is after the EOL date. The parameter +// represents the current time. +func (r Release) IsEOL(now time.Time) bool { + return !r.IsLatest() && now.After(*r.EOL) +} + +// IsApproachingEOL returns true if the release is not the latest release and the EOL date is within the time period +// from now to now + thresholdPrior. This is only valid if IsEOL() returns false. +func (r Release) IsApproachingEOL(now time.Time, thresholdPrior time.Duration) bool { + return !r.IsLatest() && now.Add(thresholdPrior).After(*r.EOL) +} + +// ReleaseList is an ordered list of releases. The first item should be the most recent release, while the +// last item is the oldest release. +type ReleaseList []Release + +var Releases map[string]ReleaseList + +// Earliest returns the earliest release. +func (r ReleaseList) Earliest() Release { + return r[len(r)-1] +} + +// Latest returns the latest release. +func (r ReleaseList) Latest() Release { + return r[0] +} + +func panicOnError(err error) { + if err != nil { + panic("couldn't initialize SDK Metadata module: " + err.Error()) + } +} + +func init() { + panicOnError(json.Unmarshal(namesJSON, &Names)) + panicOnError(json.Unmarshal(reposJSON, &Repos)) + panicOnError(json.Unmarshal(languagesJSON, &Languages)) + panicOnError(json.Unmarshal(typesJSON, &Types)) + panicOnError(json.Unmarshal(releasesJSON, &Releases)) +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 5705d913..bb3cd60a 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -123,6 +123,9 @@ github.com/josharian/intern # github.com/launchdarkly/api-client-go/v14 v14.0.0 ## explicit; go 1.13 github.com/launchdarkly/api-client-go/v14 +# github.com/launchdarkly/sdk-meta/api v0.1.1 +## explicit; go 1.20 +github.com/launchdarkly/sdk-meta/api/sdkmeta # github.com/lucasb-eyer/go-colorful v1.2.0 ## explicit; go 1.12 github.com/lucasb-eyer/go-colorful @@ -285,7 +288,7 @@ golang.org/x/exp/slog/internal/buffer golang.org/x/net/context golang.org/x/net/html golang.org/x/net/html/atom -# golang.org/x/oauth2 v0.15.0 +# golang.org/x/oauth2 v0.18.0 ## explicit; go 1.18 golang.org/x/oauth2 golang.org/x/oauth2/internal