composio 0.1.15 → 0.1.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -4
  3. data/README.md +246 -202
  4. data/lib/composio/api/actions_api.rb +191 -4
  5. data/lib/composio/api/admin_api.rb +78 -0
  6. data/lib/composio/api/auth_api.rb +77 -0
  7. data/lib/composio/api/cli_api.rb +266 -0
  8. data/lib/composio/api/connections_api.rb +124 -6
  9. data/lib/composio/api/event_logs_api.rb +0 -318
  10. data/lib/composio/api/integrations_api.rb +8 -4
  11. data/lib/composio/api/logs_api.rb +19 -4
  12. data/lib/composio/api/triggers_api.rb +9 -2
  13. data/lib/composio/models/action_execution_req_dto.rb +31 -4
  14. data/lib/composio/models/actions_query_dto.rb +22 -4
  15. data/lib/composio/models/app_query_dto.rb +1 -1
  16. data/lib/composio/models/client_dto.rb +374 -0
  17. data/lib/composio/models/client_dto_created_at.rb +102 -0
  18. data/lib/composio/models/client_dto_last_subscribed_at.rb +102 -0
  19. data/lib/composio/models/client_dto_updated_at.rb +102 -0
  20. data/lib/composio/models/client_info_res_dto.rb +235 -0
  21. data/lib/composio/models/connection_params.rb +15 -4
  22. data/lib/composio/models/connection_with_app_data.rb +15 -4
  23. data/lib/composio/models/create_connector_payload_dto.rb +12 -7
  24. data/lib/composio/models/expected_input_fields_dto.rb +346 -0
  25. data/lib/composio/models/get_connections_query_dto.rb +15 -4
  26. data/lib/composio/models/get_connector_info_res_dto.rb +1 -1
  27. data/lib/composio/models/get_logs_dto.rb +14 -4
  28. data/lib/composio/models/ingest_data_dto.rb +21 -1
  29. data/lib/composio/models/initiate_connection_payload_dto.rb +19 -18
  30. data/lib/composio/models/list_triggers_query_dto.rb +11 -1
  31. data/lib/composio/models/sdk_error_res_dto.rb +221 -0
  32. data/lib/composio/models/session_info_dto.rb +224 -0
  33. data/lib/composio/models/tools_execute_req_dto.rb +22 -4
  34. data/lib/composio/models/trigger_response_dto.rb +14 -4
  35. data/lib/composio/models/update_connection_labels_payload_dto.rb +222 -0
  36. data/lib/composio/version.rb +1 -1
  37. data/lib/composio.rb +12 -3
  38. data/spec/api/actions_api_spec.rb +25 -0
  39. data/spec/api/admin_api_spec.rb +11 -0
  40. data/spec/api/auth_api_spec.rb +11 -0
  41. data/spec/api/cli_api_spec.rb +63 -0
  42. data/spec/api/connections_api_spec.rb +14 -0
  43. data/spec/api/event_logs_api_spec.rb +0 -43
  44. data/spec/api/logs_api_spec.rb +1 -0
  45. data/spec/api/triggers_api_spec.rb +1 -0
  46. data/spec/models/action_execution_req_dto_spec.rb +18 -0
  47. data/spec/models/actions_query_dto_spec.rb +12 -0
  48. data/spec/models/client_dto_created_at_spec.rb +25 -0
  49. data/spec/models/client_dto_last_subscribed_at_spec.rb +25 -0
  50. data/spec/models/client_dto_spec.rb +100 -0
  51. data/spec/models/client_dto_updated_at_spec.rb +25 -0
  52. data/spec/models/client_info_res_dto_spec.rb +34 -0
  53. data/spec/models/connection_params_spec.rb +6 -0
  54. data/spec/models/connection_with_app_data_spec.rb +6 -0
  55. data/spec/models/create_connector_payload_dto_spec.rb +6 -0
  56. data/spec/models/expected_input_fields_dto_spec.rb +82 -0
  57. data/spec/models/get_connections_query_dto_spec.rb +6 -0
  58. data/spec/models/get_logs_dto_spec.rb +6 -0
  59. data/spec/models/ingest_data_dto_spec.rb +12 -0
  60. data/spec/models/initiate_connection_payload_dto_spec.rb +6 -0
  61. data/spec/models/list_triggers_query_dto_spec.rb +6 -0
  62. data/spec/models/sdk_error_res_dto_spec.rb +28 -0
  63. data/spec/models/session_info_dto_spec.rb +34 -0
  64. data/spec/models/tools_execute_req_dto_spec.rb +12 -0
  65. data/spec/models/trigger_response_dto_spec.rb +6 -0
  66. data/spec/models/update_connection_labels_payload_dto_spec.rb +28 -0
  67. metadata +32 -4
  68. data/spec/api/payment_api_spec.rb +0 -83
