From 1d5c1bda48b25efa3c02ec864a4ef1f069490d10 Mon Sep 17 00:00:00 2001 From: tromesh Date: Mon, 1 Dec 2025 14:25:54 +0100 Subject: [PATCH 1/3] Refactor GraphClient to determine DAM availability based on cmp_Asset type --- .../optimizely-cms-sdk/src/graph/index.ts | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/packages/optimizely-cms-sdk/src/graph/index.ts b/packages/optimizely-cms-sdk/src/graph/index.ts index 28c61bf5..e758f1f2 100644 --- a/packages/optimizely-cms-sdk/src/graph/index.ts +++ b/packages/optimizely-cms-sdk/src/graph/index.ts @@ -20,7 +20,6 @@ import { type GraphOptions = { /** Graph instance URL. `https://cg.optimizely.com/content/v2` */ graphUrl?: string; - damEnabled?: boolean; }; export type PreviewParams = { @@ -53,6 +52,10 @@ query GetContentMetadata($where: _ContentWhereInput, $variation: VariationInput) } } } + # Check if "cmp asset" type exists which indicates that DAM is enabled + __type(name: "cmp_Asset") { + __typename + } } `; @@ -219,12 +222,10 @@ function decorateWithContext(obj: any, params: PreviewParams): any { export class GraphClient { key: string; graphUrl: string; - damEnabled: boolean = false; constructor(key: string, options: GraphOptions = {}) { this.key = key; this.graphUrl = options.graphUrl ?? 'https://cg.optimizely.com/content/v2'; - this.damEnabled = options.damEnabled ?? false; } /** Perform a GraphQL query with variables */ @@ -289,20 +290,25 @@ export class GraphClient { * @param previewToken - Optional preview token for fetching preview content. * @returns A promise that resolves to the first content type metadata object */ - private async getContentType(input: GraphVariables, previewToken?: string) { + private async getContentMetaData( + input: GraphVariables, + previewToken?: string + ) { const data = await this.request( GET_CONTENT_METADATA_QUERY, input, previewToken ); - const type = data._Content?.item?._metadata?.types?.[0]; + const contentTypeName = data._Content?.item?._metadata?.types?.[0]; + // Determine if DAM is enabled based on the presence of cmp_Asset type + const damEnabled = data.__type?.__typename !== undefined; - if (!type) { - return null; + if (!contentTypeName) { + return { contentTypeName: null, damEnabled }; } - if (typeof type !== 'string') { + if (typeof contentTypeName !== 'string') { throw new GraphResponseError( "Returned type is not 'string'. This might be a bug in the SDK. Try again later. If the error persists, contact Optimizely support", { @@ -314,7 +320,7 @@ export class GraphClient { ); } - return type; + return { contentTypeName, damEnabled }; } /** @@ -339,13 +345,15 @@ export class GraphClient { ...pathFilter(path, options?.host), variation: options?.variation, }; - const contentTypeName = await this.getContentType(input); + const { contentTypeName, damEnabled } = await this.getContentMetaData( + input + ); if (!contentTypeName) { return []; } - const query = createMultipleContentQuery(contentTypeName, this.damEnabled); + const query = createMultipleContentQuery(contentTypeName, damEnabled); const response = (await this.request(query, input)) as ItemsResponse; return response?._Content?.items.map(removeTypePrefix); @@ -420,7 +428,7 @@ export class GraphClient { /** Fetches a content given the preview parameters (preview_token, ctx, ver, loc, key) */ async getPreviewContent(params: PreviewParams) { const input = previewFilter(params); - const contentTypeName = await this.getContentType( + const { contentTypeName, damEnabled } = await this.getContentMetaData( input, params.preview_token ); @@ -431,7 +439,7 @@ export class GraphClient { { request: { variables: input, query: GET_CONTENT_METADATA_QUERY } } ); } - const query = createSingleContentQuery(contentTypeName, this.damEnabled); + const query = createSingleContentQuery(contentTypeName, damEnabled); const response = await this.request(query, input, params.preview_token); return decorateWithContext( From e77aeb266fac78ade5d0f5237c84272cae125085 Mon Sep 17 00:00:00 2001 From: tromesh Date: Tue, 2 Dec 2025 10:59:10 +0100 Subject: [PATCH 2/3] Refactor GraphClient to check DAM availability using damAssetMetadata --- packages/optimizely-cms-sdk/src/graph/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/optimizely-cms-sdk/src/graph/index.ts b/packages/optimizely-cms-sdk/src/graph/index.ts index e758f1f2..d588aa29 100644 --- a/packages/optimizely-cms-sdk/src/graph/index.ts +++ b/packages/optimizely-cms-sdk/src/graph/index.ts @@ -53,7 +53,7 @@ query GetContentMetadata($where: _ContentWhereInput, $variation: VariationInput) } } # Check if "cmp asset" type exists which indicates that DAM is enabled - __type(name: "cmp_Asset") { + damAssetType: __type(name: "cmp_Asset") { __typename } } @@ -302,7 +302,7 @@ export class GraphClient { const contentTypeName = data._Content?.item?._metadata?.types?.[0]; // Determine if DAM is enabled based on the presence of cmp_Asset type - const damEnabled = data.__type?.__typename !== undefined; + const damEnabled = data.damAssetType !== null; if (!contentTypeName) { return { contentTypeName: null, damEnabled }; From 14c8a9f4f4bddd3da95a892b1a1661b889f72010 Mon Sep 17 00:00:00 2001 From: tromesh Date: Tue, 2 Dec 2025 11:12:24 +0100 Subject: [PATCH 3/3] Fix comment typo in GraphClient query for DAM asset type --- packages/optimizely-cms-sdk/src/graph/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/optimizely-cms-sdk/src/graph/index.ts b/packages/optimizely-cms-sdk/src/graph/index.ts index d588aa29..98c62a03 100644 --- a/packages/optimizely-cms-sdk/src/graph/index.ts +++ b/packages/optimizely-cms-sdk/src/graph/index.ts @@ -52,7 +52,7 @@ query GetContentMetadata($where: _ContentWhereInput, $variation: VariationInput) } } } - # Check if "cmp asset" type exists which indicates that DAM is enabled + # Check if "cmp_Asset" type exists which indicates that DAM is enabled damAssetType: __type(name: "cmp_Asset") { __typename }