@@ -27,6 +27,8 @@ public class DataConnect {
2727 private( set) var grpcClient : GrpcClient
2828 private var operationsManager : OperationsManager
2929
30+ private var callerSDKType : CallerSDKType = . base
31+
3032 private static var instanceStore = InstanceStore ( )
3133
3234 public enum EmulatorDefaults {
@@ -38,13 +40,20 @@ public class DataConnect {
3840
3941 public class func dataConnect( app: FirebaseApp ? = FirebaseApp . app ( ) ,
4042 connectorConfig: ConnectorConfig ,
41- settings: DataConnectSettings = DataConnectSettings ( ) )
43+ settings: DataConnectSettings = DataConnectSettings ( ) ,
44+ callerSDKType: CallerSDKType = . base)
4245 -> DataConnect {
4346 guard let app = app else {
4447 fatalError ( " No Firebase App present " )
4548 }
4649
47- return instanceStore. instance ( for: app, config: connectorConfig, settings: settings)
50+ return instanceStore
51+ . instance (
52+ for: app,
53+ config: connectorConfig,
54+ settings: settings,
55+ callerSDKType: callerSDKType
56+ )
4857 }
4958
5059 // MARK: Emulator
@@ -66,29 +75,33 @@ public class DataConnect {
6675 settings: settings,
6776 connectorConfig: connectorConfig,
6877 auth: Auth . auth ( app: app) ,
69- appCheck: AppCheck . appCheck ( app: app)
78+ appCheck: AppCheck . appCheck ( app: app) ,
79+ callerSDKType: callerSDKType
7080 )
7181
7282 operationsManager = OperationsManager ( grpcClient: grpcClient)
7383 }
7484
7585 // MARK: Init
7686
77- init ( app: FirebaseApp , connectorConfig: ConnectorConfig , settings: DataConnectSettings ) {
78- self . app = app
79- self . settings = settings
80- self . connectorConfig = connectorConfig
81-
87+ init ( app: FirebaseApp , connectorConfig: ConnectorConfig , settings: DataConnectSettings ,
88+ callerSDKType: CallerSDKType = . base) {
8289 guard app. options. projectID != nil else {
8390 fatalError ( " Firebase DataConnect requires the projectID to be set in the app options " )
8491 }
8592
93+ self . app = app
94+ self . settings = settings
95+ self . connectorConfig = connectorConfig
96+ self . callerSDKType = callerSDKType
97+
8698 grpcClient = GrpcClient (
8799 app: self . app,
88100 settings: settings,
89101 connectorConfig: connectorConfig,
90102 auth: Auth . auth ( app: app) ,
91- appCheck: AppCheck . appCheck ( app: app)
103+ appCheck: AppCheck . appCheck ( app: app) ,
104+ callerSDKType: self . callerSDKType
92105 )
93106 operationsManager = OperationsManager ( grpcClient: grpcClient)
94107 }
@@ -114,6 +127,13 @@ public class DataConnect {
114127 }
115128}
116129
130+ // This enum is public so the gen sdk can access it
131+ @available ( macOS 10 . 15 , iOS 13 , tvOS 13 , watchOS 6 , * )
132+ public enum CallerSDKType {
133+ case base // base sdk is directly used
134+ case generated // generated sdk is calling the base
135+ }
136+
117137// MARK: Instance Creation
118138
119139// Support for creating or reusing DataConnect instances.
@@ -145,13 +165,18 @@ private class InstanceStore {
145165 var instances = [ InstanceKey: DataConnect] ( )
146166
147167 func instance( for app: FirebaseApp , config: ConnectorConfig ,
148- settings: DataConnectSettings ) -> DataConnect {
168+ settings: DataConnectSettings , callerSDKType : CallerSDKType ) -> DataConnect {
149169 accessQ. sync {
150170 let key = InstanceKey ( app: app, config: config)
151171 if let inst = instances [ key] {
152172 return inst
153173 } else {
154- let dc = DataConnect ( app: app, connectorConfig: config, settings: settings)
174+ let dc = DataConnect (
175+ app: app,
176+ connectorConfig: config,
177+ settings: settings,
178+ callerSDKType: callerSDKType
179+ )
155180 instances [ key] = dc
156181 return dc
157182 }
0 commit comments