@getcronit/pylon 2.0.0 → 2.1.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.
@@ -1,2 +1,5 @@
1
1
  import { AuthRequireChecks } from '..';
2
- export declare function requireAuth(checks?: AuthRequireChecks): (...args: any[]) => void;
2
+ export declare function requireAuth(checks?: AuthRequireChecks): {
3
+ <T extends (...args: any[]) => any>(target: Object, propertyKey: string | symbol): void;
4
+ <T_1>(fn: T_1): T_1;
5
+ };
@@ -0,0 +1,4 @@
1
+ export declare function createDecorator(callback: (...args: any[]) => Promise<void>): {
2
+ <T extends (...args: any[]) => any>(target: Object, propertyKey: string | symbol): void;
3
+ <T_1>(fn: T_1): T_1;
4
+ };
package/dist/index.d.ts CHANGED
@@ -4,3 +4,4 @@ export { Context, Env, asyncContext, getContext, setContext } from './context.js
4
4
  export { app } from './app/index.js';
5
5
  export { graphqlHandler } from './app/handler/graphql-handler.js';
6
6
  export { getEnv } from './get-env.js';
7
+ export { createDecorator } from './create-decorator.js';
package/dist/index.js CHANGED
@@ -149,7 +149,7 @@ var resolversToGraphQLResolvers = (resolvers, configureContext) => {
149
149
  delete resolvers.Query[key];
150
150
  }
151
151
  }
