263 lines
6.6 KiB
Go
263 lines
6.6 KiB
Go
package events
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// An EventName is a struct with the event name.
|
|
type EventName struct {
|
|
Name string `json:"event"`
|
|
}
|
|
|
|
// GetName returns the name of the event.
|
|
func (e *EventName) GetName() string {
|
|
return strings.ToLower(e.Name)
|
|
}
|
|
|
|
func (e *EventName) SetName(name string) {
|
|
e.Name = strings.ToLower(name)
|
|
}
|
|
|
|
type Generic struct {
|
|
EventName
|
|
Timestamp float64 `json:"timestamp"`
|
|
ID string `json:"id"`
|
|
}
|
|
|
|
func (g *Generic) GetTimestamp() time.Time {
|
|
return time.Unix(0, int64(g.Timestamp*float64(time.Second))).UTC()
|
|
}
|
|
|
|
func (g *Generic) SetTimestamp(t time.Time) {
|
|
// convert := fmt.Sprintf("%d.%06d", t.Unix(), t.Nanosecond()/int(time.Microsecond))
|
|
// ts, err := strconv.ParseFloat(convert, 64)
|
|
g.Timestamp = float64(t.Unix()) + (float64(t.Nanosecond()/int(time.Microsecond)) / float64(1000000))
|
|
}
|
|
|
|
func (g *Generic) GetID() string {
|
|
return g.ID
|
|
}
|
|
|
|
func (g *Generic) SetID(id string) {
|
|
g.ID = id
|
|
}
|
|
|
|
//
|
|
// Message Events
|
|
//
|
|
|
|
type Accepted struct {
|
|
Generic
|
|
|
|
Envelope Envelope `json:"envelope"`
|
|
Message Message `json:"message"`
|
|
Flags Flags `json:"flags"`
|
|
|
|
Recipient string `json:"recipient"`
|
|
RecipientDomain string `json:"recipient-domain"`
|
|
Method string `json:"method"`
|
|
OriginatingIP string `json:"originating-ip"`
|
|
Tags []string `json:"tags"`
|
|
Campaigns []Campaign `json:"campaigns"`
|
|
UserVariables map[string]interface{} `json:"user-variables"`
|
|
}
|
|
|
|
type Rejected struct {
|
|
Generic
|
|
|
|
Reject struct {
|
|
Reason string `json:"reason"`
|
|
Description string `json:"description"`
|
|
} `json:"reject"`
|
|
|
|
Message Message `json:"message"`
|
|
Storage Storage `json:"storage"`
|
|
Flags Flags `json:"flags"`
|
|
|
|
Tags []string `json:"tags"`
|
|
Campaigns []Campaign `json:"campaigns"`
|
|
UserVariables map[string]interface{} `json:"user-variables"`
|
|
}
|
|
|
|
type Delivered struct {
|
|
Generic
|
|
|
|
Envelope Envelope `json:"envelope"`
|
|
Message Message `json:"message"`
|
|
Flags Flags `json:"flags"`
|
|
|
|
Recipient string `json:"recipient"`
|
|
RecipientDomain string `json:"recipient-domain"`
|
|
Method string `json:"method"`
|
|
Tags []string `json:"tags"`
|
|
Campaigns []Campaign `json:"campaigns"`
|
|
|
|
DeliveryStatus DeliveryStatus `json:"delivery-status"`
|
|
UserVariables map[string]interface{} `json:"user-variables"`
|
|
}
|
|
|
|
type Failed struct {
|
|
Generic
|
|
|
|
Envelope Envelope `json:"envelope"`
|
|
Message Message `json:"message"`
|
|
Flags Flags `json:"flags"`
|
|
|
|
Recipient string `json:"recipient"`
|
|
RecipientDomain string `json:"recipient-domain"`
|
|
Method string `json:"method"`
|
|
Tags []string `json:"tags"`
|
|
Campaigns []Campaign `json:"campaigns"`
|
|
|
|
DeliveryStatus DeliveryStatus `json:"delivery-status"`
|
|
Severity string `json:"severity"`
|
|
Reason string `json:"reason"`
|
|
UserVariables map[string]interface{} `json:"user-variables"`
|
|
}
|
|
|
|
type Stored struct {
|
|
Generic
|
|
|
|
Message Message `json:"message"`
|
|
Storage Storage `json:"storage"`
|
|
Flags Flags `json:"flags"`
|
|
|
|
Tags []string `json:"tags"`
|
|
Campaigns []Campaign `json:"campaigns"`
|
|
UserVariables map[string]interface{} `json:"user-variables"`
|
|
}
|
|
|
|
//
|
|
// Message Events (User)
|
|
//
|
|
|
|
type Opened struct {
|
|
Generic
|
|
|
|
Message Message `json:"message"`
|
|
Campaigns []Campaign `json:"campaigns"`
|
|
MailingList MailingList `json:"mailing-list"`
|
|
|
|
Recipient string `json:"recipient"`
|
|
RecipientDomain string `json:"recipient-domain"`
|
|
Tags []string `json:"tags"`
|
|
|
|
IP string `json:"ip"`
|
|
ClientInfo ClientInfo `json:"client-info"`
|
|
GeoLocation GeoLocation `json:"geolocation"`
|
|
|
|
UserVariables map[string]interface{} `json:"user-variables"`
|
|
}
|
|
|
|
type Clicked struct {
|
|
Generic
|
|
|
|
Url string `json:"url"`
|
|
|
|
Message Message `json:"message"`
|
|
Campaigns []Campaign `json:"campaigns"`
|
|
MailingList MailingList `json:"mailing-list"`
|
|
|
|
Recipient string `json:"recipient"`
|
|
RecipientDomain string `json:"recipient-domain"`
|
|
Tags []string `json:"tags"`
|
|
|
|
IP string `json:"ip"`
|
|
ClientInfo ClientInfo `json:"client-info"`
|
|
GeoLocation GeoLocation `json:"geolocation"`
|
|
|
|
UserVariables map[string]interface{} `json:"user-variables"`
|
|
}
|
|
|
|
type Unsubscribed struct {
|
|
Generic
|
|
|
|
Message Message `json:"message"`
|
|
Campaigns []Campaign `json:"campaigns"`
|
|
MailingList MailingList `json:"mailing-list"`
|
|
|
|
Recipient string `json:"recipient"`
|
|
RecipientDomain string `json:"recipient-domain"`
|
|
Tags []string `json:"tags"`
|
|
|
|
IP string `json:"ip"`
|
|
ClientInfo ClientInfo `json:"client-info"`
|
|
GeoLocation GeoLocation `json:"geolocation"`
|
|
|
|
UserVariables map[string]interface{} `json:"user-variables"`
|
|
}
|
|
|
|
type Complained struct {
|
|
Generic
|
|
|
|
Message Message `json:"message"`
|
|
Campaigns []Campaign `json:"campaigns"`
|
|
|
|
Recipient string `json:"recipient"`
|
|
Tags []string `json:"tags"`
|
|
UserVariables map[string]interface{} `json:"user-variables"`
|
|
}
|
|
|
|
//
|
|
// Mailing List Events
|
|
//
|
|
|
|
type MailingListMember struct {
|
|
Subscribed bool
|
|
Address string
|
|
Name string
|
|
Vars []string
|
|
}
|
|
|
|
type MailingListError struct {
|
|
Message string
|
|
}
|
|
|
|
type ListMemberUploaded struct {
|
|
Generic
|
|
MailingList MailingList `json:"mailing-list"`
|
|
Member MailingListMember `json:"member"`
|
|
TaskID string `json:"task-id"`
|
|
}
|
|
|
|
type ListMemberUploadError struct {
|
|
Generic
|
|
MailingList MailingList `json:"mailing-list"`
|
|
TaskID string `json:"task-id"`
|
|
Format string `json:"format"`
|
|
MemberDescription string `json:"member-description"`
|
|
Error MailingListError `json:"error"`
|
|
}
|
|
|
|
type ListUploaded struct {
|
|
Generic
|
|
MailingList MailingList `json:"mailing-list"`
|
|
IsUpsert bool `json:"is-upsert"`
|
|
Format string `json:"format"`
|
|
UpsertedCount int `json:"upserted-count"`
|
|
FailedCount int `json:"failed-count"`
|
|
Member MailingListMember `json:"member"`
|
|
Subscribed bool `json:"subscribed"`
|
|
TaskID string `json:"task-id"`
|
|
}
|
|
|
|
type Paging struct {
|
|
First string `json:"first,omitempty"`
|
|
Next string `json:"next,omitempty"`
|
|
Previous string `json:"previous,omitempty"`
|
|
Last string `json:"last,omitempty"`
|
|
}
|
|
|
|
type RawJSON []byte
|
|
|
|
func (v *RawJSON) UnmarshalJSON(data []byte) error {
|
|
*v = data
|
|
return nil
|
|
}
|
|
|
|
type Response struct {
|
|
Items []RawJSON `json:"items"`
|
|
Paging Paging `json:"paging"`
|
|
}
|