@@ -3190,6 +3190,102 @@ async def get_existing_connections_handler(request: web.BaseRequest):
3190
3190
3191
3191
return web .json_response (result )
3192
3192
3193
+ class ConnectionsListQueryStringSchemaV2 (OpenAPISchema ):
3194
+ """Parameters and validators for connections list request query string."""
3195
+
3196
+ alias = fields .Str (
3197
+ description = "Alias" ,
3198
+ required = False ,
3199
+ example = "Barry" ,
3200
+ )
3201
+ initiator = fields .Str (
3202
+ description = "Connection initiator" ,
3203
+ required = False ,
3204
+ validate = validate .OneOf (["self" , "external" ]),
3205
+ )
3206
+ invitation_key = fields .Str (
3207
+ description = "invitation key" , required = False , ** INDY_RAW_PUBLIC_KEY
3208
+ )
3209
+ my_did = fields .Str (description = "My DID" , required = False , ** INDY_DID )
3210
+ state = fields .Str (
3211
+ description = "Connection state" ,
3212
+ required = False ,
3213
+ validate = validate .OneOf (
3214
+ [
3215
+ getattr (ConnectionRecord , m )
3216
+ for m in vars (ConnectionRecord )
3217
+ if m .startswith ("STATE_" )
3218
+ ]
3219
+ ),
3220
+ )
3221
+ their_did = fields .Str (description = "Their DID" , required = False , ** INDY_DID )
3222
+ their_role = fields .Str (
3223
+ description = "Their assigned connection role" ,
3224
+ required = False ,
3225
+ example = "Point of contact" ,
3226
+ )
3227
+
3228
+
3229
+ class ConnectionListSchema (OpenAPISchema ):
3230
+ """Result schema for connection list."""
3231
+
3232
+ results = fields .List (
3233
+ fields .Nested (ConnectionRecordSchema ()),
3234
+ description = "List of connection records" ,
3235
+ )
3236
+
3237
+ def connection_sort_key (conn ):
3238
+ """Get the sorting key for a particular connection."""
3239
+ if conn ["state" ] == ConnectionRecord .STATE_INACTIVE :
3240
+ pfx = "2"
3241
+ elif conn ["state" ] == ConnectionRecord .STATE_INVITATION :
3242
+ pfx = "1"
3243
+ else :
3244
+ pfx = "0"
3245
+ return pfx + conn ["created_at" ]
3246
+
3247
+ @docs (
3248
+ tags = ["connection" ],
3249
+ summary = "Query agent-to-agent connections (v2)" ,
3250
+ )
3251
+ @querystring_schema (ConnectionsListQueryStringSchemaV2 ())
3252
+ @response_schema (ConnectionListSchema (), 200 )
3253
+ async def connections_list_v2 (request : web .BaseRequest ):
3254
+ """
3255
+ Request handler for searching connection records.
3256
+
3257
+ Args:
3258
+ request: aiohttp request object
3259
+
3260
+ Returns:
3261
+ The connection list response
3262
+
3263
+ """
3264
+ context = request .app ["request_context" ]
3265
+ tag_filter = {}
3266
+ for param_name in (
3267
+ "invitation_id" ,
3268
+ "my_did" ,
3269
+ "their_did" ,
3270
+ "request_id" ,
3271
+ ):
3272
+ if param_name in request .query and request .query [param_name ] != "" :
3273
+ tag_filter [param_name ] = request .query [param_name ]
3274
+ post_filter = {}
3275
+ for param_name in (
3276
+ "alias" ,
3277
+ "initiator" ,
3278
+ "state" ,
3279
+ "their_role" ,
3280
+ ):
3281
+ if param_name in request .query and request .query [param_name ] != "" :
3282
+ post_filter [param_name ] = request .query [param_name ]
3283
+ try :
3284
+ records = await ConnectionRecord .query (context , tag_filter , post_filter )
3285
+ results = ADAManager .serialize_connection_record (records )
3286
+ except (StorageError , BaseModelError ) as err :
3287
+ raise web .HTTPBadRequest (reason = err .roll_up ) from err
3288
+ return web .json_response ({"results" : results })
3193
3289
3194
3290
async def register (app : web .Application ):
3195
3291
@@ -3399,6 +3495,11 @@ async def register(app: web.Application):
3399
3495
"/v1/connections/{conn_id}/existing" ,
3400
3496
get_existing_connections_handler ,
3401
3497
allow_head = False
3498
+ ),
3499
+ web .get (
3500
+ "/v2/connections" ,
3501
+ connections_list_v2 ,
3502
+ allow_head = False
3402
3503
)
3403
3504
]
3404
3505
)
0 commit comments