@pronto-tools-and-more/pronto 12.23.0 → 12.25.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,59 @@
1
+ export const top = `query LookupPathSegmentsQuery($appInfo: AppInfo!, $deviceInfo: DeviceInfo!, $authorization: Authorization!, $pathSegments: [String!]!) {
2
+ catalog(
3
+ appInfo: $appInfo
4
+ deviceInfo: $deviceInfo
5
+ authorization: $authorization
6
+ ) {
7
+ lookupPathSegments(pathSegments: $pathSegments) {
8
+ identifier
9
+ matches {
10
+ __typename
11
+ ... on ContentMatch {
12
+ id
13
+ contentType
14
+ postType
15
+ }
16
+ ... on TaxonomyMatch {
17
+ id
18
+ identifier
19
+ parentIdentifier
20
+ name
21
+ taxonomyType
22
+ }
23
+ ... on CollectionMatch {
24
+ id
25
+ name
26
+ }
27
+ ... on RedirectMatch {
28
+ id
29
+ identifier
30
+ redirectType
31
+ target
32
+ statusCode
33
+ }
34
+ }
35
+ }
36
+ }
37
+ }`;
38
+
39
+ export const bottom = {
40
+ pathSegments: [],
41
+ appInfo: {
42
+ appId: "",
43
+ appVersion: "1.0-SNAPSHOT",
44
+ preview: true,
45
+ },
46
+ deviceInfo: {
47
+ deviceId: "editor-preview",
48
+ deviceModel: "web",
49
+ locale: "de_DE",
50
+ smallestScreenWidthDp: 0,
51
+ deviceOs: "web",
52
+ platform: "WEB",
53
+ },
54
+ authorization: {
55
+ subscriptionCodes: [],
56
+ },
57
+ };
58
+
59
+ export const queryName = "LookupPathSegmentsQuery";
@@ -1,30 +1,48 @@
1
+ import * as HandleApiArticle from "../HandleApiArticle/HandleApiArticle.js";
2
+ import * as HandleApiAuthors from "../HandleApiAuthors/HandleApiAuthors.js";
1
3
  import * as HandleCategories from "../HandleApiCategories/HandleApiCategories.js";
4
+ import * as HandleApiCollection from "../HandleApiCollection/HandleApiCollection.js";
2
5
  import * as HandleApiDossier from "../HandleApiDossier/HandleApiDossier.js";
3
6
  import * as HandleDossiers from "../HandleApiDossiers/HandleApiDossiers.js";
4
7
  import * as HandleApiIndex from "../HandleApiIndex/HandleApiIndex.js";
5
8
  import * as HandleApiIssues from "../HandleApiIssues/HandleApiIssues.js";
6
- import * as HandleApiAuthors from "../HandleApiAuthors/HandleApiAuthors.js";
9
+ import * as HandleApiCollections from "../HandleApiCollections/HandleApiCollections.js";
7
10
 
8
11
  export const handleApi =
