@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.
Files changed (207) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +135 -0
  3. package/dist/admin-api/client/OptimizelyGraphAdminApi.d.ts +22 -0
  4. package/dist/admin-api/client/OptimizelyGraphAdminApi.js +31 -0
  5. package/dist/admin-api/client/OptimizelyGraphAdminApi.js.map +1 -0
  6. package/dist/admin-api/client/core/ApiError.d.ts +10 -0
  7. package/dist/admin-api/client/core/ApiError.js +12 -0
  8. package/dist/admin-api/client/core/ApiError.js.map +1 -0
  9. package/dist/admin-api/client/core/ApiRequestOptions.d.ts +13 -0
  10. package/dist/admin-api/client/core/ApiRequestOptions.js +2 -0
  11. package/dist/admin-api/client/core/ApiRequestOptions.js.map +1 -0
  12. package/dist/admin-api/client/core/ApiResult.d.ts +7 -0
  13. package/dist/admin-api/client/core/ApiResult.js +2 -0
  14. package/dist/admin-api/client/core/ApiResult.js.map +1 -0
  15. package/dist/admin-api/client/core/BaseHttpRequest.d.ts +8 -0
  16. package/dist/admin-api/client/core/BaseHttpRequest.js +6 -0
  17. package/dist/admin-api/client/core/BaseHttpRequest.js.map +1 -0
  18. package/dist/admin-api/client/core/CancelablePromise.d.ts +20 -0
  19. package/dist/admin-api/client/core/CancelablePromise.js +112 -0
  20. package/dist/admin-api/client/core/CancelablePromise.js.map +1 -0
  21. package/dist/admin-api/client/core/FetchHttpRequest.d.ts +14 -0
  22. package/dist/admin-api/client/core/FetchHttpRequest.js +17 -0
  23. package/dist/admin-api/client/core/FetchHttpRequest.js.map +1 -0
  24. package/dist/admin-api/client/core/OpenAPI.d.ts +16 -0
  25. package/dist/admin-api/client/core/OpenAPI.js +12 -0
  26. package/dist/admin-api/client/core/OpenAPI.js.map +1 -0
  27. package/dist/admin-api/client/core/request.d.ts +30 -0
  28. package/dist/admin-api/client/core/request.js +276 -0
  29. package/dist/admin-api/client/core/request.js.map +1 -0
  30. package/dist/admin-api/client/index.d.ts +45 -0
  31. package/dist/admin-api/client/index.js +17 -0
  32. package/dist/admin-api/client/index.js.map +1 -0
  33. package/dist/admin-api/client/models/CacheInvalidationConfig.d.ts +3 -0
  34. package/dist/admin-api/client/models/CacheInvalidationConfig.js +2 -0
  35. package/dist/admin-api/client/models/CacheInvalidationConfig.js.map +1 -0
  36. package/dist/admin-api/client/models/ContentTypeDefinition_V2.d.ts +10 -0
  37. package/dist/admin-api/client/models/ContentTypeDefinition_V2.js +2 -0
  38. package/dist/admin-api/client/models/ContentTypeDefinition_V2.js.map +1 -0
  39. package/dist/admin-api/client/models/ContentTypeDefinition_V3.d.ts +11 -0
  40. package/dist/admin-api/client/models/ContentTypeDefinition_V3.js +2 -0
  41. package/dist/admin-api/client/models/ContentTypeDefinition_V3.js.map +1 -0
  42. package/dist/admin-api/client/models/ContentTypeMap_V3.d.ts +2 -0
  43. package/dist/admin-api/client/models/ContentTypeMap_V3.js +2 -0
  44. package/dist/admin-api/client/models/ContentTypeMap_V3.js.map +1 -0
  45. package/dist/admin-api/client/models/ContentTypeProperty_V2.d.ts +5 -0
  46. package/dist/admin-api/client/models/ContentTypeProperty_V2.js +2 -0
  47. package/dist/admin-api/client/models/ContentTypeProperty_V2.js.map +1 -0
  48. package/dist/admin-api/client/models/ContentTypeProperty_V3.d.ts +7 -0
  49. package/dist/admin-api/client/models/ContentTypeProperty_V3.js +2 -0
  50. package/dist/admin-api/client/models/ContentTypeProperty_V3.js.map +1 -0
  51. package/dist/admin-api/client/models/ContentType_V2.d.ts +12 -0
  52. package/dist/admin-api/client/models/ContentType_V2.js +2 -0
  53. package/dist/admin-api/client/models/ContentType_V2.js.map +1 -0
  54. package/dist/admin-api/client/models/ContentType_V3.d.ts +11 -0
  55. package/dist/admin-api/client/models/ContentType_V3.js +2 -0
  56. package/dist/admin-api/client/models/ContentType_V3.js.map +1 -0
  57. package/dist/admin-api/client/models/FilterMap.d.ts +2 -0
  58. package/dist/admin-api/client/models/FilterMap.js +2 -0
  59. package/dist/admin-api/client/models/FilterMap.js.map +1 -0
  60. package/dist/admin-api/client/models/GraphQLRequest.d.ts +6 -0
  61. package/dist/admin-api/client/models/GraphQLRequest.js +2 -0
  62. package/dist/admin-api/client/models/GraphQLRequest.js.map +1 -0
  63. package/dist/admin-api/client/models/GraphQLResponse.d.ts +5 -0
  64. package/dist/admin-api/client/models/GraphQLResponse.js +2 -0
  65. package/dist/admin-api/client/models/GraphQLResponse.js.map +1 -0
  66. package/dist/admin-api/client/models/LinkMap.d.ts +2 -0
  67. package/dist/admin-api/client/models/LinkMap.js +2 -0
  68. package/dist/admin-api/client/models/LinkMap.js.map +1 -0
  69. package/dist/admin-api/client/models/LinkProperty.d.ts +4 -0
  70. package/dist/admin-api/client/models/LinkProperty.js +2 -0
  71. package/dist/admin-api/client/models/LinkProperty.js.map +1 -0
  72. package/dist/admin-api/client/models/OperationMap.d.ts +4 -0
  73. package/dist/admin-api/client/models/OperationMap.js +2 -0
  74. package/dist/admin-api/client/models/OperationMap.js.map +1 -0
  75. package/dist/admin-api/client/models/Optional_string_.d.ts +1 -0
  76. package/dist/admin-api/client/models/Optional_string_.js +2 -0
  77. package/dist/admin-api/client/models/Optional_string_.js.map +1 -0
  78. package/dist/admin-api/client/models/Partial_Record_FieldKeys_OperationMap__.d.ts +8 -0
  79. package/dist/admin-api/client/models/Partial_Record_FieldKeys_OperationMap__.js +2 -0
  80. package/dist/admin-api/client/models/Partial_Record_FieldKeys_OperationMap__.js.map +1 -0
  81. package/dist/admin-api/client/models/PropertyTypeMap_V3.d.ts +2 -0
  82. package/dist/admin-api/client/models/PropertyTypeMap_V3.js +2 -0
  83. package/dist/admin-api/client/models/PropertyTypeMap_V3.js.map +1 -0
  84. package/dist/admin-api/client/models/PropertyType_V2.d.ts +5 -0
  85. package/dist/admin-api/client/models/PropertyType_V2.js +2 -0
  86. package/dist/admin-api/client/models/PropertyType_V2.js.map +1 -0
  87. package/dist/admin-api/client/models/PropertyType_V3.d.ts +4 -0
  88. package/dist/admin-api/client/models/PropertyType_V3.js +2 -0
  89. package/dist/admin-api/client/models/PropertyType_V3.js.map +1 -0
  90. package/dist/admin-api/client/models/Property_V2.d.ts +6 -0
  91. package/dist/admin-api/client/models/Property_V2.js +2 -0
  92. package/dist/admin-api/client/models/Property_V2.js.map +1 -0
  93. package/dist/admin-api/client/models/Property_V3.d.ts +5 -0
  94. package/dist/admin-api/client/models/Property_V3.js +2 -0
  95. package/dist/admin-api/client/models/Property_V3.js.map +1 -0
  96. package/dist/admin-api/client/models/Record_string_any_.d.ts +4 -0
  97. package/dist/admin-api/client/models/Record_string_any_.js +2 -0
  98. package/dist/admin-api/client/models/Record_string_any_.js.map +1 -0
  99. package/dist/admin-api/client/models/Record_string_string_.d.ts +4 -0
  100. package/dist/admin-api/client/models/Record_string_string_.js +2 -0
  101. package/dist/admin-api/client/models/Record_string_string_.js.map +1 -0
  102. package/dist/admin-api/client/models/Request.d.ts +6 -0
  103. package/dist/admin-api/client/models/Request.js +2 -0
  104. package/dist/admin-api/client/models/Request.js.map +1 -0
  105. package/dist/admin-api/client/models/RequestLog.d.ts +15 -0
  106. package/dist/admin-api/client/models/RequestLog.js +2 -0
  107. package/dist/admin-api/client/models/RequestLog.js.map +1 -0
  108. package/dist/admin-api/client/models/SourceInfo.d.ts +5 -0
  109. package/dist/admin-api/client/models/SourceInfo.js +2 -0
  110. package/dist/admin-api/client/models/SourceInfo.js.map +1 -0
  111. package/dist/admin-api/client/models/SourceInfoMap.d.ts +2 -0
  112. package/dist/admin-api/client/models/SourceInfoMap.js +2 -0
  113. package/dist/admin-api/client/models/SourceInfoMap.js.map +1 -0
  114. package/dist/admin-api/client/models/StopwordsBody.d.ts +1 -0
  115. package/dist/admin-api/client/models/StopwordsBody.js +2 -0
  116. package/dist/admin-api/client/models/StopwordsBody.js.map +1 -0
  117. package/dist/admin-api/client/models/SynonymsBody.d.ts +1 -0
  118. package/dist/admin-api/client/models/SynonymsBody.js +2 -0
  119. package/dist/admin-api/client/models/SynonymsBody.js.map +1 -0
  120. package/dist/admin-api/client/models/TokenClaims.d.ts +4 -0
  121. package/dist/admin-api/client/models/TokenClaims.js +2 -0
  122. package/dist/admin-api/client/models/TokenClaims.js.map +1 -0
  123. package/dist/admin-api/client/models/Webhook.d.ts +4 -0
  124. package/dist/admin-api/client/models/Webhook.js +2 -0
  125. package/dist/admin-api/client/models/Webhook.js.map +1 -0
  126. package/dist/admin-api/client/models/WebhookPayload.d.ts +12 -0
  127. package/dist/admin-api/client/models/WebhookPayload.js +2 -0
  128. package/dist/admin-api/client/models/WebhookPayload.js.map +1 -0
  129. package/dist/admin-api/client/services/DefinitionV2Service.d.ts +34 -0
  130. package/dist/admin-api/client/services/DefinitionV2Service.js +62 -0
  131. package/dist/admin-api/client/services/DefinitionV2Service.js.map +1 -0
  132. package/dist/admin-api/client/services/DefinitionV3Service.d.ts +51 -0
  133. package/dist/admin-api/client/services/DefinitionV3Service.js +97 -0
  134. package/dist/admin-api/client/services/DefinitionV3Service.js.map +1 -0
  135. package/dist/admin-api/client/services/LogsService.d.ts +19 -0
  136. package/dist/admin-api/client/services/LogsService.js +30 -0
  137. package/dist/admin-api/client/services/LogsService.js.map +1 -0
  138. package/dist/admin-api/client/services/OidcService.d.ts +22 -0
  139. package/dist/admin-api/client/services/OidcService.js +33 -0
  140. package/dist/admin-api/client/services/OidcService.js.map +1 -0
  141. package/dist/admin-api/client/services/QueryGraphQlService.d.ts +27 -0
  142. package/dist/admin-api/client/services/QueryGraphQlService.js +43 -0
  143. package/dist/admin-api/client/services/QueryGraphQlService.js.map +1 -0
  144. package/dist/admin-api/client/services/ResourcesService.d.ts +30 -0
  145. package/dist/admin-api/client/services/ResourcesService.js +49 -0
  146. package/dist/admin-api/client/services/ResourcesService.js.map +1 -0
  147. package/dist/admin-api/client/services/WebhooksService.d.ts +42 -0
  148. package/dist/admin-api/client/services/WebhooksService.js +70 -0
  149. package/dist/admin-api/client/services/WebhooksService.js.map +1 -0
  150. package/dist/admin-api/index.d.ts +6 -0
  151. package/dist/admin-api/index.js +25 -0
  152. package/dist/admin-api/index.js.map +1 -0
  153. package/dist/admin-api/request.d.ts +5 -0
  154. package/dist/admin-api/request.js +32 -0
  155. package/dist/admin-api/request.js.map +1 -0
  156. package/dist/client/client.d.ts +36 -0
  157. package/dist/client/client.js +200 -0
  158. package/dist/client/client.js.map +1 -0
  159. package/dist/client/hmac-fetch.d.ts +3 -0
  160. package/dist/client/hmac-fetch.js +52 -0
  161. package/dist/client/hmac-fetch.js.map +1 -0
  162. package/dist/client/index.d.ts +4 -0
  163. package/dist/client/index.js +5 -0
  164. package/dist/client/index.js.map +1 -0
  165. package/dist/client/types.d.ts +67 -0
  166. package/dist/client/types.js +8 -0
  167. package/dist/client/types.js.map +1 -0
  168. package/dist/client/utils.d.ts +6 -0
  169. package/dist/client/utils.js +32 -0
  170. package/dist/client/utils.js.map +1 -0
  171. package/dist/codegen.d.ts +10 -0
  172. package/dist/codegen.js +18 -0
  173. package/dist/codegen.js.map +1 -0
  174. package/dist/config.d.ts +12 -0
  175. package/dist/config.js +97 -0
  176. package/dist/config.js.map +1 -0
  177. package/dist/index.d.ts +5 -0
  178. package/dist/index.js +9 -0
  179. package/dist/index.js.map +1 -0
  180. package/dist/services/channel-repository/definition.d.ts +86 -0
  181. package/dist/services/channel-repository/definition.js +125 -0
  182. package/dist/services/channel-repository/definition.js.map +1 -0
  183. package/dist/services/channel-repository/index.d.ts +2 -0
  184. package/dist/services/channel-repository/index.js +3 -0
  185. package/dist/services/channel-repository/index.js.map +1 -0
  186. package/dist/services/channel-repository/queries.d.ts +3 -0
  187. package/dist/services/channel-repository/queries.js +93 -0
  188. package/dist/services/channel-repository/queries.js.map +1 -0
  189. package/dist/services/channel-repository/repository.d.ts +15 -0
  190. package/dist/services/channel-repository/repository.js +75 -0
  191. package/dist/services/channel-repository/repository.js.map +1 -0
  192. package/dist/services/channel-repository/types.d.ts +26 -0
  193. package/dist/services/channel-repository/types.js +2 -0
  194. package/dist/services/channel-repository/types.js.map +1 -0
  195. package/dist/services/index.d.ts +4 -0
  196. package/dist/services/index.js +3 -0
  197. package/dist/services/index.js.map +1 -0
  198. package/dist/services/routing/index.d.ts +83 -0
  199. package/dist/services/routing/index.js +243 -0
  200. package/dist/services/routing/index.js.map +1 -0
  201. package/dist/services/routing/types.d.ts +25 -0
  202. package/dist/services/routing/types.js +2 -0
  203. package/dist/services/routing/types.js.map +1 -0
  204. package/dist/types.d.ts +39 -0
  205. package/dist/types.js +2 -0
  206. package/dist/types.js.map +1 -0
  207. 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,5 @@
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 } from './types.js';
5
+ //# sourceMappingURL=index.js.map
@@ -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,8 @@
1
+ export var AuthMode;
2
+ (function (AuthMode) {
3
+ AuthMode["Public"] = "epi-single";
4
+ AuthMode["Basic"] = "use-basic";
5
+ AuthMode["HMAC"] = "use-hmac";
6
+ AuthMode["Token"] = "use-token";
7
+ })(AuthMode || (AuthMode = {}));
8
+ //# sourceMappingURL=types.js.map
@@ -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;
@@ -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"}
@@ -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":"AAGA,MAAM,UAAU,wBAAwB;IAEpC,MAAM,MAAM,GAAiC;QACzC,MAAM,EAAE,WAAW,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;QACnG,OAAO,EAAE,WAAW,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;QACtG,UAAU,EAAE,WAAW,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAW;QAC7H,OAAO,EAAE,WAAW,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;QACtG,aAAa,EAAE,WAAW,CAAC,aAAa,CAAC;QACzC,OAAO,EAAE,WAAW,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACxE,SAAS,EAAE,UAAU,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QACjH,KAAK,EAAE,UAAU,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;KAC9E,CAAA;IACD,OAAO,MAAM,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,gBAA6C;IAE7E,MAAM,QAAQ,GAAyC;QACnD,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,2BAA2B;QACpC,OAAO,EAAE,EAAE;QACX,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,KAAK;KACnB,CAAA;IACD,OAAO;QACH,GAAG,QAAQ;QACX,GAAG,gBAAgB;KACtB,CAAA;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,UAAuC,EAAE,mBAA4B,IAAI,EAAE,aAAsB,KAAK;IAEjI,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;IAC7D,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAClD,MAAM,SAAS,GAAG,gBAAgB,IAAI,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAC1E,MAAM,SAAS,GAAG,gBAAgB,IAAI,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAE3E,IAAI,UAAU,IAAI,CAAC,YAAY;QAC3B,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;IACtF,IAAI,UAAU,IAAI,CAAC,UAAU;QACzB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IACnF,IAAI,UAAU,IAAI,CAAC,SAAS;QACxB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAA;IAClF,IAAI,UAAU,IAAI,CAAC,SAAS;QACxB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IACnF,OAAO,UAAU,IAAI,YAAY,IAAI,SAAS,IAAI,SAAS,CAAA;AAC/D,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAW;IAEjC,OAAO,OAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;AAC1D,CAAC;AAED,SAAS,UAAU,CAAC,MAAW;IAE3B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QACzB,OAAO,KAAK,CAAA;IAChB,IAAI,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;QACvB,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ;YACtB,OAAO,KAAK,CAAA;QAChB,OAAO,IAAI,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAA;IAChB,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,UAAkB,EAAE,eAA0C,KAAK;IAEnF,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;IAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,IAAI,OAAM,CAAC,YAAY,CAAC,IAAI,UAAU;YAClC,OAAO,YAAY,EAAE,CAAA;QACzB,OAAO,YAAY,CAAA;IACvB,CAAC;IACD,OAAO,YAAY,IAAI,GAAG,IAAI,YAAY,CAAC,WAAW,EAAE,IAAI,MAAM,CAAA;AACtE,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB;IAEpC,IAAI,KAAK,GAAwB,SAAS,CAAA;IAC1C,IAAI,CAAC;QACD,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,oBAAoB;IACxB,CAAC;IACD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;QACzD,MAAM,IAAI,KAAK,CAAC,4BAA6B,UAAW,2BAA2B,CAAC,CAAA;IAExF,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;AACvB,CAAC;AAED,SAAS,WAAW,CAAC,UAAkB,EAAE,YAA8D;IAEnG,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,UAAU,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,IAAI,OAAM,CAAC,YAAY,CAAC,IAAI,UAAU;YAClC,OAAO,YAAY,EAAE,CAAA;QACzB,OAAO,YAAY,CAAA;IACvB,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './client/index.js';
2
+ export { createClient as default } from './client/index.js';
3
+ export * from './config.js';
4
+ export * as Services from './services/index.js';
5
+ export * from './services/index.js';
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,2 @@
1
+ export { ChannelRepository, ChannelRepository as default } from './repository.js';
2
+ export { ChannelDefinition } from './definition.js';
@@ -0,0 +1,3 @@
1
+ export { ChannelRepository, ChannelRepository as default } from './repository.js';
2
+ export { ChannelDefinition } from './definition.js';
3
+ //# sourceMappingURL=index.js.map
@@ -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,3 @@
1
+ export declare const getAll: string;
2
+ export declare const getById: string;
3
+ export declare const getByDomain: string;
@@ -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"}