MCPcopy Create free account
hub / github.com/CrowdStrike/perseus / listModuleVersions

Function listModuleVersions

query.go:460–496  ·  view source on GitHub ↗

listModuleVersions invokes the Perseus API to retrieve a list of module versions that match the provided filter options.

(ctx context.Context, ps perseusapiconnect.PerseusServiceClient, req listModuleVersionsRequest)

Source from the content-addressed store, hash-verified

458// listModuleVersions invokes the Perseus API to retrieve a list of module versions that match the provided
459// filter options.
460func listModuleVersions(ctx context.Context, ps perseusapiconnect.PerseusServiceClient, req listModuleVersionsRequest) (results []dependencyItem, err error) {
461 var pageToken string
462 for done := false; !done; {
463 req.updateStatus("retrieving module versions")
464 apiRequest := connect.NewRequest(&perseusapi.ListModuleVersionsRequest{
465 ModuleFilter: req.modulePattern,
466 VersionFilter: req.versionPattern,
467 IncludePrerelease: req.includePrerelease,
468 VersionOption: perseusapi.ModuleVersionOption_all,
469 PageToken: pageToken,
470 })
471 if req.latestOnly {
472 apiRequest.Msg.VersionOption = perseusapi.ModuleVersionOption_latest
473 }
474 req.updateStatus(fmt.Sprintf("retreiving versions for modules matching %q", req.modulePattern))
475 resp, err := retryOp(func() (*connect.Response[perseusapi.ListModuleVersionsResponse], error) {
476 return ps.ListModuleVersions(ctx, apiRequest)
477 })
478 if err != nil {
479 return nil, fmt.Errorf("todo: %w", err)
480 }
481
482 // API response is 1 result per module with a list of versions
483 // - flatten to 1 dependencyItem per module/version pair
484 for _, mod := range resp.Msg.Modules {
485 for _, ver := range mod.Versions {
486 results = append(results, dependencyItem{
487 Path: mod.GetName(),
488 Version: ver,
489 })
490 }
491 }
492 pageToken = resp.Msg.GetNextPageToken()
493 done = (pageToken != "")
494 }
495 return results, nil
496}
497
498// flattenTree converts the nested tree of module dependencies into a flat list of unique modules
499// sorted by module name then by highest to lowest semantic version

Callers 1

runListModuleVersionsCmdFunction · 0.85

Calls 4

retryOpFunction · 0.85
GetNameMethod · 0.80
ListModuleVersionsMethod · 0.65
GetNextPageTokenMethod · 0.45

Tested by

no test coverage detected