github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/pkg/graphql/graphqlizer/fields.go (about)

     1  package graphqlizer
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  )
     7  
     8  // GqlFieldsProvider is responsible for generating GraphQL queries that request for all fields for given type
     9  type GqlFieldsProvider struct{}
    10  
    11  // FieldCtx is a map of optional fields that can be passed to FieldsProvider
    12  // Map keys should be in following format: `type.field` eg. `APIDefinition.auth`
    13  type FieldCtx map[string]string
    14  
    15  // addFieldsFromContext checks if field context contains specific keys, adds them to provided fields and returns them
    16  func addFieldsFromContext(oldFields string, ctx []FieldCtx, keys []string) string {
    17  	var newFields []string
    18  	for _, key := range keys {
    19  		for _, dict := range ctx {
    20  			if val, ok := dict[key]; ok {
    21  				newFields = append(newFields, val)
    22  				break
    23  			}
    24  		}
    25  	}
    26  	if len(newFields) == 0 {
    27  		return oldFields
    28  	}
    29  
    30  	return fmt.Sprintf("%s\n%s", oldFields, strings.Join(newFields, "\n"))
    31  }
    32  
    33  func buildProperties(allProperties map[string]string, omittedProperties []string) string {
    34  	resultProperties := make([]string, 0, len(allProperties))
    35  	for key, prop := range allProperties {
    36  		shouldBeOmitted := false
    37  		for _, om := range omittedProperties {
    38  			if strings.HasPrefix(key, om) {
    39  				shouldBeOmitted = true
    40  				break
    41  			}
    42  		}
    43  		if !shouldBeOmitted {
    44  			resultProperties = append(resultProperties, prop)
    45  		}
    46  	}
    47  	return strings.Join(resultProperties, "\n")
    48  }
    49  
    50  func extractOmitFor(omittedProperties []string, propertyName string) []string {
    51  	result := make([]string, 0)
    52  	for _, om := range omittedProperties {
    53  		if strings.HasPrefix(om, propertyName+".") {
    54  			result = append(result, strings.TrimPrefix(om, propertyName+"."))
    55  		}
    56  	}
    57  	return result
    58  }
    59  
    60  // Page missing godoc
    61  func (fp *GqlFieldsProvider) Page(item string) string {
    62  	return fmt.Sprintf(`data {
    63  		%s
    64  	}
    65  	pageInfo {%s}
    66  	totalCount
    67  	`, item, fp.ForPageInfo())
    68  }
    69  
    70  // OmitForApplication missing godoc
    71  func (fp *GqlFieldsProvider) OmitForApplication(omittedProperties []string) string {
    72  	bundlesOmittedProperties := extractOmitFor(omittedProperties, "bundles")
    73  	webhooksOmittedProperties := extractOmitFor(omittedProperties, "webhooks")
    74  
    75  	return buildProperties(map[string]string{
    76  		"id":                    "id",
    77  		"name":                  "name",
    78  		"providerName":          "providerName",
    79  		"description":           "description",
    80  		"baseUrl":               "baseUrl",
    81  		"systemNumber":          "systemNumber",
    82  		"integrationSystemID":   "integrationSystemID",
    83  		"applicationTemplateID": "applicationTemplateID",
    84  		"labels":                "labels",
    85  		"status":                "status { condition timestamp }",
    86  		"webhooks":              fmt.Sprintf("webhooks {%s}", fp.OmitForWebhooks(webhooksOmittedProperties)),
    87  		"healthCheckURL":        "healthCheckURL",
    88  		"bundles":               fmt.Sprintf("bundles {%s}", fp.Page(fp.OmitForBundle(bundlesOmittedProperties))),
    89  		"auths":                 fmt.Sprintf("auths {%s}", fp.ForSystemAuth()),
    90  		"eventingConfiguration": "eventingConfiguration { defaultURL }",
    91  	}, omittedProperties)
    92  }
    93  
    94  // ForApplication missing godoc
    95  func (fp *GqlFieldsProvider) ForApplication(ctx ...FieldCtx) string {
    96  	return addFieldsFromContext(fmt.Sprintf(`
    97  		id
    98  		name
    99  		providerName
   100  		description
   101  		baseUrl
   102  		systemNumber
   103  		systemStatus
   104  		integrationSystemID
   105  		applicationTemplateID
   106  		labels
   107  		deletedAt
   108  		updatedAt
   109  		error
   110  		status {condition timestamp}
   111  		webhooks {%s}
   112  		healthCheckURL
   113  		bundles {%s}
   114  		auths {%s}
   115  		eventingConfiguration { defaultURL }
   116  	`, fp.ForWebhooks(), fp.Page(fp.ForBundle()), fp.ForSystemAuth()),
   117  		ctx, []string{"Application.bundle", "Application.apiDefinition", "Application.eventDefinition"})
   118  }
   119  
   120  // ForApplicationTemplate missing godoc
   121  func (fp *GqlFieldsProvider) ForApplicationTemplate(ctx ...FieldCtx) string {
   122  	return fmt.Sprintf(`
   123  		id
   124  		name
   125  		description
   126  		applicationInput
   127  		placeholders {%s}
   128  		webhooks {%s}
   129  		labels
   130  		accessLevel
   131  	`, fp.ForPlaceholders(), fp.ForWebhooks())
   132  }
   133  
   134  // ForFormation missing godoc
   135  func (fp *GqlFieldsProvider) ForFormation() string {
   136  	return `
   137  		id
   138  		name
   139  		formationTemplateId
   140          state
   141  	`
   142  }
   143  
   144  // ForFormationWithStatus missing godoc
   145  func (fp *GqlFieldsProvider) ForFormationWithStatus() string {
   146  	return fmt.Sprintf(`
   147  		id
   148  		name
   149  		formationTemplateId
   150  		state
   151  		status {%s}
   152  	`, fp.ForFormationStatus())
   153  }
   154  
   155  // ForFormationTemplate missing godoc
   156  func (fp *GqlFieldsProvider) ForFormationTemplate() string {
   157  	return fmt.Sprintf(`
   158  		id
   159  		name
   160          applicationTypes
   161  	    runtimeTypes
   162  		runtimeTypeDisplayName	
   163  		runtimeArtifactKind
   164          leadingProductIDs
   165          webhooks {%s}
   166  	`, fp.ForWebhooks())
   167  }
   168  
   169  // ForFormationTemplateWithConstraints missing godoc
   170  func (fp *GqlFieldsProvider) ForFormationTemplateWithConstraints() string {
   171  	return fmt.Sprintf(`
   172  		id
   173  		name
   174          applicationTypes
   175  	    runtimeTypes
   176  		runtimeTypeDisplayName	
   177  		runtimeArtifactKind
   178          leadingProductIDs
   179          webhooks {%s}
   180  		formationConstraints {%s}
   181  	`, fp.ForWebhooks(), fp.ForFormationConstraint())
   182  }
   183  
   184  // ForFormationAssignment missing godoc
   185  func (fp *GqlFieldsProvider) ForFormationAssignment() string {
   186  	return `
   187  			id
   188  			source
   189  			sourceType
   190  			target
   191  			targetType
   192  			state
   193  			value
   194  	`
   195  }
   196  
   197  // ForFormationStatus missing godoc
   198  func (fp *GqlFieldsProvider) ForFormationStatus() string {
   199  	return fmt.Sprintf(`
   200  			condition
   201  			errors {
   202  				%s
   203  			}
   204  	`, fp.ForFormationStatusErrors())
   205  }
   206  
   207  // ForFormationStatusErrors missing godoc
   208  func (fp *GqlFieldsProvider) ForFormationStatusErrors() string {
   209  	return `
   210          	assignmentID
   211          	message
   212          	errorCode
   213  	`
   214  }
   215  
   216  // ForFormationConstraint missing godoc
   217  func (fp *GqlFieldsProvider) ForFormationConstraint() string {
   218  	return `
   219  			id
   220  			name
   221  			constraintType
   222  			targetOperation
   223  			operator
   224  			resourceType
   225  			resourceSubtype
   226  			inputTemplate
   227  			constraintScope
   228  	`
   229  }
   230  
   231  // ForFormationTemplateConstraintReference missing godoc
   232  func (fp *GqlFieldsProvider) ForFormationTemplateConstraintReference() string {
   233  	return `
   234  			constraintID
   235  			formationTemplateID
   236  	`
   237  }
   238  
   239  // OmitForWebhooks missing godoc
   240  func (fp *GqlFieldsProvider) OmitForWebhooks(omittedProperties []string) string {
   241  	return buildProperties(map[string]string{
   242  		"id":               "id",
   243  		"applicationID":    "applicationID",
   244  		"type":             "type",
   245  		"mode":             "mode",
   246  		"correlationIdKey": "correlationIdKey",
   247  		"retryInterval":    "retryInterval",
   248  		"timeout":          "timeout",
   249  		"url":              "url",
   250  		"urlTemplate":      "urlTemplate",
   251  		"inputTemplate":    "inputTemplate",
   252  		"headerTemplate":   "headerTemplate",
   253  		"outputTemplate":   "outputTemplate",
   254  		"statusTemplate":   "statusTemplate",
   255  		"auth":             fmt.Sprintf("auth {%s}", fp.ForAuth()),
   256  		"createdAt":        "createdAt",
   257  	}, omittedProperties)
   258  }
   259  
   260  // ForWebhooks missing godoc
   261  func (fp *GqlFieldsProvider) ForWebhooks() string {
   262  	return fmt.Sprintf(
   263  		`id
   264  		applicationID
   265  		applicationTemplateID
   266  		runtimeID
   267  		formationTemplateID
   268  		type
   269  		mode
   270  		correlationIdKey
   271  		retryInterval
   272  		timeout
   273  		url
   274  		urlTemplate
   275  		inputTemplate
   276  		headerTemplate
   277  		outputTemplate
   278  		statusTemplate
   279  		auth {
   280  		  %s
   281  		}
   282  		createdAt`, fp.ForAuth())
   283  }
   284  
   285  // OmitForAPIDefinition missing godoc
   286  func (fp *GqlFieldsProvider) OmitForAPIDefinition(omittedProperties []string) string {
   287  	specOmittedProperties := extractOmitFor(omittedProperties, "spec")
   288  	versionOmittedProperties := extractOmitFor(omittedProperties, "version")
   289  
   290  	return buildProperties(map[string]string{
   291  		"id":          "id",
   292  		"name":        "name",
   293  		"description": "description",
   294  		"spec":        fmt.Sprintf("spec {%s}", fp.OmitForAPISpec(specOmittedProperties)),
   295  		"targetURL":   "targetURL",
   296  		"group":       "group",
   297  		"version":     fmt.Sprintf("version {%s}", fp.OmitForVersion(versionOmittedProperties)),
   298  	}, omittedProperties)
   299  }
   300  
   301  // ForAPIDefinition missing godoc
   302  func (fp *GqlFieldsProvider) ForAPIDefinition(ctx ...FieldCtx) string {
   303  	return addFieldsFromContext(fmt.Sprintf(`
   304  		id
   305  		name
   306  		description
   307  		spec {%s}
   308  		targetURL
   309  		group
   310  		version {%s}`, fp.ForAPISpec(), fp.ForVersion()),
   311  		ctx, []string{"APIDefinition.auth"})
   312  }
   313  
   314  // ForSystemAuth missing godoc
   315  func (fp *GqlFieldsProvider) ForSystemAuth() string {
   316  	return fmt.Sprintf(`
   317  		id
   318  		auth {%s}`, fp.ForAuth())
   319  }
   320  
   321  // OmitForAPISpec missing godoc
   322  func (fp *GqlFieldsProvider) OmitForAPISpec(omittedProperties []string) string {
   323  	frOmittedProperties := extractOmitFor(omittedProperties, "fetchRequest")
   324  
   325  	return buildProperties(map[string]string{
   326  		"id":           "id",
   327  		"data":         "data",
   328  		"format":       "format",
   329  		"type":         "type",
   330  		"fetchRequest": fmt.Sprintf("fetchRequest {%s}", fp.OmitForFetchRequest(frOmittedProperties)),
   331  	}, omittedProperties)
   332  }
   333  
   334  // ForAPISpec missing godoc
   335  func (fp *GqlFieldsProvider) ForAPISpec() string {
   336  	return fmt.Sprintf(`
   337  		id
   338  		data
   339  		format
   340  		type
   341  		fetchRequest {%s}`, fp.ForFetchRequest())
   342  }
   343  
   344  // OmitForFetchRequest missing godoc
   345  func (fp *GqlFieldsProvider) OmitForFetchRequest(omittedProperties []string) string {
   346  	return buildProperties(map[string]string{
   347  		"url":    "url",
   348  		"auth":   fmt.Sprintf("auth {%s}", fp.ForAuth()),
   349  		"mode":   "mode",
   350  		"filter": "filter",
   351  		"status": "status {condition message timestamp}",
   352  	}, omittedProperties)
   353  }
   354  
   355  // ForFetchRequest missing godoc
   356  func (fp *GqlFieldsProvider) ForFetchRequest() string {
   357  	return fmt.Sprintf(`
   358  		url
   359  		auth {%s}
   360  		mode
   361  		filter
   362  		status {condition message timestamp}`, fp.ForAuth())
   363  }
   364  
   365  // ForAPIRuntimeAuth missing godoc
   366  func (fp *GqlFieldsProvider) ForAPIRuntimeAuth() string {
   367  	return fmt.Sprintf(`runtimeID
   368  		auth {%s}`, fp.ForAuth())
   369  }
   370  
   371  // OmitForVersion missing godoc
   372  func (fp *GqlFieldsProvider) OmitForVersion(omittedProperties []string) string {
   373  	return buildProperties(map[string]string{
   374  		"value":           "value",
   375  		"deprecated":      "deprecated",
   376  		"deprecatedSince": "deprecatedSince",
   377  		"forRemoval":      "forRemoval",
   378  	}, omittedProperties)
   379  }
   380  
   381  // ForVersion missing godoc
   382  func (fp *GqlFieldsProvider) ForVersion() string {
   383  	return `value
   384  		deprecated
   385  		deprecatedSince
   386  		forRemoval`
   387  }
   388  
   389  // ForPageInfo missing godoc
   390  func (fp *GqlFieldsProvider) ForPageInfo() string {
   391  	return `startCursor
   392  		endCursor
   393  		hasNextPage`
   394  }
   395  
   396  // OmitForEventDefinition missing godoc
   397  func (fp *GqlFieldsProvider) OmitForEventDefinition(omittedProperties []string) string {
   398  	specOmittedProperties := extractOmitFor(omittedProperties, "spec")
   399  	versionOmittedProperties := extractOmitFor(omittedProperties, "version")
   400  
   401  	return buildProperties(map[string]string{
   402  		"id":          "id",
   403  		"name":        "name",
   404  		"description": "description",
   405  		"group":       "group",
   406  		"spec":        fmt.Sprintf("spec {%s}", fp.OmitForEventSpec(specOmittedProperties)),
   407  		"version":     fmt.Sprintf("version {%s}", fp.OmitForVersion(versionOmittedProperties)),
   408  	}, omittedProperties)
   409  }
   410  
   411  // ForEventDefinition missing godoc
   412  func (fp *GqlFieldsProvider) ForEventDefinition() string {
   413  	return fmt.Sprintf(`
   414  			id
   415  			name
   416  			description
   417  			group
   418  			spec {%s}
   419  			version {%s}
   420  		`, fp.ForEventSpec(), fp.ForVersion())
   421  }
   422  
   423  // OmitForEventSpec missing godoc
   424  func (fp *GqlFieldsProvider) OmitForEventSpec(omittedProperties []string) string {
   425  	frOmittedProperties := extractOmitFor(omittedProperties, "fetchRequest")
   426  
   427  	return buildProperties(map[string]string{
   428  		"id":           "id",
   429  		"data":         "data",
   430  		"type":         "type",
   431  		"format":       "format",
   432  		"fetchRequest": fmt.Sprintf("fetchRequest {%s}", fp.OmitForFetchRequest(frOmittedProperties)),
   433  	}, omittedProperties)
   434  }
   435  
   436  // ForEventSpec missing godoc
   437  func (fp *GqlFieldsProvider) ForEventSpec() string {
   438  	return fmt.Sprintf(`
   439  		id
   440  		data
   441  		type
   442  		format
   443  		fetchRequest {%s}`, fp.ForFetchRequest())
   444  }
   445  
   446  // OmitForDocument missing godoc
   447  func (fp *GqlFieldsProvider) OmitForDocument(omittedProperties []string) string {
   448  	frOmittedProperties := extractOmitFor(omittedProperties, "fetchRequest")
   449  
   450  	return buildProperties(map[string]string{
   451  		"id":           "id",
   452  		"title":        "title",
   453  		"displayName":  "displayName",
   454  		"description":  "description",
   455  		"format":       "format",
   456  		"kind":         "kind",
   457  		"data":         "data",
   458  		"fetchRequest": fmt.Sprintf("fetchRequest {%s}", fp.OmitForFetchRequest(frOmittedProperties)),
   459  	}, omittedProperties)
   460  }
   461  
   462  // ForDocument missing godoc
   463  func (fp *GqlFieldsProvider) ForDocument() string {
   464  	return fmt.Sprintf(`
   465  		id
   466  		title
   467  		displayName
   468  		description
   469  		format
   470  		kind
   471  		data
   472  		fetchRequest {%s}`, fp.ForFetchRequest())
   473  }
   474  
   475  // ForAuth missing godoc
   476  func (fp *GqlFieldsProvider) ForAuth() string {
   477  	return `credential {
   478  				... on BasicCredentialData {
   479  					username
   480  					password
   481  				}
   482  				...  on CertificateOAuthCredentialData {
   483  					clientId
   484  					certificate
   485  					url
   486  				}
   487     				...  on OAuthCredentialData {
   488  					clientId
   489  					clientSecret
   490  					url
   491  				}
   492  			}
   493  			oneTimeToken {
   494  				__typename
   495  				token
   496  				used
   497  				expiresAt
   498  			}
   499  			certCommonName
   500  			accessStrategy
   501  			additionalHeaders
   502  			additionalQueryParams
   503  			requestAuth { 
   504  			  csrf {
   505  				tokenEndpointURL
   506  				credential {
   507  				  ... on BasicCredentialData {
   508  				  	username
   509  					password
   510  				  }
   511  				  ...  on OAuthCredentialData {
   512  					clientId
   513  					clientSecret
   514  					url
   515  				  }
   516  				  ...  on CertificateOAuthCredentialData {
   517  					clientId
   518  					certificate
   519  					url
   520  				  }
   521  			    }
   522  				additionalHeaders
   523  				additionalQueryParams
   524  			  }
   525  			}
   526  		`
   527  }
   528  
   529  // ForLabel missing godoc
   530  func (fp *GqlFieldsProvider) ForLabel() string {
   531  	return `key
   532  			value`
   533  }
   534  
   535  // ForRuntime missing godoc
   536  func (fp *GqlFieldsProvider) ForRuntime(ctx ...FieldCtx) string {
   537  	return addFieldsFromContext(fmt.Sprintf(`
   538  		id
   539  		name
   540  		description
   541  		applicationNamespace
   542  		labels 
   543  		status {condition timestamp}
   544  		metadata { creationTimestamp }
   545  		auths {%s}
   546  		runtimeContexts {%s}
   547          webhooks {%s}
   548  		eventingConfiguration { defaultURL }`, fp.ForSystemAuth(), fp.Page(fp.ForRuntimeContext()), fp.ForWebhooks()), ctx, []string{"Runtime.runtimeContext"})
   549  }
   550  
   551  // ForRuntimeContext missing godoc
   552  func (fp *GqlFieldsProvider) ForRuntimeContext() string {
   553  	return `id
   554  			key
   555  			value
   556  			labels`
   557  }
   558  
   559  // ForApplicationLabel missing godoc
   560  func (fp *GqlFieldsProvider) ForApplicationLabel() string {
   561  	return `
   562  		key
   563  		value`
   564  }
   565  
   566  // ForLabelDefinition missing godoc
   567  func (fp *GqlFieldsProvider) ForLabelDefinition() string {
   568  	return `
   569  		key
   570  		schema`
   571  }
   572  
   573  // ForOneTimeTokenForApplication missing godoc
   574  func (fp *GqlFieldsProvider) ForOneTimeTokenForApplication() string {
   575  	return `
   576  		token
   577  		connectorURL
   578  		raw
   579  		rawEncoded
   580  		legacyConnectorURL`
   581  }
   582  
   583  // ForOneTimeTokenForRuntime missing godoc
   584  func (fp *GqlFieldsProvider) ForOneTimeTokenForRuntime() string {
   585  	return `
   586  		token
   587  		connectorURL
   588  		raw
   589  		rawEncoded`
   590  }
   591  
   592  // ForIntegrationSystem missing godoc
   593  func (fp *GqlFieldsProvider) ForIntegrationSystem() string {
   594  	return fmt.Sprintf(`
   595  		id
   596  		name
   597  		description
   598  		auths {%s}`, fp.ForSystemAuth())
   599  }
   600  
   601  // ForPlaceholders missing godoc
   602  func (fp *GqlFieldsProvider) ForPlaceholders() string {
   603  	return `
   604  		name
   605  		description
   606  		jsonPath`
   607  }
   608  
   609  // ForEventingConfiguration missing godoc
   610  func (fp *GqlFieldsProvider) ForEventingConfiguration() string {
   611  	return `
   612  		defaultURL`
   613  }
   614  
   615  // ForViewer missing godoc
   616  func (fp *GqlFieldsProvider) ForViewer() string {
   617  	return `
   618  		id
   619  		type`
   620  }
   621  
   622  // OmitForTenant missing godoc
   623  func (fp *GqlFieldsProvider) OmitForTenant(omittedProperties []string) string {
   624  	return buildProperties(map[string]string{
   625  		"id":          "id",
   626  		"internalID":  "internalID",
   627  		"name":        "name",
   628  		"initialized": "initialized",
   629  		"labels":      fmt.Sprintf("labels {%s}", fp.ForLabel()),
   630  	}, omittedProperties)
   631  }
   632  
   633  // ForTenant missing godoc
   634  func (fp *GqlFieldsProvider) ForTenant() string {
   635  	return `
   636  		id
   637  		internalID
   638  		name
   639  		initialized
   640  		labels
   641  		parentID
   642  		type`
   643  }
   644  
   645  // OmitForBundle missing godoc
   646  func (fp *GqlFieldsProvider) OmitForBundle(omittedProperties []string) string {
   647  	apiDefOmittedProperties := extractOmitFor(omittedProperties, "apiDefinitions")
   648  	eventDefOmittedProperties := extractOmitFor(omittedProperties, "eventDefinitions")
   649  	documentsOmittedProperties := extractOmitFor(omittedProperties, "documents")
   650  	instanceAuthsOmittedProperties := extractOmitFor(omittedProperties, "instanceAuths")
   651  
   652  	return buildProperties(map[string]string{
   653  		"id":                             "id",
   654  		"name":                           "name",
   655  		"description":                    "description",
   656  		"instanceAuthRequestInputSchema": "instanceAuthRequestInputSchema",
   657  		"instanceAuths":                  fmt.Sprintf("instanceAuths {%s}", fp.OmitForBundleInstanceAuth(instanceAuthsOmittedProperties)),
   658  		"defaultInstanceAuth":            fmt.Sprintf("defaultInstanceAuth {%s}", fp.ForAuth()),
   659  		"apiDefinitions":                 fmt.Sprintf("apiDefinitions {%s}", fp.Page(fp.OmitForAPIDefinition(apiDefOmittedProperties))),
   660  		"eventDefinitions":               fmt.Sprintf("eventDefinitions {%s}", fp.Page(fp.OmitForEventDefinition(eventDefOmittedProperties))),
   661  		"documents":                      fmt.Sprintf("documents {%s}", fp.Page(fp.OmitForDocument(documentsOmittedProperties))),
   662  	}, omittedProperties)
   663  }
   664  
   665  // ForBundle missing godoc
   666  func (fp *GqlFieldsProvider) ForBundle(ctx ...FieldCtx) string {
   667  	return addFieldsFromContext(fmt.Sprintf(`
   668  		id
   669  		name
   670  		description
   671  		instanceAuthRequestInputSchema
   672  		instanceAuths {%s}
   673  		defaultInstanceAuth {%s}
   674  		apiDefinitions {%s}
   675  		eventDefinitions {%s}
   676  		documents {%s}`, fp.ForBundleInstanceAuth(), fp.ForAuth(), fp.Page(fp.ForAPIDefinition(ctx...)), fp.Page(fp.ForEventDefinition()), fp.Page(fp.ForDocument())),
   677  		ctx, []string{"Bundle.instanceAuth"})
   678  }
   679  
   680  // OmitForBundleInstanceAuth missing godoc
   681  func (fp *GqlFieldsProvider) OmitForBundleInstanceAuth(omittedProperties []string) string {
   682  	statusOmittedProperties := extractOmitFor(omittedProperties, "status")
   683  
   684  	return buildProperties(map[string]string{
   685  		"id":          "id",
   686  		"context":     "context",
   687  		"inputParams": "inputParams",
   688  		"auth":        fmt.Sprintf("auth {%s}", fp.ForAuth()),
   689  		"status":      fmt.Sprintf("status {%s}", fp.OmitForBundleInstanceAuthStatus(statusOmittedProperties)),
   690  	}, omittedProperties)
   691  }
   692  
   693  // ForBundleInstanceAuth missing godoc
   694  func (fp *GqlFieldsProvider) ForBundleInstanceAuth() string {
   695  	return fmt.Sprintf(`
   696  		id
   697  		context
   698  		inputParams
   699  		auth {%s}
   700  		status {%s}
   701  		runtimeID
   702  		runtimeContextID`, fp.ForAuth(), fp.ForBundleInstanceAuthStatus())
   703  }
   704  
   705  // OmitForBundleInstanceAuthStatus missing godoc
   706  func (fp *GqlFieldsProvider) OmitForBundleInstanceAuthStatus(omittedProperties []string) string {
   707  	return buildProperties(map[string]string{
   708  		"condition": "condition",
   709  		"timestamp": "timestamp",
   710  		"message":   "message",
   711  		"reason":    "reason",
   712  	}, omittedProperties)
   713  }
   714  
   715  // ForBundleInstanceAuthStatus missing godoc
   716  func (fp *GqlFieldsProvider) ForBundleInstanceAuthStatus() string {
   717  	return `
   718  		condition
   719  		timestamp
   720  		message
   721  		reason`
   722  }
   723  
   724  // ForAutomaticScenarioAssignment missing godoc
   725  func (fp *GqlFieldsProvider) ForAutomaticScenarioAssignment() string {
   726  	return fmt.Sprintf(`
   727  		scenarioName
   728  		selector {%s}`, fp.ForLabel())
   729  }
   730  
   731  // ForCertificateSubjectMapping returns certificate subject mappings fields
   732  func (fp *GqlFieldsProvider) ForCertificateSubjectMapping() string {
   733  	return `
   734  		id
   735  		subject
   736          consumerType
   737  	    internalConsumerID
   738  		tenantAccessLevels	
   739  	`
   740  }
   741  
   742  // ForTenantAccess returns tenant access fields
   743  func (fp *GqlFieldsProvider) ForTenantAccess() string {
   744  	return `
   745  		tenantID
   746  		resourceID
   747          resourceType
   748  		owner
   749  	`
   750  }