@@ -0,0 +1,221 @@
1
+ =begin
2
+ #Composio OpenAPI
3
+
4
+ #Composio SDK: Equip your agent with high-quality tools and build your real-world usecase
5
+
6
+ The version of the OpenAPI document: 1.0.0
7
+ =end
8
+
9
+ require 'date'
10
+ require 'time'
11
+
12
+ module Composio
13
+ class SDKErrorResDTO
14
+ # The status of the SDK error
15
+ attr_accessor :status
16
+
17
+ # Attribute mapping from ruby-style variable name to JSON key.
18
+ def self.attribute_map
19
+ {
20
+ :'status' => :'status'
21
+ }
22
+ end
23
+
24
+ # Returns all the JSON keys this model knows about
25
+ def self.acceptable_attributes
26
+ attribute_map.values
27
+ end
28
+
29
+ # Attribute type mapping.
30
+ def self.openapi_types
31
+ {
32
+ :'status' => :'String'
33
+ }
34
+ end
35
+
36
+ # List of attributes with nullable: true
37
+ def self.openapi_nullable
38
+ Set.new([
39
+ ])
40
+ end
41
+
42
+ # Initializes the object
43
+ # @param [Hash] attributes Model attributes in the form of hash
44
+ def initialize(attributes = {})
45
+ if (!attributes.is_a?(Hash))
46
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Composio::SDKErrorResDTO` initialize method"
47
+ end
48
+
49
+ # check to see if the attribute exists and convert string to symbol for hash key
50
+ attributes = attributes.each_with_object({}) { |(k, v), h|
51
+ if (!self.class.attribute_map.key?(k.to_sym))
52
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Composio::SDKErrorResDTO`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
53
+ end
54
+ h[k.to_sym] = v
55
+ }
56
+
57
+ if attributes.key?(:'status')
58
+ self.status = attributes[:'status']
59
+ end
60
+ end
61
+
62
+ # Show invalid properties with the reasons. Usually used together with valid?
63
+ # @return Array for valid properties with the reasons
64
+ def list_invalid_properties
65
+ invalid_properties = Array.new
66
+ if @status.nil?
67
+ invalid_properties.push('invalid value for "status", status cannot be nil.')
68
+ end
69
+
70
+ invalid_properties
71
+ end
72
+
73
+ # Check to see if the all the properties in the model are valid
74
+ # @return true if the model is valid
75
+ def valid?
76
+ return false if @status.nil?
77
+ true
78
+ end
79
+
80
+ # Checks equality by comparing each attribute.
81
+ # @param [Object] Object to be compared
82
+ def ==(o)
83
+ return true if self.equal?(o)
84
+ self.class == o.class &&
85
+ status == o.status
86
+ end
87
+
88
+ # @see the `==` method
89
+ # @param [Object] Object to be compared
90
+ def eql?(o)
91
+ self == o
92
+ end
93
+
94
+ # Calculates hash code according to all attributes.
95
+ # @return [Integer] Hash code
96
+ def hash
97
+ [status].hash
98
+ end
99
+
100
+ # Builds the object from hash
101
+ # @param [Hash] attributes Model attributes in the form of hash
102
+ # @return [Object] Returns the model itself
103
+ def self.build_from_hash(attributes)
104
+ new.build_from_hash(attributes)
105
+ end
106
+
107
+ # Builds the object from hash
108
+ # @param [Hash] attributes Model attributes in the form of hash
109
+ # @return [Object] Returns the model itself
110
+ def build_from_hash(attributes)
111
+ return nil unless attributes.is_a?(Hash)
112
+ attributes = attributes.transform_keys(&:to_sym)
113
+ self.class.openapi_types.each_pair do |key, type|
114
+ if attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
115
+ self.send("#{key}=", nil)
116
+ elsif type =~ /\AArray<(.*)>/i
117
+ # check to ensure the input is an array given that the attribute
118
+ # is documented as an array but the input is not
119
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
120
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
121
+ end
122
+ elsif !attributes[self.class.attribute_map[key]].nil?
123
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
124
+ end
125
+ end
126
+
127
+ self
128
+ end
129
+
130
+ # Deserializes the data based on type
131
+ # @param string type Data type
132
+ # @param string value Value to be deserialized
133
+ # @return [Object] Deserialized data
134
+ def _deserialize(type, value)
135
+ case type.to_sym
136
+ when :Time
137
+ Time.parse(value)
138
+ when :Date
139
+ Date.parse(value)
140
+ when :String
141
+ value.to_s
142
+ when :Integer
143
+ value.to_i
144
+ when :Float
145
+ value.to_f
146
+ when :Boolean
147
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
148
+ true
149
+ else
150
+ false
151
+ end
152
+ when :Object
153
+ # generic object (usually a Hash), return directly
154
+ value
155
+ when /\AArray<(?<inner_type>.+)>\z/
156
+ inner_type = Regexp.last_match[:inner_type]
157
+ value.map { |v| _deserialize(inner_type, v) }
158
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
159
+ k_type = Regexp.last_match[:k_type]
160
+ v_type = Regexp.last_match[:v_type]
161
+ {}.tap do |hash|
162
+ value.each do |k, v|
163
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
164
+ end
165
+ end
166
+ else # model
167
+ # models (e.g. Pet) or oneOf
168
+ klass = Composio.const_get(type)
169
+ klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
170
+ end
171
+ end
172
+
173
+ # Returns the string representation of the object
174
+ # @return [String] String presentation of the object
175
+ def to_s
176
+ to_hash.to_s
177
+ end
178
+
179
+ # to_body is an alias to to_hash (backward compatibility)
180
+ # @return [Hash] Returns the object in the form of hash
181
+ def to_body
182
+ to_hash
183
+ end
184
+
185
+ # Returns the object in the form of hash
186
+ # @return [Hash] Returns the object in the form of hash
187
+ def to_hash
188
+ hash = {}
189
+ self.class.attribute_map.each_pair do |attr, param|
190
+ value = self.send(attr)
191
+ if value.nil?
192
+ is_nullable = self.class.openapi_nullable.include?(attr)
193
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
194
+ end
195
+
196
+ hash[param] = _to_hash(value)
197
+ end
198
+ hash
199
+ end
200
+
201
+ # Outputs non-array value in the form of hash
202
+ # For object, use to_hash. Otherwise, just return the value
203
+ # @param [Object] value Any valid value
204
+ # @return [Hash] Returns the value in the form of hash
205
+ def _to_hash(value)
206
+ if value.is_a?(Array)
207
+ value.compact.map { |v| _to_hash(v) }
208
+ elsif value.is_a?(Hash)
209
+ {}.tap do |hash|
210
+ value.each { |k, v| hash[k] = _to_hash(v) }
211
+ end
212
+ elsif value.respond_to? :to_hash
213
+ value.to_hash
214
+ else
215
+ value
216
+ end
217
+ end
218
+
219
+ end
220
+
221
+ end
@@ -0,0 +1,224 @@
1
+ =begin
2
+ #Composio OpenAPI
3
+
4
+ #Composio SDK: Equip your agent with high-quality tools and build your real-world usecase
5
+
6
+ The version of the OpenAPI document: 1.0.0
7
+ =end
8
+
9
+ require 'date'
10
+ require 'time'
11
+
12
+ module Composio
13
+ class SessionInfoDTO
14
+ attr_accessor :session_id
15
+
16
+ attr_accessor :metadata
17
+
18
+ # Attribute mapping from ruby-style variable name to JSON key.
19
+ def self.attribute_map
20
+ {
21
+ :'session_id' => :'sessionId',
22
+ :'metadata' => :'metadata'
23
+ }
24
+ end
25
+
26
+ # Returns all the JSON keys this model knows about
27
+ def self.acceptable_attributes
28
+ attribute_map.values
29
+ end
30
+
31
+ # Attribute type mapping.
32
+ def self.openapi_types
33
+ {
34
+ :'session_id' => :'String',
35
+ :'metadata' => :'Object'
36
+ }
37
+ end
38
+
39
+ # List of attributes with nullable: true
40
+ def self.openapi_nullable
41
+ Set.new([
42
+ ])
43
+ end
44
+
45
+ # Initializes the object
46
+ # @param [Hash] attributes Model attributes in the form of hash
47
+ def initialize(attributes = {})
48
+ if (!attributes.is_a?(Hash))
49
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Composio::SessionInfoDTO` initialize method"
50
+ end
51
+
52
+ # check to see if the attribute exists and convert string to symbol for hash key
53
+ attributes = attributes.each_with_object({}) { |(k, v), h|
54
+ if (!self.class.attribute_map.key?(k.to_sym))
55
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Composio::SessionInfoDTO`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
56
+ end
57
+ h[k.to_sym] = v
58
+ }
59
+
60
+ if attributes.key?(:'session_id')
61
+ self.session_id = attributes[:'session_id']
62
+ end
63
+
64
+ if attributes.key?(:'metadata')
65
+ self.metadata = attributes[:'metadata']
66
+ end
67
+ end
68
+
69
+ # Show invalid properties with the reasons. Usually used together with valid?
70
+ # @return Array for valid properties with the reasons
71
+ def list_invalid_properties
72
+ invalid_properties = Array.new
73
+ invalid_properties
74
+ end
75
+
76
+ # Check to see if the all the properties in the model are valid
77
+ # @return true if the model is valid
78
+ def valid?
79
+ true
80
+ end
81
+
82
+ # Checks equality by comparing each attribute.
83
+ # @param [Object] Object to be compared
84
+ def ==(o)
85
+ return true if self.equal?(o)
86
+ self.class == o.class &&
87
+ session_id == o.session_id &&
88
+ metadata == o.metadata
89
+ end
90
+
91
+ # @see the `==` method
92
+ # @param [Object] Object to be compared
93
+ def eql?(o)
94
+ self == o
95
+ end
96
+
97
+ # Calculates hash code according to all attributes.
98
+ # @return [Integer] Hash code
99
+ def hash
100
+ [session_id, metadata].hash
101
+ end
102
+
103
+ # Builds the object from hash
104
+ # @param [Hash] attributes Model attributes in the form of hash
105
+ # @return [Object] Returns the model itself
106
+ def self.build_from_hash(attributes)
107
+ new.build_from_hash(attributes)
108
+ end
109
+
110
+ # Builds the object from hash
111
+ # @param [Hash] attributes Model attributes in the form of hash
112
+ # @return [Object] Returns the model itself
113
+ def build_from_hash(attributes)
114
+ return nil unless attributes.is_a?(Hash)
115
+ attributes = attributes.transform_keys(&:to_sym)
116
+ self.class.openapi_types.each_pair do |key, type|
117
+ if attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
118
+ self.send("#{key}=", nil)
119
+ elsif type =~ /\AArray<(.*)>/i
120
+ # check to ensure the input is an array given that the attribute
121
+ # is documented as an array but the input is not
122
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
123
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
124
+ end
125
+ elsif !attributes[self.class.attribute_map[key]].nil?
126
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
127
+ end
128
+ end
129
+
130
+ self
131
+ end
132
+
133
+ # Deserializes the data based on type
134
+ # @param string type Data type
135
+ # @param string value Value to be deserialized
136
+ # @return [Object] Deserialized data
137
+ def _deserialize(type, value)
138
+ case type.to_sym
139
+ when :Time
140
+ Time.parse(value)
141
+ when :Date
142
+ Date.parse(value)
143
+ when :String
144
+ value.to_s
145
+ when :Integer
146
+ value.to_i
147
+ when :Float
148
+ value.to_f
149
+ when :Boolean
150
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
151
+ true
152
+ else
153
+ false
154
+ end
155
+ when :Object
156
+ # generic object (usually a Hash), return directly
157
+ value
158
+ when /\AArray<(?<inner_type>.+)>\z/
159
+ inner_type = Regexp.last_match[:inner_type]
160
+ value.map { |v| _deserialize(inner_type, v) }
161
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
162
+ k_type = Regexp.last_match[:k_type]
163
+ v_type = Regexp.last_match[:v_type]
164
+ {}.tap do |hash|
165
+ value.each do |k, v|
166
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
167
+ end
168
+ end
169
+ else # model
170
+ # models (e.g. Pet) or oneOf
171
+ klass = Composio.const_get(type)
172
+ klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
173
+ end
174
+ end
175
+
176
+ # Returns the string representation of the object
177
+ # @return [String] String presentation of the object
178
+ def to_s
179
+ to_hash.to_s
180
+ end
181
+
182
+ # to_body is an alias to to_hash (backward compatibility)
183
+ # @return [Hash] Returns the object in the form of hash
184
+ def to_body
185
+ to_hash
186
+ end
187
+
188
+ # Returns the object in the form of hash
189
+ # @return [Hash] Returns the object in the form of hash
190
+ def to_hash
191
+ hash = {}
192
+ self.class.attribute_map.each_pair do |attr, param|
193
+ value = self.send(attr)
194
+ if value.nil?
195
+ is_nullable = self.class.openapi_nullable.include?(attr)
196
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
197
+ end
198
+
199
+ hash[param] = _to_hash(value)
200
+ end
201
+ hash
202
+ end
203
+
204
+ # Outputs non-array value in the form of hash
205
+ # For object, use to_hash. Otherwise, just return the value
206
+ # @param [Object] value Any valid value
207
+ # @return [Hash] Returns the value in the form of hash
208
+ def _to_hash(value)
209
+ if value.is_a?(Array)
210
+ value.compact.map { |v| _to_hash(v) }
211
+ elsif value.is_a?(Hash)
212
+ {}.tap do |hash|
213
+ value.each { |k, v| hash[k] = _to_hash(v) }
214
+ end
215
+ elsif value.respond_to? :to_hash
216
+ value.to_hash
217
+ else
218
+ value
219
+ end
220
+ end
221
+
222
+ end
223
+
224
+ end
@@ -23,6 +23,10 @@ module Composio
23
23
 
