@remkoj/optimizely-graph-client 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +13 -0
- package/README.md +135 -0
- package/dist/admin-api/client/OptimizelyGraphAdminApi.d.ts +22 -0
- package/dist/admin-api/client/OptimizelyGraphAdminApi.js +31 -0
- package/dist/admin-api/client/OptimizelyGraphAdminApi.js.map +1 -0
- package/dist/admin-api/client/core/ApiError.d.ts +10 -0
- package/dist/admin-api/client/core/ApiError.js +12 -0
- package/dist/admin-api/client/core/ApiError.js.map +1 -0
- package/dist/admin-api/client/core/ApiRequestOptions.d.ts +13 -0
- package/dist/admin-api/client/core/ApiRequestOptions.js +2 -0
- package/dist/admin-api/client/core/ApiRequestOptions.js.map +1 -0
- package/dist/admin-api/client/core/ApiResult.d.ts +7 -0
- package/dist/admin-api/client/core/ApiResult.js +2 -0
- package/dist/admin-api/client/core/ApiResult.js.map +1 -0
- package/dist/admin-api/client/core/BaseHttpRequest.d.ts +8 -0
- package/dist/admin-api/client/core/BaseHttpRequest.js +6 -0
- package/dist/admin-api/client/core/BaseHttpRequest.js.map +1 -0
- package/dist/admin-api/client/core/CancelablePromise.d.ts +20 -0
- package/dist/admin-api/client/core/CancelablePromise.js +112 -0
- package/dist/admin-api/client/core/CancelablePromise.js.map +1 -0
- package/dist/admin-api/client/core/FetchHttpRequest.d.ts +14 -0
- package/dist/admin-api/client/core/FetchHttpRequest.js +17 -0
- package/dist/admin-api/client/core/FetchHttpRequest.js.map +1 -0
- package/dist/admin-api/client/core/OpenAPI.d.ts +16 -0
- package/dist/admin-api/client/core/OpenAPI.js +12 -0
- package/dist/admin-api/client/core/OpenAPI.js.map +1 -0
- package/dist/admin-api/client/core/request.d.ts +30 -0
- package/dist/admin-api/client/core/request.js +276 -0
- package/dist/admin-api/client/core/request.js.map +1 -0
- package/dist/admin-api/client/index.d.ts +45 -0
- package/dist/admin-api/client/index.js +17 -0
- package/dist/admin-api/client/index.js.map +1 -0
- package/dist/admin-api/client/models/CacheInvalidationConfig.d.ts +3 -0
- package/dist/admin-api/client/models/CacheInvalidationConfig.js +2 -0
- package/dist/admin-api/client/models/CacheInvalidationConfig.js.map +1 -0
- package/dist/admin-api/client/models/ContentTypeDefinition_V2.d.ts +10 -0
- package/dist/admin-api/client/models/ContentTypeDefinition_V2.js +2 -0
- package/dist/admin-api/client/models/ContentTypeDefinition_V2.js.map +1 -0
- package/dist/admin-api/client/models/ContentTypeDefinition_V3.d.ts +11 -0
- package/dist/admin-api/client/models/ContentTypeDefinition_V3.js +2 -0
- package/dist/admin-api/client/models/ContentTypeDefinition_V3.js.map +1 -0
- package/dist/admin-api/client/models/ContentTypeMap_V3.d.ts +2 -0
- package/dist/admin-api/client/models/ContentTypeMap_V3.js +2 -0
- package/dist/admin-api/client/models/ContentTypeMap_V3.js.map +1 -0
- package/dist/admin-api/client/models/ContentTypeProperty_V2.d.ts +5 -0
- package/dist/admin-api/client/models/ContentTypeProperty_V2.js +2 -0
- package/dist/admin-api/client/models/ContentTypeProperty_V2.js.map +1 -0
- package/dist/admin-api/client/models/ContentTypeProperty_V3.d.ts +7 -0
- package/dist/admin-api/client/models/ContentTypeProperty_V3.js +2 -0
- package/dist/admin-api/client/models/ContentTypeProperty_V3.js.map +1 -0
- package/dist/admin-api/client/models/ContentType_V2.d.ts +12 -0
- package/dist/admin-api/client/models/ContentType_V2.js +2 -0
- package/dist/admin-api/client/models/ContentType_V2.js.map +1 -0
- package/dist/admin-api/client/models/ContentType_V3.d.ts +11 -0
- package/dist/admin-api/client/models/ContentType_V3.js +2 -0
- package/dist/admin-api/client/models/ContentType_V3.js.map +1 -0
- package/dist/admin-api/client/models/FilterMap.d.ts +2 -0
- package/dist/admin-api/client/models/FilterMap.js +2 -0
- package/dist/admin-api/client/models/FilterMap.js.map +1 -0
- package/dist/admin-api/client/models/GraphQLRequest.d.ts +6 -0
- package/dist/admin-api/client/models/GraphQLRequest.js +2 -0
- package/dist/admin-api/client/models/GraphQLRequest.js.map +1 -0
- package/dist/admin-api/client/models/GraphQLResponse.d.ts +5 -0
- package/dist/admin-api/client/models/GraphQLResponse.js +2 -0
- package/dist/admin-api/client/models/GraphQLResponse.js.map +1 -0
- package/dist/admin-api/client/models/LinkMap.d.ts +2 -0
- package/dist/admin-api/client/models/LinkMap.js +2 -0
- package/dist/admin-api/client/models/LinkMap.js.map +1 -0
- package/dist/admin-api/client/models/LinkProperty.d.ts +4 -0
- package/dist/admin-api/client/models/LinkProperty.js +2 -0
- package/dist/admin-api/client/models/LinkProperty.js.map +1 -0
- package/dist/admin-api/client/models/OperationMap.d.ts +4 -0
- package/dist/admin-api/client/models/OperationMap.js +2 -0
- package/dist/admin-api/client/models/OperationMap.js.map +1 -0
- package/dist/admin-api/client/models/Optional_string_.d.ts +1 -0
- package/dist/admin-api/client/models/Optional_string_.js +2 -0
- package/dist/admin-api/client/models/Optional_string_.js.map +1 -0
- package/dist/admin-api/client/models/Partial_Record_FieldKeys_OperationMap__.d.ts +8 -0
- package/dist/admin-api/client/models/Partial_Record_FieldKeys_OperationMap__.js +2 -0
- package/dist/admin-api/client/models/Partial_Record_FieldKeys_OperationMap__.js.map +1 -0
- package/dist/admin-api/client/models/PropertyTypeMap_V3.d.ts +2 -0
- package/dist/admin-api/client/models/PropertyTypeMap_V3.js +2 -0
- package/dist/admin-api/client/models/PropertyTypeMap_V3.js.map +1 -0
- package/dist/admin-api/client/models/PropertyType_V2.d.ts +5 -0
- package/dist/admin-api/client/models/PropertyType_V2.js +2 -0
- package/dist/admin-api/client/models/PropertyType_V2.js.map +1 -0
- package/dist/admin-api/client/models/PropertyType_V3.d.ts +4 -0
- package/dist/admin-api/client/models/PropertyType_V3.js +2 -0
- package/dist/admin-api/client/models/PropertyType_V3.js.map +1 -0
- package/dist/admin-api/client/models/Property_V2.d.ts +6 -0
- package/dist/admin-api/client/models/Property_V2.js +2 -0
- package/dist/admin-api/client/models/Property_V2.js.map +1 -0
- package/dist/admin-api/client/models/Property_V3.d.ts +5 -0
- package/dist/admin-api/client/models/Property_V3.js +2 -0
- package/dist/admin-api/client/models/Property_V3.js.map +1 -0
- package/dist/admin-api/client/models/Record_string_any_.d.ts +4 -0
- package/dist/admin-api/client/models/Record_string_any_.js +2 -0
- package/dist/admin-api/client/models/Record_string_any_.js.map +1 -0
- package/dist/admin-api/client/models/Record_string_string_.d.ts +4 -0
- package/dist/admin-api/client/models/Record_string_string_.js +2 -0
- package/dist/admin-api/client/models/Record_string_string_.js.map +1 -0
- package/dist/admin-api/client/models/Request.d.ts +6 -0
- package/dist/admin-api/client/models/Request.js +2 -0
- package/dist/admin-api/client/models/Request.js.map +1 -0
- package/dist/admin-api/client/models/RequestLog.d.ts +15 -0
- package/dist/admin-api/client/models/RequestLog.js +2 -0
- package/dist/admin-api/client/models/RequestLog.js.map +1 -0
- package/dist/admin-api/client/models/SourceInfo.d.ts +5 -0
- package/dist/admin-api/client/models/SourceInfo.js +2 -0
- package/dist/admin-api/client/models/SourceInfo.js.map +1 -0
- package/dist/admin-api/client/models/SourceInfoMap.d.ts +2 -0
- package/dist/admin-api/client/models/SourceInfoMap.js +2 -0
- package/dist/admin-api/client/models/SourceInfoMap.js.map +1 -0
- package/dist/admin-api/client/models/StopwordsBody.d.ts +1 -0
- package/dist/admin-api/client/models/StopwordsBody.js +2 -0
- package/dist/admin-api/client/models/StopwordsBody.js.map +1 -0
- package/dist/admin-api/client/models/SynonymsBody.d.ts +1 -0
- package/dist/admin-api/client/models/SynonymsBody.js +2 -0
- package/dist/admin-api/client/models/SynonymsBody.js.map +1 -0
- package/dist/admin-api/client/models/TokenClaims.d.ts +4 -0
- package/dist/admin-api/client/models/TokenClaims.js +2 -0
- package/dist/admin-api/client/models/TokenClaims.js.map +1 -0
- package/dist/admin-api/client/models/Webhook.d.ts +4 -0
- package/dist/admin-api/client/models/Webhook.js +2 -0
- package/dist/admin-api/client/models/Webhook.js.map +1 -0
- package/dist/admin-api/client/models/WebhookPayload.d.ts +12 -0
- package/dist/admin-api/client/models/WebhookPayload.js +2 -0
- package/dist/admin-api/client/models/WebhookPayload.js.map +1 -0
- package/dist/admin-api/client/services/DefinitionV2Service.d.ts +34 -0
- package/dist/admin-api/client/services/DefinitionV2Service.js +62 -0
- package/dist/admin-api/client/services/DefinitionV2Service.js.map +1 -0
- package/dist/admin-api/client/services/DefinitionV3Service.d.ts +51 -0
- package/dist/admin-api/client/services/DefinitionV3Service.js +97 -0
- package/dist/admin-api/client/services/DefinitionV3Service.js.map +1 -0
- package/dist/admin-api/client/services/LogsService.d.ts +19 -0
- package/dist/admin-api/client/services/LogsService.js +30 -0
- package/dist/admin-api/client/services/LogsService.js.map +1 -0
- package/dist/admin-api/client/services/OidcService.d.ts +22 -0
- package/dist/admin-api/client/services/OidcService.js +33 -0
- package/dist/admin-api/client/services/OidcService.js.map +1 -0
- package/dist/admin-api/client/services/QueryGraphQlService.d.ts +27 -0
- package/dist/admin-api/client/services/QueryGraphQlService.js +43 -0
- package/dist/admin-api/client/services/QueryGraphQlService.js.map +1 -0
- package/dist/admin-api/client/services/ResourcesService.d.ts +30 -0
- package/dist/admin-api/client/services/ResourcesService.js +49 -0
- package/dist/admin-api/client/services/ResourcesService.js.map +1 -0
- package/dist/admin-api/client/services/WebhooksService.d.ts +42 -0
- package/dist/admin-api/client/services/WebhooksService.js +70 -0
- package/dist/admin-api/client/services/WebhooksService.js.map +1 -0
- package/dist/admin-api/index.d.ts +6 -0
- package/dist/admin-api/index.js +25 -0
- package/dist/admin-api/index.js.map +1 -0
- package/dist/admin-api/request.d.ts +5 -0
- package/dist/admin-api/request.js +32 -0
- package/dist/admin-api/request.js.map +1 -0
- package/dist/client/client.d.ts +36 -0
- package/dist/client/client.js +200 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/hmac-fetch.d.ts +3 -0
- package/dist/client/hmac-fetch.js +52 -0
- package/dist/client/hmac-fetch.js.map +1 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.js +5 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +67 -0
- package/dist/client/types.js +8 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/utils.d.ts +6 -0
- package/dist/client/utils.js +32 -0
- package/dist/client/utils.js.map +1 -0
- package/dist/codegen.d.ts +10 -0
- package/dist/codegen.js +18 -0
- package/dist/codegen.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.js +97 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/services/channel-repository/definition.d.ts +86 -0
- package/dist/services/channel-repository/definition.js +125 -0
- package/dist/services/channel-repository/definition.js.map +1 -0
- package/dist/services/channel-repository/index.d.ts +2 -0
- package/dist/services/channel-repository/index.js +3 -0
- package/dist/services/channel-repository/index.js.map +1 -0
- package/dist/services/channel-repository/queries.d.ts +3 -0
- package/dist/services/channel-repository/queries.js +93 -0
- package/dist/services/channel-repository/queries.js.map +1 -0
- package/dist/services/channel-repository/repository.d.ts +15 -0
- package/dist/services/channel-repository/repository.js +75 -0
- package/dist/services/channel-repository/repository.js.map +1 -0
- package/dist/services/channel-repository/types.d.ts +26 -0
- package/dist/services/channel-repository/types.js +2 -0
- package/dist/services/channel-repository/types.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.js +3 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/routing/index.d.ts +83 -0
- package/dist/services/routing/index.js +243 -0
- package/dist/services/routing/index.js.map +1 -0
- package/dist/services/routing/types.d.ts +25 -0
- package/dist/services/routing/types.js +2 -0
- package/dist/services/routing/types.js.map +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { createClient as default, createClient, ContentGraphClient } from './client.js';
|
|
2
|
+
export { createHmacFetch } from './hmac-fetch.js';
|
|
3
|
+
export { isContentGraphClient } from './utils.js';
|
|
4
|
+
export { AuthMode, type IOptiGraphClient, type ClientFactory } from './types.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,QAAQ,EAA6C,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { GraphQLClient } from "graphql-request";
|
|
2
|
+
export type RequestMethod = InstanceType<typeof GraphQLClient>['request'];
|
|
3
|
+
export type ClientInstanceType = InstanceType<typeof GraphQLClient>;
|
|
4
|
+
export type QueryParams = {
|
|
5
|
+
query: Parameters<RequestMethod>[0]['document'];
|
|
6
|
+
variables: Parameters<RequestMethod>[0]['variables'];
|
|
7
|
+
};
|
|
8
|
+
export declare enum AuthMode {
|
|
9
|
+
Public = "epi-single",
|
|
10
|
+
Basic = "use-basic",
|
|
11
|
+
HMAC = "use-hmac",
|
|
12
|
+
Token = "use-token"
|
|
13
|
+
}
|
|
14
|
+
export type OptiGraphSiteInfo = {
|
|
15
|
+
frontendDomain?: string;
|
|
16
|
+
cmsURL?: string;
|
|
17
|
+
};
|
|
18
|
+
export type IOptiGraphClientFlags = {
|
|
19
|
+
queryCache: boolean;
|
|
20
|
+
recursive: boolean;
|
|
21
|
+
cache: boolean;
|
|
22
|
+
};
|
|
23
|
+
export interface IOptiGraphClient extends ClientInstanceType {
|
|
24
|
+
/**
|
|
25
|
+
* Retrieve the debug indicator, as configured for this client
|
|
26
|
+
*/
|
|
27
|
+
readonly debug: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Retrieve basic information about the configured frontend
|
|
30
|
+
*/
|
|
31
|
+
readonly siteInfo: OptiGraphSiteInfo;
|
|
32
|
+
/**
|
|
33
|
+
* Retrieve the current authentication mode
|
|
34
|
+
*/
|
|
35
|
+
readonly currentAuthMode: AuthMode;
|
|
36
|
+
/**
|
|
37
|
+
* Update the authentication data for this client.
|
|
38
|
+
* - Set to AuthMode.HMAC or AuthMode.Basic to use that authentication scheme, this requires the AppKey and Secret to be part of the configuration
|
|
39
|
+
* - Set to the actual token to be used to switch to AuthMode.Token
|
|
40
|
+
* - Set to undefined or AuthMode.Public to switch to public, read-only mode. (i.e. using the SingleKey)
|
|
41
|
+
*
|
|
42
|
+
* @param tokenOrAuthmode The authentication mode/token to be used
|
|
43
|
+
* @returns The client itself
|
|
44
|
+
*/
|
|
45
|
+
updateAuthentication(tokenOrAuthmode?: string | AuthMode | undefined): IOptiGraphClient;
|
|
46
|
+
/**
|
|
47
|
+
* Convenience method, for those who are more used to the API of ApolloClient
|
|
48
|
+
*
|
|
49
|
+
* @deprecated Use the "request" method instead
|
|
50
|
+
*/
|
|
51
|
+
query: RequestMethod;
|
|
52
|
+
/**
|
|
53
|
+
* Set the client controllable service configuration
|
|
54
|
+
*
|
|
55
|
+
* @param newFlags The configuration values to override
|
|
56
|
+
* @param temporary Set to true to store the old configuration, please note that you cannot invoke this method again untill the configuration has been restored first
|
|
57
|
+
* @returns Itself, so you chain it in a request
|
|
58
|
+
*/
|
|
59
|
+
updateFlags(newFlags: Partial<IOptiGraphClientFlags>, temporary?: boolean): IOptiGraphClient;
|
|
60
|
+
/**
|
|
61
|
+
* Restore client controllable service configuration, after it has been saved by a temporary update. If there's nothing to restore this method will do nothing
|
|
62
|
+
*
|
|
63
|
+
* @returns Itself, so you chain it in a request
|
|
64
|
+
*/
|
|
65
|
+
restoreFlags(): IOptiGraphClient;
|
|
66
|
+
}
|
|
67
|
+
export type ClientFactory = (token?: string) => IOptiGraphClient;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAUA,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAChB,iCAAqB,CAAA;IACrB,+BAAmB,CAAA;IACnB,6BAAiB,CAAA;IACjB,+BAAmB,CAAA;AACvB,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AuthMode, type IOptiGraphClient } from "./types.js";
|
|
2
|
+
export declare function validateToken(newToken?: string): boolean;
|
|
3
|
+
export declare function getAuthMode(token?: string): AuthMode;
|
|
4
|
+
export declare function base64encode(binaryString: string): string;
|
|
5
|
+
export declare function isError(toTest: any): toTest is Error;
|
|
6
|
+
export declare function isContentGraphClient(client: any): client is IOptiGraphClient;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AuthMode } from "./types.js";
|
|
2
|
+
const TOKEN_MIN_LENGTH = 16;
|
|
3
|
+
export function validateToken(newToken) {
|
|
4
|
+
return newToken == undefined || newToken == AuthMode.HMAC || newToken == AuthMode.Basic || newToken.length > TOKEN_MIN_LENGTH;
|
|
5
|
+
}
|
|
6
|
+
export function getAuthMode(token) {
|
|
7
|
+
switch (token) {
|
|
8
|
+
case AuthMode.HMAC:
|
|
9
|
+
return AuthMode.HMAC;
|
|
10
|
+
case AuthMode.Basic:
|
|
11
|
+
return AuthMode.Basic;
|
|
12
|
+
default:
|
|
13
|
+
if (typeof (token) == 'string' && token.length > TOKEN_MIN_LENGTH)
|
|
14
|
+
return AuthMode.Token;
|
|
15
|
+
return AuthMode.Public;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function base64encode(binaryString) {
|
|
19
|
+
if (Buffer)
|
|
20
|
+
return Buffer.from(binaryString).toString('base64');
|
|
21
|
+
return btoa(binaryString);
|
|
22
|
+
}
|
|
23
|
+
export function isError(toTest) {
|
|
24
|
+
return typeof (toTest) == 'object' && toTest != null && typeof toTest.name == 'string' && typeof toTest.message == 'string';
|
|
25
|
+
}
|
|
26
|
+
export function isContentGraphClient(client) {
|
|
27
|
+
if (typeof (client) != 'object' || client == null)
|
|
28
|
+
return false;
|
|
29
|
+
return typeof client.updateAuthentication == 'function'
|
|
30
|
+
&& typeof client.request == 'function';
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/client/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAyB,MAAM,YAAY,CAAA;AAE5D,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAE3B,MAAM,UAAU,aAAa,CAAC,QAAkB;IAE5C,OAAO,QAAQ,IAAI,SAAS,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,gBAAgB,CAAA;AAClI,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IAEtC,QAAO,KAAK,EACZ,CAAC;QACG,KAAK,QAAQ,CAAC,IAAI;YACd,OAAO,QAAQ,CAAC,IAAI,CAAA;QACxB,KAAK,QAAQ,CAAC,KAAK;YACf,OAAO,QAAQ,CAAC,KAAK,CAAA;QACzB;YACI,IAAI,OAAM,CAAC,KAAK,CAAC,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB;gBAC5D,OAAO,QAAQ,CAAC,KAAK,CAAA;YACzB,OAAO,QAAQ,CAAC,MAAM,CAAA;IAC9B,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,YAAoB;IAC7C,IAAI,MAAM;QACN,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACvD,OAAO,IAAI,CAAC,YAAY,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,MAAW;IAC/B,OAAO,OAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAgB,CAAC,IAAI,IAAI,QAAQ,IAAI,OAAO,MAAgB,CAAC,OAAO,IAAI,QAAQ,CAAA;AAClJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAW;IAE5C,IAAI,OAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI;QAC5C,OAAO,KAAK,CAAA;IAChB,OAAO,OAAO,MAA2B,CAAC,oBAAoB,IAAI,UAAU;WACrE,OAAO,MAA2B,CAAC,OAAO,IAAI,UAAU,CAAA;AACnE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type OptimizelyGraphConfig } from './config.js';
|
|
2
|
+
export declare function getGraphQLCodegenSchema(config?: OptimizelyGraphConfig): SchemaInfo;
|
|
3
|
+
export type SchemaInfo = {
|
|
4
|
+
[schemaUri: string]: {
|
|
5
|
+
headers?: {
|
|
6
|
+
[headerName: string]: string;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
export default getGraphQLCodegenSchema;
|
package/dist/codegen.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { readEnvironmentVariables, applyConfigDefaults, validateConfig } from './config.js';
|
|
2
|
+
export function getGraphQLCodegenSchema(config) {
|
|
3
|
+
const graphConfig = applyConfigDefaults(config ?? readEnvironmentVariables());
|
|
4
|
+
if (!validateConfig(graphConfig, true))
|
|
5
|
+
throw new Error("Invalid Optimizely Graph configuration");
|
|
6
|
+
// Create connection information for Optimizely Graph
|
|
7
|
+
const cgGateway = `${graphConfig.gateway}/content/v2?cache=false`;
|
|
8
|
+
const schemaInfo = {};
|
|
9
|
+
schemaInfo[cgGateway] = {
|
|
10
|
+
headers: {
|
|
11
|
+
Authorization: `epi-single ${graphConfig.single_key}`,
|
|
12
|
+
"X-Client": "@RemkoJ/OptimizelyGraphClient"
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
return schemaInfo;
|
|
16
|
+
}
|
|
17
|
+
export default getGraphQLCodegenSchema;
|
|
18
|
+
//# sourceMappingURL=codegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,cAAc,EAA8B,MAAM,aAAa,CAAA;AAEvH,MAAM,UAAU,uBAAuB,CAAC,MAA8B;IAElE,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,IAAI,wBAAwB,EAAE,CAAC,CAAA;IAC7E,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAE7D,qDAAqD;IACrD,MAAM,SAAS,GAAG,GAAI,WAAW,CAAC,OAAQ,yBAAyB,CAAA;IACnE,MAAM,UAAU,GAAgB,EAAE,CAAA;IAClC,UAAU,CAAC,SAAS,CAAC,GAAG;QACpB,OAAO,EAAE;YACL,aAAa,EAAE,cAAe,WAAW,CAAC,UAAW,EAAE;YACvD,UAAU,EAAE,+BAA+B;SAC9C;KACJ,CAAA;IACD,OAAO,UAAU,CAAA;AACrB,CAAC;AAUD,eAAe,uBAAuB,CAAA"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type * as Types from './types.js';
|
|
2
|
+
export type { ContentGraphConfig, OptimizelyGraphConfigInternal, OptimizelyGraphConfig } from './types.js';
|
|
3
|
+
export declare function readEnvironmentVariables(): Types.OptimizelyGraphConfig;
|
|
4
|
+
export declare function applyConfigDefaults(configuredValues: Types.OptimizelyGraphConfig): Types.OptimizelyGraphConfigInternal;
|
|
5
|
+
/**
|
|
6
|
+
* Validate the configuration
|
|
7
|
+
*
|
|
8
|
+
* @param toValidate The configuration object
|
|
9
|
+
* @param forPublishedOnly Whether to only validate for published content access
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateConfig(toValidate: Types.OptimizelyGraphConfig, forPublishedOnly?: boolean, throwError?: boolean): toValidate is Types.OptimizelyGraphConfigInternal;
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export function readEnvironmentVariables() {
|
|
2
|
+
const config = {
|
|
3
|
+
secret: getOptional('OPTIMIZELY_GRAPH_SECRET', () => getOptional('OPTIMIZELY_CONTENTGRAPH_SECRET')),
|
|
4
|
+
app_key: getOptional('OPTIMIZELY_GRAPH_APP_KEY', () => getOptional('OPTIMIZELY_CONTENTGRAPH_APP_KEY')),
|
|
5
|
+
single_key: getOptional('OPTIMIZELY_GRAPH_SINGLE_KEY', () => getOptional('OPTIMIZELY_CONTENTGRAPH_SINGLE_KEY', '')),
|
|
6
|
+
gateway: getOptional('OPTIMIZELY_GRAPH_GATEWAY', () => getOptional('OPTIMIZELY_CONTENTGRAPH_GATEWAY')),
|
|
7
|
+
deploy_domain: getOptional('SITE_DOMAIN'),
|
|
8
|
+
dxp_url: getOptional('OPTIMIZELY_CMS_URL', () => getOptional('DXP_URL')),
|
|
9
|
+
query_log: getBoolean('OPTIMIZELY_GRAPH_QUERY_LOG', () => getBoolean('OPTIMIZELY_CONTENTGRAPH_QUERY_LOG', false)),
|
|
10
|
+
debug: getBoolean('OPTIMIZELY_DEBUG', () => getBoolean('DXP_DEBUG', false)),
|
|
11
|
+
};
|
|
12
|
+
return config;
|
|
13
|
+
}
|
|
14
|
+
export function applyConfigDefaults(configuredValues) {
|
|
15
|
+
const defaults = {
|
|
16
|
+
single_key: "",
|
|
17
|
+
gateway: "https://cg.optimizely.com",
|
|
18
|
+
dxp_url: "",
|
|
19
|
+
deploy_domain: "",
|
|
20
|
+
debug: false,
|
|
21
|
+
query_log: false,
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
...defaults,
|
|
25
|
+
...configuredValues
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validate the configuration
|
|
30
|
+
*
|
|
31
|
+
* @param toValidate The configuration object
|
|
32
|
+
* @param forPublishedOnly Whether to only validate for published content access
|
|
33
|
+
* @returns
|
|
34
|
+
*/
|
|
35
|
+
export function validateConfig(toValidate, forPublishedOnly = true, throwError = false) {
|
|
36
|
+
const hasSingleKey = isNonEmptyString(toValidate?.single_key);
|
|
37
|
+
const hasGateway = isValidUrl(toValidate?.gateway);
|
|
38
|
+
const hasSecret = forPublishedOnly || isNonEmptyString(toValidate?.secret);
|
|
39
|
+
const hasAppKey = forPublishedOnly || isNonEmptyString(toValidate?.app_key);
|
|
40
|
+
if (throwError && !hasSingleKey)
|
|
41
|
+
throw new Error("Optimizely Graph Configuration does not have a valid Single Key");
|
|
42
|
+
if (throwError && !hasGateway)
|
|
43
|
+
throw new Error("Optimizely Graph Configuration does not have a valid Gateway");
|
|
44
|
+
if (throwError && !hasSecret)
|
|
45
|
+
throw new Error("Optimizely Graph Configuration does not have a valid Secret");
|
|
46
|
+
if (throwError && !hasAppKey)
|
|
47
|
+
throw new Error("Optimizely Graph Configuration does not have a valid App Key");
|
|
48
|
+
return hasGateway && hasSingleKey && hasAppKey && hasSecret;
|
|
49
|
+
}
|
|
50
|
+
function isNonEmptyString(toTest) {
|
|
51
|
+
return typeof (toTest) == 'string' && toTest.length > 0;
|
|
52
|
+
}
|
|
53
|
+
function isValidUrl(toTest) {
|
|
54
|
+
if (!isNonEmptyString(toTest))
|
|
55
|
+
return false;
|
|
56
|
+
try {
|
|
57
|
+
var u = new URL(toTest);
|
|
58
|
+
if (u.protocol != 'https:')
|
|
59
|
+
return false;
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function getBoolean(envVarName, defaultValue = false) {
|
|
67
|
+
const currentValue = getOptional(envVarName);
|
|
68
|
+
if (!currentValue) {
|
|
69
|
+
if (typeof (defaultValue) == 'function')
|
|
70
|
+
return defaultValue();
|
|
71
|
+
return defaultValue;
|
|
72
|
+
}
|
|
73
|
+
return currentValue == '1' || currentValue.toLowerCase() == 'true';
|
|
74
|
+
}
|
|
75
|
+
function getMandatory(envVarName) {
|
|
76
|
+
let value = undefined;
|
|
77
|
+
try {
|
|
78
|
+
value = process.env[envVarName];
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
// Ignore on purpose
|
|
82
|
+
}
|
|
83
|
+
if (value == null || value == undefined || value.trim() == "")
|
|
84
|
+
throw new Error(`The environment variable ${envVarName} is required, but not set`);
|
|
85
|
+
return value.trim();
|
|
86
|
+
}
|
|
87
|
+
function getOptional(envVarName, defaultValue) {
|
|
88
|
+
try {
|
|
89
|
+
return getMandatory(envVarName);
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
if (typeof (defaultValue) == 'function')
|
|
93
|
+
return defaultValue();
|
|
94
|
+
return defaultValue;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// GraphQL Client
|
|
2
|
+
export * from './client/index.js';
|
|
3
|
+
export { createClient as default } from './client/index.js';
|
|
4
|
+
// Configuration
|
|
5
|
+
export * from './config.js';
|
|
6
|
+
// Router & Channels
|
|
7
|
+
export * as Services from './services/index.js';
|
|
8
|
+
export * from './services/index.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE3D,iBAAiB;AACjB,cAAc,aAAa,CAAA;AAE3B,oBAAoB;AACpB,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,cAAc,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { ChannelDefinitionData, ChannelContent, ChannelDomain, ChannelLocale } from './types.js';
|
|
2
|
+
export declare class ChannelDefinition implements Readonly<ChannelDefinitionData> {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly domains: ChannelDomain[];
|
|
6
|
+
readonly locales: ChannelLocale[];
|
|
7
|
+
readonly content: ChannelContent;
|
|
8
|
+
get isDev(): boolean;
|
|
9
|
+
get defaultLocale(): string;
|
|
10
|
+
get defaultDomain(): string;
|
|
11
|
+
protected dxp_url: string;
|
|
12
|
+
protected get editDomain(): string | undefined;
|
|
13
|
+
constructor(initialData: ChannelDefinitionData, dxp_url: string);
|
|
14
|
+
getPrimaryDomain(): URL;
|
|
15
|
+
getEditDomain(): URL;
|
|
16
|
+
getCmsUrl(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Retieve the default locale specification, defined as the locale marked
|
|
19
|
+
* as "primary" else the first locale of the channel. When the channel
|
|
20
|
+
* has no locales it returns undefined.
|
|
21
|
+
*
|
|
22
|
+
* @returns The default locale or undefined if the channel has no locales
|
|
23
|
+
*/
|
|
24
|
+
getDefaultLocale(): ChannelLocale | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Ensure that the locale is part of the current channel configuration, by
|
|
27
|
+
* taking an ISO Language Code and validating it's part of the channel.
|
|
28
|
+
* When the language is not part of the channel, this method will respond with
|
|
29
|
+
* the default ISO Language Code for the channel.
|
|
30
|
+
*
|
|
31
|
+
* @param code The ISO Language Code to validate
|
|
32
|
+
* @returns An ISO Language code that exists on this channel
|
|
33
|
+
*/
|
|
34
|
+
resolveLocale(code?: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Ensure that the locale is part of the current channel configuration, by
|
|
37
|
+
* taking an ISO Language Code and validating it's part of the channel. Then
|
|
38
|
+
* take the slug for that locale.
|
|
39
|
+
*
|
|
40
|
+
* When the language is not part of the channel, this method will fall back
|
|
41
|
+
*
|
|
42
|
+
* @param code The ISO Language Code to validate
|
|
43
|
+
* @returns The resolved slug
|
|
44
|
+
*/
|
|
45
|
+
resolveSlug(code?: string): string;
|
|
46
|
+
/**
|
|
47
|
+
* Retrieve a list of all locale slugs configured for this channel
|
|
48
|
+
*
|
|
49
|
+
* @returns The list of slugs
|
|
50
|
+
*/
|
|
51
|
+
getSlugs(): string[];
|
|
52
|
+
/**
|
|
53
|
+
* Resolve the provided slug to an actual ISO locale
|
|
54
|
+
*
|
|
55
|
+
* @param slug The slug as read from the URL
|
|
56
|
+
* @returns The ISO locale, undefined if the slug isn't configured
|
|
57
|
+
*/
|
|
58
|
+
slugToLocale(slug: string): string | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Resolve the provided slug to a locale as understood by Optimizely
|
|
61
|
+
* Content Graph
|
|
62
|
+
*
|
|
63
|
+
* @param slug The slug as read from the URL
|
|
64
|
+
* @returns The locale for Content Graph, undefined if the slug
|
|
65
|
+
* isn't configured
|
|
66
|
+
*/
|
|
67
|
+
slugToGraphLocale(slug: string): string | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Resolve the provided ISO locale code to an URL slug
|
|
70
|
+
*
|
|
71
|
+
* @param code The locale ISO code
|
|
72
|
+
* @returns The slug to be used in URLs, undefined if the locale isn't
|
|
73
|
+
* configured
|
|
74
|
+
*/
|
|
75
|
+
localeToSlug(code: string): string | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Resolve the provided locale code to a locale as understood by Optimizely
|
|
78
|
+
* Content Graph
|
|
79
|
+
*
|
|
80
|
+
* @param code The locale ISO code
|
|
81
|
+
* @returns The locale for Content Graph, undefined if the locale isn't
|
|
82
|
+
* configured
|
|
83
|
+
*/
|
|
84
|
+
localeToGraphLocale(code: string): string | undefined;
|
|
85
|
+
}
|
|
86
|
+
export default ChannelDefinition;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export class ChannelDefinition {
|
|
2
|
+
get isDev() {
|
|
3
|
+
try {
|
|
4
|
+
return process.env.NODE_ENV == 'development';
|
|
5
|
+
}
|
|
6
|
+
catch (e) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
get defaultLocale() {
|
|
11
|
+
return (this.locales.filter(x => x.isDefault)[0] || this.locales[0])?.code ?? "en";
|
|
12
|
+
}
|
|
13
|
+
get defaultDomain() {
|
|
14
|
+
const primaryDomain = this.isDev ? this.domains.filter(x => x.name.includes("localhost"))[0] : this.domains.filter(x => x.isPrimary)[0];
|
|
15
|
+
return primaryDomain?.name ?? "localhost:3000";
|
|
16
|
+
}
|
|
17
|
+
get editDomain() {
|
|
18
|
+
const editDomain = this.domains.filter(x => x.isEdit)[0];
|
|
19
|
+
return editDomain?.name;
|
|
20
|
+
}
|
|
21
|
+
constructor(initialData, dxp_url) {
|
|
22
|
+
this.id = initialData.id;
|
|
23
|
+
this.name = initialData.name;
|
|
24
|
+
this.domains = initialData.domains;
|
|
25
|
+
this.locales = initialData.locales;
|
|
26
|
+
this.content = initialData.content;
|
|
27
|
+
this.dxp_url = dxp_url;
|
|
28
|
+
}
|
|
29
|
+
getPrimaryDomain() {
|
|
30
|
+
return new URL(`${this.isDev ? 'http' : 'https'}://${this.defaultDomain}/`);
|
|
31
|
+
}
|
|
32
|
+
getEditDomain() {
|
|
33
|
+
const edit = this.editDomain;
|
|
34
|
+
return edit ? new URL(`https://${edit}/`) : new URL(this.dxp_url);
|
|
35
|
+
}
|
|
36
|
+
getCmsUrl() {
|
|
37
|
+
return this.dxp_url;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Retieve the default locale specification, defined as the locale marked
|
|
41
|
+
* as "primary" else the first locale of the channel. When the channel
|
|
42
|
+
* has no locales it returns undefined.
|
|
43
|
+
*
|
|
44
|
+
* @returns The default locale or undefined if the channel has no locales
|
|
45
|
+
*/
|
|
46
|
+
getDefaultLocale() {
|
|
47
|
+
return this.locales.filter(locale => locale.isDefault)[0] || this.locales[0];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Ensure that the locale is part of the current channel configuration, by
|
|
51
|
+
* taking an ISO Language Code and validating it's part of the channel.
|
|
52
|
+
* When the language is not part of the channel, this method will respond with
|
|
53
|
+
* the default ISO Language Code for the channel.
|
|
54
|
+
*
|
|
55
|
+
* @param code The ISO Language Code to validate
|
|
56
|
+
* @returns An ISO Language code that exists on this channel
|
|
57
|
+
*/
|
|
58
|
+
resolveLocale(code) {
|
|
59
|
+
return code ? this.locales.filter(locale => locale.code == code)[0]?.code ?? this.defaultLocale : this.defaultLocale;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Ensure that the locale is part of the current channel configuration, by
|
|
63
|
+
* taking an ISO Language Code and validating it's part of the channel. Then
|
|
64
|
+
* take the slug for that locale.
|
|
65
|
+
*
|
|
66
|
+
* When the language is not part of the channel, this method will fall back
|
|
67
|
+
*
|
|
68
|
+
* @param code The ISO Language Code to validate
|
|
69
|
+
* @returns The resolved slug
|
|
70
|
+
*/
|
|
71
|
+
resolveSlug(code) {
|
|
72
|
+
return (this.locales.filter(locale => locale.code == code)[0] ?? this.getDefaultLocale())?.slug ?? "en";
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Retrieve a list of all locale slugs configured for this channel
|
|
76
|
+
*
|
|
77
|
+
* @returns The list of slugs
|
|
78
|
+
*/
|
|
79
|
+
getSlugs() {
|
|
80
|
+
return this.locales.map(locale => locale.slug);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Resolve the provided slug to an actual ISO locale
|
|
84
|
+
*
|
|
85
|
+
* @param slug The slug as read from the URL
|
|
86
|
+
* @returns The ISO locale, undefined if the slug isn't configured
|
|
87
|
+
*/
|
|
88
|
+
slugToLocale(slug) {
|
|
89
|
+
return this.locales.filter(locale => locale.slug == slug)[0]?.code;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolve the provided slug to a locale as understood by Optimizely
|
|
93
|
+
* Content Graph
|
|
94
|
+
*
|
|
95
|
+
* @param slug The slug as read from the URL
|
|
96
|
+
* @returns The locale for Content Graph, undefined if the slug
|
|
97
|
+
* isn't configured
|
|
98
|
+
*/
|
|
99
|
+
slugToGraphLocale(slug) {
|
|
100
|
+
return this.locales.filter(locale => locale.slug == slug)[0]?.graphLocale;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Resolve the provided ISO locale code to an URL slug
|
|
104
|
+
*
|
|
105
|
+
* @param code The locale ISO code
|
|
106
|
+
* @returns The slug to be used in URLs, undefined if the locale isn't
|
|
107
|
+
* configured
|
|
108
|
+
*/
|
|
109
|
+
localeToSlug(code) {
|
|
110
|
+
return this.locales.filter(locale => locale.code == code)[0]?.slug;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Resolve the provided locale code to a locale as understood by Optimizely
|
|
114
|
+
* Content Graph
|
|
115
|
+
*
|
|
116
|
+
* @param code The locale ISO code
|
|
117
|
+
* @returns The locale for Content Graph, undefined if the locale isn't
|
|
118
|
+
* configured
|
|
119
|
+
*/
|
|
120
|
+
localeToGraphLocale(code) {
|
|
121
|
+
return this.locales.filter(locale => locale.code == code)[0]?.graphLocale;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export default ChannelDefinition;
|
|
125
|
+
//# sourceMappingURL=definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../src/services/channel-repository/definition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/channel-repository/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,IAAI,OAAO,EAAE,MAAO,iBAAiB,CAAA;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { gql } from 'graphql-request';
|
|
2
|
+
export const getAll = gql `query GetAllChannels {
|
|
3
|
+
GetAllChannels:SiteDefinition {
|
|
4
|
+
channels: items {
|
|
5
|
+
id: Id
|
|
6
|
+
name: Name,
|
|
7
|
+
domains: Hosts {
|
|
8
|
+
name: Name
|
|
9
|
+
type: Type
|
|
10
|
+
forLocale: Language {
|
|
11
|
+
code: Name
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
locales:Languages {
|
|
15
|
+
code:Name
|
|
16
|
+
slug:UrlSegment
|
|
17
|
+
isDefault:IsMasterLanguage
|
|
18
|
+
}
|
|
19
|
+
content: ContentRoots {
|
|
20
|
+
startPage: StartPage {
|
|
21
|
+
id:Id,
|
|
22
|
+
guidValue:GuidValue
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}`;
|
|
28
|
+
export const getById = gql `query GetChannelById($id: String!) {
|
|
29
|
+
GetChannelById:SiteDefinition (
|
|
30
|
+
where: {
|
|
31
|
+
Id: { eq: $id }
|
|
32
|
+
}
|
|
33
|
+
limit: 1
|
|
34
|
+
) {
|
|
35
|
+
channels: items {
|
|
36
|
+
id: Id
|
|
37
|
+
name: Name,
|
|
38
|
+
domains: Hosts {
|
|
39
|
+
name: Name
|
|
40
|
+
type: Type
|
|
41
|
+
forLocale: Language {
|
|
42
|
+
code: Name
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
locales:Languages {
|
|
46
|
+
code:Name
|
|
47
|
+
slug:UrlSegment
|
|
48
|
+
isDefault:IsMasterLanguage
|
|
49
|
+
}
|
|
50
|
+
content: ContentRoots {
|
|
51
|
+
startPage: StartPage {
|
|
52
|
+
id:Id,
|
|
53
|
+
guidValue:GuidValue
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}`;
|
|
59
|
+
export const getByDomain = gql `query GetChannelByDomain($domain: String!, $fallback: String! = "___") {
|
|
60
|
+
GetChannelByDomain:SiteDefinition (
|
|
61
|
+
where: {
|
|
62
|
+
_or: [
|
|
63
|
+
{Hosts: { Name: { eq: $domain }}},
|
|
64
|
+
{Hosts: { Name: { eq: $fallback }}}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
limit: 1
|
|
68
|
+
) {
|
|
69
|
+
channels: items {
|
|
70
|
+
id: Id
|
|
71
|
+
name: Name,
|
|
72
|
+
domains: Hosts {
|
|
73
|
+
name: Name
|
|
74
|
+
type: Type
|
|
75
|
+
forLocale: Language {
|
|
76
|
+
code: Name
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
locales:Languages {
|
|
80
|
+
code:Name
|
|
81
|
+
slug:UrlSegment
|
|
82
|
+
isDefault:IsMasterLanguage
|
|
83
|
+
}
|
|
84
|
+
content: ContentRoots {
|
|
85
|
+
startPage: StartPage {
|
|
86
|
+
id:Id,
|
|
87
|
+
guidValue:GuidValue
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}`;
|
|
93
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/services/channel-repository/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAErC,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;EAyBvB,CAAA;AACF,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BxB,CAAA;AACF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiC5B,CAAA"}
|