Skip to content

Commit 2b2a651

Browse files
authored
Expose GRPC client so that consumers can subscribe to events (#17)
1 parent 41ad1ac commit 2b2a651

File tree

3 files changed

+68
-1
lines changed

3 files changed

+68
-1
lines changed

lib/go/iinft/client.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,19 @@ package iinft
22

33
import (
44
"errors"
5+
"fmt"
56
"os"
67
"path"
78

89
"github.com/onflow/flow-emulator/emulator"
10+
"github.com/onflow/flow-go-sdk/access"
11+
grpcAccess "github.com/onflow/flow-go-sdk/access/grpc"
912
"github.com/onflow/flowkit/v2"
1013
"github.com/onflow/flowkit/v2/config"
1114
"github.com/onflow/flowkit/v2/gateway"
1215
"github.com/piprate/sequel-flow-contracts/lib/go/iinft/gwtf"
1316
"github.com/spf13/afero"
17+
"google.golang.org/grpc"
1418
)
1519

1620
type (
@@ -61,6 +65,7 @@ func NewGoWithTheFlowError(baseLoader flowkit.ReaderWriter, network string, inMe
6165

6266
logger := NewFlowKitLogger()
6367
var service *flowkit.Flowkit
68+
var client access.Client
6469

6570
if inMemory {
6671
// YAY, we can run it inline in memory!
@@ -91,11 +96,70 @@ func NewGoWithTheFlowError(baseLoader flowkit.ReaderWriter, network string, inMe
9196
return nil, err
9297
}
9398
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+
}
94109
}
95110
return &gwtf.GoWithTheFlow{
96111
State: state,
97112
Services: service,
113+
Client: client,
98114
Logger: logger,
99115
PrependNetworkToAccountNames: true,
100116
}, nil
101117
}
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+
}

lib/go/iinft/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ require (
1414
github.com/spf13/afero v1.11.0
1515
github.com/stretchr/testify v1.9.0
1616
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f
17+
google.golang.org/grpc v1.63.2
1718
)
1819

1920
require (
@@ -227,7 +228,6 @@ require (
227228
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
228229
google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect
229230
google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect
230-
google.golang.org/grpc v1.63.2 // indirect
231231
google.golang.org/protobuf v1.33.0 // indirect
232232
gopkg.in/ini.v1 v1.67.0 // indirect
233233
gopkg.in/yaml.v3 v3.0.1 // indirect

lib/go/iinft/gwtf/setup.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package gwtf
33
import (
44
"context"
55
"fmt"
6+
67
"log"
78

9+
"github.com/onflow/flow-go-sdk/access"
810
"github.com/onflow/flowkit/v2"
911
"github.com/onflow/flowkit/v2/accounts"
1012
"github.com/onflow/flowkit/v2/config"
@@ -16,6 +18,7 @@ import (
1618
// GoWithTheFlow Entire configuration to work with Go With the Flow
1719
type GoWithTheFlow struct {
1820
State *flowkit.State
21+
Client access.Client
1922
Services flowkit.Services
2023
Logger output.Logger
2124
PrependNetworkToAccountNames bool

0 commit comments

Comments
 (0)