@@ -27,14 +27,26 @@ def __init__(
2727        self .channel  =  channel 
2828        self ._data  =  kwargs 
2929
30-     def  get_or_create_instance (self ) ->  Union ["Instance" , "AsyncInstance" ]:
30+     def  get_or_create_instance (
31+         self , service_account_token : Optional [str ] =  None 
32+     ) ->  Union ["Instance" , "AsyncInstance" ]:
3133        """Get or create an instance for this customer.""" 
3234        if  hasattr (self ._client , "_get_or_create_instance_async" ):
3335            # type: ignore[arg-type] 
34-             return  AsyncInstance (self ._client , self .customer_id , self .instance_id )
36+             return  AsyncInstance (
37+                 self ._client ,
38+                 self .customer_id ,
39+                 self .instance_id ,
40+                 service_account_token = service_account_token ,
41+             )
3542        else :
3643            # type: ignore[arg-type] 
37-             return  Instance (self ._client , self .customer_id , self .instance_id )
44+             return  Instance (
45+                 self ._client ,
46+                 self .customer_id ,
47+                 self .instance_id ,
48+                 service_account_token = service_account_token ,
49+             )
3850
3951    def  __getattr__ (self , name : str ) ->  Any :
4052        """Access additional customer data.""" 
@@ -45,10 +57,17 @@ class AsyncCustomer(Customer):
4557    """Async version of Customer.""" 
4658
4759    # type: ignore[override] 
48-     async  def  get_or_create_instance (self ) ->  "AsyncInstance" :
60+     async  def  get_or_create_instance (
61+         self , service_account_token : Optional [str ] =  None 
62+     ) ->  "AsyncInstance" :
4963        """Get or create an instance for this customer.""" 
5064        # type: ignore[arg-type] 
51-         return  AsyncInstance (self ._client , self .customer_id , self .instance_id )
65+         return  AsyncInstance (
66+             self ._client ,
67+             self .customer_id ,
68+             self .instance_id ,
69+             service_account_token = service_account_token ,
70+         )
5271
5372
5473class  Instance :
@@ -59,11 +78,13 @@ def __init__(
5978        client : "ReplicatedClient" ,
6079        customer_id : str ,
6180        instance_id : Optional [str ] =  None ,
81+         service_account_token : Optional [str ] =  None ,
6282        ** kwargs : Any ,
6383    ) ->  None :
6484        self ._client  =  client 
6585        self .customer_id  =  customer_id 
6686        self .instance_id  =  instance_id 
87+         self ._service_account_token  =  service_account_token 
6788        self ._machine_id  =  client ._machine_id 
6889        self ._data  =  kwargs 
6990        self ._status  =  "ready" 
@@ -112,12 +133,18 @@ def set_version(self, version: str) -> None:
112133    def  _ensure_instance (self ) ->  None :
113134        """Ensure the instance ID is generated and cached.""" 
114135        if  self .instance_id :
136+             # If we have an instance ID but a service token was provided, replace dynamic token 
137+             if  self ._service_account_token :
138+                 self ._client .state_manager .set_dynamic_token (self ._service_account_token )
115139            return 
116140
117141        # Check if instance ID is cached 
118142        cached_instance_id  =  self ._client .state_manager .get_instance_id ()
119143        if  cached_instance_id :
120144            self .instance_id  =  cached_instance_id 
145+             # If we have a service token provided, replace dynamic token 
146+             if  self ._service_account_token :
147+                 self ._client .state_manager .set_dynamic_token (self ._service_account_token )
121148            return 
122149
123150        # Create new instance 
@@ -135,6 +162,13 @@ def _ensure_instance(self) -> None:
135162        self .instance_id  =  response ["instance_id" ]
136163        self ._client .state_manager .set_instance_id (self .instance_id )
137164
165+         # If API returns a service_token, replace the dynamic token with it 
166+         if  "service_token"  in  response :
167+             self ._client .state_manager .set_dynamic_token (response ["service_token" ])
168+         # Otherwise, if user provided a service token, use that 
169+         elif  self ._service_account_token :
170+             self ._client .state_manager .set_dynamic_token (self ._service_account_token )
171+ 
138172    def  _report_instance (self ) ->  None :
139173        """Send instance telemetry to vandoor.""" 
140174        if  not  self .instance_id :
@@ -190,11 +224,13 @@ def __init__(
190224        client : "AsyncReplicatedClient" ,
191225        customer_id : str ,
192226        instance_id : Optional [str ] =  None ,
227+         service_account_token : Optional [str ] =  None ,
193228        ** kwargs : Any ,
194229    ) ->  None :
195230        self ._client  =  client 
196231        self .customer_id  =  customer_id 
197232        self .instance_id  =  instance_id 
233+         self ._service_account_token  =  service_account_token 
198234        self ._machine_id  =  client ._machine_id 
199235        self ._data  =  kwargs 
200236        self ._status  =  "ready" 
@@ -243,12 +279,18 @@ async def set_version(self, version: str) -> None:
243279    async  def  _ensure_instance (self ) ->  None :
244280        """Ensure the instance ID is generated and cached.""" 
245281        if  self .instance_id :
282+             # If we have an instance ID but a service token was provided, replace dynamic token 
283+             if  self ._service_account_token :
284+                 self ._client .state_manager .set_dynamic_token (self ._service_account_token )
246285            return 
247286
248287        # Check if instance ID is cached 
249288        cached_instance_id  =  self ._client .state_manager .get_instance_id ()
250289        if  cached_instance_id :
251290            self .instance_id  =  cached_instance_id 
291+             # If we have a service token provided, replace dynamic token 
292+             if  self ._service_account_token :
293+                 self ._client .state_manager .set_dynamic_token (self ._service_account_token )
252294            return 
253295
254296        # Create new instance 
@@ -266,6 +308,13 @@ async def _ensure_instance(self) -> None:
266308        self .instance_id  =  response ["instance_id" ]
267309        self ._client .state_manager .set_instance_id (self .instance_id )
268310
311+         # If API returns a service_token, replace the dynamic token with it 
312+         if  "service_token"  in  response :
313+             self ._client .state_manager .set_dynamic_token (response ["service_token" ])
314+         # Otherwise, if user provided a service token, use that 
315+         elif  self ._service_account_token :
316+             self ._client .state_manager .set_dynamic_token (self ._service_account_token )
317+ 
269318    async  def  _report_instance (self ) ->  None :
270319        """Send instance telemetry to vandoor.""" 
271320        if  not  self .instance_id :
0 commit comments