Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
9f84441
feat(api): update via SDK Studio
stainless-app[bot] Aug 24, 2025
7cafbfd
feat(api): update via SDK Studio
stainless-app[bot] Aug 24, 2025
cdee3ee
feat(api): update via SDK Studio
stainless-app[bot] Aug 24, 2025
8efb1dd
feat(api): update via SDK Studio
stainless-app[bot] Aug 24, 2025
95da01f
feat(api): update via SDK Studio
stainless-app[bot] Aug 25, 2025
3b0da67
feat(api): update via SDK Studio
stainless-app[bot] Aug 25, 2025
5b938ed
codegen metadata
stainless-app[bot] Aug 25, 2025
d2b16a5
codegen metadata
stainless-app[bot] Aug 25, 2025
b5a1ff4
feat(api): update via SDK Studio
stainless-app[bot] Aug 27, 2025
25b5788
feat(api): update via SDK Studio
stainless-app[bot] Aug 27, 2025
d9c810d
codegen metadata
stainless-app[bot] Aug 27, 2025
a6438b2
codegen metadata
stainless-app[bot] Aug 27, 2025
278cdb3
feat(api): update via SDK Studio
stainless-app[bot] Aug 27, 2025
a180e0a
codegen metadata
stainless-app[bot] Aug 27, 2025
58ef9ef
codegen metadata
stainless-app[bot] Aug 27, 2025
28eb3de
codegen metadata
stainless-app[bot] Aug 29, 2025
e2f0ee9
codegen metadata
stainless-app[bot] Aug 29, 2025
b926941
codegen metadata
stainless-app[bot] Aug 29, 2025
f390e62
feat(api): update via SDK Studio
stainless-app[bot] Aug 29, 2025
94ac58b
codegen metadata
stainless-app[bot] Aug 29, 2025
c6145c4
fix: close body before retrying
stainless-app[bot] Aug 29, 2025
f32d341
feat(api): update via SDK Studio
stainless-app[bot] Aug 29, 2025
3483937
codegen metadata
stainless-app[bot] Aug 29, 2025
36be378
feat(api): update via SDK Studio
stainless-app[bot] Aug 29, 2025
e6707f7
feat(api): update via SDK Studio
stainless-app[bot] Aug 29, 2025
3878477
codegen metadata
stainless-app[bot] Aug 29, 2025
310166b
chore: configure new SDK language
stainless-app[bot] Oct 7, 2025
89091c1
codegen metadata
stainless-app[bot] Oct 7, 2025
7f956b3
chore: configure new SDK language
stainless-app[bot] Oct 7, 2025
77509a2
codegen metadata
stainless-app[bot] Oct 7, 2025
d681504
feat(api): manual updates
stainless-app[bot] Oct 7, 2025
658f1d0
feat(api): manual updates
stainless-app[bot] Oct 7, 2025
5c2b75b
feat(api): manual updates
stainless-app[bot] Oct 7, 2025
4c76c3b
feat(api): manual updates
stainless-app[bot] Oct 7, 2025
5344fe1
codegen metadata
stainless-app[bot] Oct 7, 2025
26076f4
codegen metadata
stainless-app[bot] Oct 7, 2025
99cd68f
codegen metadata
stainless-app[bot] Oct 7, 2025
39aa081
feat(api): manual updates
stainless-app[bot] Oct 7, 2025
7119a4f
codegen metadata
stainless-app[bot] Oct 7, 2025
28d6c9a
codegen metadata
stainless-app[bot] Oct 7, 2025
589a68b
feat(api): manual updates
stainless-app[bot] Oct 7, 2025
db71efa
feat(api): manual updates
stainless-app[bot] Oct 7, 2025
5796904
codegen metadata
stainless-app[bot] Oct 7, 2025
92c49b3
feat(api): remove limit from list routes
stainless-app[bot] Oct 7, 2025
3c735fe
chore(internal): codegen related update
stainless-app[bot] Oct 8, 2025
b891408
chore(internal): codegen related update
stainless-app[bot] Oct 8, 2025
0c8017f
feat(api): manual updates
stainless-app[bot] Oct 8, 2025
9d3efc0
codegen metadata
stainless-app[bot] Oct 8, 2025
4408f20
feat(api): manual updates
stainless-app[bot] Oct 8, 2025
78129af
feat(api): manual updates
stainless-app[bot] Oct 8, 2025
0b63e5e
release: 0.2.0
stainless-app[bot] Oct 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 0 additions & 28 deletions .github/workflows/create-releases.yml

This file was deleted.