152
- if (resolvers.Query) {
152
+ if (resolvers.Query && Object.keys(resolvers.Query).length > 0) {
153
153
  for (const [key, value] of Object.entries(resolvers.Query)) {
154
154
  if (!graphqlResolvers.Query) {
155
155
  graphqlResolvers.Query = {};
@@ -157,7 +157,7 @@ var resolversToGraphQLResolvers = (resolvers, configureContext) => {
157
157
  graphqlResolvers.Query[key] = rootGraphqlResolver(value);
158
158
  }
159
159
  }
160
- if (resolvers.Mutation) {
160
+ if (resolvers.Mutation && Object.keys(resolvers.Mutation).length > 0) {
161
161
  if (!graphqlResolvers.Mutation) {
162
162
  graphqlResolvers.Mutation = {};
163
163
  }
@@ -165,6 +165,19 @@ var resolversToGraphQLResolvers = (resolvers, configureContext) => {
165
165
  graphqlResolvers.Mutation[key] = rootGraphqlResolver(value);
166
166
  }
167
167
  }
168
+ if (!graphqlResolvers.Query) {
169
+ throw new Error(`At least one 'Query' resolver must be provided.
170
+
171
+ Example:
172
+
173
+ export const graphql = {
174
+ Query: {
175
+ // Define at least one query resolver here
176
+ hello: () => 'world'
177
+ }
178
+ }
179
+ `);
180
+ }
168
181
  return graphqlResolvers;
169
182
  };
170
183
 
@@ -185,13 +198,64 @@ import { HTTPException as HTTPException2 } from "hono/http-exception";
185
198
  import { env } from "hono/adapter";
186
199
  import * as Sentry2 from "@sentry/bun";
187
200
  import { existsSync, readFileSync } from "fs";
188
- import { sendFunctionEvent as sendFunctionEvent3 } from "@getcronit/pylon-telemetry";
201
+ import { sendFunctionEvent as sendFunctionEvent4 } from "@getcronit/pylon-telemetry";
189
202
 
190
203
  // src/auth/decorators/requireAuth.ts
191
- import { sendFunctionEvent as sendFunctionEvent2 } from "@getcronit/pylon-telemetry";
204
+ import { sendFunctionEvent as sendFunctionEvent3 } from "@getcronit/pylon-telemetry";
192
205
  import { HTTPException } from "hono/http-exception";
193
- function requireAuth(checks) {
206
+
207
+ // src/create-decorator.ts
208
+ import { sendFunctionEvent as sendFunctionEvent2 } from "@getcronit/pylon-telemetry";
209
+ function createDecorator(callback) {
194
210
  sendFunctionEvent2({
211
+ name: "createDecorator",
212
+ duration: 0
213
+ }).then(() => {
214
+ });
215
+ function MyDecorator(arg1, propertyKey, descriptor) {
216
+ if (descriptor) {
217
+ const originalMethod = descriptor.value;
218
+ descriptor.value = async function(...args) {
219
+ await callback(...args);
220
+ return originalMethod.apply(this, args);
221
+ };
222
+ return descriptor;
223
+ } else {
224
+ if (!descriptor) {
225
+ if (propertyKey === undefined) {
226
+ const originalFunction = arg1;
227
+ return async function(...args) {
228
+ await callback(...args);
229
+ return originalFunction(...args);
230
+ };
231
+ }
232
+ let value = arg1[propertyKey];
233
+ Object.defineProperty(arg1, propertyKey, {
234
+ get: function() {
235
+ return async function(...args) {
236
+ await callback(...args);
237
+ if (typeof value === "function") {
238
+ return value(...args);
239
+ }
240
+ return value;
241
+ };
242
+ },
243
+ set: function(newValue) {
244
+ value = newValue;
245
+ },
246
+ enumerable: true,
247
+ configurable: true
248
+ });
249
+ return;
250
+ }
251
+ }
252
+ }
253
+ return MyDecorator;
254
+ }
255
+
256
+ // src/auth/decorators/requireAuth.ts
257
+ function requireAuth(checks) {
258
+ sendFunctionEvent3({
195
259
  name: "requireAuth",
196
260
  duration: 0
197
261
  }).then(() => {
@@ -225,28 +289,10 @@ function requireAuth(checks) {
225
289
  throw e;
226
290
  }
227
291
  };
228
- return function fn(...args) {
229
- const target = args[0];
230
- const propertyKey = args[1];
231
- const descriptor = args[2];
232
- if (descriptor) {
233
- const originalMethod = descriptor.value;
234
- descriptor.value = async function(...args2) {
235
- await checkAuth(getContext());
236
- return originalMethod.apply(this, args2);
237
- };
238
- } else {
239
- Object.defineProperty(target, propertyKey, {
240
- get: async function() {
241
- await checkAuth(getContext());
242
- return this._value;
243
- },
244
- set: function(newValue) {
245
- this._value = newValue;
246
- }
247
- });
248
- }
249
- };
292
+ return createDecorator(async () => {
293
+ const ctx = getContext();
294
+ await checkAuth(ctx);
295
+ });
250
296
  }
251
297
 
252
298
  // src/auth/index.ts
@@ -388,7 +434,7 @@ var authInitialize = () => {
388
434
  }
389
435
  return next();
390
436
  });
391
- sendFunctionEvent3({
437
+ sendFunctionEvent4({
392
438
  name: "authInitialize",
393
439
  duration: 0
394
440
  }).then(() => {
@@ -396,7 +442,7 @@ var authInitialize = () => {
396
442
  return middleware;
397
443
  };
398
444
  var authRequire = (checks = {}) => {
399
- sendFunctionEvent3({
445
+ sendFunctionEvent4({
400
446
  name: "authRequire",
401
447
  duration: 0
402
448
  }).then(() => {
@@ -428,7 +474,7 @@ var authRequire = (checks = {}) => {
428
474
  }
429
475
  return next();
430
476
  };
431
- sendFunctionEvent3({
477
+ sendFunctionEvent4({
432
478
  name: "authRequire",
433
479
  duration: 0
434
480
  }).then(() => {
@@ -657,11 +703,6 @@ var useSentry = (options = {}) => {
657
703
 
658
704
  // src/app/handler/graphql-handler.ts
659
705
  var graphqlHandler = (c) => ({ typeDefs, resolvers }) => {
660
- for (const key in resolvers) {
661
- if (Object.keys(resolvers[key]).length === 0) {
662
- delete resolvers[key];
663
- }
664
- }
665
706
  resolvers = resolversToGraphQLResolvers(resolvers);
666
707
  const schema = createSchema({
667
708
  typeDefs,
@@ -712,7 +753,7 @@ var graphqlHandler = (c) => ({ typeDefs, resolvers }) => {
712
753
  return yoga;
713
754
  };
714
755
  // src/get-env.ts
715
- import { sendFunctionEvent as sendFunctionEvent4 } from "@getcronit/pylon-telemetry";
756
+ import { sendFunctionEvent as sendFunctionEvent5 } from "@getcronit/pylon-telemetry";
716
757
  function getEnv() {
717
758
  const start = Date.now();
718
759
  const skipTracing = arguments[0] === true;
@@ -723,7 +764,7 @@ function getEnv() {
723
764
  return process.env;
724
765
  } finally {
725
766
  if (!skipTracing) {
726
- sendFunctionEvent4({
767
+ sendFunctionEvent5({
727
768
  name: "getEnv",
728
769
  duration: Date.now() - start
729
770
  }).then(() => {
@@ -737,10 +778,11 @@ export {
737
778
  graphqlHandler,
738
779
  getEnv,
739
780
  getContext,
781
+ createDecorator,
740
782
  auth,
741
783
  asyncContext,
742
784
  app,
743
785
  ServiceError
744
786
  };
745
787
 
746
- //# debugId=43F06B64AB43AD6964756E2164756E21
788
+ //# debugId=52E49B7851CE472164756E2164756E21
package/dist/index.js.map CHANGED
@@ -1,18 +1,19 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/define-pylon.ts", "../src/context.ts", "../src/auth/index.ts", "../src/auth/decorators/requireAuth.ts", "../src/app/index.ts", "../src/app/handler/graphql-viewer-handler.ts", "../src/app/handler/graphql-handler.ts", "../src/app/envelop/use-sentry.ts", "../src/get-env.ts"],
3
+ "sources": ["../src/define-pylon.ts", "../src/context.ts", "../src/auth/index.ts", "../src/auth/decorators/requireAuth.ts", "../src/create-decorator.ts", "../src/app/index.ts", "../src/app/handler/graphql-viewer-handler.ts", "../src/app/handler/graphql-handler.ts", "../src/app/envelop/use-sentry.ts", "../src/get-env.ts"],
4
4
  "sourcesContent": [
5
- "import {\n GraphQLError,\n GraphQLErrorExtensions,\n GraphQLResolveInfo,\n SelectionSetNode\n} from 'graphql'\nimport {Hono as _Hono} from 'hono'\nimport * as Sentry from '@sentry/bun'\nimport consola from 'consola'\n\nimport {Context, Env, asyncContext, getContext} from './context'\n\nexport interface Resolvers {\n Query: Record<string, any>\n Mutation: Record<string, any>\n}\n\ntype FunctionWrapper = (fn: (...args: any[]) => any) => (...args: any[]) => any\n\nasync function wrapFunctionsRecursively(\n obj: any,\n wrapper: FunctionWrapper,\n that: any = null,\n selectionSet: SelectionSetNode['selections'] = []\n): Promise<any> {\n // Skip if the object is a Date object or any other special object.\n // Those objects are then handled by custom resolvers.\n if (obj === null || obj instanceof Date) {\n return obj\n }\n\n if (Array.isArray(obj)) {\n return await Promise.all(\n obj.map(async item => {\n return await wrapFunctionsRecursively(item, wrapper, that, selectionSet)\n })\n )\n } else if (typeof obj === 'function') {\n return Sentry.startSpan(\n {\n name: obj.name,\n op: 'pylon.fn'\n },\n async () => {\n // @ts-ignore\n return await wrapper.call(that, obj, selectionSet)\n }\n )\n } else if (obj instanceof Promise) {\n return await wrapFunctionsRecursively(\n await obj,\n wrapper,\n that,\n selectionSet\n )\n } else if (typeof obj === 'object') {\n const result: any = {}\n\n const fields: {\n key: string\n selectionSet: SelectionSetNode['selections']\n }[] = []\n\n that = obj\n\n for (const selection of selectionSet) {\n if (selection.kind === 'Field') {\n selection.selectionSet\n\n fields.push({\n key: selection.name.value,\n selectionSet: selection.selectionSet?.selections || []\n })\n }\n }\n\n for (const {key, selectionSet} of Object.values(fields)) {\n result[key] = await wrapFunctionsRecursively(\n obj[key],\n wrapper,\n that,\n selectionSet\n )\n }\n\n // If no fields were selected, return the original object.\n if (Object.keys(result).length === 0) {\n return obj\n }\n\n return result\n } else {\n return await obj\n }\n}\nfunction spreadFunctionArguments<T extends (...args: any[]) => any>(fn: T) {\n return (otherArgs: Record<string, any>, c: any, info: GraphQLResolveInfo) => {\n const selections = arguments[1] as SelectionSetNode['selections']\n\n let args: Record<string, any> = {}\n\n if (info) {\n const type = info.parentType\n\n const field = type.getFields()[info.fieldName]\n\n const fieldArguments = field?.args\n\n const preparedArguments = fieldArguments?.reduce(\n (acc: {[x: string]: undefined}, arg: {name: string | number}) => {\n if (otherArgs[arg.name] !== undefined) {\n acc[arg.name] = otherArgs[arg.name]\n } else {\n acc[arg.name] = undefined\n }\n\n return acc\n },\n {} as Record<string, any>\n )\n\n if (preparedArguments) {\n args = preparedArguments\n }\n } else {\n args = otherArgs\n }\n\n const orderedArgs = Object.keys(args).map(key => args[key])\n\n const that = this || {}\n\n const result = wrapFunctionsRecursively(\n fn.call(that, ...orderedArgs),\n spreadFunctionArguments,\n this,\n selections\n )\n\n return result as ReturnType<typeof fn>\n }\n}\n\n/**\n * Converts a set of resolvers into a corresponding set of GraphQL resolvers.\n * @param resolvers The original resolvers.\n * @returns The converted GraphQL resolvers.\n */\nexport const resolversToGraphQLResolvers = (\n resolvers: Resolvers,\n configureContext?: (context: Context) => Context\n): Resolvers => {\n // Define a root resolver function that maps a given resolver function or object to a GraphQL resolver.\n const rootGraphqlResolver =\n (fn: Function | object | Promise<Function> | Promise<object>) =>\n async (_: object, args: Record<string, any>, ctx: Context, info: any) => {\n return Sentry.withScope(async scope => {\n const ctx = asyncContext.getStore()\n\n if (!ctx) {\n consola.warn(\n 'Context is not defined. Make sure AsyncLocalStorage is supported in your environment.'\n )\n }\n\n const auth = ctx?.get('auth')\n\n if (auth?.active) {\n scope.setUser({\n id: auth.sub,\n username: auth.preferred_username,\n email: auth.email,\n details: auth\n })\n }\n\n // get query or mutation field\n\n const isQuery = info.operation.operation === 'query'\n const isMutation = info.operation.operation === 'mutation'\n\n if (!isQuery && !isMutation) {\n throw new Error('Only queries and mutations are supported.')\n }\n\n // Get the field metadata for the current query or mutation.\n const type = isQuery\n ? info.schema.getQueryType()\n : info.schema.getMutationType()\n\n const field = type?.getFields()[info.fieldName]\n\n // Get the list of arguments expected by the current query field.\n const fieldArguments = field?.args || []\n\n // Prepare the arguments for the resolver function call by adding any missing arguments with an undefined value.\n const preparedArguments = fieldArguments.reduce(\n (acc: {[x: string]: undefined}, arg: {name: string | number}) => {\n if (args[arg.name] !== undefined) {\n acc[arg.name] = args[arg.name]\n } else {\n acc[arg.name] = undefined\n }\n\n return acc\n },\n {} as Record<string, any>\n )\n\n // Determine the resolver function to call (either the given function or the wrappedWithContext function if it exists).\n let inner = await fn\n\n let baseSelectionSet: SelectionSetNode['selections'] = []\n\n // Find the selection set for the current field.\n for (const selection of info.operation.selectionSet.selections) {\n if (\n selection.kind === 'Field' &&\n selection.name.value === info.fieldName\n ) {\n baseSelectionSet = selection.selectionSet?.selections || []\n }\n }\n\n // Wrap the resolver function with any required middleware.\n const wrappedFn = await wrapFunctionsRecursively(\n inner,\n spreadFunctionArguments,\n this,\n baseSelectionSet\n )\n\n // Call the resolver function with the prepared arguments.\n if (typeof wrappedFn !== 'function') {\n return wrappedFn\n }\n\n return await wrappedFn(preparedArguments)\n })\n }\n\n // Convert the Query and Mutation resolvers to GraphQL resolvers.\n const graphqlResolvers = {} as Resolvers\n\n // Remove empty resolvers\n for (const key of Object.keys(resolvers.Query)) {\n if (!resolvers.Query[key]) {\n delete resolvers.Query[key]\n }\n }\n\n if (resolvers.Query) {\n for (const [key, value] of Object.entries(resolvers.Query)) {\n if (!graphqlResolvers.Query) {\n graphqlResolvers.Query = {}\n }\n\n graphqlResolvers.Query[key] = rootGraphqlResolver(\n value as Function | object\n )\n }\n }\n\n if (resolvers.Mutation) {\n if (!graphqlResolvers.Mutation) {\n graphqlResolvers.Mutation = {}\n }\n\n for (const [key, value] of Object.entries(resolvers.Mutation)) {\n graphqlResolvers.Mutation[key] = rootGraphqlResolver(\n value as Function | object\n )\n }\n }\n\n return graphqlResolvers\n}\n\nexport class ServiceError extends GraphQLError {\n extensions: GraphQLErrorExtensions\n\n constructor(\n message: string,\n extensions: {\n code: string\n statusCode: number\n details?: Record<string, any>\n },\n error?: Error\n ) {\n super(message, {\n originalError: error\n })\n this.extensions = extensions\n this.cause = error\n }\n}\n",
5
+ "import {\n GraphQLError,\n GraphQLErrorExtensions,\n GraphQLResolveInfo,\n SelectionSetNode\n} from 'graphql'\nimport {Hono as _Hono} from 'hono'\nimport * as Sentry from '@sentry/bun'\nimport consola from 'consola'\n\nimport {Context, Env, asyncContext, getContext} from './context'\n\nexport interface Resolvers {\n Query: Record<string, any>\n Mutation: Record<string, any>\n}\n\ntype FunctionWrapper = (fn: (...args: any[]) => any) => (...args: any[]) => any\n\nasync function wrapFunctionsRecursively(\n obj: any,\n wrapper: FunctionWrapper,\n that: any = null,\n selectionSet: SelectionSetNode['selections'] = []\n): Promise<any> {\n // Skip if the object is a Date object or any other special object.\n // Those objects are then handled by custom resolvers.\n if (obj === null || obj instanceof Date) {\n return obj\n }\n\n if (Array.isArray(obj)) {\n return await Promise.all(\n obj.map(async item => {\n return await wrapFunctionsRecursively(item, wrapper, that, selectionSet)\n })\n )\n } else if (typeof obj === 'function') {\n return Sentry.startSpan(\n {\n name: obj.name,\n op: 'pylon.fn'\n },\n async () => {\n // @ts-ignore\n return await wrapper.call(that, obj, selectionSet)\n }\n )\n } else if (obj instanceof Promise) {\n return await wrapFunctionsRecursively(\n await obj,\n wrapper,\n that,\n selectionSet\n )\n } else if (typeof obj === 'object') {\n const result: any = {}\n\n const fields: {\n key: string\n selectionSet: SelectionSetNode['selections']\n }[] = []\n\n that = obj\n\n for (const selection of selectionSet) {\n if (selection.kind === 'Field') {\n selection.selectionSet\n\n fields.push({\n key: selection.name.value,\n selectionSet: selection.selectionSet?.selections || []\n })\n }\n }\n\n for (const {key, selectionSet} of Object.values(fields)) {\n result[key] = await wrapFunctionsRecursively(\n obj[key],\n wrapper,\n that,\n selectionSet\n )\n }\n\n // If no fields were selected, return the original object.\n if (Object.keys(result).length === 0) {\n return obj\n }\n\n return result\n } else {\n return await obj\n }\n}\nfunction spreadFunctionArguments<T extends (...args: any[]) => any>(fn: T) {\n return (otherArgs: Record<string, any>, c: any, info: GraphQLResolveInfo) => {\n const selections = arguments[1] as SelectionSetNode['selections']\n\n let args: Record<string, any> = {}\n\n if (info) {\n const type = info.parentType\n\n const field = type.getFields()[info.fieldName]\n\n const fieldArguments = field?.args\n\n const preparedArguments = fieldArguments?.reduce(\n (acc: {[x: string]: undefined}, arg: {name: string | number}) => {\n if (otherArgs[arg.name] !== undefined) {\n acc[arg.name] = otherArgs[arg.name]\n } else {\n acc[arg.name] = undefined\n }\n\n return acc\n },\n {} as Record<string, any>\n )\n\n if (preparedArguments) {\n args = preparedArguments\n }\n } else {\n args = otherArgs\n }\n\n const orderedArgs = Object.keys(args).map(key => args[key])\n\n const that = this || {}\n\n const result = wrapFunctionsRecursively(\n fn.call(that, ...orderedArgs),\n spreadFunctionArguments,\n this,\n selections\n )\n\n return result as ReturnType<typeof fn>\n }\n}\n\n/**\n * Converts a set of resolvers into a corresponding set of GraphQL resolvers.\n * @param resolvers The original resolvers.\n * @returns The converted GraphQL resolvers.\n */\nexport const resolversToGraphQLResolvers = (\n resolvers: Resolvers,\n configureContext?: (context: Context) => Context\n): Resolvers => {\n // Define a root resolver function that maps a given resolver function or object to a GraphQL resolver.\n const rootGraphqlResolver =\n (fn: Function | object | Promise<Function> | Promise<object>) =>\n async (_: object, args: Record<string, any>, ctx: Context, info: any) => {\n return Sentry.withScope(async scope => {\n const ctx = asyncContext.getStore()\n\n if (!ctx) {\n consola.warn(\n 'Context is not defined. Make sure AsyncLocalStorage is supported in your environment.'\n )\n }\n\n const auth = ctx?.get('auth')\n\n if (auth?.active) {\n scope.setUser({\n id: auth.sub,\n username: auth.preferred_username,\n email: auth.email,\n details: auth\n })\n }\n\n // get query or mutation field\n\n const isQuery = info.operation.operation === 'query'\n const isMutation = info.operation.operation === 'mutation'\n\n if (!isQuery && !isMutation) {\n throw new Error('Only queries and mutations are supported.')\n }\n\n // Get the field metadata for the current query or mutation.\n const type = isQuery\n ? info.schema.getQueryType()\n : info.schema.getMutationType()\n\n const field = type?.getFields()[info.fieldName]\n\n // Get the list of arguments expected by the current query field.\n const fieldArguments = field?.args || []\n\n // Prepare the arguments for the resolver function call by adding any missing arguments with an undefined value.\n const preparedArguments = fieldArguments.reduce(\n (acc: {[x: string]: undefined}, arg: {name: string | number}) => {\n if (args[arg.name] !== undefined) {\n acc[arg.name] = args[arg.name]\n } else {\n acc[arg.name] = undefined\n }\n\n return acc\n },\n {} as Record<string, any>\n )\n\n // Determine the resolver function to call (either the given function or the wrappedWithContext function if it exists).\n let inner = await fn\n\n let baseSelectionSet: SelectionSetNode['selections'] = []\n\n // Find the selection set for the current field.\n for (const selection of info.operation.selectionSet.selections) {\n if (\n selection.kind === 'Field' &&\n selection.name.value === info.fieldName\n ) {\n baseSelectionSet = selection.selectionSet?.selections || []\n }\n }\n\n // Wrap the resolver function with any required middleware.\n const wrappedFn = await wrapFunctionsRecursively(\n inner,\n spreadFunctionArguments,\n this,\n baseSelectionSet\n )\n\n // Call the resolver function with the prepared arguments.\n if (typeof wrappedFn !== 'function') {\n return wrappedFn\n }\n\n return await wrappedFn(preparedArguments)\n })\n }\n\n // Convert the Query and Mutation resolvers to GraphQL resolvers.\n const graphqlResolvers = {} as Resolvers\n\n // Remove empty resolvers\n for (const key of Object.keys(resolvers.Query)) {\n if (!resolvers.Query[key]) {\n delete resolvers.Query[key]\n }\n }\n\n if (resolvers.Query && Object.keys(resolvers.Query).length > 0) {\n for (const [key, value] of Object.entries(resolvers.Query)) {\n if (!graphqlResolvers.Query) {\n graphqlResolvers.Query = {}\n }\n\n graphqlResolvers.Query[key] = rootGraphqlResolver(\n value as Function | object\n )\n }\n }\n\n if (resolvers.Mutation && Object.keys(resolvers.Mutation).length > 0) {\n if (!graphqlResolvers.Mutation) {\n graphqlResolvers.Mutation = {}\n }\n\n for (const [key, value] of Object.entries(resolvers.Mutation)) {\n graphqlResolvers.Mutation[key] = rootGraphqlResolver(\n value as Function | object\n )\n }\n }\n\n // Query root type must be provided.\n if (!graphqlResolvers.Query) {\n // Custom Error for Query root type must be provided.\n\n throw new Error(`At least one 'Query' resolver must be provided.\n\nExample:\n\nexport const graphql = {\n Query: {\n // Define at least one query resolver here\n hello: () => 'world'\n }\n}\n`)\n }\n\n return graphqlResolvers\n}\n\nexport class ServiceError extends GraphQLError {\n extensions: GraphQLErrorExtensions\n\n constructor(\n message: string,\n extensions: {\n code: string\n statusCode: number\n details?: Record<string, any>\n },\n error?: Error\n ) {\n super(message, {\n originalError: error\n })\n this.extensions = extensions\n this.cause = error\n }\n}\n",
6
6
  "import {Context as HonoContext} from 'hono'\nimport type {Toucan} from 'toucan-js'\nimport {AuthState} from './auth'\nimport {AsyncLocalStorage} from 'async_hooks'\nimport {sendFunctionEvent} from '@getcronit/pylon-telemetry'\n\nexport type Env = {\n Bindings: {\n NODE_ENV: string\n AUTH_PROJECT_ID?: string\n AUTH_KEY?: string\n AUTH_ISSUER?: string\n }\n Variables: {\n auth: AuthState\n sentry: Toucan\n }\n}\n\nexport type Context = HonoContext<Env, string, {}>\n\nexport const asyncContext = new AsyncLocalStorage<Context>()\n\nexport const getContext = () => {\n const start = Date.now()\n const ctx = asyncContext.getStore()\n\n sendFunctionEvent({\n name: 'getContext',\n duration: Date.now() - start\n }).then(() => {})\n\n if (!ctx) {\n throw new Error('Context not defined')\n }\n\n return ctx\n}\n\nexport const setContext = (context: Context) => {\n return asyncContext.enterWith(context)\n}\n",
7
7
  "import {MiddlewareHandler} from 'hono'\nimport jwt from 'jsonwebtoken'\nimport type {IdTokenClaims, IntrospectionResponse} from 'openid-client'\nimport path from 'path'\nimport {HTTPException} from 'hono/http-exception'\nimport {StatusCode} from 'hono/utils/http-status'\nimport {env} from 'hono/adapter'\nimport * as Sentry from '@sentry/bun'\nimport {existsSync, readFileSync} from 'fs'\nimport {sendFunctionEvent} from '@getcronit/pylon-telemetry'\n\nexport type AuthState = IntrospectionResponse &\n IdTokenClaims & {\n roles: string[]\n }\n\nconst authInitialize = () => {\n // Load private key file from cwd\n const authKeyFilePath = path.join(process.cwd(), 'key.json')\n\n // Load private key file from cwd\n let API_PRIVATE_KEY_FILE:\n | {\n type: 'application'\n keyId: string\n key: string\n appId: string\n clientId: string\n }\n | undefined = undefined\n\n if (existsSync(authKeyFilePath)) {\n try {\n API_PRIVATE_KEY_FILE = JSON.parse(readFileSync(authKeyFilePath, 'utf-8'))\n } catch (error) {\n throw new Error(\n 'Error while reading key file. Make sure it is valid JSON'\n )\n }\n }\n\n const middleware: MiddlewareHandler<{\n Variables: {\n auth: AuthState\n }\n }> = Sentry.startSpan(\n {\n name: 'AuthMiddleware',\n op: 'auth'\n },\n () =>\n async function (ctx, next) {\n const AUTH_ISSUER = env(ctx).AUTH_ISSUER\n\n if (!AUTH_ISSUER) {\n throw new Error('AUTH_ISSUER is not set')\n }\n\n if (!API_PRIVATE_KEY_FILE) {\n // If the private key file is not loaded, try to load it from the environment\n const AUTH_KEY = env(ctx).AUTH_KEY as string | undefined\n\n API_PRIVATE_KEY_FILE = AUTH_KEY ? JSON.parse(AUTH_KEY) : undefined\n }\n\n if (!API_PRIVATE_KEY_FILE) {\n throw new Error(\n 'You have initialized the auth middleware without a private key file'\n )\n }\n\n const AUTH_PROJECT_ID = env(ctx).AUTH_PROJECT_ID\n\n const ZITADEL_INTROSPECTION_URL = `${AUTH_ISSUER}/oauth/v2/introspect`\n\n async function getRolesFromToken(tokenString: string) {\n const response = await fetch(\n `${AUTH_ISSUER}/auth/v1/usergrants/me/_search`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${tokenString}`\n }\n }\n )\n\n const data = (await response.json()) as any\n\n const userRoles = (data.result?.map((grant: any) => {\n return (grant.roles || []).map((role: any) => {\n return `${grant.projectId}:${role}`\n })\n }) || []) as string[][]\n\n const projectScopedRoles = userRoles.flat()\n\n const rolesSet = new Set(projectScopedRoles)\n\n // Add unscoped roles based on project id\n // This is useful so that it is not necessary to specify the project id for every role check\n if (AUTH_PROJECT_ID) {\n for (const role of projectScopedRoles) {\n const [projectId, ...roleNameParts] = role.split(':')\n\n const roleName = roleNameParts.join(':')\n\n if (projectId === AUTH_PROJECT_ID) {\n rolesSet.add(roleName)\n }\n }\n }\n\n return Array.from(rolesSet)\n }\n\n async function introspectToken(\n tokenString: string\n ): Promise<AuthState> {\n if (!API_PRIVATE_KEY_FILE) {\n throw new Error('Internal error: API_PRIVATE_KEY_FILE is not set')\n }\n\n // Create JWT for client assertion\n const payload = {\n iss: API_PRIVATE_KEY_FILE.clientId,\n sub: API_PRIVATE_KEY_FILE.clientId,\n aud: AUTH_ISSUER,\n exp: Math.floor(Date.now() / 1000) + 60 * 60, // Expires in 1 hour\n iat: Math.floor(Date.now() / 1000)\n }\n\n const headers = {\n alg: 'RS256',\n kid: API_PRIVATE_KEY_FILE.keyId\n }\n const jwtToken = jwt.sign(payload, API_PRIVATE_KEY_FILE.key, {\n algorithm: 'RS256',\n header: headers\n })\n\n const scopeSet = new Set<string>()\n\n scopeSet.add('openid')\n scopeSet.add('profile')\n scopeSet.add('email')\n\n if (AUTH_PROJECT_ID) {\n scopeSet.add(\n `urn:zitadel:iam:org:project:id:${AUTH_PROJECT_ID}:aud`\n )\n }\n\n const scope = Array.from(scopeSet).join(' ')\n\n // Send introspection request\n const body = new URLSearchParams({\n client_assertion_type:\n 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',\n client_assertion: jwtToken,\n token: tokenString,\n scope\n }).toString()\n\n try {\n const response = await fetch(ZITADEL_INTROSPECTION_URL, {\n method: 'POST',\n headers: {'Content-Type': 'application/x-www-form-urlencoded'},\n body\n })\n\n if (!response.ok) {\n throw new Error('Network response was not ok')\n }\n\n const tokenData = (await response.json()) as IntrospectionResponse\n\n const roles = await getRolesFromToken(tokenString)\n\n const state = {\n ...tokenData,\n roles\n } as AuthState\n\n return state\n } catch (error) {\n console.error('Error while introspecting token', error)\n throw new Error('Token introspection failed')\n }\n }\n\n let token: string | undefined = undefined\n\n if (ctx.req.header('Authorization')) {\n const authHeader = ctx.req.header('Authorization')\n\n if (authHeader) {\n const parts = authHeader.split(' ')\n\n if (parts.length === 2 && parts[0] === 'Bearer') {\n token = parts[1]\n }\n }\n }\n\n if (!token) {\n const queryToken = ctx.req.query('token')\n\n if (queryToken) {\n token = queryToken\n }\n }\n\n if (token) {\n const auth = await introspectToken(token)\n\n if (auth.active) {\n ctx.set('auth', auth)\n\n Sentry.setUser({\n id: auth.sub,\n username: auth.preferred_username,\n email: auth.email,\n details: auth\n })\n }\n }\n\n return next()\n }\n )\n\n sendFunctionEvent({\n name: 'authInitialize',\n duration: 0\n }).then(() => {})\n\n return middleware\n}\n\nexport type AuthRequireChecks = {\n roles?: string[]\n}\n\nconst authRequire = (checks: AuthRequireChecks = {}) => {\n sendFunctionEvent({\n name: 'authRequire',\n duration: 0\n }).then(() => {})\n\n const middleware: MiddlewareHandler<{\n Variables: {\n auth?: AuthState\n }\n }> = async (ctx, next) => {\n const AUTH_PROJECT_ID = env(ctx).AUTH_PROJECT_ID\n\n // Check if user is authenticated\n const auth = ctx.get('auth')\n\n if (!auth) {\n throw new HTTPException(401, {\n message: 'Authentication required'\n })\n }\n\n if (checks.roles) {\n const roles = auth.roles\n\n const hasRole = checks.roles.some(role => {\n return (\n roles.includes(role) || roles.includes(`${AUTH_PROJECT_ID}:${role}`)\n )\n })\n\n if (!hasRole) {\n const resError = new Response('Forbidden', {\n status: 403,\n statusText: 'Forbidden',\n headers: {\n 'Missing-Roles': checks.roles.join(','),\n 'Obtained-Roles': roles.join(',')\n }\n })\n\n throw new HTTPException(resError.status as StatusCode, {res: resError})\n }\n }\n\n return next()\n }\n\n sendFunctionEvent({\n name: 'authRequire',\n duration: 0\n }).then(() => {})\n\n return middleware\n}\n\nexport const auth = {\n initialize: authInitialize,\n require: authRequire\n}\n\nexport {requireAuth} from './decorators/requireAuth'\n",
8
- "import {sendFunctionEvent} from '@getcronit/pylon-telemetry'\nimport {HTTPException} from 'hono/http-exception'\n\nimport {AuthRequireChecks, auth} from '..'\nimport {getContext} from '../../context'\nimport {ServiceError} from '../../define-pylon'\n\nexport function requireAuth(checks?: AuthRequireChecks) {\n sendFunctionEvent({\n name: 'requireAuth',\n duration: 0\n }).then(() => {})\n\n const checkAuth = async (c: any) => {\n const ctx = await c\n\n try {\n await auth.require(checks)(ctx, async () => {})\n } catch (e) {\n if (e instanceof HTTPException) {\n if (e.status === 401) {\n throw new ServiceError(e.message, {\n statusCode: 401,\n code: 'AUTH_REQUIRED'\n })\n } else if (e.status === 403) {\n const res = e.getResponse()\n\n throw new ServiceError(res.statusText, {\n statusCode: res.status,\n code: 'AUTHORIZATION_REQUIRED',\n details: {\n missingRoles: res.headers.get('Missing-Roles')?.split(','),\n obtainedRoles: res.headers.get('Obtained-Roles')?.split(',')\n }\n })\n } else {\n throw e\n }\n }\n\n throw e\n }\n }\n\n return function fn(...args: any[]) {\n const target: any = args[0]\n const propertyKey: string = args[1]\n const descriptor: PropertyDescriptor = args[2]\n\n if (descriptor) {\n const originalMethod = descriptor.value\n\n descriptor.value = async function (...args: any[]) {\n await checkAuth(getContext())\n\n return originalMethod.apply(this, args)\n }\n } else {\n Object.defineProperty(target, propertyKey, {\n get: async function () {\n await checkAuth(getContext())\n\n return this._value\n },\n set: function (newValue) {\n this._value = newValue\n }\n })\n }\n }\n}\n",
8
+ "import {sendFunctionEvent} from '@getcronit/pylon-telemetry'\nimport {HTTPException} from 'hono/http-exception'\n\nimport {AuthRequireChecks, auth} from '..'\nimport {getContext} from '../../context'\nimport {ServiceError} from '../../define-pylon'\nimport {createDecorator} from '../../create-decorator'\n\nexport function requireAuth(checks?: AuthRequireChecks) {\n sendFunctionEvent({\n name: 'requireAuth',\n duration: 0\n }).then(() => {})\n\n const checkAuth = async (c: any) => {\n const ctx = await c\n\n try {\n await auth.require(checks)(ctx, async () => {})\n } catch (e) {\n if (e instanceof HTTPException) {\n if (e.status === 401) {\n throw new ServiceError(e.message, {\n statusCode: 401,\n code: 'AUTH_REQUIRED'\n })\n } else if (e.status === 403) {\n const res = e.getResponse()\n\n throw new ServiceError(res.statusText, {\n statusCode: res.status,\n code: 'AUTHORIZATION_REQUIRED',\n details: {\n missingRoles: res.headers.get('Missing-Roles')?.split(','),\n obtainedRoles: res.headers.get('Obtained-Roles')?.split(',')\n }\n })\n } else {\n throw e\n }\n }\n\n throw e\n }\n }\n\n return createDecorator(async () => {\n const ctx = getContext()\n\n await checkAuth(ctx)\n })\n}\n",
9
+ "import {sendFunctionEvent} from '@getcronit/pylon-telemetry'\n\nexport function createDecorator(callback: (...args: any[]) => Promise<void>) {\n sendFunctionEvent({\n name: 'createDecorator',\n duration: 0\n }).then(() => {})\n\n function MyDecorator<T extends (...args: any[]) => any>(\n target: Object,\n propertyKey: string | symbol\n ): void\n\n function MyDecorator<T>(fn: T): T\n\n function MyDecorator<T>(\n arg1: Object | T,\n propertyKey?: string | symbol,\n descriptor?: PropertyDescriptor\n ): any {\n if (descriptor) {\n const originalMethod = descriptor.value as T\n\n descriptor.value = async function (...args: any[]) {\n await callback(...args)\n return (originalMethod as any).apply(this, args)\n }\n\n return descriptor\n } else {\n if (!descriptor) {\n if (propertyKey === undefined) {\n const originalFunction = arg1 as T\n\n return async function (\n ...args: Parameters<any>\n ): Promise<ReturnType<any>> {\n await callback(...args)\n return (originalFunction as any)(...args)\n } as T\n }\n\n let value: any = arg1[propertyKey]\n Object.defineProperty(arg1, propertyKey, {\n get: function () {\n return async function (...args: Parameters<any>) {\n await callback(...args)\n if (typeof value === 'function') {\n return value(...args)\n }\n\n return value\n }\n },\n set: function (newValue) {\n value = newValue\n },\n enumerable: true,\n configurable: true\n })\n\n return\n }\n }\n }\n\n return MyDecorator\n}\n",
9
10
  "import {Hono} from 'hono'\nimport {logger} from 'hono/logger'\nimport {sentry} from '@hono/sentry'\n\nimport {asyncContext, Env} from '../context'\nimport {graphqlViewerHandler} from './handler/graphql-viewer-handler'\n\nexport const app = new Hono<Env>()\n\napp.use('*', sentry())\n\napp.use('*', async (c, next) => {\n return new Promise((resolve, reject) => {\n asyncContext.run(c, async () => {\n try {\n resolve(await next()) // You can pass the value you want to return here\n } catch (error) {\n reject(error) // If an error occurs during the execution of `next()`, reject the Promise\n }\n })\n })\n})\n\napp.use('*', logger())\n\napp.use((c, next) => {\n // @ts-ignore\n c.req.id = crypto.randomUUID()\n return next()\n})\n\napp.get('/viewer', graphqlViewerHandler)\n",
10
11
  "import type {MiddlewareHandler} from 'hono'\nimport {html} from 'hono/html'\n\nexport const graphqlViewerHandler: MiddlewareHandler = async (c, next) => {\n return c.html(html`\n <!DOCTYPE html>\n <html>\n <head>\n <title>Pylon Viewer</title>\n <script src=\"https://cdn.jsdelivr.net/npm/react@16/umd/react.production.min.js\"></script>\n <script src=\"https://cdn.jsdelivr.net/npm/react-dom@16/umd/react-dom.production.min.js\"></script>\n\n <link\n rel=\"stylesheet\"\n href=\"https://cdn.jsdelivr.net/npm/graphql-voyager/dist/voyager.css\"\n />\n <style>\n body {\n padding: 0;\n margin: 0;\n width: 100%;\n height: 100vh;\n overflow: hidden;\n }\n\n #voyager {\n height: 100%;\n position: relative;\n }\n }\n </style>\n <script src=\"https://cdn.jsdelivr.net/npm/graphql-voyager/dist/voyager.min.js\"></script>\n </head>\n <body>\n <div id=\"voyager\">Loading...</div>\n <script>\n function introspectionProvider(introspectionQuery) {\n // ... do a call to server using introspectionQuery provided\n // or just return pre-fetched introspection\n\n // Endpoint is current path instead of root/graphql\n const endpoint = window.location.pathname.replace(\n '/viewer',\n '/graphql'\n )\n\n return fetch(endpoint, {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({query: introspectionQuery})\n }).then(response => response.json())\n }\n\n // Render <Voyager />\n GraphQLVoyager.init(document.getElementById('voyager'), {\n introspection: introspectionProvider\n })\n </script>\n </body>\n </html>\n `)\n}\n",
11
- "import {createSchema, createYoga} from 'graphql-yoga'\nimport {GraphQLScalarType, Kind} from 'graphql'\n\nimport {useSentry} from '../envelop/use-sentry'\nimport {Context} from '../../context'\nimport {resolversToGraphQLResolvers} from '../../define-pylon'\n\nexport interface SchemaOptions {\n typeDefs: string\n resolvers: {\n Query: Record<string, any>\n Mutation: Record<string, any>\n }\n}\n\nexport const graphqlHandler =\n (c: Context) =>\n ({typeDefs, resolvers}: SchemaOptions) => {\n // Remove empty resolvers\n for (const key in resolvers) {\n if (Object.keys(resolvers[key]).length === 0) {\n delete resolvers[key]\n }\n }\n\n resolvers = resolversToGraphQLResolvers(resolvers)\n\n const schema = createSchema({\n typeDefs,\n resolvers: {\n ...resolvers,\n // Transforms a date object to a timestamp\n Date: new GraphQLScalarType({\n name: 'Date',\n description: 'Date custom scalar type',\n parseValue(value) {\n if (typeof value === 'string') {\n return new Date(value)\n }\n\n if (value instanceof Date) {\n return value // value from the client\n }\n\n throw Error(\n 'GraphQL Date Scalar parseValue expected a `Date` or string'\n )\n },\n serialize(value) {\n if (value instanceof Date) {\n return value.toISOString() // value sent to the client\n }\n\n throw Error(\n 'GraphQL Date Scalar serializer expected a `Date` object'\n )\n },\n parseLiteral(ast) {\n if (ast.kind === Kind.INT) {\n return new Date(parseInt(ast.value, 10))\n } else if (ast.kind === Kind.STRING) {\n return new Date(ast.value)\n }\n\n return null\n }\n })\n }\n })\n\n const yoga = createYoga({\n schema: schema as any,\n landingPage: false,\n plugins: [useSentry()],\n graphiql: req => {\n return {\n shouldPersistHeaders: true,\n title: 'Pylon Playground',\n defaultQuery: `# Welcome to the Pylon Playground!`\n }\n },\n context: c\n })\n\n return yoga\n }\n",
12
+ "import {createSchema, createYoga} from 'graphql-yoga'\nimport {GraphQLScalarType, Kind} from 'graphql'\n\nimport {useSentry} from '../envelop/use-sentry'\nimport {Context} from '../../context'\nimport {resolversToGraphQLResolvers} from '../../define-pylon'\n\nexport interface SchemaOptions {\n typeDefs: string\n resolvers: {\n Query: Record<string, any>\n Mutation: Record<string, any>\n }\n}\n\nexport const graphqlHandler =\n (c: Context) =>\n ({typeDefs, resolvers}: SchemaOptions) => {\n resolvers = resolversToGraphQLResolvers(resolvers)\n\n const schema = createSchema({\n typeDefs,\n resolvers: {\n ...resolvers,\n // Transforms a date object to a timestamp\n Date: new GraphQLScalarType({\n name: 'Date',\n description: 'Date custom scalar type',\n parseValue(value) {\n if (typeof value === 'string') {\n return new Date(value)\n }\n\n if (value instanceof Date) {\n return value // value from the client\n }\n\n throw Error(\n 'GraphQL Date Scalar parseValue expected a `Date` or string'\n )\n },\n serialize(value) {\n if (value instanceof Date) {\n return value.toISOString() // value sent to the client\n }\n\n throw Error(\n 'GraphQL Date Scalar serializer expected a `Date` object'\n )\n },\n parseLiteral(ast) {\n if (ast.kind === Kind.INT) {\n return new Date(parseInt(ast.value, 10))\n } else if (ast.kind === Kind.STRING) {\n return new Date(ast.value)\n }\n\n return null\n }\n })\n }\n })\n\n const yoga = createYoga({\n schema: schema as any,\n landingPage: false,\n plugins: [useSentry()],\n graphiql: req => {\n return {\n shouldPersistHeaders: true,\n title: 'Pylon Playground',\n defaultQuery: `# Welcome to the Pylon Playground!`\n }\n },\n context: c\n })\n\n return yoga\n }\n",
12
13
  "import {GraphQLError, Kind, OperationDefinitionNode, print} from 'graphql'\nimport {\n getDocumentString,\n handleStreamOrSingleExecutionResult,\n isOriginalGraphQLError,\n OnExecuteDoneHookResultOnNextHook,\n TypedExecutionArgs,\n type Plugin\n} from '@envelop/core'\nimport * as Sentry from '@sentry/node'\nimport type {Span, TraceparentData} from '@sentry/types'\n\nexport type SentryPluginOptions<PluginContext extends Record<string, any>> = {\n /**\n * Starts a new transaction for every GraphQL Operation.\n * When disabled, an already existing Transaction will be used.\n *\n * @default true\n */\n startTransaction?: boolean\n /**\n * Renames Transaction.\n * @default false\n */\n renameTransaction?: boolean\n /**\n * Adds result of each resolver and operation to Span's data (available under \"result\")\n * @default false\n */\n includeRawResult?: boolean\n /**\n * Adds operation's variables to a Scope (only in case of errors)\n * @default false\n */\n includeExecuteVariables?: boolean\n /**\n * The key of the event id in the error's extension. `null` to disable.\n * @default sentryEventId\n */\n eventIdKey?: string | null\n /**\n * Adds custom tags to every Transaction.\n */\n appendTags?: (\n args: TypedExecutionArgs<PluginContext>\n ) => Record<string, unknown>\n /**\n * Callback to set context information onto the scope.\n */\n configureScope?: (\n args: TypedExecutionArgs<PluginContext>,\n scope: Sentry.Scope\n ) => void\n /**\n * Produces a name of Transaction (only when \"renameTransaction\" or \"startTransaction\" are enabled) and description of created Span.\n *\n * @default operation's name or \"Anonymous Operation\" when missing)\n */\n transactionName?: (args: TypedExecutionArgs<PluginContext>) => string\n /**\n * Produces tracing data for Transaction\n *\n * @default is empty\n */\n traceparentData?: (\n args: TypedExecutionArgs<PluginContext>\n ) => TraceparentData | undefined\n /**\n * Produces a \"op\" (operation) of created Span.\n *\n * @default execute\n */\n operationName?: (args: TypedExecutionArgs<PluginContext>) => string\n /**\n * Indicates whether or not to skip the entire Sentry flow for given GraphQL operation.\n * By default, no operations are skipped.\n */\n skip?: (args: TypedExecutionArgs<PluginContext>) => boolean\n /**\n * Indicates whether or not to skip Sentry exception reporting for a given error.\n * By default, this plugin skips all `GraphQLError` errors and does not report it to Sentry.\n */\n skipError?: (args: Error) => boolean\n}\n\nexport const defaultSkipError = isOriginalGraphQLError\n\nexport const useSentry = <PluginContext extends Record<string, any> = {}>(\n options: SentryPluginOptions<PluginContext> = {}\n): Plugin<PluginContext> => {\n function pick<K extends keyof SentryPluginOptions<PluginContext>>(\n key: K,\n defaultValue: NonNullable<SentryPluginOptions<PluginContext>[K]>\n ) {\n return options[key] ?? defaultValue\n }\n\n const startTransaction = pick('startTransaction', true)\n const includeRawResult = pick('includeRawResult', false)\n const includeExecuteVariables = pick('includeExecuteVariables', false)\n const renameTransaction = pick('renameTransaction', false)\n const skipOperation = pick('skip', () => false)\n const skipError = pick('skipError', defaultSkipError)\n\n const eventIdKey = options.eventIdKey === null ? null : 'sentryEventId'\n\n function addEventId(err: GraphQLError, eventId: string | null): GraphQLError {\n if (eventIdKey !== null && eventId !== null) {\n err.extensions[eventIdKey] = eventId\n }\n\n return err\n }\n\n return {\n onExecute({args}) {\n if (skipOperation(args)) {\n return\n }\n\n const rootOperation = args.document.definitions.find(\n o => o.kind === Kind.OPERATION_DEFINITION\n ) as OperationDefinitionNode\n const operationType = rootOperation.operation\n\n const document = getDocumentString(args.document, print)\n\n const opName =\n args.operationName || rootOperation.name?.value || 'Anonymous Operation'\n const addedTags: Record<string, any> =\n (options.appendTags && options.appendTags(args)) || {}\n const traceparentData =\n (options.traceparentData && options.traceparentData(args)) || {}\n\n const transactionName = options.transactionName\n ? options.transactionName(args)\n : opName\n const op = options.operationName ? options.operationName(args) : 'execute'\n const tags = {\n operationName: opName,\n operation: operationType,\n ...addedTags\n }\n\n if (options.configureScope) {\n options.configureScope(args, Sentry.getCurrentScope())\n }\n\n return {\n onExecuteDone(payload) {\n const handleResult: OnExecuteDoneHookResultOnNextHook<{}> = ({\n result,\n setResult\n }) => {\n Sentry.startSpanManual(\n {\n op,\n name: opName,\n attributes: tags\n },\n span => {\n if (renameTransaction) {\n span.updateName(transactionName)\n }\n\n span.setAttribute('document', document)\n\n if (includeRawResult) {\n span.setAttribute('result', JSON.stringify(result))\n }\n\n if (result.errors && result.errors.length > 0) {\n Sentry.withScope(scope => {\n scope.setTransactionName(opName)\n scope.setTag('operation', operationType)\n scope.setTag('operationName', opName)\n scope.setExtra('document', document)\n\n scope.setTags(addedTags || {})\n\n if (includeRawResult) {\n scope.setExtra('result', result)\n }\n\n if (includeExecuteVariables) {\n scope.setExtra('variables', args.variableValues)\n }\n\n const errors = result.errors?.map(err => {\n if (skipError(err) === true) {\n return err\n }\n\n const errorPath = (err.path ?? [])\n .map((v: string | number) =>\n typeof v === 'number' ? '$index' : v\n )\n .join(' > ')\n\n if (errorPath) {\n scope.addBreadcrumb({\n category: 'execution-path',\n message: errorPath,\n level: 'debug'\n })\n }\n\n const eventId = Sentry.captureException(\n err.originalError,\n {\n fingerprint: [\n 'graphql',\n errorPath,\n opName,\n operationType\n ],\n contexts: {\n GraphQL: {\n operationName: opName,\n operationType,\n variables: args.variableValues\n }\n }\n }\n )\n\n return addEventId(err, eventId)\n })\n\n setResult({\n ...result,\n errors\n })\n })\n }\n\n span.end()\n }\n )\n }\n return handleStreamOrSingleExecutionResult(payload, handleResult)\n }\n }\n }\n }\n}\n",
13
14
  "import {sendFunctionEvent} from '@getcronit/pylon-telemetry'\nimport {asyncContext, Context} from './context'\n\nexport function getEnv() {\n const start = Date.now()\n const skipTracing = arguments[0] === true\n\n try {\n const context = asyncContext.getStore() as Context\n return context.env\n } catch {\n return process.env\n } finally {\n if (!skipTracing) {\n sendFunctionEvent({\n name: 'getEnv',\n duration: Date.now() - start\n }).then(() => {})\n }\n }\n}\n"
14
15
  ],
15
- "mappings": "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",
16
- "debugId": "43F06B64AB43AD6964756E2164756E21",
16
+ "mappings": "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",
17
+ "debugId": "52E49B7851CE472164756E2164756E21",
17
18
  "names": []
18
19
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getcronit/pylon",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,24 +1,24 @@
1
1
  {
2
- "compilerOptions": {
3
- // enable latest features
4
- "lib": ["esnext"],
5
- "module": "esnext",
6
- "target": "esnext",
7
-
8
- "moduleResolution": "node", // support `import` from `node_modules`
9
- "noImplicitAny": false,
10
- "noImplicitThis": false,
11
-
12
- "jsx": "react-jsx", // support JSX
13
- "allowJs": true, // allow importing `.js` from `.ts`
14
- "esModuleInterop": true, // allow default imports for CommonJS modules
15
-
16
- // best practices
17
- "strict": true,
18
- "forceConsistentCasingInFileNames": true,
19
- "skipLibCheck": true,
20
- "experimentalDecorators": true,
21
-
22
- }
2
+ "compilerOptions": {
3
+ // enable latest features
4
+ "lib": ["esnext"],
5
+ "module": "esnext",
6
+ "target": "esnext",
7
+
8
+ "moduleResolution": "node", // support `import` from `node_modules`
9
+ "noImplicitAny": false,
10
+ "noImplicitThis": false,
11
+
12
+ "jsx": "react-jsx", // support JSX
13
+ "allowJs": true, // allow importing `.js` from `.ts`
14
+ "esModuleInterop": true, // allow default imports for CommonJS modules
15
+
16
+ // best practices
17
+ "strict": true,
18
+ "forceConsistentCasingInFileNames": true,
19
+ "skipLibCheck": true,
20
+ "experimentalDecorators": true,
21
+ "useDefineForClassFields": false,
22
+ "emitDecoratorMetadata": true
23
23
  }
24
-
24
+ }