@twotaps/site-utils-base 0.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.
@@ -0,0 +1,228 @@
1
+ import { cacheExchange, Client, fetchExchange } from '@urql/core';
2
+ import { persistedExchange } from '@urql/exchange-persisted';
3
+ import { RedirectType, } from '../types.js';
4
+ import { parseResponse } from '../util.js';
5
+ import { GET_DOMAIN_ROBOTS, GET_DOMAIN_SITEMAP, GET_ERROR_TEMPLATE, GET_LAYOUT_REVISION, GET_PAGE, GET_URL_RESOLUTION, } from './page.query.js';
6
+ export class PageService {
7
+ constructor(uri) {
8
+ // Default to using the ltnetwork graphql server.
9
+ const resolvedURI = uri || 'https://api-duo.twotaps.io/graphql';
10
+ console.info(`Using gateway URI: ${resolvedURI}`);
11
+ this.apolloClient = new Client({
12
+ url: resolvedURI,
13
+ fetchOptions: {
14
+ headers: {
15
+ 'APOLLO-REQUIRE-PREFLIGHT': 'true',
16
+ },
17
+ },
18
+ exchanges: [
19
+ cacheExchange,
20
+ fetchExchange,
21
+ persistedExchange({
22
+ preferGetForPersistedQueries: true,
23
+ }),
24
+ ],
25
+ });
26
+ }
27
+ async getPage(slug, domain = '') {
28
+ const pageUrl = `${domain}/${slug}`;
29
+ console.info(`Loading page '${pageUrl}'`);
30
+ const { data, error } = await this.apolloClient
31
+ .query(GET_PAGE, { slug, domain })
32
+ .toPromise();
33
+ const is404 = error?.graphQLErrors?.find((graphQLError) => graphQLError.extensions?.response?.statusCode === 404);
34
+ if (data && data.page) {
35
+ const pageData = {
36
+ ...data.page,
37
+ properties: {},
38
+ ttschema: parseResponse(data.page.publishedRevision.schema),
39
+ };
40
+ return {
41
+ props: {
42
+ page: pageData,
43
+ pageTitle: pageData.metaTitle,
44
+ },
45
+ };
46
+ }
47
+ if (is404) {
48
+ console.error(`Error: page '${pageUrl}' not found.`);
49
+ return {
50
+ notFound: true,
51
+ };
52
+ }
53
+ throw new Error(`Error: failed to load '${pageUrl}: ${error}`);
54
+ }
55
+ async getPagePreview(id, campaignId, draftMode) {
56
+ console.info(`Loading page ${id}`);
57
+ const { data, error } = await this.apolloClient
58
+ .query(GET_PAGE, {
59
+ id,
60
+ campaignId,
61
+ draftMode: typeof draftMode === 'boolean' ? draftMode : true,
62
+ })
63
+ .toPromise();
64
+ if (data && data.page) {
65
+ const pageData = {
66
+ ...data.page,
67
+ properties: {},
68
+ ttschema: parseResponse(data.page.publishedRevision.schema),
69
+ };
70
+ return {
71
+ props: {
72
+ page: pageData,
73
+ pageTitle: pageData.metaTitle,
74
+ },
75
+ };
76
+ }
77
+ throw new Error(`Error: failed to load ${id}: ${error}`);
78
+ }
79
+ async resolveUrl(slug, domain = '') {
80
+ const formattedSlug = slug.toLocaleLowerCase();
81
+ const pageUrl = `${domain}/${formattedSlug}`;
82
+ console.info(`Url resolution: resolving url '${pageUrl}'`);
83
+ const { data, error } = await this.apolloClient
84
+ .query(GET_URL_RESOLUTION, {
85
+ slug: formattedSlug,
86
+ domain,
87
+ })
88
+ .toPromise();
89
+ if (error) {
90
+ const message = error.graphQLErrors?.[0]?.message || error.message;
91
+ console.info(`Url resolution: error resolving '${pageUrl}': ${message}`);
92
+ throw new Error(`Url resolution: error resolving '${pageUrl}: ${message}`);
93
+ }
94
+ const page = data.urlResolution?.page;
95
+ if (page) {
96
+ const pageData = {
97
+ ...page,
98
+ properties: {},
99
+ ttschema: parseResponse(page.publishedRevision.schema),
100
+ };
101
+ console.info(`Url resolution: resolved '${pageUrl}' to '${page.name}' (id ${page.id})`);
102
+ return {
103
+ props: {
104
+ page: pageData,
105
+ pageTitle: pageData.metaTitle,
106
+ },
107
+ };
108
+ }
109
+ const redirect = data.urlResolution?.redirect;
110
+ if (redirect) {
111
+ console.info(`Url resolution: resolved url '${pageUrl}' as a ${redirect.type === RedirectType.Permanent ? 'permanent' : 'temporary'} redirect to '${redirect.target}'`);
112
+ return {
113
+ redirect: {
114
+ destination: redirect.target,
115
+ permanent: redirect.type === RedirectType.Permanent,
116
+ },
117
+ };
118
+ }
119
+ console.info(`Url resolution: unable to resolve '${pageUrl}' to a page or redirect`);
120
+ return {
121
+ notFound: true,
122
+ };
123
+ }
124
+ async getErrorTemplate(domain, path, errorType) {
125
+ const siteOrigin = `${domain}${process.env.NEXT_PUBLIC_BASE_URL ? `/${process.env.NEXT_PUBLIC_BASE_URL}` : ''}`;
126
+ console.info(`Loading ${errorType} template for '${siteOrigin}'`);
127
+ const { data } = await this.apolloClient
128
+ .query(GET_ERROR_TEMPLATE, {
129
+ domain,
130
+ path,
131
+ errorType,
132
+ })
133
+ .toPromise();
134
+ if (data?.errorTemplate) {
135
+ const pageData = {
136
+ properties: {},
137
+ ttschema: parseResponse(data.errorTemplate.publishedRevision.schema),
138
+ };
139
+ return {
140
+ props: {
141
+ page: pageData,
142
+ },
143
+ };
144
+ }
145
+ return {
146
+ props: {},
147
+ };
148
+ }
149
+ async getRevision(id, pageId, campaignId, draftMode = false) {
150
+ const { data, error } = await this.apolloClient
151
+ .query(GET_LAYOUT_REVISION, {
152
+ id,
153
+ pageId: parseInt(pageId, 10),
154
+ campaignId: parseInt(campaignId, 10),
155
+ draftMode,
156
+ })
157
+ .toPromise();
158
+ if (data) {
159
+ return {
160
+ props: {
161
+ page: {
162
+ ...data.pageRevision.page,
163
+ id,
164
+ metaTitle: '',
165
+ properties: {},
166
+ ttschema: parseResponse(data.pageRevision.schema),
167
+ },
168
+ },
169
+ };
170
+ }
171
+ if (!id || !error) {
172
+ return {
173
+ props: {
174
+ page: {
175
+ id: 0,
176
+ metaTitle: '',
177
+ properties: {},
178
+ ttschema: [],
179
+ },
180
+ },
181
+ };
182
+ }
183
+ const is404 = error?.graphQLErrors?.find((graphQLError) => graphQLError.extensions?.response?.statusCode === 404);
184
+ if (is404) {
185
+ console.error(`Error: revision id '${id}' not found.`);
186
+ return {
187
+ notFound: true,
188
+ };
189
+ }
190
+ console.error(error);
191
+ throw new Error(`Error loading page data: ${error}`);
192
+ }
193
+ async getSitemap(domain) {
194
+ try {
195
+ console.info(`Loading sitemap for ${domain}`);
196
+ const { data, error } = await this.apolloClient
197
+ .query(GET_DOMAIN_SITEMAP, { domain })
198
+ .toPromise();
199
+ if (data) {
200
+ return data.domain.sitemap;
201
+ }
202
+ console.error(error);
203
+ throw new Error(`Error loading sitemap: ${error}`);
204
+ }
205
+ catch (err) {
206
+ console.error('Unable to fetch sitemap', err);
207
+ throw new Error('Unable to fetch sitemap from the API. Please try again');
208
+ }
209
+ }
210
+ async getRobots(domain) {
211
+ try {
212
+ console.info(`Loading robots.txt for ${domain}`);
213
+ const { data, error } = await this.apolloClient
214
+ .query(GET_DOMAIN_ROBOTS, { domain })
215
+ .toPromise();
216
+ if (data) {
217
+ return data.domain.robots;
218
+ }
219
+ console.error(error);
220
+ throw new Error(`Error loading robots: ${error}`);
221
+ }
222
+ catch (err) {
223
+ console.error('Unable to fetch robots', err);
224
+ throw new Error('Unable to fetch robots from the API. Please try again');
225
+ }
226
+ }
227
+ }
228
+ //# sourceMappingURL=page.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.service.js","sourceRoot":"","sources":["../../src/page/page.service.ts"],"names":[],"mappings":"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"}