9
- ({ appId }) =>
12
+ ({ appId, apiUrl }) =>
10
13
  (req, res) => {
11
14
  if (req.url === "/") {
12
15
  return HandleApiIndex.handleIndex(req, res);
13
16
  }
14
17
  if (req.url === "/categories") {
15
- return HandleCategories.handleCategories(appId)(req, res);
18
+ return HandleCategories.handleCategories({ appId, apiUrl })(req, res);
16
19
  }
17
20
  if (req.url === "/dossiers") {
18
- return HandleDossiers.handleDossiers(appId)(req, res);
21
+ return HandleDossiers.handleDossiers({ appId, apiUrl })(req, res);
19
22
  }
20
23
  if (req.url.startsWith("/dossiers")) {
21
- return HandleApiDossier.handleDossier(appId)(req, res);
24
+ return HandleApiDossier.handleDossier({ appId, apiUrl })(req, res);
22
25
  }
23
26
  if (req.url === "/issues") {
24
- return HandleApiIssues.handleIssues(appId)(req, res);
27
+ return HandleApiIssues.handleIssues({ appId, apiUrl })(req, res);
25
28
  }
26
29
  if (req.url === "/authors") {
27
- return HandleApiAuthors.handleAuthors(appId)(req, res);
30
+ return HandleApiAuthors.handleAuthors({ appId, apiUrl })(req, res);
31
+ }
32
+ if (req.url.startsWith("/articles")) {
33
+ return HandleApiArticle.handleApiArticle({ appId, apiUrl })(req, res);
34
+ }
35
+ if (req.url === "/collections" || req.url === "/collections/") {
36
+ return HandleApiCollections.handleApiCollections({ appId, apiUrl })(
37
+ req,
38
+ res
39
+ );
40
+ }
41
+ if (req.url.startsWith("/collections")) {
42
+ return HandleApiCollection.handleApiCollection({ appId, apiUrl })(
43
+ req,
44
+ res
45
+ );
28
46
  }
29
47
  res.statusCode = 404;
30
48
  return res.end("not found");
@@ -0,0 +1,99 @@
1
+ import * as GraphQlQueryPathSegments from "../GraphQlQueryPathSegments/GraphQlQueryPathSegments.js";
2
+ import * as GraphQlQueryContent from "../GraphQlQueryContent/GraphQlQueryContent.js";
3
+
4
+ const getPostIds = async ({ appId, apiUrl, slug }) => {
5
+ const realBottom = {
6
+ ...GraphQlQueryPathSegments.bottom,
7
+ appInfo: {
8
+ ...GraphQlQueryPathSegments.bottom.appInfo,
9
+ appId,
10
+ },
11
+ pathSegments: [slug],
12
+ };
13
+ const response = await fetch(apiUrl, {
14
+ method: "POST",
15
+ headers: {
16
+ Accept: "application/json",
17
+ "Content-Type": "application/json",
18
+ },
19
+ body: JSON.stringify({
20
+ operationName: GraphQlQueryPathSegments.queryName,
21
+ query: GraphQlQueryPathSegments.top,
22
+ variables: realBottom,
23
+ }),
24
+ });
25
+ const result = await response.json();
26
+ // @ts-ignore
27
+ if (result && result.error) {
28
+ // @ts-ignore
29
+ throw new Error(`api error: ${result.error}`);
30
+ }
31
+ // @ts-ignore
32
+ const realData = result.data.catalog.lookupPathSegments
33
+ .flatMap((item) => item.matches)
34
+ .map((match) => {
35
+ const { __typename, ...rest } = match;
36
+ return rest;
37
+ })
38
+ .map((match) => {
39
+ return match.id;
40
+ });
41
+ return realData;
42
+ };
43
+
44
+ const getContent = async ({ appId, apiUrl, postId }) => {
45
+ const realBottom = {
46
+ ...GraphQlQueryContent.bottom,
47
+ appInfo: {
48
+ ...GraphQlQueryContent.bottom.appInfo,
49
+ appId,
50
+ },
51
+ filter: {
52
+ id: {
53
+ value: postId,
54
+ },
55
+ },
56
+ };
57
+ const response = await fetch(apiUrl, {
58
+ method: "POST",
59
+ headers: {
60
+ Accept: "application/json",
61
+ "Content-Type": "application/json",
62
+ },
63
+ body: JSON.stringify({
64
+ operationName: GraphQlQueryContent.queryName,
65
+ query: GraphQlQueryContent.top,
66
+ variables: realBottom,
67
+ }),
68
+ });
69
+ const result = await response.json();
70
+ // @ts-ignore
71
+ if (result && result.error) {
72
+ // @ts-ignore
73
+ throw new Error(`api error: ${result.error}`);
74
+ }
75
+ // @ts-ignore
76
+ const realData = result.data.catalog.contentsConnection.edges
77
+ .map((edge) => edge.content)
78
+ .map((match) => {
79
+ const { __typename, ...rest } = match;
80
+ return rest;
81
+ });
82
+ return realData;
83
+ };
84
+
85
+ export const handleApiArticle =
86
+ ({ appId, apiUrl }) =>
87
+ async (req, res, next) => {
88
+ const articleSlug = req.url.slice("/articles/".length);
89
+ const postIds = await getPostIds({ appId, apiUrl, slug: articleSlug });
90
+ if (postIds.length === 0) {
91
+ res.setHeader("content-type", "application/json");
92
+ res.end(JSON.stringify("Not found", null, 2));
93
+ return;
94
+ }
95
+ const postId = postIds[0];
96
+ const content = await getContent({ appId, apiUrl, postId });
97
+ res.setHeader("content-type", "application/json");
98
+ res.end(JSON.stringify(content, null, 2));
99
+ };
@@ -1,34 +1,35 @@
1
1
  import * as GraphQlQueryAuthors from "../GraphQlQueryAuthors/GraphQlQueryAuthors.js";
2
2
 
3
- export const handleAuthors = (appId) => async (req, res, next) => {
4
- const url = `https://catalog.purplemanager.com/graphql`;
5
- const realBottom = {
6
- ...GraphQlQueryAuthors.bottom,
7
- appInfo: {
8
- ...GraphQlQueryAuthors.bottom.appInfo,
9
- appId,
10
- },
11
- };
12
- const response = await fetch(url, {
13
- method: "POST",
14
- headers: {
15
- Accept: "application/json",
16
- "Content-Type": "application/json",
17
- },
18
- body: JSON.stringify({
19
- operationName: "CatalogContentsQuery",
20
- query: GraphQlQueryAuthors.top,
21
- variables: realBottom,
22
- }),
23
- });
24
- const result = await response.json();
25
- // @ts-ignore
26
- const realData = result.data.catalog.taxonomiesConnection.edges
27
- .map((edge) => edge.node)
28
- .map((node) => {
29
- const { __typename, ...rest } = node;
30
- return rest;
3
+ export const handleAuthors =
4
+ ({ appId, apiUrl }) =>
5
+ async (req, res, next) => {
6
+ const realBottom = {
7
+ ...GraphQlQueryAuthors.bottom,
8
+ appInfo: {
9
+ ...GraphQlQueryAuthors.bottom.appInfo,
10
+ appId,
11
+ },
12
+ };
13
+ const response = await fetch(apiUrl, {
14
+ method: "POST",
15
+ headers: {
16
+ Accept: "application/json",
17
+ "Content-Type": "application/json",
18
+ },
19
+ body: JSON.stringify({
20
+ operationName: "CatalogContentsQuery",
21
+ query: GraphQlQueryAuthors.top,
22
+ variables: realBottom,
23
+ }),
31
24
  });
32
- res.setHeader("content-type", "application/json");
33
- res.end(JSON.stringify(realData, null, 2));
34
- };
25
+ const result = await response.json();
26
+ // @ts-ignore
27
+ const realData = result.data.catalog.taxonomiesConnection.edges
28
+ .map((edge) => edge.node)
29
+ .map((node) => {
30
+ const { __typename, ...rest } = node;
31
+ return rest;
32
+ });
33
+ res.setHeader("content-type", "application/json");
34
+ res.end(JSON.stringify(realData, null, 2));
35
+ };
@@ -1,34 +1,35 @@
1
1
  import * as GraphQlQueryCategories from "../GraphQlQueryCategories/GraphQlQueryCategories.js";
2
2
 
3
- export const handleCategories = (appId) => async (req, res, next) => {
4
- const url = `https://catalog.purplemanager.com/graphql`;
5
- const realBottom = {
6
- ...GraphQlQueryCategories.bottom,
7
- appInfo: {
8
- ...GraphQlQueryCategories.bottom.appInfo,
9
- appId,
10
- },
11
- };
12
- const response = await fetch(url, {
13
- method: "POST",
14
- headers: {
15
- Accept: "application/json",
16
- "Content-Type": "application/json",
17
- },
18
- body: JSON.stringify({
19
- operationName: "CatalogContentsQuery",
20
- query: GraphQlQueryCategories.top,
21
- variables: realBottom,
22
- }),
23
- });
24
- const result = await response.json();
25
- // @ts-ignore
26
- const realData = result.data.catalog.taxonomiesConnection.edges
27
- .map((edge) => edge.node)
28
- .map((node) => {
29
- const { __typename, ...rest } = node;
30
- return rest;
3
+ export const handleCategories =
4
+ ({ appId, apiUrl }) =>
5
+ async (req, res, next) => {
6
+ const realBottom = {
7
+ ...GraphQlQueryCategories.bottom,
8
+ appInfo: {
9
+ ...GraphQlQueryCategories.bottom.appInfo,
10
+ appId,
11
+ },
12
+ };
13
+ const response = await fetch(apiUrl, {
14
+ method: "POST",
15
+ headers: {
16
+ Accept: "application/json",
17
+ "Content-Type": "application/json",
18
+ },
19
+ body: JSON.stringify({
20
+ operationName: "CatalogContentsQuery",
21
+ query: GraphQlQueryCategories.top,
22
+ variables: realBottom,
23
+ }),
31
24
  });
32
- res.setHeader("content-type", "application/json");
33
- res.end(JSON.stringify(realData, null, 2));
34
- };
25
+ const result = await response.json();
26
+ // @ts-ignore
27
+ const realData = result.data.catalog.taxonomiesConnection.edges
28
+ .map((edge) => edge.node)
29
+ .map((node) => {
30
+ const { __typename, ...rest } = node;
31
+ return rest;
32
+ });
33
+ res.setHeader("content-type", "application/json");
34
+ res.end(JSON.stringify(realData, null, 2));
35
+ };
@@ -0,0 +1,53 @@
1
+ import * as GraphQlQueryCollection from "../GraphQlQueryCollection/GraphQlQueryCollection.js";
2
+
3
+ const getCollections = async ({ appId, apiUrl, name }) => {
4
+ const realBottom = {
5
+ ...GraphQlQueryCollection.bottom,
6
+ appInfo: {
7
+ ...GraphQlQueryCollection.bottom.appInfo,
8
+ appId,
9
+ },
10
+ filter: {
11
+ name: {
12
+ value: name,
13
+ },
14
+ },
15
+ };
16
+ const response = await fetch(apiUrl, {
17
+ method: "POST",
18
+ headers: {
19
+ Accept: "application/json",
20
+ "Content-Type": "application/json",
21
+ },
22
+ body: JSON.stringify({
23
+ operationName: GraphQlQueryCollection.queryName,
24
+ query: GraphQlQueryCollection.top,
25
+ variables: realBottom,
26
+ }),
27
+ });
28
+ const result = await response.json();
29
+ // @ts-ignore
30
+ if (result && result.error) {
31
+ // @ts-ignore
32
+ throw new Error(`api error: ${result.error}`);
33
+ }
34
+ // @ts-ignore
35
+ const realData = result.data.catalog.collectionsConnection.edges
36
+ .map((edge) => {
37
+ return edge.node;
38
+ })
39
+ .map((match) => {
40
+ const { __typename, ...rest } = match;
41
+ return rest;
42
+ });
43
+ return realData;
44
+ };
45
+
46
+ export const handleApiCollection =
47
+ ({ appId, apiUrl }) =>
48
+ async (req, res, next) => {
49
+ const name = req.url.slice("/collections/".length);
50
+ const content = await getCollections({ appId, apiUrl, name });
51
+ res.setHeader("content-type", "application/json");
52
+ res.end(JSON.stringify(content, null, 2));
53
+ };
@@ -0,0 +1,49 @@
1
+ import * as GraphQlQueryCollections from "../GraphQlQueryCollections/GraphQlQueryCollections.js";
2
+
3
+ const getCollections = async ({ appId, apiUrl }) => {
4
+ const realBottom = {
5
+ ...GraphQlQueryCollections.bottom,
6
+ appInfo: {
7
+ ...GraphQlQueryCollections.bottom.appInfo,
8
+ appId,
9
+ },
10
+ filter: {},
11
+ };
12
+ const response = await fetch(apiUrl, {
13
+ method: "POST",
14
+ headers: {
15
+ Accept: "application/json",
16
+ "Content-Type": "application/json",
17
+ },
18
+ body: JSON.stringify({
19
+ operationName: GraphQlQueryCollections.queryName,
20
+ query: GraphQlQueryCollections.top,
21
+ variables: realBottom,
22
+ }),
23
+ });
24
+ const result = await response.json();
25
+ // @ts-ignore
26
+ if (result && result.error) {
27
+ // @ts-ignore
28
+ throw new Error(`api error: ${result.error}`);
29
+ }
30
+ // @ts-ignore
31
+ const realData = result.data.catalog.collectionsConnection.edges
32
+ .map((edge) => {
33
+ return edge.node;
34
+ })
35
+ .map((match) => {
36
+ const { __typename, ...rest } = match;
37
+ return rest;
38
+ });
39
+ return realData;
40
+ };
41
+
42
+ export const handleApiCollections =
43
+ ({ appId, apiUrl }) =>
44
+ async (req, res, next) => {
45
+ const content = await getCollections({ appId, apiUrl });
46
+ console.log({ content });
47
+ res.setHeader("content-type", "application/json");
48
+ res.end(JSON.stringify(content, null, 2));
49
+ };
@@ -36,68 +36,69 @@ const getBundleId = async ({ appId, reqUrl }) => {
36
36
  return id;
37
37
  };
38
38
 
39
- export const handleDossier = (appId) => async (req, res, next) => {
40
- const bundleId = await getBundleId({
41
- appId,
42
- reqUrl: req.url,
43
- });
44
- if (!bundleId) {
45
- res.statusCode = 404;
46
- res.end("Not found");
47
- return;
48
- }
49
- const url = `https://catalog.purplemanager.com/graphql`;
50
- const realBottom = {
51
- ...GraphQlQueryDossier.bottom1,
52
- appInfo: {
53
- ...GraphQlQueryDossier.bottom1.appInfo,
39
+ export const handleDossier =
40
+ ({ appId, apiUrl }) =>
41
+ async (req, res, next) => {
42
+ const bundleId = await getBundleId({
54
43
  appId,
55
- },
56
- filter: {
57
- AND: [
58
- {
59
- postType: {
60
- value: "post",
44
+ reqUrl: req.url,
45
+ });
46
+ if (!bundleId) {
47
+ res.statusCode = 404;
48
+ res.end("Not found");
49
+ return;
50
+ }
51
+ const realBottom = {
52
+ ...GraphQlQueryDossier.bottom1,
53
+ appInfo: {
54
+ ...GraphQlQueryDossier.bottom1.appInfo,
55
+ appId,
56
+ },
57
+ filter: {
58
+ AND: [
59
+ {
60
+ postType: {
61
+ value: "post",
62
+ },
61
63
  },
62
- },
63
- {
64
- contentType: {
65
- value: "POST",
64
+ {
65
+ contentType: {
66
+ value: "POST",
67
+ },
66
68
  },
67
- },
68
- {
69
- AND: [
70
- {
71
- bundleId: {
72
- value: bundleId,
69
+ {
70
+ AND: [
71
+ {
72
+ bundleId: {
73
+ value: bundleId,
74
+ },
73
75
  },
74
- },
75
- ],
76
- },
77
- ],
78
- },
79
- };
80
- const response = await fetch(url, {
81
- method: "POST",
82
- headers: {
83
- Accept: "application/json",
84
- "Content-Type": "application/json",
85
- },
86
- body: JSON.stringify({
87
- operationName: "CatalogContentsQuery",
88
- query: GraphQlQueryDossier.top1,
89
- variables: realBottom,
90
- }),
91
- });
92
- const result = await response.json();
93
- // @ts-ignore
94
- const realData = result.data.catalog.contentsConnection.edges
95
- .map((edge) => edge.content)
96
- .map((node) => {
97
- const { __typename, ...rest } = node;
98
- return rest;
76
+ ],
77
+ },
78
+ ],
79
+ },
80
+ };
81
+ const response = await fetch(apiUrl, {
82
+ method: "POST",
83
+ headers: {
84
+ Accept: "application/json",
85
+ "Content-Type": "application/json",
86
+ },
87
+ body: JSON.stringify({
88
+ operationName: "CatalogContentsQuery",
89
+ query: GraphQlQueryDossier.top1,
90
+ variables: realBottom,
91
+ }),
99
92
  });
93
+ const result = await response.json();
94
+ // @ts-ignore
95
+ const realData = result.data.catalog.contentsConnection.edges
96
+ .map((edge) => edge.content)
97
+ .map((node) => {
98
+ const { __typename, ...rest } = node;
99
+ return rest;
100
+ });
100
101
 
101
- res.setHeader("content-type", "application/json");
102
- res.send(JSON.stringify(realData, null, 2));
103
- };
102
+ res.setHeader("content-type", "application/json");
103
+ res.send(JSON.stringify(realData, null, 2));
104
+ };
@@ -1,35 +1,36 @@
1
1
  import * as GraphQlQueryDossiers from "../GraphQlQueryDossiers/GraphQlQueryDossiers.js";
2
2
 
3
- export const handleDossiers = (appId) => async (req, res, next) => {
4
- const url = `https://catalog.purplemanager.com/graphql`;
5
- const realBottom = {
6
- ...GraphQlQueryDossiers.bottom,
7
- appInfo: {
8
- ...GraphQlQueryDossiers.bottom.appInfo,
9
- appId,
10
- },
11
- };
12
- const response = await fetch(url, {
13
- method: "POST",
14
- headers: {
15
- Accept: "application/json",
16
- "Content-Type": "application/json",
17
- },
18
- body: JSON.stringify({
19
- operationName: "CatalogContentsQuery",
20
- query: GraphQlQueryDossiers.top,
21
- variables: realBottom,
22
- }),
23
- });
24
- const result = await response.json();
25
- // @ts-ignore
26
- const realData = result.data.catalog.contentsConnection.edges
27
- .map((edge) => edge.content)
28
- .map((node) => {
29
- const { __typename, ...rest } = node;
30
- return rest;
3
+ export const handleDossiers =
4
+ ({ appId, apiUrl }) =>
5
+ async (req, res, next) => {
6
+ const realBottom = {
7
+ ...GraphQlQueryDossiers.bottom,
8
+ appInfo: {
9
+ ...GraphQlQueryDossiers.bottom.appInfo,
10
+ appId,
11
+ },
12
+ };
13
+ const response = await fetch(apiUrl, {
14
+ method: "POST",
15
+ headers: {
16
+ Accept: "application/json",
17
+ "Content-Type": "application/json",
18
+ },
19
+ body: JSON.stringify({
20
+ operationName: "CatalogContentsQuery",
21
+ query: GraphQlQueryDossiers.top,
22
+ variables: realBottom,
23
+ }),
31
24
  });
25
+ const result = await response.json();
26
+ // @ts-ignore
27
+ const realData = result.data.catalog.contentsConnection.edges
28
+ .map((edge) => edge.content)
29
+ .map((node) => {
30
+ const { __typename, ...rest } = node;
31
+ return rest;
32
+ });
32
33
 
33
- res.setHeader("content-type", "application/json");
34
- res.send(JSON.stringify(realData, null, 2));
35
- };
34
+ res.setHeader("content-type", "application/json");
35
+ res.send(JSON.stringify(realData, null, 2));
36
+ };
@@ -13,6 +13,7 @@ export const handleIndex = async (req, res, next) => {
13
13
  <li><a href="/api/categories">Categories</a></li>
14
14
  <li><a href="/api/articles">Articles</a></li>
15
15
  <li><a href="/api/authors">Authors</a></li>
16
+ <li><a href="/api/collections">Collections</a></li>
16
17
  </ul>
17
18
  </body>
18
19
  </html>