24
24
  attr_accessor :app_schema
25
25
 
26
+ attr_accessor :custom_description
27
+
28
+ attr_accessor :system_prompt
29
+
26
30
  # Attribute mapping from ruby-style variable name to JSON key.
27
31
  def self.attribute_map
28
32
  {
@@ -31,7 +35,9 @@ module Composio
31
35
  :'input' => :'input',
32
36
  :'nla_input' => :'nlaInput',
33
37
  :'authorization_data' => :'authorizationData',
34
- :'app_schema' => :'appSchema'
38
+ :'app_schema' => :'appSchema',
39
+ :'custom_description' => :'customDescription',
40
+ :'system_prompt' => :'systemPrompt'
35
41
  }
36
42
  end
37
43
 
@@ -48,7 +54,9 @@ module Composio
48
54
  :'input' => :'Object',
49
55
  :'nla_input' => :'String',
50
56
  :'authorization_data' => :'Object',
51
- :'app_schema' => :'Object'
57
+ :'app_schema' => :'Object',
58
+ :'custom_description' => :'String',
59
+ :'system_prompt' => :'String'
52
60
  }
53
61
  end
54
62
 
@@ -96,6 +104,14 @@ module Composio
96
104
  if attributes.key?(:'app_schema')
97
105
  self.app_schema = attributes[:'app_schema']
