@@ -234,6 +234,28 @@ static const lib_pattern_t async_libraries[] = {
234234 /* Scala */
235235 {"Alpakka" , CBM_SVC_ASYNC , "alpakka" },
236236
237+ /* MQTT */
238+ {"mqtt" , CBM_SVC_ASYNC , "mqtt" },
239+ {"paho.mqtt" , CBM_SVC_ASYNC , "mqtt" },
240+ {"MQTTClient" , CBM_SVC_ASYNC , "mqtt" },
241+ {"mosquitto" , CBM_SVC_ASYNC , "mqtt" },
242+ {"asyncio_mqtt" , CBM_SVC_ASYNC , "mqtt" },
243+ {"gmqtt" , CBM_SVC_ASYNC , "mqtt" },
244+ {"rumqttc" , CBM_SVC_ASYNC , "mqtt" },
245+
246+ /* NATS */
247+ {"nats.go" , CBM_SVC_ASYNC , "nats" },
248+ {"nats-py" , CBM_SVC_ASYNC , "nats" },
249+ {"nats.ws" , CBM_SVC_ASYNC , "nats" },
250+ {"nats.java" , CBM_SVC_ASYNC , "nats" },
251+ {"nats.net" , CBM_SVC_ASYNC , "nats" },
252+ {"async-nats" , CBM_SVC_ASYNC , "nats" },
253+ {"nats.rs" , CBM_SVC_ASYNC , "nats" },
254+
255+ /* Dapr pub/sub */
256+ {"dapr.clients.grpc" , CBM_SVC_ASYNC , "dapr" },
257+ {"DaprClient" , CBM_SVC_ASYNC , "dapr" },
258+
237259 {NULL , CBM_SVC_NONE , NULL },
238260};
239261
@@ -351,6 +373,88 @@ static const lib_pattern_t route_reg_libraries[] = {
351373 {NULL , CBM_SVC_NONE , NULL },
352374};
353375
376+ /* gRPC client libraries — protobuf stub invocations */
377+ static const lib_pattern_t grpc_libraries [] = {
378+ /* Go */
379+ {"google.golang.org/grpc" , CBM_SVC_GRPC , NULL },
380+ {"grpc.Dial" , CBM_SVC_GRPC , NULL },
381+ {"grpc.NewClient" , CBM_SVC_GRPC , NULL },
382+ {"grpc.DialContext" , CBM_SVC_GRPC , NULL },
383+
384+ /* Python */
385+ {"grpc.insecure_channel" , CBM_SVC_GRPC , NULL },
386+ {"grpc.secure_channel" , CBM_SVC_GRPC , NULL },
387+ {"grpcio" , CBM_SVC_GRPC , NULL },
388+ {"grpc.aio" , CBM_SVC_GRPC , NULL },
389+
390+ /* Java/Kotlin */
391+ {"io.grpc" , CBM_SVC_GRPC , NULL },
392+ {"ManagedChannelBuilder" , CBM_SVC_GRPC , NULL },
393+ {"ManagedChannel" , CBM_SVC_GRPC , NULL },
394+ {"newBlockingStub" , CBM_SVC_GRPC , NULL },
395+ {"newFutureStub" , CBM_SVC_GRPC , NULL },
396+
397+ /* C# */
398+ {"Grpc.Net.Client" , CBM_SVC_GRPC , NULL },
399+ {"GrpcChannel" , CBM_SVC_GRPC , NULL },
400+ {"Grpc.Core" , CBM_SVC_GRPC , NULL },
401+
402+ /* JS/TS */
403+ {"@grpc/grpc-js" , CBM_SVC_GRPC , NULL },
404+ {"grpc-web" , CBM_SVC_GRPC , NULL },
405+
406+ /* Rust */
407+ {"tonic" , CBM_SVC_GRPC , NULL },
408+
409+ /* Dart/Flutter */
410+ {"package:grpc" , CBM_SVC_GRPC , NULL },
411+
412+ {NULL , CBM_SVC_NONE , NULL },
413+ };
414+
415+ /* GraphQL client libraries */
416+ static const lib_pattern_t graphql_libraries [] = {
417+ /* JS/TS */
418+ {"graphql-request" , CBM_SVC_GRAPHQL , NULL },
419+ {"@apollo/client" , CBM_SVC_GRAPHQL , NULL },
420+ {"apollo-client" , CBM_SVC_GRAPHQL , NULL },
421+ {"urql" , CBM_SVC_GRAPHQL , NULL },
422+ {"graphql-tag" , CBM_SVC_GRAPHQL , NULL },
423+
424+ /* Python */
425+ {"gql" , CBM_SVC_GRAPHQL , NULL },
426+ {"sgqlc" , CBM_SVC_GRAPHQL , NULL },
427+ {"graphene" , CBM_SVC_GRAPHQL , NULL },
428+
429+ /* Java */
430+ {"graphql-java" , CBM_SVC_GRAPHQL , NULL },
431+ {"DgsQueryExecutor" , CBM_SVC_GRAPHQL , NULL },
432+
433+ /* Go */
434+ {"graphql-go" , CBM_SVC_GRAPHQL , NULL },
435+ {"gqlgen" , CBM_SVC_GRAPHQL , NULL },
436+
437+ /* Ruby */
438+ {"graphql-ruby" , CBM_SVC_GRAPHQL , NULL },
439+
440+ /* Rust */
441+ {"async-graphql" , CBM_SVC_GRAPHQL , NULL },
442+ {"juniper" , CBM_SVC_GRAPHQL , NULL },
443+
444+ {NULL , CBM_SVC_NONE , NULL },
445+ };
446+
447+ /* tRPC libraries (TypeScript only) */
448+ static const lib_pattern_t trpc_libraries [] = {
449+ {"@trpc/server" , CBM_SVC_TRPC , NULL },
450+ {"@trpc/client" , CBM_SVC_TRPC , NULL },
451+ {"@trpc/react-query" , CBM_SVC_TRPC , NULL },
452+ {"createTRPCRouter" , CBM_SVC_TRPC , NULL },
453+ {"createTRPCProxyClient" , CBM_SVC_TRPC , NULL },
454+
455+ {NULL , CBM_SVC_NONE , NULL },
456+ };
457+
354458/* Method suffix type (used by both route registration and HTTP client tables) */
355459typedef struct {
356460 const char * suffix ;
@@ -472,6 +576,21 @@ cbm_svc_kind_t cbm_service_pattern_match(const char *resolved_qn) {
472576 return p -> kind ;
473577 }
474578
579+ p = match_qn (resolved_qn , grpc_libraries );
580+ if (p ) {
581+ return p -> kind ;
582+ }
583+
584+ p = match_qn (resolved_qn , graphql_libraries );
585+ if (p ) {
586+ return p -> kind ;
587+ }
588+
589+ p = match_qn (resolved_qn , trpc_libraries );
590+ if (p ) {
591+ return p -> kind ;
592+ }
593+
475594 return CBM_SVC_NONE ;
476595}
477596
0 commit comments