2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.0.1"
".": "0.2.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 13
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/beeper%2Fbeeper-desktop-api-10508b7bd52381c216ed2584b7b0894f70fcc97fbd7f86792e78f72d108157c5.yml
openapi_spec_hash: d5f07fd2a363877f4c72da1187b8aaf1
config_hash: c7a99939afc44f6fae479b7896979f52
configured_endpoints: 15
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/beeper%2Fbeeper-desktop-api-f48bb509412536c41fdfa537894cecd4af486099d95fe79369f2ef239fa94a75.yml
openapi_spec_hash: f8b886fdfdc5ee3d51d2cd05daee3bab
config_hash: 6f12c5e4c662e1f315b95a70389b1549
46 changes: 46 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Changelog

## 0.2.0 (2025-10-08)

Full Changelog: [v0.0.1...v0.2.0](https://github.com/beeper/desktop-api-go/compare/v0.0.1...v0.2.0)

### Features

* **api:** manual updates ([78129af](https://github.com/beeper/desktop-api-go/commit/78129af51edc7883b0e41aefd57b6adc4e605f5a))
* **api:** manual updates ([4408f20](https://github.com/beeper/desktop-api-go/commit/4408f2032cc58ab59a465bddf91ebe5e8d248cad))
* **api:** manual updates ([0c8017f](https://github.com/beeper/desktop-api-go/commit/0c8017fad7c347bcf437cf685aafdb4270c44a84))
* **api:** manual updates ([db71efa](https://github.com/beeper/desktop-api-go/commit/db71efac468bc6f4b608997bbf0721082733c36b))
* **api:** manual updates ([589a68b](https://github.com/beeper/desktop-api-go/commit/589a68bbf8a2d60a1281db464df43ad9eab67668))
* **api:** manual updates ([39aa081](https://github.com/beeper/desktop-api-go/commit/39aa081c0cf963d834dc7b2ae2e9a6fe38c4cec5))
* **api:** manual updates ([4c76c3b](https://github.com/beeper/desktop-api-go/commit/4c76c3b0b3a134888001bce5e150db1971ac8f14))
* **api:** manual updates ([5c2b75b](https://github.com/beeper/desktop-api-go/commit/5c2b75bdbc04d7548db3b8f5a202ade4590f7143))
* **api:** manual updates ([658f1d0](https://github.com/beeper/desktop-api-go/commit/658f1d09e48180e35248adc7da6e27c395d1fcca))
* **api:** manual updates ([d681504](https://github.com/beeper/desktop-api-go/commit/d681504bf0ff37084a75d5f9a64c4bc48733fcff))
* **api:** remove limit from list routes ([92c49b3](https://github.com/beeper/desktop-api-go/commit/92c49b369b5ace61e67a1f65c4f44c32297bbb5a))
* **api:** update via SDK Studio ([e6707f7](https://github.com/beeper/desktop-api-go/commit/e6707f7a74894867f206865d4d2a36ae00372917))
* **api:** update via SDK Studio ([36be378](https://github.com/beeper/desktop-api-go/commit/36be3780fb98ff95cecde1c4ecdd7d45cdb4aec1))
* **api:** update via SDK Studio ([f32d341](https://github.com/beeper/desktop-api-go/commit/f32d3418ec8b806313a58dac62e4de26c2894a17))
* **api:** update via SDK Studio ([f390e62](https://github.com/beeper/desktop-api-go/commit/f390e629ec0230972d8f84fbffe27ea6a56e92ee))
* **api:** update via SDK Studio ([278cdb3](https://github.com/beeper/desktop-api-go/commit/278cdb321d3459c4019254ea75e5705bd70597b1))
* **api:** update via SDK Studio ([25b5788](https://github.com/beeper/desktop-api-go/commit/25b578877564808fdd3eddb5a4a7238c6b249bc7))
* **api:** update via SDK Studio ([b5a1ff4](https://github.com/beeper/desktop-api-go/commit/b5a1ff452e59274b58586d826e5ebd34efe37a0a))
* **api:** update via SDK Studio ([3b0da67](https://github.com/beeper/desktop-api-go/commit/3b0da676abda606cbb2d58f5dbc558dfbebf16a6))
* **api:** update via SDK Studio ([95da01f](https://github.com/beeper/desktop-api-go/commit/95da01f346d6483cce93fafe9b0ba0a59c50c0a3))
* **api:** update via SDK Studio ([8efb1dd](https://github.com/beeper/desktop-api-go/commit/8efb1ddb9a3c01b51c69e04d16f3e40fcbfebbdb))
* **api:** update via SDK Studio ([cdee3ee](https://github.com/beeper/desktop-api-go/commit/cdee3ee8a2f49c9cbd6a3fd1948b7576b6c5d645))
* **api:** update via SDK Studio ([7cafbfd](https://github.com/beeper/desktop-api-go/commit/7cafbfdcbd5d5aae479a6b665ec5578586dbc215))
* **api:** update via SDK Studio ([9f84441](https://github.com/beeper/desktop-api-go/commit/9f84441fa443bd5f02323eca7676de4d960924e0))
* **api:** update via SDK Studio ([0a97aff](https://github.com/beeper/desktop-api-go/commit/0a97aff2981e3f611cfd829353868f3fb40633d9))


### Bug Fixes

* close body before retrying ([c6145c4](https://github.com/beeper/desktop-api-go/commit/c6145c4b7e1880a13319137608951f0049d94c25))


### Chores

* configure new SDK language ([7f956b3](https://github.com/beeper/desktop-api-go/commit/7f956b3cf69545aed9b0147efa467636fe2ee43b))
* configure new SDK language ([310166b](https://github.com/beeper/desktop-api-go/commit/310166b0b45746db244d1a9e34de1c8dcc04d316))
* **internal:** codegen related update ([b891408](https://github.com/beeper/desktop-api-go/commit/b891408e549e98abd2106329a3c362830639690b))
* **internal:** codegen related update ([3c735fe](https://github.com/beeper/desktop-api-go/commit/3c735fe37a02273620e047afa8e7a28f272fdbd2))
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ $ ./scripts/lint

This will install all the required dependencies and build the SDK.

You can also [install go 1.18+ manually](https://go.dev/doc/install).
You can also [install go 1.22+ manually](https://go.dev/doc/install).

## Modifying/Adding code

Expand Down Expand Up @@ -41,7 +41,7 @@ To use a local version of this library from source in another project, edit the
directive. This can be done through the CLI with the following:

```sh
$ go mod edit -replace github.com/beeper/beeper-desktop-api-go=/path/to/beeper-desktop-api-go
$ go mod edit -replace github.com/beeper/desktop-api-go=/path/to/desktop-api-go
```

## Running tests
Expand Down
117 changes: 44 additions & 73 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
# Beeper Desktop Go API Library

<a href="https://pkg.go.dev/github.com/beeper/beeper-desktop-api-go"><img src="https://pkg.go.dev/badge/github.com/beeper/beeper-desktop-api-go.svg" alt="Go Reference"></a>
<!-- x-release-please-start-version -->

The Beeper Desktop Go library provides convenient access to the [Beeper Desktop REST API](https://www.beeper.com/desktop-api)
from applications written in Go.
<a href="https://pkg.go.dev/github.com/beeper/desktop-api-go"><img src="https://pkg.go.dev/badge/github.com/beeper/desktop-api-go.svg" alt="Go Reference"></a>

<!-- x-release-please-end -->

It is generated with [Stainless](https://www.stainless.com/).
The Beeper Desktop Go library provides convenient access to the [Beeper Desktop REST API](https://developers.beeper.com/desktop-api/)
from applications written in Go.

## Installation

<!-- x-release-please-start-version -->

```go
import (
"github.com/beeper/beeper-desktop-api-go" // imported as githubcombeeperbeeperdesktopapigo
"github.com/beeper/desktop-api-go" // imported as beeperdesktopapi
)
```

Expand All @@ -24,14 +26,14 @@ Or to pin the version:
<!-- x-release-please-start-version -->

```sh
go get -u 'github.com/beeper/beeper-desktop-api-go@v0.0.1'
go get -u 'github.com/beeper/desktop-api-go@v0.2.0'
```

<!-- x-release-please-end -->

## Requirements

This library requires Go 1.18+.
This library requires Go 1.22+.

## Usage

Expand All @@ -44,53 +46,50 @@ import (
"context"
"fmt"

"github.com/beeper/beeper-desktop-api-go"
"github.com/beeper/beeper-desktop-api-go/option"
"github.com/beeper/desktop-api-go"
"github.com/beeper/desktop-api-go/option"
)

func main() {
client := githubcombeeperbeeperdesktopapigo.NewClient(
client := beeperdesktopapi.NewClient(
option.WithAccessToken("My Access Token"), // defaults to os.LookupEnv("BEEPER_ACCESS_TOKEN")
)
page, err := client.Chats.Find(context.TODO(), githubcombeeperbeeperdesktopapigo.ChatFindParams{
Limit: githubcombeeperbeeperdesktopapigo.Int(10),
Type: githubcombeeperbeeperdesktopapigo.ChatFindParamsTypeSingle,
})
accounts, err := client.Accounts.List(context.TODO())
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", page)
fmt.Printf("%+v\n", accounts)
}

```

### Request fields

The githubcombeeperbeeperdesktopapigo library uses the [`omitzero`](https://tip.golang.org/doc/go1.24#encodingjsonpkgencodingjson)
The beeperdesktopapi library uses the [`omitzero`](https://tip.golang.org/doc/go1.24#encodingjsonpkgencodingjson)
semantics from the Go 1.24+ `encoding/json` release for request fields.

Required primitive fields (`int64`, `string`, etc.) feature the tag <code>\`json:"...,required"\`</code>. These
fields are always serialized, even their zero values.

Optional primitive types are wrapped in a `param.Opt[T]`. These fields can be set with the provided constructors, `githubcombeeperbeeperdesktopapigo.String(string)`, `githubcombeeperbeeperdesktopapigo.Int(int64)`, etc.
Optional primitive types are wrapped in a `param.Opt[T]`. These fields can be set with the provided constructors, `beeperdesktopapi.String(string)`, `beeperdesktopapi.Int(int64)`, etc.

Any `param.Opt[T]`, map, slice, struct or string enum uses the
tag <code>\`json:"...,omitzero"\`</code>. Its zero value is considered omitted.

The `param.IsOmitted(any)` function can confirm the presence of any `omitzero` field.

```go
p := githubcombeeperbeeperdesktopapigo.ExampleParams{
ID: "id_xxx", // required property
Name: githubcombeeperbeeperdesktopapigo.String("..."), // optional property
p := beeperdesktopapi.ExampleParams{
ID: "id_xxx", // required property
Name: beeperdesktopapi.String("..."), // optional property

Point: githubcombeeperbeeperdesktopapigo.Point{
X: 0, // required field will serialize as 0
Y: githubcombeeperbeeperdesktopapigo.Int(1), // optional field will serialize as 1
Point: beeperdesktopapi.Point{
X: 0, // required field will serialize as 0
Y: beeperdesktopapi.Int(1), // optional field will serialize as 1
// ... omitted non-required fields will not be serialized
},

Origin: githubcombeeperbeeperdesktopapigo.Origin{}, // the zero value of [Origin] is considered omitted
Origin: beeperdesktopapi.Origin{}, // the zero value of [Origin] is considered omitted
}
```

Expand Down Expand Up @@ -119,7 +118,7 @@ p.SetExtraFields(map[string]any{
})

// Send a number instead of an object
custom := param.Override[githubcombeeperbeeperdesktopapigo.FooParams](12)
custom := param.Override[beeperdesktopapi.FooParams](12)
```

### Request unions
Expand Down Expand Up @@ -260,7 +259,7 @@ This library uses the functional options pattern. Functions defined in the
requests. For example:

```go
client := githubcombeeperbeeperdesktopapigo.NewClient(
client := beeperdesktopapi.NewClient(
// Adds a header to every request made by the client
option.WithHeader("X-Some-Header", "custom_header_info"),
)
Expand All @@ -275,69 +274,41 @@ client.Accounts.List(context.TODO(), ...,

The request option `option.WithDebugLog(nil)` may be helpful while debugging.

See the [full list of request options](https://pkg.go.dev/github.com/beeper/beeper-desktop-api-go/option).
See the [full list of request options](https://pkg.go.dev/github.com/beeper/desktop-api-go/option).

### Pagination

This library provides some conveniences for working with paginated list endpoints.

You can use `.ListAutoPaging()` methods to iterate through items across all pages:

```go
iter := client.Messages.SearchAutoPaging(context.TODO(), githubcombeeperbeeperdesktopapigo.MessageSearchParams{
Limit: githubcombeeperbeeperdesktopapigo.Int(20),
Query: githubcombeeperbeeperdesktopapigo.String("meeting"),
})
// Automatically fetches more pages as needed.
for iter.Next() {
message := iter.Current()
fmt.Printf("%+v\n", message)
}
if err := iter.Err(); err != nil {
panic(err.Error())
}
```

Or you can use simple `.List()` methods to fetch a single page and receive a standard response object
with additional helper methods like `.GetNextPage()`, e.g.:

```go
page, err := client.Messages.Search(context.TODO(), githubcombeeperbeeperdesktopapigo.MessageSearchParams{
Limit: githubcombeeperbeeperdesktopapigo.Int(20),
Query: githubcombeeperbeeperdesktopapigo.String("meeting"),
})
for page != nil {
for _, message := range page.Data {
fmt.Printf("%+v\n", message)
}
page, err = page.GetNextPage()
}
if err != nil {
panic(err.Error())
}
```

### Errors

When the API returns a non-success status code, we return an error with type
`*githubcombeeperbeeperdesktopapigo.Error`. This contains the `StatusCode`, `*http.Request`, and
`*beeperdesktopapi.Error`. This contains the `StatusCode`, `*http.Request`, and
`*http.Response` values of the request, as well as the JSON of the error body
(much like other response objects in the SDK).

To handle errors, we recommend that you use the `errors.As` pattern:

```go
_, err := client.Messages.Send(context.TODO(), githubcombeeperbeeperdesktopapigo.MessageSendParams{
ChatID: "!invalid-chat-id",
Text: githubcombeeperbeeperdesktopapigo.String("Test message"),
})
_, err := client.Messages.Send(
context.TODO(),
"1229391",
beeperdesktopapi.MessageSendParams{
Text: beeperdesktopapi.String("Hello! Just checking in on the project status."),
},
)
if err != nil {
var apierr *githubcombeeperbeeperdesktopapigo.Error
var apierr *beeperdesktopapi.Error
if errors.As(err, &apierr) {
println(string(apierr.DumpRequest(true))) // Prints the serialized HTTP request
println(string(apierr.DumpResponse(true))) // Prints the serialized HTTP response
}
panic(err.Error()) // GET "/v0/send-message": 400 Bad Request { ... }
panic(err.Error()) // GET "/v1/chats/{chatID}/messages": 400 Bad Request { ... }
}
```

Expand Down Expand Up @@ -372,20 +343,20 @@ The file name and content-type can be customized by implementing `Name() string`
string` on the run-time type of `io.Reader`. Note that `os.File` implements `Name() string`, so a
file returned by `os.Open` will be sent with the file name on disk.

We also provide a helper `githubcombeeperbeeperdesktopapigo.File(reader io.Reader, filename string, contentType string)`
We also provide a helper `beeperdesktopapi.File(reader io.Reader, filename string, contentType string)`
which can be used to wrap any `io.Reader` with the appropriate file name and content type.

### Retries

Certain errors will be automatically retried 3 times by default, with a short exponential backoff.
Certain errors will be automatically retried 2 times by default, with a short exponential backoff.
We retry by default all connection errors, 408 Request Timeout, 409 Conflict, 429 Rate Limit,
and >=500 Internal errors.

You can use the `WithMaxRetries` option to configure or disable this:

```go
// Configure the default for all requests:
client := githubcombeeperbeeperdesktopapigo.NewClient(
client := beeperdesktopapi.NewClient(
option.WithMaxRetries(0), // default is 2
)

Expand All @@ -401,11 +372,11 @@ you need to examine response headers, status codes, or other details.
```go
// Create a variable to store the HTTP response
var response *http.Response
accountsResponse, err := client.Accounts.List(context.TODO(), option.WithResponseInto(&response))
accounts, err := client.Accounts.List(context.TODO(), option.WithResponseInto(&response))
if err != nil {
// handle error
}
fmt.Printf("%+v\n", accountsResponse)
fmt.Printf("%+v\n", accounts)

fmt.Printf("Status Code: %d\n", response.StatusCode)
fmt.Printf("Headers: %+#v\n", response.Header)
Expand Down Expand Up @@ -446,7 +417,7 @@ or the `option.WithJSONSet()` methods.
params := FooNewParams{
ID: "id_xxxx",
Data: FooNewParamsData{
FirstName: githubcombeeperbeeperdesktopapigo.String("John"),
FirstName: beeperdesktopapi.String("John"),
},
}
client.Foo.New(context.Background(), params, option.WithJSONSet("data.last_name", "Doe"))
Expand Down Expand Up @@ -481,7 +452,7 @@ func Logger(req *http.Request, next option.MiddlewareNext) (res *http.Response,
return res, err
}

client := githubcombeeperbeeperdesktopapigo.NewClient(
client := beeperdesktopapi.NewClient(
option.WithMiddleware(Logger),
)
```
Expand All @@ -506,7 +477,7 @@ This package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) con

We take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.

We are keen for your feedback; please open an [issue](https://www.github.com/beeper/beeper-desktop-api-go/issues) with questions, bugs, or suggestions.
We are keen for your feedback; please open an [issue](https://www.github.com/beeper/desktop-api-go/issues) with questions, bugs, or suggestions.

## Contributing

Expand Down
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ or products provided by Beeper Desktop, please follow the respective company's s

### Beeper Desktop Terms and Policies

Please contact help@beeper.com for any questions or concerns regarding the security of our services.
Please contact security@beeper.com for any questions or concerns regarding the security of our services.

---

Expand Down
Loading
Loading