@unchainedshop/cockpit-api 1.0.0

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/.nvmrc ADDED
@@ -0,0 +1 @@
1
+ 20
package/README.md ADDED
@@ -0,0 +1,148 @@
1
+ Sure! Here's a well-structured `README.md` for your `cockpit-api` package:
2
+
3
+ ```markdown
4
+ # Cockpit API
5
+
6
+ A package to interact with the Cockpit CMS API, including functionalities to handle GraphQL requests and various CMS content manipulations.
7
+
8
+ ## Table of Contents
9
+
10
+ - [Installation](#installation)
11
+ - [Usage](#usage)
12
+ - [Initialization](#initialization)
13
+ - [GraphQL Requests](#graphql-requests)
14
+ - [Content Operations](#content-operations)
15
+ - [API Reference](#api-reference)
16
+ - [generateCmsRouteReplacements](#generatecmsroutereplacements)
17
+ - [FixImagePaths](#fiximagepaths)
18
+ - [CockpitAPI](#cockpitapi)
19
+ - [makeCockpitSchema](#makecockpitschema)
20
+ - [Contributing](#contributing)
21
+ - [License](#license)
22
+
23
+ ## Installation
24
+
25
+ Install the package via npm:
26
+
27
+ ```sh
28
+ npm install cockpit-api
29
+ ```
30
+
31
+ ## Usage
32
+
33
+ ### Initialization
34
+
35
+ First, import and initialize the API:
36
+
37
+ ```javascript
38
+ import CockpitAPI from 'cockpit-api';
39
+
40
+ const cockpit = await CockpitAPI();
41
+ ```
42
+
43
+ ### GraphQL Requests
44
+
45
+ You can make GraphQL requests using the `graphQL` method:
46
+
47
+ ```javascript
48
+ import { gql } from 'graphql-tag';
49
+
50
+ const query = gql`
51
+ query {
52
+ allPosts {
53
+ title
54
+ content
55
+ }
56
+ }
57
+ `;
58
+
59
+ const result = await cockpit.graphQL(query, {});
60
+ console.log(result);
61
+ ```
62
+
63
+ ### Content Operations
64
+
65
+ You can perform various content operations such as fetching items, aggregating models, and manipulating pages.
66
+
67
+ Example to get a content item:
68
+
69
+ ```javascript
70
+ const contentItem = await cockpit.getContentItem({ model: 'posts', id: '123' });
71
+ console.log(contentItem);
72
+ ```
73
+
74
+ ## API Reference
75
+
76
+ ### generateCmsRouteReplacements
77
+
78
+ Generates route replacements for CMS.
79
+
80
+ ```javascript
81
+ import { generateCmsRouteReplacements } from 'cockpit-api';
82
+
83
+ const replacements = await generateCmsRouteReplacements();
84
+ console.log(replacements);
85
+ ```
86
+
87
+ ### FixImagePaths
88
+
89
+ Transforms and fixes image paths in CMS responses.
90
+
91
+ ```javascript
92
+ import { FixImagePaths } from 'cockpit-api';
93
+
94
+ const replacements = await generateCmsRouteReplacements();
95
+ const { transformResult } = FixImagePaths(replacements);
96
+
97
+ const fixedResponse = transformResult(originalResponse);
98
+ console.log(fixedResponse);
99
+ ```
100
+
101
+ ### CockpitAPI
102
+
103
+ Provides various methods to interact with the Cockpit CMS.
104
+
105
+ **Methods:**
106
+ - `graphQL(document, variables)`
107
+ - `getContentItem({ model, id }, locale, queryParams)`
108
+ - `getAggregateModel({ model, pipeline }, locale)`
109
+ - `getContentItems(model, locale, queryParams)`
110
+ - `getContentTree(model, locale, queryParams)`
111
+ - `postContentItem(model, item)`
112
+ - `deleteContentItem(model, id)`
113
+ - `pages(locale, queryParams)`
114
+ - `pageById({ page, id }, locale, queryParams)`
115
+ - `pageByRoute(route, locale)`
116
+ - `pagesMenus(locale)`
117
+ - `pagesMenu(name, locale)`
118
+ - `pagesRoutes(locale)`
119
+ - `pagesSitemap()`
120
+ - `pagesSetting(locale)`
121
+
122
+ ### makeCockpitSchema
123
+
124
+ Creates a GraphQL schema from the Cockpit CMS API.
125
+
126
+ ```javascript
127
+ import { makeCockpitSchema } from 'cockpit-api';
128
+
129
+ const schema = await makeCockpitSchema();
130
+ console.log(schema);
131
+ ```
132
+
133
+ ## Contributing
134
+
135
+ Contributions are welcome! Please open an issue or submit a pull request.
136
+
137
+ 1. Fork the repository.
138
+ 2. Create a new branch: `git checkout -b feature-branch-name`.
139
+ 3. Make your changes and commit them: `git commit -m 'Add new feature'`.
140
+ 4. Push to the branch: `git push origin feature-branch-name`.
141
+ 5. Open a pull request.
142
+
143
+ ## License
144
+
145
+ This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
146
+ ```
147
+
148
+ This `README.md` covers installation, basic usage, detailed API reference, contribution guidelines, and licensing information. Adjust the details as needed for your specific implementation.
package/dist/api.d.ts ADDED
@@ -0,0 +1,39 @@
1
+ export declare const getTenantIds: () => string[];
2
+ export declare const generateCmsRouteReplacements: (tenant?: string) => Promise<any>;
3
+ export declare const generateCollectionAndSingletonSlugRouteMap: (tenant?: string) => Promise<any>;
4
+ export declare const FixImagePaths: (replacements: any, tenant?: string) => {
5
+ transformResult(originalResponse: any): any;
6
+ };
7
+ declare const CockpitAPI: (tenant?: string) => Promise<{
8
+ graphQL(document: any, variables: any): Promise<any>;
9
+ getContentItem({ model, id }: {
10
+ model: string;
11
+ id?: string;
12
+ }, locale?: string, queryParams?: {}, { useAdminAccess }?: {
13
+ useAdminAccess?: boolean;
14
+ }): Promise<any>;
15
+ getAggregateModel({ model, pipeline }: {
16
+ model: string;
17
+ pipeline: any[];
18
+ }, locale?: string): Promise<any>;
19
+ getContentItems(model: string, locale?: string, queryParams?: any): Promise<any>;
20
+ getContentTree(model: string, locale?: string, queryParams?: {
21
+ filter: {};
22
+ }): Promise<any>;
23
+ postContentItem(model: string, item: any): Promise<any>;
24
+ deleteContentItem(model: string, id?: string): Promise<any>;
25
+ pages(locale?: string, queryParams?: {}): Promise<any>;
26
+ pageById({ page, id }: {
27
+ page: string;
28
+ id: string;
29
+ }, locale?: string, queryParams?: {}): Promise<any>;
30
+ pageByRoute(route: string, locale?: string): Promise<any>;
31
+ pagesMenus(locale?: string): Promise<any>;
32
+ pagesMenu(name: string, locale?: string): Promise<any>;
33
+ pagesRoutes(locale?: string): Promise<any>;
34
+ pagesSitemap(): Promise<any>;
35
+ pagesSetting(locale?: string): Promise<any>;
36
+ getFullRouteForSlug(slug: string): Promise<any>;
37
+ }>;
38
+ export default CockpitAPI;
39
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,YAAY,gBAcxB,CAAC;AAEF,eAAO,MAAM,4BAA4B,YAAmB,MAAM,iBAoBjE,CAAC;AAEF,eAAO,MAAM,0CAA0C,YAAmB,MAAM,iBAuB/E,CAAC;AAEF,eAAO,MAAM,aAAa,iBAAkB,GAAG,WAAW,MAAM;sCAI1B,GAAG;CAoBxC,CAAC;AAkBF,QAAA,MAAM,UAAU,YAAmB,MAAM;sBAoDb,GAAG,aAAa,GAAG;kCAe1B;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,0DAGjB;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;2CAWb;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,EAAE,CAAA;KAAE;2BAYlD,MAAM,iCAAmC,GAAG;0BAUhE,MAAM;;;2BAYc,MAAM,QAAQ,GAAG;6BAWf,MAAM,OAAO,MAAM;;2BAoBrB;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE;uBAUhC,MAAM;;oBAaT,MAAM;;;;8BAkBI,MAAM;EAMzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
package/dist/api.js ADDED
@@ -0,0 +1,316 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __rest = (this && this.__rest) || function (s, e) {
12
+ var t = {};
13
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
14
+ t[p] = s[p];
15
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
16
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
17
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
18
+ t[p[i]] = s[p[i]];
19
+ }
20
+ return t;
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.FixImagePaths = exports.generateCollectionAndSingletonSlugRouteMap = exports.generateCmsRouteReplacements = exports.getTenantIds = void 0;
24
+ const graphql_1 = require("graphql");
25
+ const cockpit_logger_js_1 = require("./cockpit-logger.js");
26
+ const lru_cache_1 = require("lru-cache");
27
+ const dataCache = new lru_cache_1.LRUCache({
28
+ max: 100,
29
+ ttl: 10000 * 10,
30
+ allowStale: false,
31
+ });
32
+ const { COCKPIT_GRAPHQL_ENDPOINT = '' } = process.env;
33
+ const cockpitURL = new URL(COCKPIT_GRAPHQL_ENDPOINT);
34
+ const getTenantIds = () => {
35
+ const env = Object.assign({}, process.env);
36
+ const cockpitSecretKeys = Object.keys(env).filter((key) => key.includes("COCKPIT_SECRET") &&
37
+ key !== "COCKPIT_SECRET" &&
38
+ !key.endsWith("_FILE"));
39
+ const tenantIds = cockpitSecretKeys.map((key) => {
40
+ return key.slice("COCKPIT_SECRET_".length).toLowerCase();
41
+ });
42
+ return tenantIds;
43
+ };
44
+ exports.getTenantIds = getTenantIds;
45
+ const generateCmsRouteReplacements = (tenant) => __awaiter(void 0, void 0, void 0, function* () {
46
+ const cachedReplacement = dataCache.get(`ROUTE_REPLACEMENT_MAP${tenant}`);
47
+ if (cachedReplacement)
48
+ return cachedReplacement;
49
+ const filterParams = {
50
+ fields: JSON.stringify({ _id: 1, slug: 1, _r: 1 }),
51
+ };
52
+ const cmsPages = yield fetch(`${cockpitURL.origin}${tenant ? `/:${tenant}/api` : "/api"}/pages/pages?${new URLSearchParams(filterParams).toString()}`);
53
+ const pagesArr = (yield cmsPages.json()) || [];
54
+ const replacement = pagesArr.reduce((result, item) => {
55
+ const key = `pages://${item._id}`;
56
+ const value = item._r;
57
+ return Object.assign(Object.assign({}, result), { [key]: value });
58
+ }, {});
59
+ dataCache.set(`ROUTE_REPLACEMENT_MAP${tenant}`, replacement);
60
+ return replacement;
61
+ });
62
+ exports.generateCmsRouteReplacements = generateCmsRouteReplacements;
63
+ const generateCollectionAndSingletonSlugRouteMap = (tenant) => __awaiter(void 0, void 0, void 0, function* () {
64
+ const cachedMap = dataCache.get(`SLUG_ROUTE_MAP_${tenant}`);
65
+ if (cachedMap)
66
+ return cachedMap;
67
+ const cmsPages = yield fetch(`${cockpitURL.origin}${tenant ? `/:${tenant}/api` : "/api"}/pages/pages?locale=default&${new URLSearchParams({
68
+ fields: JSON.stringify({
69
+ data: { collection: 1, singleton: 1 },
70
+ _r: 1,
71
+ type: 1,
72
+ }),
73
+ filter: JSON.stringify({ "data.collection": { $ne: null } }),
74
+ }).toString()}`);
75
+ const pagesArr = (yield cmsPages.json()) || [];
76
+ const pageMap = pagesArr.reduce((result, { data, _r }) => {
77
+ const entityName = (data === null || data === void 0 ? void 0 : data.collection) || (data === null || data === void 0 ? void 0 : data.singleton);
78
+ if (!entityName)
79
+ return result;
80
+ return Object.assign(Object.assign({}, result), { [entityName]: _r });
81
+ }, {});
82
+ dataCache.set(`SLUG_ROUTE_MAP_${tenant}`, pageMap);
83
+ return pageMap;
84
+ });
85
+ exports.generateCollectionAndSingletonSlugRouteMap = generateCollectionAndSingletonSlugRouteMap;
86
+ const FixImagePaths = (replacements, tenant) => {
87
+ const pattern = new RegExp(Object.keys(replacements).join("|"), "g");
88
+ const url = `${cockpitURL.origin}${tenant ? `/:${tenant}` : ""}`;
89
+ return {
90
+ transformResult(originalResponse) {
91
+ try {
92
+ const rawResponseDataString = JSON.stringify(originalResponse);
93
+ const fixedDataString = rawResponseDataString
94
+ // fixes asset paths
95
+ .replace(/"path":"\//g, `"path":"${url}/storage/uploads/`)
96
+ .replace(/src=\\"\/storage/gi, `src=\\"${url}/storage`)
97
+ .replace(pattern, (match) => replacements[match])
98
+ // fixes image paths which already had a path including storage/uploads
99
+ .replace(/"path":"\/storage\/uploads\/storage\/uploads\//g, `"path":"/storage/uploads/`);
100
+ return JSON.parse(fixedDataString);
101
+ }
102
+ catch (e) {
103
+ return originalResponse;
104
+ }
105
+ },
106
+ };
107
+ };
108
+ exports.FixImagePaths = FixImagePaths;
109
+ const encodeQueryParam = (key, value) => {
110
+ return `${encodeURIComponent(key)}=${encodeURIComponent(typeof value !== "string" ? JSON.stringify(value) : value)}`;
111
+ };
112
+ const buildQueryString = (params) => {
113
+ if (!Object.keys(params).length)
114
+ return null;
115
+ return Object.entries(params)
116
+ .map(([key, value]) => encodeQueryParam(key, value))
117
+ .join("&");
118
+ };
119
+ const handleErrorAndLog = (e) => {
120
+ console.error(e);
121
+ return null;
122
+ };
123
+ const CockpitAPI = (tenant) => __awaiter(void 0, void 0, void 0, function* () {
124
+ const secretName = ["COCKPIT_SECRET", tenant].filter(Boolean).join("_");
125
+ const token = process.env[secretName];
126
+ const buildUrl = (path, { locale = "de", queryParams = {} }) => {
127
+ const normalizedLocale = locale === "de" ? "default" : locale;
128
+ const url = new URL(cockpitURL);
129
+ url.pathname = `${tenant ? `/:${tenant}/api` : "/api"}${path}`;
130
+ const queryString = buildQueryString(Object.assign(Object.assign({}, queryParams), { locale: normalizedLocale }));
131
+ url.search = queryString;
132
+ return url;
133
+ };
134
+ const routeReplaceMents = yield (0, exports.generateCmsRouteReplacements)(tenant);
135
+ const { transformResult } = (0, exports.FixImagePaths)(routeReplaceMents, tenant);
136
+ const handleResponse = (result) => __awaiter(void 0, void 0, void 0, function* () {
137
+ if (result.status === 404)
138
+ return null;
139
+ if (result.status !== 200) {
140
+ cockpit_logger_js_1.logger.error(`Error accessing ${result.url}`, result);
141
+ throw new Error(`Cockpit: Error accessing ${result.url} ${yield result.text()}`);
142
+ }
143
+ return transformResult(yield result.json());
144
+ });
145
+ const fetchData = (url_1, ...args_1) => __awaiter(void 0, [url_1, ...args_1], void 0, function* (url, _a = {}) {
146
+ var _b;
147
+ var { useAdminAccess } = _a, options = __rest(_a, ["useAdminAccess"]);
148
+ const headers = (_b = options === null || options === void 0 ? void 0 : options.headers) !== null && _b !== void 0 ? _b : {};
149
+ if (useAdminAccess) {
150
+ headers["API-Key"] = token;
151
+ }
152
+ try {
153
+ cockpit_logger_js_1.logger.verbose(`requesting ${url}`);
154
+ const result = yield fetch(url, Object.assign(Object.assign({}, options), { headers: Object.assign({}, headers) }));
155
+ return handleResponse(result);
156
+ }
157
+ catch (e) {
158
+ return handleErrorAndLog(e);
159
+ }
160
+ });
161
+ return {
162
+ graphQL(document, variables) {
163
+ return __awaiter(this, void 0, void 0, function* () {
164
+ const query = (0, graphql_1.print)(document);
165
+ const cockpitEndpointUrl = new URL(COCKPIT_GRAPHQL_ENDPOINT);
166
+ if (tenant) {
167
+ cockpitEndpointUrl.pathname = `/:${tenant}${cockpitEndpointUrl.pathname}`;
168
+ }
169
+ const fetchResult = yield fetchData(cockpitEndpointUrl, {
170
+ method: "POST",
171
+ headers: { "Content-Type": "application/json" },
172
+ body: JSON.stringify({ query, variables }),
173
+ });
174
+ return fetchResult;
175
+ });
176
+ },
177
+ getContentItem(_a) {
178
+ return __awaiter(this, arguments, void 0, function* ({ model, id }, locale = "default", queryParams = {}, { useAdminAccess = false } = {}) {
179
+ if (!model)
180
+ throw new Error("Cockpit: Please provide a model");
181
+ const url = buildUrl(`/content/item/${model}${id ? `/${id}` : ""}`, {
182
+ locale,
183
+ queryParams,
184
+ });
185
+ return fetchData(url, { useAdminAccess });
186
+ });
187
+ },
188
+ getAggregateModel(_a) {
189
+ return __awaiter(this, arguments, void 0, function* ({ model, pipeline }, locale = "default") {
190
+ if (!model)
191
+ throw new Error("Cockpit: Please provide a model");
192
+ const url = buildUrl(`/content/aggregate/${model}`, {
193
+ locale,
194
+ queryParams: {
195
+ pipeline,
196
+ },
197
+ });
198
+ return fetchData(url);
199
+ });
200
+ },
201
+ getContentItems(model_1) {
202
+ return __awaiter(this, arguments, void 0, function* (model, locale = "default", queryParams = {}) {
203
+ if (!model)
204
+ throw new Error("Cockpit: Please provide a model");
205
+ const url = buildUrl(`/content/items/${model}`, {
206
+ locale,
207
+ queryParams,
208
+ });
209
+ return fetchData(url);
210
+ });
211
+ },
212
+ getContentTree(model_1) {
213
+ return __awaiter(this, arguments, void 0, function* (model, locale = "default", queryParams = { filter: {} }) {
214
+ if (!model)
215
+ throw new Error("Cockpit: Please provide a model");
216
+ const url = buildUrl(`/content/tree/${model}`, {
217
+ locale,
218
+ queryParams,
219
+ });
220
+ return fetchData(url);
221
+ });
222
+ },
223
+ postContentItem(model, item) {
224
+ return __awaiter(this, void 0, void 0, function* () {
225
+ if (!model)
226
+ throw new Error("Cockpit: Please provide a model");
227
+ const url = buildUrl(`/content/item/${model}`, {});
228
+ const result = yield fetchData(url, {
229
+ method: "POST",
230
+ headers: { "Content-Type": "application/json" },
231
+ body: JSON.stringify({ data: item }),
232
+ });
233
+ return result;
234
+ });
235
+ },
236
+ deleteContentItem(model, id) {
237
+ return __awaiter(this, void 0, void 0, function* () {
238
+ if (!model || !id)
239
+ throw new Error("Cockpit: Please provide a model and id");
240
+ const url = buildUrl(`/content/item/${model}/${id}`, {});
241
+ const result = yield fetchData(url, {
242
+ method: "DELETE",
243
+ headers: { "Content-Type": "application/json" },
244
+ });
245
+ return result;
246
+ });
247
+ },
248
+ pages() {
249
+ return __awaiter(this, arguments, void 0, function* (locale = "default", queryParams = {}) {
250
+ const url = buildUrl("/pages/pages", {
251
+ locale,
252
+ queryParams,
253
+ });
254
+ return fetchData(url);
255
+ });
256
+ },
257
+ pageById(_a) {
258
+ return __awaiter(this, arguments, void 0, function* ({ page, id }, locale = "default", queryParams = {}) {
259
+ if (!page || !id)
260
+ throw new Error("GetCockpit: Please provide a page and id");
261
+ const url = buildUrl(`/pages/page/${page}/${id}`, {
262
+ locale,
263
+ queryParams,
264
+ });
265
+ return fetchData(url);
266
+ });
267
+ },
268
+ pageByRoute(route_1) {
269
+ return __awaiter(this, arguments, void 0, function* (route, locale = "default") {
270
+ const url = buildUrl("/pages/page", {
271
+ locale,
272
+ queryParams: { route },
273
+ });
274
+ return fetchData(url);
275
+ });
276
+ },
277
+ pagesMenus() {
278
+ return __awaiter(this, arguments, void 0, function* (locale = "default") {
279
+ const url = buildUrl("/pages/menus", { locale });
280
+ return fetchData(url);
281
+ });
282
+ },
283
+ pagesMenu(name_1) {
284
+ return __awaiter(this, arguments, void 0, function* (name, locale = "default") {
285
+ const url = buildUrl(`/pages/menu/${name}`, { locale });
286
+ return fetchData(url);
287
+ });
288
+ },
289
+ pagesRoutes() {
290
+ return __awaiter(this, arguments, void 0, function* (locale = "default") {
291
+ const url = buildUrl("/pages/routes", { locale });
292
+ return fetchData(url);
293
+ });
294
+ },
295
+ pagesSitemap() {
296
+ return __awaiter(this, void 0, void 0, function* () {
297
+ const url = buildUrl("/pages/sitemap", {});
298
+ return fetchData(url);
299
+ });
300
+ },
301
+ pagesSetting() {
302
+ return __awaiter(this, arguments, void 0, function* (locale = "default") {
303
+ const url = buildUrl("/pages/settings", { locale });
304
+ return fetchData(url);
305
+ });
306
+ },
307
+ getFullRouteForSlug(slug) {
308
+ return __awaiter(this, void 0, void 0, function* () {
309
+ const routeSlugMap = yield (0, exports.generateCollectionAndSingletonSlugRouteMap)(tenant);
310
+ return routeSlugMap === null || routeSlugMap === void 0 ? void 0 : routeSlugMap[slug];
311
+ });
312
+ },
313
+ };
314
+ });
315
+ exports.default = CockpitAPI;
316
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ declare let logger: {
2
+ log: {
3
+ (...data: any[]): void;
4
+ (message?: any, ...optionalParams: any[]): void;
5
+ };
6
+ info: {
7
+ (...data: any[]): void;
8
+ (message?: any, ...optionalParams: any[]): void;
9
+ };
10
+ error: {
11
+ (...data: any[]): void;
12
+ (message?: any, ...optionalParams: any[]): void;
13
+ };
14
+ warn: {
15
+ (...data: any[]): void;
16
+ (message?: any, ...optionalParams: any[]): void;
17
+ };
18
+ verbose: {
19
+ (...data: any[]): void;
20
+ (message?: any, ...optionalParams: any[]): void;
21
+ };
22
+ };
23
+ declare const log: (...args: any) => void;
24
+ export { logger };
25
+ export default log;
26
+ //# sourceMappingURL=cockpit-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cockpit-logger.d.ts","sourceRoot":"","sources":["../src/cockpit-logger.ts"],"names":[],"mappings":"AAAA,QAAA,IAAI,MAAM;;;;;;;;;;;;;;;;;;;;;CAMT,CAAC;AAaF,QAAA,MAAM,GAAG,YAAa,GAAG,SAAyB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,CAAC;AAElB,eAAe,GAAG,CAAC"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.logger = void 0;
36
+ let logger = {
37
+ log: console.log,
38
+ info: console.log,
39
+ error: console.error,
40
+ warn: console.warn,
41
+ verbose: console.debug,
42
+ };
43
+ exports.logger = logger;
44
+ function loadLogger() {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ try {
47
+ const { createLogger } = yield Promise.resolve().then(() => __importStar(require("@unchainedshop/logger")));
48
+ exports.logger = logger = createLogger("cockpit") || logger;
49
+ }
50
+ catch (e) {
51
+ // console.warn(e);
52
+ }
53
+ });
54
+ }
55
+ loadLogger();
56
+ const log = (...args) => logger.info(...args);
57
+ exports.default = log;
58
+ //# sourceMappingURL=cockpit-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cockpit-logger.js","sourceRoot":"","sources":["../src/cockpit-logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAI,MAAM,GAAG;IACX,GAAG,EAAE,OAAO,CAAC,GAAG;IAChB,IAAI,EAAE,OAAO,CAAC,GAAG;IACjB,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,OAAO,EAAE,OAAO,CAAC,KAAK;CACvB,CAAC;AAeO,wBAAM;AAbf,SAAe,UAAU;;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,YAAY,EAAE,GAAG,wDAAa,uBAAuB,GAAC,CAAC;YAC/D,iBAAA,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC;QAC7C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,mBAAmB;QACrB,CAAC;IACH,CAAC;CAAA;AAED,UAAU,EAAE,CAAC;AAEb,MAAM,GAAG,GAAG,CAAC,GAAG,IAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAInD,kBAAe,GAAG,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const makeCockpitSchema: () => Promise<import("graphql").GraphQLSchema>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,iBAAiB,gDAW7B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.makeCockpitSchema = void 0;
16
+ const wrap_1 = require("@graphql-tools/wrap");
17
+ const api_1 = __importDefault(require("./api"));
18
+ function remoteExecutor(_a) {
19
+ return __awaiter(this, arguments, void 0, function* ({ document, variables, context }) {
20
+ var _b, _c;
21
+ const cockpitSpace = (_c = (_b = context === null || context === void 0 ? void 0 : context.req) === null || _b === void 0 ? void 0 : _b.headers) === null || _c === void 0 ? void 0 : _c["x-cockpit-space"];
22
+ const getCockpit = yield (0, api_1.default)(cockpitSpace);
23
+ return getCockpit.graphQL(document, variables);
24
+ });
25
+ }
26
+ const makeCockpitSchema = () => __awaiter(void 0, void 0, void 0, function* () {
27
+ const getCockpitSchema = (0, wrap_1.wrapSchema)({
28
+ schema: yield (0, wrap_1.schemaFromExecutor)(remoteExecutor),
29
+ executor: remoteExecutor,
30
+ transforms: [
31
+ new wrap_1.FilterRootFields((operationName) => {
32
+ return operationName !== "Mutation";
33
+ }),
34
+ ],
35
+ });
36
+ return getCockpitSchema;
37
+ });
38
+ exports.makeCockpitSchema = makeCockpitSchema;
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,8CAI6B;AAC7B,gDAA+B;AAE/B,SAAe,cAAc;yDAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAO;;QAC/D,MAAM,YAAY,GAAG,MAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,0CAAE,OAAO,0CAAG,iBAAiB,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,MAAM,IAAA,aAAU,EAAC,YAAY,CAAC,CAAC;QAClD,OAAO,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;CAAA;AAEM,MAAM,iBAAiB,GAAG,GAAS,EAAE;IACxC,MAAM,gBAAgB,GAAG,IAAA,iBAAU,EAAC;QAChC,MAAM,EAAE,MAAM,IAAA,yBAAkB,EAAC,cAAc,CAAC;QAChD,QAAQ,EAAE,cAAc;QACxB,UAAU,EAAE;YACR,IAAI,uBAAgB,CAAC,CAAC,aAAa,EAAE,EAAE;gBACnC,OAAO,aAAa,KAAK,UAAU,CAAC;YACxC,CAAC,CAAC;SACL;KACJ,CAAC,CAAC;IACH,OAAO,gBAAgB,CAAC;AAC5B,CAAC,CAAA,CAAC;AAXW,QAAA,iBAAiB,qBAW5B"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@unchainedshop/cockpit-api",
3
+ "version": "1.0.0",
4
+ "description": "Cokpit api endpoints",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "build": "tsc",
8
+ "prepublishOnly": "npm run build"
9
+ },
10
+ "keywords": [
11
+ "unchainedshop",
12
+ "cockpit",
13
+ "api"
14
+ ],
15
+ "author": "unchainedshop",
16
+ "license": "ISC",
17
+ "dependencies": {
18
+ "@graphql-tools/wrap": "^10.0.5",
19
+ "@unchainedshop/logger": "^2.10.5",
20
+ "graphql": "^16.8.2",
21
+ "lru-cache": "^10.2.2"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "^20.14.2",
25
+ "typescript": "^5.4.5"
26
+ }
27
+ }
package/src/api.ts ADDED
@@ -0,0 +1,315 @@
1
+ import { print } from "graphql";
2
+ import { logger } from "./cockpit-logger.js";
3
+ import { LRUCache } from 'lru-cache'
4
+
5
+ const dataCache = new LRUCache({
6
+ max: 100,
7
+ ttl: 10000 * 10,
8
+ allowStale: false,
9
+ });
10
+
11
+ const { COCKPIT_GRAPHQL_ENDPOINT = '' } = process.env;
12
+
13
+ const cockpitURL = new URL(COCKPIT_GRAPHQL_ENDPOINT);
14
+
15
+ export const getTenantIds = () => {
16
+ const env = { ...process.env };
17
+ const cockpitSecretKeys = Object.keys(env).filter(
18
+ (key) =>
19
+ key.includes("COCKPIT_SECRET") &&
20
+ key !== "COCKPIT_SECRET" &&
21
+ !key.endsWith("_FILE"),
22
+ );
23
+
24
+ const tenantIds = cockpitSecretKeys.map((key) => {
25
+ return key.slice("COCKPIT_SECRET_".length).toLowerCase();
26
+ });
27
+
28
+ return tenantIds;
29
+ };
30
+
31
+ export const generateCmsRouteReplacements = async (tenant?: string) => {
32
+ const cachedReplacement = dataCache.get(`ROUTE_REPLACEMENT_MAP${tenant}`);
33
+ if (cachedReplacement) return cachedReplacement;
34
+ const filterParams = {
35
+ fields: JSON.stringify({ _id: 1, slug: 1, _r: 1 }),
36
+ };
37
+ const cmsPages = await fetch(
38
+ `${cockpitURL.origin}${tenant ? `/:${tenant}/api` : "/api"}/pages/pages?${new URLSearchParams(
39
+ filterParams,
40
+ ).toString()}`,
41
+ );
42
+ const pagesArr: any[] = (await cmsPages.json()) || [];
43
+
44
+ const replacement = pagesArr.reduce((result, item) => {
45
+ const key = `pages://${item._id}`;
46
+ const value = item._r;
47
+ return { ...result, [key]: value };
48
+ }, {});
49
+ dataCache.set(`ROUTE_REPLACEMENT_MAP${tenant}`, replacement);
50
+ return replacement;
51
+ };
52
+
53
+ export const generateCollectionAndSingletonSlugRouteMap = async (tenant?: string) => {
54
+ const cachedMap = dataCache.get(`SLUG_ROUTE_MAP_${tenant}`);
55
+ if (cachedMap) return cachedMap;
56
+ const cmsPages = await fetch(
57
+ `${cockpitURL.origin}${tenant ? `/:${tenant}/api` : "/api"}/pages/pages?locale=default&${new URLSearchParams(
58
+ {
59
+ fields: JSON.stringify({
60
+ data: { collection: 1, singleton: 1 },
61
+ _r: 1,
62
+ type: 1,
63
+ }),
64
+ filter: JSON.stringify({ "data.collection": { $ne: null } }),
65
+ },
66
+ ).toString()}`,
67
+ );
68
+ const pagesArr: any[] = (await cmsPages.json()) || [];
69
+ const pageMap = pagesArr.reduce((result, { data, _r }) => {
70
+ const entityName = data?.collection || data?.singleton;
71
+ if (!entityName) return result;
72
+ return { ...result, [entityName]: _r };
73
+ }, {});
74
+ dataCache.set(`SLUG_ROUTE_MAP_${tenant}`, pageMap);
75
+ return pageMap;
76
+ };
77
+
78
+ export const FixImagePaths = (replacements: any, tenant?: string) => {
79
+ const pattern = new RegExp(Object.keys(replacements).join("|"), "g");
80
+ const url = `${cockpitURL.origin}${tenant ? `/:${tenant}` : ""}`;
81
+ return {
82
+ transformResult(originalResponse: any) {
83
+ try {
84
+ const rawResponseDataString = JSON.stringify(originalResponse);
85
+ const fixedDataString = rawResponseDataString
86
+ // fixes asset paths
87
+ .replace(/"path":"\//g, `"path":"${url}/storage/uploads/`)
88
+ .replace(/src=\\"\/storage/gi, `src=\\"${url}/storage`)
89
+ .replace(pattern, (match) => replacements[match])
90
+ // fixes image paths which already had a path including storage/uploads
91
+ .replace(
92
+ /"path":"\/storage\/uploads\/storage\/uploads\//g,
93
+ `"path":"/storage/uploads/`,
94
+ );
95
+
96
+ return JSON.parse(fixedDataString);
97
+ } catch (e) {
98
+ return originalResponse;
99
+ }
100
+ },
101
+ };
102
+ };
103
+
104
+ const encodeQueryParam = (key: string, value: any) => {
105
+ return `${encodeURIComponent(key)}=${encodeURIComponent(typeof value !== "string" ? JSON.stringify(value) : value)}`;
106
+ };
107
+
108
+ const buildQueryString = (params: any) => {
109
+ if (!Object.keys(params).length) return null;
110
+ return Object.entries(params)
111
+ .map(([key, value]) => encodeQueryParam(key, value))
112
+ .join("&");
113
+ };
114
+
115
+ const handleErrorAndLog = (e: Error) => {
116
+ console.error(e);
117
+ return null;
118
+ };
119
+
120
+ const CockpitAPI = async (tenant?: string) => {
121
+ const secretName = ["COCKPIT_SECRET", tenant].filter(Boolean).join("_");
122
+ const token = process.env[secretName];
123
+
124
+ const buildUrl = (path: string, { locale = "de", queryParams = {} }) => {
125
+ const normalizedLocale = locale === "de" ? "default" : locale;
126
+ const url = new URL(cockpitURL);
127
+ url.pathname = `${tenant ? `/:${tenant}/api` : "/api"}${path}`;
128
+ const queryString = buildQueryString({
129
+ ...queryParams,
130
+ locale: normalizedLocale,
131
+ });
132
+ url.search = queryString as string;
133
+ return url;
134
+ };
135
+
136
+ const routeReplaceMents = await generateCmsRouteReplacements(tenant);
137
+ const { transformResult } = FixImagePaths(routeReplaceMents, tenant);
138
+
139
+ const handleResponse = async (result: any) => {
140
+ if (result.status === 404) return null;
141
+ if (result.status !== 200) {
142
+ logger.error(`Error accessing ${result.url}`, result);
143
+ throw new Error(
144
+ `Cockpit: Error accessing ${result.url} ${await result.text()}`,
145
+ );
146
+ }
147
+ return transformResult(await result.json());
148
+ };
149
+
150
+ const fetchData = async (url: any, { useAdminAccess, ...options }: any = {}) => {
151
+ const headers = options?.headers ?? {};
152
+
153
+ if (useAdminAccess) {
154
+ headers["API-Key"] = token;
155
+ }
156
+
157
+ try {
158
+ logger.verbose(`requesting ${url}`);
159
+ const result = await fetch(url, {
160
+ ...options,
161
+ headers: {
162
+ ...headers,
163
+ },
164
+ });
165
+ return handleResponse(result);
166
+ } catch (e: any) {
167
+ return handleErrorAndLog(e);
168
+ }
169
+ };
170
+
171
+ return {
172
+ async graphQL(document: any, variables: any) {
173
+ const query = print(document);
174
+ const cockpitEndpointUrl = new URL(COCKPIT_GRAPHQL_ENDPOINT as string);
175
+ if (tenant) {
176
+ cockpitEndpointUrl.pathname = `/:${tenant}${cockpitEndpointUrl.pathname}`;
177
+ }
178
+ const fetchResult = await fetchData(cockpitEndpointUrl, {
179
+ method: "POST",
180
+ headers: { "Content-Type": "application/json" },
181
+ body: JSON.stringify({ query, variables }),
182
+ });
183
+ return fetchResult;
184
+ },
185
+
186
+ async getContentItem(
187
+ { model, id }: { model: string; id?: string },
188
+ locale = "default",
189
+ queryParams = {},
190
+ { useAdminAccess = false }: { useAdminAccess?: boolean } = {},
191
+ ) {
192
+ if (!model) throw new Error("Cockpit: Please provide a model");
193
+
194
+ const url = buildUrl(`/content/item/${model}${id ? `/${id}` : ""}`, {
195
+ locale,
196
+ queryParams,
197
+ });
198
+ return fetchData(url, { useAdminAccess });
199
+ },
200
+
201
+ async getAggregateModel({ model, pipeline }: { model: string, pipeline: any[] }, locale = "default") {
202
+ if (!model) throw new Error("Cockpit: Please provide a model");
203
+
204
+ const url = buildUrl(`/content/aggregate/${model}`, {
205
+ locale,
206
+ queryParams: {
207
+ pipeline,
208
+ },
209
+ });
210
+ return fetchData(url);
211
+ },
212
+
213
+ async getContentItems(model: string, locale = "default", queryParams: any = {}) {
214
+ if (!model) throw new Error("Cockpit: Please provide a model");
215
+ const url = buildUrl(`/content/items/${model}`, {
216
+ locale,
217
+ queryParams,
218
+ });
219
+ return fetchData(url);
220
+ },
221
+
222
+ async getContentTree(
223
+ model: string,
224
+ locale = "default",
225
+ queryParams = { filter: {} },
226
+ ) {
227
+ if (!model) throw new Error("Cockpit: Please provide a model");
228
+ const url = buildUrl(`/content/tree/${model}`, {
229
+ locale,
230
+ queryParams,
231
+ });
232
+ return fetchData(url);
233
+ },
234
+
235
+ async postContentItem(model: string, item: any) {
236
+ if (!model) throw new Error("Cockpit: Please provide a model");
237
+ const url = buildUrl(`/content/item/${model}`, {});
238
+ const result = await fetchData(url, {
239
+ method: "POST",
240
+ headers: { "Content-Type": "application/json" },
241
+ body: JSON.stringify({ data: item }),
242
+ });
243
+
244
+ return result;
245
+ },
246
+ async deleteContentItem(model: string, id?: string) {
247
+ if (!model || !id)
248
+ throw new Error("Cockpit: Please provide a model and id");
249
+ const url = buildUrl(`/content/item/${model}/${id}`, {});
250
+ const result = await fetchData(url, {
251
+ method: "DELETE",
252
+ headers: { "Content-Type": "application/json" },
253
+ });
254
+
255
+ return result;
256
+ },
257
+
258
+ async pages(locale = "default", queryParams = {}) {
259
+ const url = buildUrl("/pages/pages", {
260
+ locale,
261
+ queryParams,
262
+ });
263
+ return fetchData(url);
264
+ },
265
+
266
+ async pageById({ page, id }: { page: string; id: string }, locale = "default", queryParams = {}) {
267
+ if (!page || !id)
268
+ throw new Error("GetCockpit: Please provide a page and id");
269
+ const url = buildUrl(`/pages/page/${page}/${id}`, {
270
+ locale,
271
+ queryParams,
272
+ });
273
+ return fetchData(url);
274
+ },
275
+
276
+ async pageByRoute(route: string, locale = "default") {
277
+ const url = buildUrl("/pages/page", {
278
+ locale,
279
+ queryParams: { route },
280
+ });
281
+ return fetchData(url);
282
+ },
283
+
284
+ async pagesMenus(locale = "default") {
285
+ const url = buildUrl("/pages/menus", { locale });
286
+ return fetchData(url);
287
+ },
288
+
289
+ async pagesMenu(name: string, locale = "default") {
290
+ const url = buildUrl(`/pages/menu/${name}`, { locale });
291
+ return fetchData(url);
292
+ },
293
+
294
+ async pagesRoutes(locale = "default") {
295
+ const url = buildUrl("/pages/routes", { locale });
296
+ return fetchData(url);
297
+ },
298
+
299
+ async pagesSitemap() {
300
+ const url = buildUrl("/pages/sitemap", {});
301
+ return fetchData(url);
302
+ },
303
+ async pagesSetting(locale = "default") {
304
+ const url = buildUrl("/pages/settings", { locale });
305
+ return fetchData(url);
306
+ },
307
+ async getFullRouteForSlug(slug: string) {
308
+ const routeSlugMap =
309
+ await generateCollectionAndSingletonSlugRouteMap(tenant);
310
+ return routeSlugMap?.[slug];
311
+ },
312
+ };
313
+ };
314
+
315
+ export default CockpitAPI;
@@ -0,0 +1,24 @@
1
+ let logger = { // eslint-disable-line
2
+ log: console.log,
3
+ info: console.log,
4
+ error: console.error,
5
+ warn: console.warn,
6
+ verbose: console.debug,
7
+ };
8
+
9
+ async function loadLogger() {
10
+ try {
11
+ const { createLogger } = await import("@unchainedshop/logger");
12
+ logger = createLogger("cockpit") || logger;
13
+ } catch (e) {
14
+ // console.warn(e);
15
+ }
16
+ }
17
+
18
+ loadLogger();
19
+
20
+ const log = (...args: any) => logger.info(...args);
21
+
22
+ export { logger };
23
+
24
+ export default log;
package/src/index.ts ADDED
@@ -0,0 +1,25 @@
1
+ import {
2
+ FilterRootFields,
3
+ schemaFromExecutor,
4
+ wrapSchema,
5
+ } from "@graphql-tools/wrap";
6
+ import CockpitAPI from "./api";
7
+
8
+ async function remoteExecutor({ document, variables, context }: any) {
9
+ const cockpitSpace = context?.req?.headers?.["x-cockpit-space"];
10
+ const getCockpit = await CockpitAPI(cockpitSpace);
11
+ return getCockpit.graphQL(document, variables);
12
+ }
13
+
14
+ export const makeCockpitSchema = async () => {
15
+ const getCockpitSchema = wrapSchema({
16
+ schema: await schemaFromExecutor(remoteExecutor),
17
+ executor: remoteExecutor,
18
+ transforms: [
19
+ new FilterRootFields((operationName) => {
20
+ return operationName !== "Mutation";
21
+ }),
22
+ ],
23
+ });
24
+ return getCockpitSchema;
25
+ };
package/tsconfig.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES6",
4
+ "module": "commonjs",
5
+ "strict": true,
6
+ "esModuleInterop": true,
7
+ "skipLibCheck": true,
8
+ "forceConsistentCasingInFileNames": true,
9
+ "outDir": "./dist",
10
+ "rootDir": "./src",
11
+ "resolveJsonModule": true,
12
+ "declaration": true,
13
+ "declarationMap": true,
14
+ "sourceMap": true,
15
+ "typeRoots": ["./node_modules/@types", "./src/types"]
16
+ },
17
+ "include": ["src/**/*"],
18
+ "exclude": ["node_modules", "**/*.spec.ts"]
19
+ }
20
+