@@ -2,15 +2,19 @@ package iinft
2
2
3
3
import (
4
4
"errors"
5
+ "fmt"
5
6
"os"
6
7
"path"
7
8
8
9
"github.com/onflow/flow-emulator/emulator"
10
+ "github.com/onflow/flow-go-sdk/access"
11
+ grpcAccess "github.com/onflow/flow-go-sdk/access/grpc"
9
12
"github.com/onflow/flowkit/v2"
10
13
"github.com/onflow/flowkit/v2/config"
11
14
"github.com/onflow/flowkit/v2/gateway"
12
15
"github.com/piprate/sequel-flow-contracts/lib/go/iinft/gwtf"
13
16
"github.com/spf13/afero"
17
+ "google.golang.org/grpc"
14
18
)
15
19
16
20
type (
@@ -61,6 +65,7 @@ func NewGoWithTheFlowError(baseLoader flowkit.ReaderWriter, network string, inMe
61
65
62
66
logger := NewFlowKitLogger ()
63
67
var service * flowkit.Flowkit
68
+ var client access.Client
64
69
65
70
if inMemory {
66
71
// YAY, we can run it inline in memory!
@@ -91,11 +96,70 @@ func NewGoWithTheFlowError(baseLoader flowkit.ReaderWriter, network string, inMe
91
96
return nil , err
92
97
}
93
98
service = flowkit .NewFlowkit (state , * networkDef , gw , logger )
99
+
100
+ client , err = grpcAccess .NewClient (
101
+ networkDef .Host ,
102
+ grpcAccess .WithGRPCDialOptions (
103
+ grpc .WithDefaultCallOptions (grpc .MaxCallRecvMsgSize (maxGRPCMessageSize )),
104
+ ),
105
+ )
106
+ if err != nil {
107
+ return nil , fmt .Errorf ("failed to connect to host %s" , networkDef .Host )
108
+ }
94
109
}
95
110
return & gwtf.GoWithTheFlow {
96
111
State : state ,
97
112
Services : service ,
113
+ Client : client ,
98
114
Logger : logger ,
99
115
PrependNetworkToAccountNames : true ,
100
116
}, nil
101
117
}
118
+
119
+ // NewGrpcClientForNetworkFS creates a new local go with the flow client
120
+ func NewGrpcClientForNetworkFS (flowBasePath , network string ) (access.Client , error ) {
121
+ return NewGrpcClient (& fileLoader {
122
+ baseDir : flowBasePath ,
123
+ fsLoader : & afero.Afero {Fs : afero .NewOsFs ()},
124
+ }, network )
125
+ }
126
+
127
+ // NewGrpcClientForNetworkEmbedded creates a new test go with the flow client based on embedded setup
128
+ func NewGrpcClientForNetworkEmbedded (network string ) (access.Client , error ) {
129
+ return NewGrpcClient (& embeddedFileLoader {}, network )
130
+ }
131
+
132
+ // maxGRPCMessageSize 60mb
133
+ const maxGRPCMessageSize = 1024 * 1024 * 60
134
+
135
+ func NewGrpcClient (baseLoader flowkit.ReaderWriter , network string , opts ... grpcAccess.ClientOption ) (access.Client , error ) {
136
+ state , err := flowkit .Load ([]string {"flow.json" }, baseLoader )
137
+ if err != nil {
138
+ return nil , err
139
+ }
140
+
141
+ networkDef , err := state .Networks ().ByName (network )
142
+ if err != nil {
143
+ return nil , err
144
+ }
145
+
146
+ options := append (
147
+ []grpcAccess.ClientOption {
148
+ grpcAccess .WithGRPCDialOptions (
149
+ grpc .WithDefaultCallOptions (grpc .MaxCallRecvMsgSize (maxGRPCMessageSize )),
150
+ ),
151
+ },
152
+ opts ... ,
153
+ )
154
+
155
+ gClient , err := grpcAccess .NewClient (
156
+ networkDef .Host ,
157
+ options ... ,
158
+ )
159
+
160
+ if err != nil || gClient == nil {
161
+ return nil , fmt .Errorf ("failed to connect to host %s" , networkDef .Host )
162
+ }
163
+
164
+ return gClient , nil
165
+ }
0 commit comments