@@ -36,6 +36,8 @@ import { StateQueryResponseType } from "../../../types/state/StateQueryResponse.
36
36
import { StateGetBulkOptions } from "../../../types/state/StateGetBulkOptions.type" ;
37
37
import { Settings } from "../../../utils/Settings.util" ;
38
38
import { addMetadataToMap } from "../../../utils/Client.util" ;
39
+ import { StateSaveResponseType } from "../../../types/state/StateSaveResponseType" ;
40
+ import { StateSaveOptions } from "../../../types/state/StateSaveOptions.type" ;
39
41
40
42
// https://docs.dapr.io/reference/api/state_api/
41
43
export default class GRPCClientState implements IClientState {
@@ -45,7 +47,11 @@ export default class GRPCClientState implements IClientState {
45
47
this . client = client ;
46
48
}
47
49
48
- async save ( storeName : string , stateObjects : KeyValuePairType [ ] ) : Promise < void > {
50
+ async save (
51
+ storeName : string ,
52
+ stateObjects : KeyValuePairType [ ] ,
53
+ options : StateSaveOptions = { } ,
54
+ ) : Promise < StateSaveResponseType > {
49
55
const stateList : StateItem [ ] = [ ] ;
50
56
51
57
for ( const stateObject of stateObjects ) {
@@ -57,6 +63,11 @@ export default class GRPCClientState implements IClientState {
57
63
"utf-8" ,
58
64
) ,
59
65
) ;
66
+ // Merge metadata from stateObject and options.
67
+ // Note, metadata from options will override metadata from stateObject.
68
+ // See https://github.com/dapr/dapr/blob/029ec8cb7a1c88ec5d222bc2b0d1d53541217f19/pkg/http/api.go#L1525-L1532
69
+ addMetadataToMap ( si . getMetadataMap ( ) , stateObject . metadata ) ;
70
+ addMetadataToMap ( si . getMetadataMap ( ) , options . metadata ) ;
60
71
stateList . push ( si ) ;
61
72
}
62
73
@@ -69,11 +80,11 @@ export default class GRPCClientState implements IClientState {
69
80
return new Promise ( ( resolve , reject ) => {
70
81
client . saveState ( msgService , ( err , _res ) => {
71
82
if ( err ) {
72
- return reject ( err ) ;
83
+ return reject ( { error : err } ) ;
73
84
}
74
85
75
86
// https://docs.dapr.io/reference/api/state_api/#response-body
76
- return resolve ( ) ;
87
+ return resolve ( { } ) ;
77
88
} ) ;
78
89
} ) ;
79
90
}
@@ -107,7 +118,7 @@ export default class GRPCClientState implements IClientState {
107
118
} ) ;
108
119
}
109
120
110
- async getBulk ( storeName : string , keys : string [ ] , options : StateGetBulkOptions ) : Promise < KeyValueType [ ] > {
121
+ async getBulk ( storeName : string , keys : string [ ] , options : StateGetBulkOptions = { } ) : Promise < KeyValueType [ ] > {
111
122
const msgService = new GetBulkStateRequest ( ) ;
112
123
msgService . setStoreName ( storeName ) ;
113
124
msgService . setKeysList ( keys ) ;
0 commit comments