Skip to content

RewriteToday/golang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Rewrite Go SDK

github.com/rewritetoday/golang, the official Go SDK for the Rewrite API.

It wraps authentication, typed REST calls, and resource helpers on top of the SDK REST and API layers.

Installation

Use your preferred Go workflow:

go get github.com/rewritetoday/golang

Quick Start

package main

import (
	"context"
	"fmt"
	"log"

	rewrite "github.com/rewritetoday/golang"
)

func main() {
	rewriteClient, err := rewrite.New("rw_live_xxx")
	
	if err != nil {
		log.Fatal(err)
	}

	project, err := rewriteClient.Projects.Get(context.Background(), "123456789012345678")
	
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("%+v\n", project)
}

Create The Client

You can pass the API key directly or use the full options object.

package main

import (
	"time"

	rewrite "github.com/rewritetoday/golang"
)

func buildClient() (*rewrite.Client, error) {
	return rewrite.New(rewrite.RewriteOptions{
		Secret: "rw_live_xxx",
		Rest: &rewrite.RESTOptions{
			Timeout: 10 * time.Second,
			Headers: map[string]string{
				"x-trace-id": "my-service",
			},
			Retry: &rewrite.RetryOptions{
				Max: 3,
				Delay: func(attempt int) time.Duration {
					return time.Duration(attempt) * 250 * time.Millisecond
				},
			},
		},
	})
}

Projects

project, err := rewriteClient.Projects.Create(context.Background(), rewrite.RESTPostCreateProjectBody{
	Name: "AbacatePay Notifications",
})

if err != nil {
	log.Fatal(err)
}

fmt.Printf("%+v\n", project)

Templates

projectID := "123456789012345678"
customerFallback := "customer"
companyFallback := "Rewrite"

created, err := rewriteClient.Templates.Create(context.Background(), rewrite.CreateTemplateOptions{
	Project: projectID,
	RESTPostCreateTemplateBody: rewrite.RESTPostCreateTemplateBody{
		Name: "welcome_sms",
		Variables: []rewrite.APITemplateVariable{
			{Name: "name", Fallback: &customerFallback},
			{Name: "company", Fallback: &companyFallback},
		},
	},
})

if err != nil {
	log.Fatal(err)
}

templates, err := rewriteClient.Templates.List(context.Background(), projectID, &rewrite.RESTGetListTemplatesQueryParams{Limit: 20})

if err != nil {
	log.Fatal(err)
}

fmt.Printf("created=%+v templates=%+v\n", created, templates)

Webhooks

projectID := "123456789012345678"

hook, err := rewriteClient.Webhooks.Create(context.Background(), rewrite.CreateWebhookOptions{
	Project:  projectID,
	Name:     "delivery-events",
	Endpoint: "https://example.com/rewrite/webhooks",
	Events: []rewrite.WebhookEventType{
		rewrite.WebhookEventTypeSMSDelivered,
		rewrite.WebhookEventTypeSMSFailed,
	},
})

if err != nil {
	log.Fatal(err)
}

_, err = rewriteClient.Webhooks.Update(context.Background(), string(hook.Data.ID), rewrite.UpdateWebhookOptions{
	Project: projectID,
	RESTPatchUpdateWebhookBody: rewrite.RESTPatchUpdateWebhookBody{
		Status: rewrite.WebhookStatusInactive,
	},
})

if err != nil {
	log.Fatal(err)
}

hooks, err := rewriteClient.Webhooks.List(context.Background(), projectID, &rewrite.RESTGetListWebhooksQueryParams{Limit: 10})

if err != nil {
	log.Fatal(err)
}

fmt.Printf("%+v\n", hooks)

API Keys

projectID := "123456789012345678"

key, err := rewriteClient.APIKeys.Create(context.Background(), rewrite.CreateAPIKeyOptions{
	Project: projectID,
	RESTPostCreateAPIKeyBody: rewrite.RESTPostCreateAPIKeyBody{
		Name: "backend-prod",
		Scopes: []rewrite.APIKeyScope{
			rewrite.APIKeyScopeReadProject,
			rewrite.APIKeyScopeReadTemplates,
		},
	},
})

if err != nil {
	log.Fatal(err)
}

fmt.Printf("%+v\n", key)

Error Handling

Requests run through the SDK REST client. HTTP failures can throw HTTPError.

_, err := rewriteClient.Projects.Get(context.Background(), "invalid_id")
if err != nil {
	var httpErr *rewrite.HTTPError
	
	if errors.As(err, &httpErr) {
		fmt.Println("HTTP Error:", httpErr.Status, httpErr.Method, httpErr.URL)
	}
}

Made with 🤍 by the Rewrite team.
SMS the way it should be.

About

Rewrite's official Golang SDK

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Languages