98
106
  end
107
+
108
+ if attributes.key?(:'custom_description')
109
+ self.custom_description = attributes[:'custom_description']
110
+ end
111
+
112
+ if attributes.key?(:'system_prompt')
113
+ self.system_prompt = attributes[:'system_prompt']
114
+ end
99
115
  end
100
116
 
101
117
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -136,7 +152,9 @@ module Composio
136
152
  input == o.input &&
137
153
  nla_input == o.nla_input &&
138
154
  authorization_data == o.authorization_data &&
139
- app_schema == o.app_schema
155
+ app_schema == o.app_schema &&
156
+ custom_description == o.custom_description &&
157
+ system_prompt == o.system_prompt
140
158
  end
141
159
 
142
160
  # @see the `==` method
@@ -148,7 +166,7 @@ module Composio
148
166
  # Calculates hash code according to all attributes.
149
167
  # @return [Integer] Hash code
150
168
  def hash
151
- [action_name, run_in_sandbox, input, nla_input, authorization_data, app_schema].hash
169
+ [action_name, run_in_sandbox, input, nla_input, authorization_data, app_schema, custom_description, system_prompt].hash
152
170
  end
153
171
 
154
172
  # Builds the object from hash
@@ -20,12 +20,16 @@ module Composio
20
20
  # Optional trigger ID
