@webiny/api-headless-cms 5.34.3-beta.0 → 5.34.3-beta.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.
@@ -28,6 +28,14 @@ var _error = _interopRequireDefault(require("@webiny/error"));
28
28
  var _codeFrame = _interopRequireDefault(require("code-frame"));
29
29
 
30
30
  // @ts-ignore `code-frame` has no types
31
+ const createRequestBody = body => {
32
+ /**
33
+ * We are trusting that the body payload is correct.
34
+ * The `processRequestBody` will fail if it is not.
35
+ */
36
+ return typeof body === "string" ? JSON.parse(body) : body;
37
+ };
38
+
31
39
  const schemaList = new Map();
32
40
 
33
41
  const generateCacheKey = async args => {
@@ -80,49 +88,41 @@ const getSchema = async params => {
80
88
  const tenantId = context.tenancy.getCurrentTenant().id;
81
89
  const id = `${tenantId}#${type}#${locale.code}`;
82
90
  const cacheKey = await generateCacheKey(params);
91
+ const cachedSchema = schemaList.get(id);
83
92
 
84
- if (!schemaList.has(id)) {
85
- try {
86
- const schema = await generateSchema(params);
87
- schemaList.set(id, {
88
- key: cacheKey,
89
- schema
90
- });
91
- return schema;
92
- } catch (err) {
93
- if (!Array.isArray(err.locations)) {
94
- throw new _error.default((0, _objectSpread2.default)({}, err));
95
- }
93
+ if ((cachedSchema === null || cachedSchema === void 0 ? void 0 : cachedSchema.key) === cacheKey) {
94
+ return cachedSchema.schema;
95
+ }
96
96
 
97
- const [location] = err.locations;
97
+ try {
98
+ const schema = await generateSchema(params);
99
+ schemaList.set(id, {
100
+ key: cacheKey,
101
+ schema
102
+ });
103
+ return schema;
104
+ } catch (err) {
105
+ if (!Array.isArray(err.locations)) {
98
106
  throw new _error.default({
99
- code: "INVALID_GRAPHQL_SCHEMA",
100
107
  message: err.message,
101
- data: {
102
- invalidSegment: (0, _codeFrame.default)(err.source.body, location.line, location.column, {
103
- frameSize: 15
104
- })
105
- }
108
+ code: err.code || "INVALID_GRAPHQL_SCHEMA_LOCATIONS",
109
+ data: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, err.data || {}), {}, {
110
+ locations: err.locations
111
+ })
106
112
  });
107
113
  }
108
- }
109
- /**
110
- * Safe to cast because check was done few lines up.
111
- */
112
-
113
-
114
- const cache = schemaList.get(id);
115
114
 
116
- if (cache.key === cacheKey) {
117
- return cache.schema;
115
+ const [location] = err.locations;
116
+ throw new _error.default({
117
+ code: "INVALID_GRAPHQL_SCHEMA",
118
+ message: err.message,
119
+ data: {
120
+ invalidSegment: (0, _codeFrame.default)(err.source.body, location.line, location.column, {
121
+ frameSize: 15
122
+ })
123
+ }
124
+ });
118
125
  }
119
-
120
- const schema = await generateSchema(params);
121
- schemaList.set(id, {
122
- key: cacheKey,
123
- schema
124
- });
125
- return schema;
126
126
  };
127
127
 
128
128
  const checkEndpointAccess = async context => {
@@ -140,7 +140,7 @@ const checkEndpointAccess = async context => {
140
140
  const formatErrorPayload = error => {
141
141
  if (error instanceof _error.default) {
142
142
  return JSON.stringify({
143
- type: "WebinyError",
143
+ type: "CmsGraphQLWebinyError",
144
144
  message: error.message,
145
145
  code: error.code,
146
146
  data: error.data
@@ -175,17 +175,37 @@ const cmsRoutes = new _handler.RoutePlugin(({
175
175
  });
176
176
  }
177
177
 
178
+ let schema;
179
+
178
180
  try {
179
- const schema = await getSchema({
181
+ schema = await getSchema({
180
182
  context,
181
183
  locale: context.cms.getLocale(),
182
184
  type: context.cms.type
183
185
  });
184
- const body = request.body;
186
+ } catch (ex) {
187
+ console.log(`Error while generating the schema.`);
188
+ console.log(formatErrorPayload(ex));
189
+ throw ex;
190
+ }
191
+
192
+ let body = [];
193
+
194
+ try {
195
+ body = createRequestBody(request.body);
196
+ } catch (ex) {
197
+ console.log(`Error while creating the body request.`);
198
+ console.log(formatErrorPayload(ex));
199
+ throw ex;
200
+ }
201
+
202
+ try {
185
203
  const result = await (0, _processRequestBody.default)(body, schema, context);
186
204
  return reply.code(200).send(result);
187
205
  } catch (ex) {
188
- return reply.code(500).send(formatErrorPayload(ex));
206
+ console.log(`Error while processing the body request.`);
207
+ console.log(formatErrorPayload(ex));
208
+ throw ex;
189
209
  }
190
210
  });
191
211
  onOptions("/cms/:type(^manage|preview|read$)/:locale", async (_, reply) => {
@@ -1 +1 @@
1
- {"version":3,"names":["schemaList","Map","generateCacheKey","args","context","locale","type","lastModelChange","cms","getModelLastChange","code","toISOString","join","generateSchema","plugins","register","buildSchemaPlugins","typeDefs","resolvers","schemaPlugins","byType","GraphQLSchemaPlugin","pl","push","schema","makeExecutableSchema","getSchema","params","tenantId","tenancy","getCurrentTenant","id","cacheKey","has","set","key","err","Array","isArray","locations","WebinyError","location","message","data","invalidSegment","codeFrame","source","body","line","column","frameSize","cache","get","checkEndpointAccess","permission","security","getPermission","NotAuthorizedError","reason","formatErrorPayload","error","JSON","stringify","name","stack","cmsRoutes","RoutePlugin","onPost","onOptions","request","reply","ex","send","getLocale","result","processRequestBody","_","status","hijack","graphQLHandlerFactory","debug","debugPlugins"],"sources":["graphQLHandlerFactory.ts"],"sourcesContent":["import { GraphQLSchema } from \"graphql\";\nimport { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { ApiEndpoint, CmsContext } from \"~/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\nimport { PluginCollection } from \"@webiny/plugins/types\";\nimport debugPlugins from \"@webiny/handler-graphql/debugPlugins\";\nimport processRequestBody from \"@webiny/handler-graphql/processRequestBody\";\nimport { buildSchemaPlugins } from \"./buildSchemaPlugins\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins\";\nimport { GraphQLRequestBody } from \"@webiny/handler-graphql/types\";\nimport { RoutePlugin } from \"@webiny/handler\";\nimport WebinyError from \"@webiny/error\";\n// @ts-ignore `code-frame` has no types\nimport codeFrame from \"code-frame\";\n\ninterface SchemaCache {\n key: string;\n schema: GraphQLSchema;\n}\ninterface GetSchemaParams {\n context: CmsContext;\n type: ApiEndpoint;\n locale: I18NLocale;\n}\n\nconst schemaList = new Map<string, SchemaCache>();\n\nconst generateCacheKey = async (args: GetSchemaParams): Promise<string> => {\n const { context, locale, type } = args;\n const lastModelChange = await context.cms.getModelLastChange();\n return [locale.code, type, lastModelChange.toISOString()].join(\"#\");\n};\n\nconst generateSchema = async (args: GetSchemaParams): Promise<GraphQLSchema> => {\n const { context } = args;\n\n context.plugins.register(await buildSchemaPlugins(context));\n /**\n * Really hard to type this to satisfy the makeExecutableSchema\n */\n // TODO @ts-refactor\n const typeDefs: any = [];\n const resolvers: any = [];\n\n // Get schema definitions from plugins\n const schemaPlugins = context.plugins.byType<GraphQLSchemaPlugin>(GraphQLSchemaPlugin.type);\n for (const pl of schemaPlugins) {\n typeDefs.push(pl.schema.typeDefs);\n resolvers.push(pl.schema.resolvers);\n }\n\n return makeExecutableSchema({\n typeDefs,\n resolvers\n });\n};\n\n/**\n * Gets an existing schema or rewrites existing one or creates a completely new one\n * depending on the schemaId created from type and locale parameters\n */\nconst getSchema = async (params: GetSchemaParams): Promise<GraphQLSchema> => {\n const { context, type, locale } = params;\n const tenantId = context.tenancy.getCurrentTenant().id;\n const id = `${tenantId}#${type}#${locale.code}`;\n\n const cacheKey = await generateCacheKey(params);\n if (!schemaList.has(id)) {\n try {\n const schema = await generateSchema(params);\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n } catch (err) {\n if (!Array.isArray(err.locations)) {\n throw new WebinyError({\n ...err\n });\n }\n const [location] = err.locations;\n\n throw new WebinyError({\n code: \"INVALID_GRAPHQL_SCHEMA\",\n message: err.message,\n data: {\n invalidSegment: codeFrame(err.source.body, location.line, location.column, {\n frameSize: 15\n })\n }\n });\n }\n }\n /**\n * Safe to cast because check was done few lines up.\n */\n const cache = schemaList.get(id) as SchemaCache;\n if (cache.key === cacheKey) {\n return cache.schema;\n }\n const schema = await generateSchema(params);\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n};\n\nconst checkEndpointAccess = async (context: CmsContext): Promise<void> => {\n const permission = await context.security.getPermission(`cms.endpoint.${context.cms.type}`);\n if (!permission) {\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to access \"${context.cms.type}\" endpoint.`\n }\n });\n }\n};\n\nconst formatErrorPayload = (error: Error): string => {\n if (error instanceof WebinyError) {\n return JSON.stringify({\n type: \"WebinyError\",\n message: error.message,\n code: error.code,\n data: error.data\n });\n }\n\n return JSON.stringify({\n type: \"Error\",\n name: error.name,\n message: error.message,\n stack: error.stack\n });\n};\n\nexport interface GraphQLHandlerFactoryParams {\n debug?: boolean;\n}\n\nconst cmsRoutes = new RoutePlugin<CmsContext>(({ onPost, onOptions, context }) => {\n onPost(\"/cms/:type(^manage|preview|read$)/:locale\", async (request, reply) => {\n try {\n await checkEndpointAccess(context);\n } catch (ex) {\n return reply.code(401).send({\n data: null,\n error: {\n message: ex.message || \"Not authorized!\",\n code: ex.code || \"SECURITY_NOT_AUTHORIZED\",\n data: ex.data || null,\n stack: null\n }\n });\n }\n\n try {\n const schema = await getSchema({\n context,\n locale: context.cms.getLocale(),\n type: context.cms.type as ApiEndpoint\n });\n const body: GraphQLRequestBody | GraphQLRequestBody[] = request.body as any;\n const result = await processRequestBody(body, schema, context);\n return reply.code(200).send(result);\n } catch (ex) {\n return reply.code(500).send(formatErrorPayload(ex));\n }\n });\n\n onOptions(\"/cms/:type(^manage|preview|read$)/:locale\", async (_, reply) => {\n return reply.status(204).send({}).hijack();\n });\n});\n\ncmsRoutes.name = \"headless-cms.graphql.route.default\";\n\nexport const graphQLHandlerFactory = ({ debug }: GraphQLHandlerFactoryParams): PluginCollection => {\n return [\n ...(debug ? debugPlugins() : []),\n cmsRoutes,\n {\n type: \"wcp-telemetry-tracker\"\n }\n ];\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["createRequestBody","body","JSON","parse","schemaList","Map","generateCacheKey","args","context","locale","type","lastModelChange","cms","getModelLastChange","code","toISOString","join","generateSchema","plugins","register","buildSchemaPlugins","typeDefs","resolvers","schemaPlugins","byType","GraphQLSchemaPlugin","pl","push","schema","makeExecutableSchema","getSchema","params","tenantId","tenancy","getCurrentTenant","id","cacheKey","cachedSchema","get","key","set","err","Array","isArray","locations","WebinyError","message","data","location","invalidSegment","codeFrame","source","line","column","frameSize","checkEndpointAccess","permission","security","getPermission","NotAuthorizedError","reason","formatErrorPayload","error","stringify","name","stack","cmsRoutes","RoutePlugin","onPost","onOptions","request","reply","ex","send","getLocale","console","log","result","processRequestBody","_","status","hijack","graphQLHandlerFactory","debug","debugPlugins"],"sources":["graphQLHandlerFactory.ts"],"sourcesContent":["import { GraphQLSchema } from \"graphql\";\nimport { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { ApiEndpoint, CmsContext } from \"~/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\nimport { PluginCollection } from \"@webiny/plugins/types\";\nimport debugPlugins from \"@webiny/handler-graphql/debugPlugins\";\nimport processRequestBody from \"@webiny/handler-graphql/processRequestBody\";\nimport { buildSchemaPlugins } from \"./buildSchemaPlugins\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins\";\nimport { GraphQLRequestBody } from \"@webiny/handler-graphql/types\";\nimport { RoutePlugin } from \"@webiny/handler\";\nimport WebinyError from \"@webiny/error\";\n// @ts-ignore `code-frame` has no types\nimport codeFrame from \"code-frame\";\n\ninterface SchemaCache {\n key: string;\n schema: GraphQLSchema;\n}\ninterface GetSchemaParams {\n context: CmsContext;\n type: ApiEndpoint;\n locale: I18NLocale;\n}\n\nconst createRequestBody = (body: unknown): GraphQLRequestBody | GraphQLRequestBody[] => {\n /**\n * We are trusting that the body payload is correct.\n * The `processRequestBody` will fail if it is not.\n */\n return typeof body === \"string\" ? JSON.parse(body) : body;\n};\n\nconst schemaList = new Map<string, SchemaCache>();\n\nconst generateCacheKey = async (args: GetSchemaParams): Promise<string> => {\n const { context, locale, type } = args;\n const lastModelChange = await context.cms.getModelLastChange();\n return [locale.code, type, lastModelChange.toISOString()].join(\"#\");\n};\n\nconst generateSchema = async (args: GetSchemaParams): Promise<GraphQLSchema> => {\n const { context } = args;\n\n context.plugins.register(await buildSchemaPlugins(context));\n /**\n * Really hard to type this to satisfy the makeExecutableSchema\n */\n // TODO @ts-refactor\n const typeDefs: any = [];\n const resolvers: any = [];\n\n // Get schema definitions from plugins\n const schemaPlugins = context.plugins.byType<GraphQLSchemaPlugin>(GraphQLSchemaPlugin.type);\n for (const pl of schemaPlugins) {\n typeDefs.push(pl.schema.typeDefs);\n resolvers.push(pl.schema.resolvers);\n }\n\n return makeExecutableSchema({\n typeDefs,\n resolvers\n });\n};\n\n/**\n * Gets an existing schema or rewrites existing one or creates a completely new one\n * depending on the schemaId created from type and locale parameters\n */\nconst getSchema = async (params: GetSchemaParams): Promise<GraphQLSchema> => {\n const { context, type, locale } = params;\n const tenantId = context.tenancy.getCurrentTenant().id;\n const id = `${tenantId}#${type}#${locale.code}`;\n\n const cacheKey = await generateCacheKey(params);\n const cachedSchema = schemaList.get(id);\n if (cachedSchema?.key === cacheKey) {\n return cachedSchema.schema;\n }\n try {\n const schema = await generateSchema(params);\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n } catch (err) {\n if (!Array.isArray(err.locations)) {\n throw new WebinyError({\n message: err.message,\n code: err.code || \"INVALID_GRAPHQL_SCHEMA_LOCATIONS\",\n data: {\n ...(err.data || {}),\n locations: err.locations\n }\n });\n }\n const [location] = err.locations;\n\n throw new WebinyError({\n code: \"INVALID_GRAPHQL_SCHEMA\",\n message: err.message,\n data: {\n invalidSegment: codeFrame(err.source.body, location.line, location.column, {\n frameSize: 15\n })\n }\n });\n }\n};\n\nconst checkEndpointAccess = async (context: CmsContext): Promise<void> => {\n const permission = await context.security.getPermission(`cms.endpoint.${context.cms.type}`);\n if (!permission) {\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to access \"${context.cms.type}\" endpoint.`\n }\n });\n }\n};\n\nconst formatErrorPayload = (error: Error): string => {\n if (error instanceof WebinyError) {\n return JSON.stringify({\n type: \"CmsGraphQLWebinyError\",\n message: error.message,\n code: error.code,\n data: error.data\n });\n }\n\n return JSON.stringify({\n type: \"Error\",\n name: error.name,\n message: error.message,\n stack: error.stack\n });\n};\n\nexport interface GraphQLHandlerFactoryParams {\n debug?: boolean;\n}\n\nconst cmsRoutes = new RoutePlugin<CmsContext>(({ onPost, onOptions, context }) => {\n onPost(\"/cms/:type(^manage|preview|read$)/:locale\", async (request, reply) => {\n try {\n await checkEndpointAccess(context);\n } catch (ex) {\n return reply.code(401).send({\n data: null,\n error: {\n message: ex.message || \"Not authorized!\",\n code: ex.code || \"SECURITY_NOT_AUTHORIZED\",\n data: ex.data || null,\n stack: null\n }\n });\n }\n\n let schema: GraphQLSchema;\n try {\n schema = await getSchema({\n context,\n locale: context.cms.getLocale(),\n type: context.cms.type as ApiEndpoint\n });\n } catch (ex) {\n console.log(`Error while generating the schema.`);\n console.log(formatErrorPayload(ex));\n throw ex;\n }\n\n let body: GraphQLRequestBody | GraphQLRequestBody[] = [];\n try {\n body = createRequestBody(request.body);\n } catch (ex) {\n console.log(`Error while creating the body request.`);\n console.log(formatErrorPayload(ex));\n throw ex;\n }\n\n try {\n const result = await processRequestBody(body, schema, context);\n return reply.code(200).send(result);\n } catch (ex) {\n console.log(`Error while processing the body request.`);\n console.log(formatErrorPayload(ex));\n throw ex;\n }\n });\n\n onOptions(\"/cms/:type(^manage|preview|read$)/:locale\", async (_, reply) => {\n return reply.status(204).send({}).hijack();\n });\n});\n\ncmsRoutes.name = \"headless-cms.graphql.route.default\";\n\nexport const graphQLHandlerFactory = ({ debug }: GraphQLHandlerFactoryParams): PluginCollection => {\n return [\n ...(debug ? debugPlugins() : []),\n cmsRoutes,\n {\n type: \"wcp-telemetry-tracker\"\n }\n ];\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms",
3
- "version": "5.34.3-beta.0",
3
+ "version": "5.34.3-beta.1",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "cms:base"
@@ -21,22 +21,22 @@
21
21
  "@babel/runtime": "7.19.0",
22
22
  "@commodo/fields": "1.1.2-beta.20",
23
23
  "@graphql-tools/schema": "7.1.5",
24
- "@webiny/api": "5.34.3-beta.0",
25
- "@webiny/api-file-manager": "5.34.3-beta.0",
26
- "@webiny/api-i18n": "5.34.3-beta.0",
27
- "@webiny/api-i18n-ddb": "5.34.3-beta.0",
28
- "@webiny/api-security": "5.34.3-beta.0",
29
- "@webiny/api-tenancy": "5.34.3-beta.0",
30
- "@webiny/api-upgrade": "5.34.3-beta.0",
31
- "@webiny/error": "5.34.3-beta.0",
32
- "@webiny/handler": "5.34.3-beta.0",
33
- "@webiny/handler-aws": "5.34.3-beta.0",
34
- "@webiny/handler-db": "5.34.3-beta.0",
35
- "@webiny/handler-graphql": "5.34.3-beta.0",
36
- "@webiny/plugins": "5.34.3-beta.0",
37
- "@webiny/pubsub": "5.34.3-beta.0",
38
- "@webiny/utils": "5.34.3-beta.0",
39
- "@webiny/validation": "5.34.3-beta.0",
24
+ "@webiny/api": "5.34.3-beta.1",
25
+ "@webiny/api-file-manager": "5.34.3-beta.1",
26
+ "@webiny/api-i18n": "5.34.3-beta.1",
27
+ "@webiny/api-i18n-ddb": "5.34.3-beta.1",
28
+ "@webiny/api-security": "5.34.3-beta.1",
29
+ "@webiny/api-tenancy": "5.34.3-beta.1",
30
+ "@webiny/api-upgrade": "5.34.3-beta.1",
31
+ "@webiny/error": "5.34.3-beta.1",
32
+ "@webiny/handler": "5.34.3-beta.1",
33
+ "@webiny/handler-aws": "5.34.3-beta.1",
34
+ "@webiny/handler-db": "5.34.3-beta.1",
35
+ "@webiny/handler-graphql": "5.34.3-beta.1",
36
+ "@webiny/plugins": "5.34.3-beta.1",
37
+ "@webiny/pubsub": "5.34.3-beta.1",
38
+ "@webiny/utils": "5.34.3-beta.1",
39
+ "@webiny/validation": "5.34.3-beta.1",
40
40
  "code-frame": "5.0.0",
41
41
  "commodo-fields-object": "1.0.6",
42
42
  "dataloader": "2.1.0",
@@ -53,11 +53,11 @@
53
53
  "@babel/cli": "^7.19.3",
54
54
  "@babel/core": "^7.19.3",
55
55
  "@babel/preset-env": "^7.19.4",
56
- "@webiny/api-security-so-ddb": "^5.34.3-beta.0",
57
- "@webiny/api-tenancy-so-ddb": "^5.34.3-beta.0",
58
- "@webiny/api-wcp": "^5.34.3-beta.0",
59
- "@webiny/cli": "^5.34.3-beta.0",
60
- "@webiny/project-utils": "^5.34.3-beta.0",
56
+ "@webiny/api-security-so-ddb": "^5.34.3-beta.1",
57
+ "@webiny/api-tenancy-so-ddb": "^5.34.3-beta.1",
58
+ "@webiny/api-wcp": "^5.34.3-beta.1",
59
+ "@webiny/cli": "^5.34.3-beta.1",
60
+ "@webiny/project-utils": "^5.34.3-beta.1",
61
61
  "apollo-graphql": "^0.9.5",
62
62
  "get-yarn-workspaces": "^1.0.2",
63
63
  "graphql": "^15.7.2",
@@ -77,5 +77,5 @@
77
77
  "build": "yarn webiny run build",
78
78
  "watch": "yarn webiny run watch"
79
79
  },
80
- "gitHead": "84d06078c5532532fdf1edf38f3d006f207aa9f7"
80
+ "gitHead": "1a098125f7fea27f610599e64cd3a82df3ff566b"
81
81
  }