@@ -4,17 +4,17 @@ package extension_transaction
4
4
5
5
import (
6
6
"encoding/json"
7
- "errors"
8
7
"time"
9
8
9
+ "github.com/spf13/viper"
10
10
"github.com/twitchdev/twitch-cli/internal/events"
11
11
"github.com/twitchdev/twitch-cli/internal/models"
12
12
"github.com/twitchdev/twitch-cli/internal/util"
13
13
)
14
14
15
15
var transportsSupported = map [string ]bool {
16
16
models .TransportWebSub : true ,
17
- models .TransportEventSub : false ,
17
+ models .TransportEventSub : true ,
18
18
}
19
19
20
20
var triggerSupported = []string {"transaction" }
@@ -23,6 +23,9 @@ var triggerMapping = map[string]map[string]string{
23
23
models .TransportWebSub : {
24
24
"transaction" : "transaction" ,
25
25
},
26
+ models .TransportEventSub : {
27
+ "transaction" : "extension.bits_transaction.create" ,
28
+ },
26
29
}
27
30
28
31
type Event struct {}
@@ -31,12 +34,55 @@ func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEven
31
34
var event []byte
32
35
var err error
33
36
37
+ clientID := viper .GetString ("clientId" )
38
+
39
+ // if not configured, generate a random one
40
+ if clientID == "" {
41
+ clientID = util .RandomClientID ()
42
+ }
43
+
34
44
if params .Cost == 0 {
35
45
params .Cost = 100
36
46
}
37
47
switch params .Transport {
38
48
case models .TransportEventSub :
39
- return events.MockEventResponse {}, errors .New ("Extension transactions are unsupported on Eventsub" )
49
+ body := & models.TransactionEventSubResponse {
50
+ Subscription : models.EventsubSubscription {
51
+ ID : params .ID ,
52
+ Status : "enabled" ,
53
+ Type : triggerMapping [params.Transport ][params.Trigger ],
54
+ Version : "1" ,
55
+ Condition : models.EventsubCondition {
56
+ ExtensionClientID : clientID ,
57
+ },
58
+ Transport : models.EventsubTransport {
59
+ Method : "webhook" ,
60
+ Callback : "null" ,
61
+ },
62
+ Cost : 1 ,
63
+ CreatedAt : util .GetTimestamp ().Format (time .RFC3339Nano ),
64
+ },
65
+ Event : models.TransactionEventSubEvent {
66
+ ID : params .ID ,
67
+ ExtensionClientID : clientID ,
68
+ BroadcasterUserID : params .ToUserID ,
69
+ BroadcasterUserLogin : "testBroadcaster" ,
70
+ BroadcasterUserName : "testBroadcaster" ,
71
+ UserName : "testUser" ,
72
+ UserLogin : "testUser" ,
73
+ UserID : params .FromUserID ,
74
+ Product : models.TransactionEventSubProduct {
75
+ Name : "Test Trigger Item from CLI" ,
76
+ Sku : "testItemSku" ,
77
+ Bits : params .Cost ,
78
+ InDevelopment : true ,
79
+ },
80
+ },
81
+ }
82
+ event , err = json .Marshal (body )
83
+ if err != nil {
84
+ return events.MockEventResponse {}, err
85
+ }
40
86
case models .TransportWebSub :
41
87
body := * & models.TransactionWebSubResponse {
42
88
Data : []models.TransactionWebsubEvent {
0 commit comments