21
21
  attr_accessor :trigger_id
22
22
 
23
+ # Is new trigger. If true, the trigger was created just now or else it was already existing
24
+ attr_accessor :is_new
25
+
23
26
  # Attribute mapping from ruby-style variable name to JSON key.
24
27
  def self.attribute_map
25
28
  {
26
29
  :'status' => :'status',
27
30
  :'message' => :'message',
28
- :'trigger_id' => :'triggerId'
31
+ :'trigger_id' => :'triggerId',
32
+ :'is_new' => :'isNew'
29
33
  }
30
34
  end
31
35
 
@@ -39,7 +43,8 @@ module Composio
39
43
  {
40
44
  :'status' => :'String',
41
45
  :'message' => :'String',
42
- :'trigger_id' => :'String'
46
+ :'trigger_id' => :'String',
47
+ :'is_new' => :'Boolean'
43
48
  }
44
49
  end
45
50
 
@@ -75,6 +80,10 @@ module Composio
75
80
  if attributes.key?(:'trigger_id')
76
81
  self.trigger_id = attributes[:'trigger_id']
77
82
  end
83
+
84
+ if attributes.key?(:'is_new')
85
+ self.is_new = attributes[:'is_new']
86
+ end
78
87
  end
79
88
 
80
89
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -102,7 +111,8 @@ module Composio
102
111
  self.class == o.class &&
103
112
  status == o.status &&
104
113
  message == o.message &&
105
- trigger_id == o.trigger_id
114
+ trigger_id == o.trigger_id &&
115
+ is_new == o.is_new
106
116
  end
107
117
 
108
118
  # @see the `==` method
@@ -114,7 +124,7 @@ module Composio
114
124
  # Calculates hash code according to all attributes.
115
125
  # @return [Integer] Hash code
116
126
  def hash
117
- [status, message, trigger_id].hash
127
+ [status, message, trigger_id, is_new].hash
118
128
  end
119
129
 
120
130
  # Builds the object from hash