@vtex/api 6.48.0 → 6.48.1-beta
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/gen/manifest.schema +0 -3
- package/lib/{clients/apps → HttpClient}/AppClient.d.ts +3 -3
- package/lib/{clients/apps → HttpClient}/AppClient.js +5 -10
- package/lib/{clients/apps → HttpClient}/AppGraphQLClient.d.ts +3 -3
- package/lib/{clients/apps → HttpClient}/AppGraphQLClient.js +5 -10
- package/lib/{clients/external → HttpClient}/ExternalClient.d.ts +3 -3
- package/lib/{clients/external → HttpClient}/ExternalClient.js +2 -9
- package/lib/HttpClient/GraphQLClient.d.ts +1 -2
- package/lib/HttpClient/GraphQLClient.js +1 -4
- package/lib/HttpClient/HttpClient.d.ts +5 -6
- package/lib/HttpClient/HttpClient.js +21 -63
- package/lib/{clients → HttpClient}/IOClient.d.ts +4 -4
- package/lib/HttpClient/IOClient.js +14 -0
- package/lib/{clients → HttpClient}/IOGraphQLClient.d.ts +4 -4
- package/lib/{clients → HttpClient}/IOGraphQLClient.js +2 -2
- package/lib/{clients/infra → HttpClient}/InfraClient.d.ts +3 -3
- package/lib/{clients/infra → HttpClient}/InfraClient.js +4 -9
- package/lib/{clients/janus → HttpClient}/JanusClient.d.ts +3 -3
- package/lib/{clients/janus → HttpClient}/JanusClient.js +3 -7
- package/lib/HttpClient/factories/index.d.ts +8 -0
- package/lib/HttpClient/factories/index.js +31 -0
- package/lib/HttpClient/index.d.ts +7 -1
- package/lib/HttpClient/index.js +7 -1
- package/lib/HttpClient/middlewares/cache.d.ts +2 -8
- package/lib/HttpClient/middlewares/cache.js +31 -120
- package/lib/HttpClient/middlewares/cancellationToken.d.ts +1 -1
- package/lib/HttpClient/middlewares/cancellationToken.js +1 -2
- package/lib/HttpClient/middlewares/memoization.js +1 -8
- package/lib/HttpClient/middlewares/metrics.js +31 -12
- package/lib/HttpClient/middlewares/recorder.d.ts +1 -1
- package/lib/HttpClient/middlewares/recorder.js +13 -16
- package/lib/HttpClient/middlewares/request.d.ts +10 -0
- package/lib/HttpClient/middlewares/request.js +87 -0
- package/lib/HttpClient/typings.d.ts +9 -43
- package/lib/IODataSource.d.ts +27 -0
- package/lib/IODataSource.js +46 -0
- package/lib/caches/LRUCache.js +1 -5
- package/lib/caches/LRUDiskCache.js +1 -5
- package/lib/clients/Apps.d.ts +84 -0
- package/lib/clients/Apps.js +326 -0
- package/lib/clients/Assets.d.ts +21 -0
- package/lib/clients/{infra/Assets.js → Assets.js} +19 -74
- package/lib/clients/Billing.d.ts +11 -0
- package/lib/clients/{apps/Billing.js → Billing.js} +3 -8
- package/lib/clients/BillingMetrics.d.ts +12 -0
- package/lib/clients/BillingMetrics.js +10 -0
- package/lib/clients/{apps/Builder.d.ts → Builder.d.ts} +11 -12
- package/lib/clients/{apps/Builder.js → Builder.js} +22 -49
- package/lib/clients/Events.d.ts +6 -0
- package/lib/clients/Events.js +19 -0
- package/lib/clients/Housekeeper.d.ts +11 -0
- package/lib/clients/Housekeeper.js +24 -0
- package/lib/clients/ID.d.ts +22 -0
- package/lib/clients/ID.js +48 -0
- package/lib/clients/IOClients.d.ts +24 -28
- package/lib/clients/IOClients.js +28 -35
- package/lib/clients/LicenseManager.d.ts +6 -0
- package/lib/clients/{janus/LicenseManager.js → LicenseManager.js} +8 -23
- package/lib/clients/Logger.d.ts +27 -0
- package/lib/clients/Logger.js +32 -0
- package/lib/clients/Messages.d.ts +18 -0
- package/lib/clients/Messages.js +20 -0
- package/lib/clients/MessagesGraphQL.d.ts +63 -0
- package/lib/clients/MessagesGraphQL.js +50 -0
- package/lib/clients/Metadata.d.ts +25 -0
- package/lib/clients/Metadata.js +53 -0
- package/lib/clients/Registry.d.ts +61 -0
- package/lib/clients/{infra/Registry.js → Registry.js} +33 -93
- package/lib/clients/Router.d.ts +33 -0
- package/lib/clients/Router.js +50 -0
- package/lib/clients/{janus/Segment.d.ts → Segment.d.ts} +11 -7
- package/lib/clients/Segment.js +69 -0
- package/lib/clients/{janus/Session.d.ts → Session.d.ts} +4 -4
- package/lib/clients/{janus/Session.js → Session.js} +13 -24
- package/lib/clients/{apps/Settings.d.ts → Settings.d.ts} +4 -5
- package/lib/clients/{apps/Settings.js → Settings.js} +20 -14
- package/lib/clients/Sphinx.d.ts +12 -0
- package/lib/clients/Sphinx.js +19 -0
- package/lib/clients/{janus/Tenant.d.ts → Tenant.d.ts} +7 -6
- package/lib/clients/Tenant.js +13 -0
- package/lib/clients/VBase.d.ts +57 -0
- package/lib/clients/VBase.js +116 -0
- package/lib/clients/Workspaces.d.ts +17 -0
- package/lib/clients/Workspaces.js +38 -0
- package/lib/clients/index.d.ts +21 -9
- package/lib/clients/index.js +21 -12
- package/lib/constants.d.ts +1 -49
- package/lib/constants.js +1 -54
- package/lib/errors/ResolverError.d.ts +1 -1
- package/lib/errors/ResolverError.js +2 -2
- package/lib/errors/ResolverWarning.d.ts +1 -1
- package/lib/errors/ResolverWarning.js +2 -2
- package/lib/index.d.ts +7 -9
- package/lib/index.js +6 -8
- package/lib/metrics/MetricsAccumulator.d.ts +18 -1
- package/lib/metrics/MetricsAccumulator.js +22 -38
- package/lib/responses.d.ts +44 -3
- package/lib/service/Runtime.d.ts +18 -0
- package/lib/service/Runtime.js +57 -0
- package/lib/service/{worker/runtime/Service.d.ts → Service.d.ts} +5 -5
- package/lib/service/{worker/runtime/Service.js → Service.js} +1 -2
- package/lib/service/events/index.d.ts +3 -0
- package/lib/service/events/index.js +21 -0
- package/lib/service/graphql/index.d.ts +7 -0
- package/lib/service/graphql/index.js +33 -0
- package/lib/service/graphql/middlewares/error.js +107 -0
- package/lib/service/graphql/middlewares/formatters.d.ts +2 -0
- package/lib/service/graphql/middlewares/formatters.js +64 -0
- package/lib/service/graphql/middlewares/query.d.ts +2 -0
- package/lib/service/graphql/middlewares/query.js +32 -0
- package/lib/service/graphql/middlewares/response.js +36 -0
- package/lib/service/graphql/middlewares/run.d.ts +4 -0
- package/lib/service/graphql/middlewares/run.js +55 -0
- package/lib/service/graphql/middlewares/schema.d.ts +2 -0
- package/lib/service/graphql/middlewares/schema.js +8 -0
- package/lib/service/graphql/middlewares/timings.d.ts +2 -0
- package/lib/service/graphql/middlewares/timings.js +10 -0
- package/lib/service/graphql/middlewares/upload.d.ts +7 -0
- package/lib/service/graphql/schema/index.d.ts +3 -0
- package/lib/service/graphql/schema/index.js +66 -0
- package/lib/service/graphql/schema/messagesLoader.d.ts +4 -0
- package/lib/service/graphql/schema/messagesLoader.js +41 -0
- package/lib/service/graphql/schema/messagesLoaderV2.d.ts +5 -0
- package/lib/service/graphql/schema/messagesLoaderV2.js +44 -0
- package/lib/service/{worker/runtime/graphql → graphql}/schema/schemaDirectives/Auth.d.ts +0 -1
- package/lib/service/{worker/runtime/graphql → graphql}/schema/schemaDirectives/Auth.js +10 -16
- package/lib/service/{worker/runtime/graphql → graphql}/schema/schemaDirectives/Sanitize.d.ts +0 -1
- package/lib/service/{worker/runtime/graphql → graphql}/schema/schemaDirectives/Sanitize.js +0 -6
- package/lib/service/{worker/runtime/graphql → graphql}/schema/schemaDirectives/SmartCacheDirective.d.ts +0 -1
- package/lib/service/{worker/runtime/graphql → graphql}/schema/schemaDirectives/SmartCacheDirective.js +3 -8
- package/lib/service/{worker/runtime/graphql/schema/schemaDirectives/TranslateTo.d.ts → graphql/schema/schemaDirectives/Translatable.d.ts} +1 -2
- package/lib/service/graphql/schema/schemaDirectives/Translatable.js +54 -0
- package/lib/service/graphql/schema/schemaDirectives/TranslatableV2.d.ts +13 -0
- package/lib/service/graphql/schema/schemaDirectives/TranslatableV2.js +67 -0
- package/lib/service/graphql/schema/schemaDirectives/index.d.ts +13 -0
- package/lib/service/graphql/schema/schemaDirectives/index.js +17 -0
- package/lib/service/graphql/schema/typeDefs/index.d.ts +16 -0
- package/lib/service/graphql/schema/typeDefs/index.js +21 -0
- package/lib/service/graphql/schema/typeDefs/ioMessage.d.ts +8 -0
- package/lib/service/graphql/schema/typeDefs/ioMessage.js +33 -0
- package/lib/service/{worker/runtime/graphql → graphql}/schema/typeDefs/sanitizedString.js +1 -5
- package/lib/service/graphql/typings.d.ts +21 -0
- package/lib/service/graphql/utils/cacheControl.d.ts +6 -0
- package/lib/service/graphql/utils/cacheControl.js +38 -0
- package/lib/service/graphql/utils/maxAgeEnum.d.ts +6 -0
- package/lib/service/graphql/utils/maxAgeEnum.js +17 -0
- package/lib/service/http/index.d.ts +3 -0
- package/lib/service/http/index.js +18 -0
- package/lib/service/http/middlewares/authTokens.d.ts +3 -0
- package/lib/service/http/middlewares/cancellationToken.d.ts +3 -0
- package/lib/service/{worker/runtime/http → http}/middlewares/cancellationToken.js +1 -2
- package/lib/service/http/middlewares/clients.d.ts +4 -0
- package/lib/service/http/middlewares/error.d.ts +3 -0
- package/lib/service/{worker/runtime/http → http}/middlewares/error.js +10 -19
- package/lib/service/{worker/runtime/http → http}/middlewares/requestStats.d.ts +3 -3
- package/lib/service/http/middlewares/setCookie.d.ts +3 -0
- package/lib/service/http/middlewares/timings.d.ts +3 -0
- package/lib/service/{worker/runtime/http → http}/middlewares/timings.js +8 -21
- package/lib/service/http/middlewares/vary.d.ts +3 -0
- package/lib/service/{worker/runtime/http → http}/middlewares/vary.js +3 -3
- package/lib/service/logger/index.d.ts +28 -2
- package/lib/service/logger/index.js +68 -5
- package/lib/service/method.d.ts +9 -0
- package/lib/service/{worker/runtime/typings.d.ts → typings.d.ts} +36 -70
- package/lib/service/utils/compose.d.ts +4 -0
- package/lib/service/{worker/runtime/utils → utils}/compose.js +2 -2
- package/lib/utils/MineWinsConflictsResolver.d.ts +4 -6
- package/lib/utils/MineWinsConflictsResolver.js +17 -34
- package/lib/utils/MineWinsConflictsResolver.test.d.ts +1 -0
- package/lib/utils/MineWinsConflictsResolver.test.js +134 -0
- package/lib/utils/app.d.ts +1 -3
- package/lib/utils/app.js +1 -3
- package/lib/utils/appsStaleIfError.d.ts +1 -1
- package/lib/utils/appsStaleIfError.js +2 -2
- package/lib/utils/billingOptions.d.ts +3 -36
- package/lib/utils/billingOptions.js +3 -7
- package/lib/utils/binding.d.ts +3 -3
- package/lib/utils/cancel.d.ts +2 -2
- package/lib/utils/cancel.js +1 -2
- package/lib/utils/log.d.ts +3 -1
- package/lib/utils/log.js +2 -2
- package/lib/utils/message.js +1 -4
- package/lib/utils/tenant.d.ts +3 -3
- package/lib/utils/time.d.ts +2 -4
- package/lib/utils/time.js +2 -9
- package/lib/utils/unhandled.d.ts +1 -0
- package/lib/{service/worker/listeners.js → utils/unhandled.js} +15 -9
- package/package.json +2 -2
- package/CHANGELOG.md +0 -1858
- package/lib/HttpClient/agents.d.ts +0 -3
- package/lib/HttpClient/agents.js +0 -24
- package/lib/HttpClient/middlewares/request/HttpAgentSingleton.d.ts +0 -11
- package/lib/HttpClient/middlewares/request/HttpAgentSingleton.js +0 -30
- package/lib/HttpClient/middlewares/request/index.d.ts +0 -18
- package/lib/HttpClient/middlewares/request/index.js +0 -84
- package/lib/HttpClient/middlewares/request/setupAxios/index.d.ts +0 -1
- package/lib/HttpClient/middlewares/request/setupAxios/index.js +0 -20
- package/lib/HttpClient/middlewares/request/setupAxios/interceptors/exponentialBackoff.d.ts +0 -2
- package/lib/HttpClient/middlewares/request/setupAxios/interceptors/exponentialBackoff.js +0 -53
- package/lib/HttpClient/middlewares/request/setupAxios/interceptors/index.d.ts +0 -2
- package/lib/HttpClient/middlewares/request/setupAxios/interceptors/index.js +0 -7
- package/lib/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.d.ts +0 -8
- package/lib/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.js +0 -53
- package/lib/HttpClient/middlewares/request/setupAxios/interceptors/tracing/spanSetup.d.ts +0 -4
- package/lib/HttpClient/middlewares/request/setupAxios/interceptors/tracing/spanSetup.js +0 -29
- package/lib/HttpClient/middlewares/tracing.d.ts +0 -15
- package/lib/HttpClient/middlewares/tracing.js +0 -56
- package/lib/clients/IOClient.js +0 -19
- package/lib/clients/apps/Billing.d.ts +0 -12
- package/lib/clients/apps/MessagesGraphQL.d.ts +0 -61
- package/lib/clients/apps/MessagesGraphQL.js +0 -121
- package/lib/clients/apps/catalogGraphQL/brand.d.ts +0 -13
- package/lib/clients/apps/catalogGraphQL/brand.js +0 -18
- package/lib/clients/apps/catalogGraphQL/category.d.ts +0 -11
- package/lib/clients/apps/catalogGraphQL/category.js +0 -16
- package/lib/clients/apps/catalogGraphQL/index.d.ts +0 -22
- package/lib/clients/apps/catalogGraphQL/index.js +0 -88
- package/lib/clients/apps/catalogGraphQL/product.d.ts +0 -25
- package/lib/clients/apps/catalogGraphQL/product.js +0 -30
- package/lib/clients/apps/catalogGraphQL/sku.d.ts +0 -26
- package/lib/clients/apps/catalogGraphQL/sku.js +0 -30
- package/lib/clients/apps/index.d.ts +0 -7
- package/lib/clients/apps/index.js +0 -12
- package/lib/clients/external/ID.d.ts +0 -23
- package/lib/clients/external/ID.js +0 -60
- package/lib/clients/external/Masterdata.d.ts +0 -94
- package/lib/clients/external/Masterdata.js +0 -224
- package/lib/clients/external/PaymentProvider.d.ts +0 -31
- package/lib/clients/external/PaymentProvider.js +0 -42
- package/lib/clients/external/index.d.ts +0 -4
- package/lib/clients/external/index.js +0 -9
- package/lib/clients/infra/Apps.d.ts +0 -88
- package/lib/clients/infra/Apps.js +0 -508
- package/lib/clients/infra/Assets.d.ts +0 -34
- package/lib/clients/infra/BillingMetrics.d.ts +0 -13
- package/lib/clients/infra/BillingMetrics.js +0 -15
- package/lib/clients/infra/Events.d.ts +0 -12
- package/lib/clients/infra/Events.js +0 -33
- package/lib/clients/infra/Housekeeper.d.ts +0 -10
- package/lib/clients/infra/Housekeeper.js +0 -30
- package/lib/clients/infra/Registry.d.ts +0 -59
- package/lib/clients/infra/Router.d.ts +0 -34
- package/lib/clients/infra/Router.js +0 -81
- package/lib/clients/infra/Sphinx.d.ts +0 -13
- package/lib/clients/infra/Sphinx.js +0 -29
- package/lib/clients/infra/VBase.d.ts +0 -60
- package/lib/clients/infra/VBase.js +0 -196
- package/lib/clients/infra/Workspaces.d.ts +0 -18
- package/lib/clients/infra/Workspaces.js +0 -65
- package/lib/clients/infra/index.d.ts +0 -11
- package/lib/clients/infra/index.js +0 -16
- package/lib/clients/janus/LicenseManager.d.ts +0 -7
- package/lib/clients/janus/Segment.js +0 -88
- package/lib/clients/janus/Tenant.js +0 -28
- package/lib/clients/janus/index.d.ts +0 -5
- package/lib/clients/janus/index.js +0 -10
- package/lib/service/index.d.ts +0 -2
- package/lib/service/index.js +0 -30
- package/lib/service/loaders.d.ts +0 -8
- package/lib/service/loaders.js +0 -54
- package/lib/service/logger/console.d.ts +0 -10
- package/lib/service/logger/console.js +0 -36
- package/lib/service/logger/logger.d.ts +0 -29
- package/lib/service/logger/logger.js +0 -61
- package/lib/service/logger/metricsLogger.d.ts +0 -40
- package/lib/service/logger/metricsLogger.js +0 -149
- package/lib/service/master.d.ts +0 -2
- package/lib/service/master.js +0 -87
- package/lib/service/metrics/requestMetricsMiddleware.d.ts +0 -2
- package/lib/service/metrics/requestMetricsMiddleware.js +0 -44
- package/lib/service/tracing/TracerSingleton.d.ts +0 -7
- package/lib/service/tracing/TracerSingleton.js +0 -48
- package/lib/service/tracing/metrics/MetricNames.d.ts +0 -60
- package/lib/service/tracing/metrics/MetricNames.js +0 -44
- package/lib/service/tracing/metrics/instruments.d.ts +0 -9
- package/lib/service/tracing/metrics/instruments.js +0 -11
- package/lib/service/tracing/metrics/measurers/EventLoopLagMeasurer.d.ts +0 -9
- package/lib/service/tracing/metrics/measurers/EventLoopLagMeasurer.js +0 -25
- package/lib/service/tracing/tracingMiddlewares.d.ts +0 -5
- package/lib/service/tracing/tracingMiddlewares.js +0 -107
- package/lib/service/worker/index.d.ts +0 -11
- package/lib/service/worker/index.js +0 -195
- package/lib/service/worker/listeners.d.ts +0 -3
- package/lib/service/worker/runtime/builtIn/handlers.d.ts +0 -4
- package/lib/service/worker/runtime/builtIn/handlers.js +0 -30
- package/lib/service/worker/runtime/builtIn/middlewares.d.ts +0 -4
- package/lib/service/worker/runtime/builtIn/middlewares.js +0 -40
- package/lib/service/worker/runtime/events/index.d.ts +0 -4
- package/lib/service/worker/runtime/events/index.js +0 -46
- package/lib/service/worker/runtime/events/middlewares/body.d.ts +0 -3
- package/lib/service/worker/runtime/events/middlewares/body.js +0 -22
- package/lib/service/worker/runtime/events/middlewares/context.d.ts +0 -3
- package/lib/service/worker/runtime/events/middlewares/context.js +0 -22
- package/lib/service/worker/runtime/events/router.d.ts +0 -2
- package/lib/service/worker/runtime/events/router.js +0 -27
- package/lib/service/worker/runtime/graphql/index.d.ts +0 -6
- package/lib/service/worker/runtime/graphql/index.js +0 -27
- package/lib/service/worker/runtime/graphql/middlewares/context.d.ts +0 -2
- package/lib/service/worker/runtime/graphql/middlewares/context.js +0 -16
- package/lib/service/worker/runtime/graphql/middlewares/error.js +0 -93
- package/lib/service/worker/runtime/graphql/middlewares/query.d.ts +0 -2
- package/lib/service/worker/runtime/graphql/middlewares/query.js +0 -52
- package/lib/service/worker/runtime/graphql/middlewares/response.js +0 -38
- package/lib/service/worker/runtime/graphql/middlewares/run.d.ts +0 -2
- package/lib/service/worker/runtime/graphql/middlewares/run.js +0 -19
- package/lib/service/worker/runtime/graphql/middlewares/updateSchema.d.ts +0 -4
- package/lib/service/worker/runtime/graphql/middlewares/updateSchema.js +0 -28
- package/lib/service/worker/runtime/graphql/middlewares/upload.d.ts +0 -4
- package/lib/service/worker/runtime/graphql/schema/index.d.ts +0 -7
- package/lib/service/worker/runtime/graphql/schema/index.js +0 -31
- package/lib/service/worker/runtime/graphql/schema/messagesLoaderV2.d.ts +0 -6
- package/lib/service/worker/runtime/graphql/schema/messagesLoaderV2.js +0 -79
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/CacheControl.d.ts +0 -7
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/CacheControl.js +0 -37
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/Deprecated.d.ts +0 -11
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/Deprecated.js +0 -61
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/Metric.d.ts +0 -7
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/Metric.js +0 -40
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/Settings.d.ts +0 -6
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/Settings.js +0 -34
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/TranslatableV2.d.ts +0 -7
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/TranslatableV2.js +0 -39
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/TranslateTo.js +0 -33
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/index.d.ts +0 -22
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/index.js +0 -36
- package/lib/service/worker/runtime/graphql/schema/typeDefs/index.d.ts +0 -7
- package/lib/service/worker/runtime/graphql/schema/typeDefs/index.js +0 -12
- package/lib/service/worker/runtime/graphql/typings.d.ts +0 -31
- package/lib/service/worker/runtime/graphql/utils/cacheControl.d.ts +0 -1
- package/lib/service/worker/runtime/graphql/utils/cacheControl.js +0 -32
- package/lib/service/worker/runtime/graphql/utils/error.d.ts +0 -1
- package/lib/service/worker/runtime/graphql/utils/error.js +0 -76
- package/lib/service/worker/runtime/graphql/utils/translations.d.ts +0 -14
- package/lib/service/worker/runtime/graphql/utils/translations.js +0 -38
- package/lib/service/worker/runtime/http/index.d.ts +0 -5
- package/lib/service/worker/runtime/http/index.js +0 -58
- package/lib/service/worker/runtime/http/middlewares/authTokens.d.ts +0 -3
- package/lib/service/worker/runtime/http/middlewares/cancellationToken.d.ts +0 -3
- package/lib/service/worker/runtime/http/middlewares/clients.d.ts +0 -4
- package/lib/service/worker/runtime/http/middlewares/context.d.ts +0 -4
- package/lib/service/worker/runtime/http/middlewares/context.js +0 -36
- package/lib/service/worker/runtime/http/middlewares/error.d.ts +0 -2
- package/lib/service/worker/runtime/http/middlewares/rateLimit.d.ts +0 -6
- package/lib/service/worker/runtime/http/middlewares/rateLimit.js +0 -42
- package/lib/service/worker/runtime/http/middlewares/setCookie.d.ts +0 -3
- package/lib/service/worker/runtime/http/middlewares/settings.d.ts +0 -9
- package/lib/service/worker/runtime/http/middlewares/settings.js +0 -44
- package/lib/service/worker/runtime/http/middlewares/timings.d.ts +0 -3
- package/lib/service/worker/runtime/http/middlewares/vary.d.ts +0 -3
- package/lib/service/worker/runtime/http/router.d.ts +0 -2
- package/lib/service/worker/runtime/http/router.js +0 -23
- package/lib/service/worker/runtime/http/routes.d.ts +0 -19
- package/lib/service/worker/runtime/http/routes.js +0 -12
- package/lib/service/worker/runtime/method.d.ts +0 -9
- package/lib/service/worker/runtime/statusTrack.d.ts +0 -14
- package/lib/service/worker/runtime/statusTrack.js +0 -37
- package/lib/service/worker/runtime/utils/compose.d.ts +0 -5
- package/lib/service/worker/runtime/utils/context.d.ts +0 -2
- package/lib/service/worker/runtime/utils/context.js +0 -40
- package/lib/service/worker/runtime/utils/diff.d.ts +0 -12
- package/lib/service/worker/runtime/utils/diff.js +0 -21
- package/lib/service/worker/runtime/utils/recorder.d.ts +0 -8
- package/lib/service/worker/runtime/utils/recorder.js +0 -37
- package/lib/service/worker/runtime/utils/tokenBucket.d.ts +0 -2
- package/lib/service/worker/runtime/utils/tokenBucket.js +0 -16
- package/lib/tracing/LogEvents.d.ts +0 -31
- package/lib/tracing/LogEvents.js +0 -3
- package/lib/tracing/LogFields.d.ts +0 -66
- package/lib/tracing/LogFields.js +0 -3
- package/lib/tracing/Tags.d.ts +0 -81
- package/lib/tracing/Tags.js +0 -7
- package/lib/tracing/UserLandTracer.d.ts +0 -27
- package/lib/tracing/UserLandTracer.js +0 -56
- package/lib/tracing/errorReporting/ErrorReport.d.ts +0 -31
- package/lib/tracing/errorReporting/ErrorReport.js +0 -70
- package/lib/tracing/index.d.ts +0 -9
- package/lib/tracing/index.js +0 -19
- package/lib/tracing/spanReference/SpanReferenceTypes.d.ts +0 -4
- package/lib/tracing/spanReference/SpanReferenceTypes.js +0 -7
- package/lib/tracing/spanReference/createSpanReference.d.ts +0 -3
- package/lib/tracing/spanReference/createSpanReference.js +0 -8
- package/lib/tracing/utils.d.ts +0 -13
- package/lib/tracing/utils.js +0 -40
- package/lib/utils/conflicts.mock.d.ts +0 -17
- package/lib/utils/conflicts.mock.js +0 -27
- /package/lib/service/{worker/runtime/graphql → graphql}/middlewares/error.d.ts +0 -0
- /package/lib/service/{worker/runtime/graphql → graphql}/middlewares/response.d.ts +0 -0
- /package/lib/service/{worker/runtime/graphql → graphql}/middlewares/upload.js +0 -0
- /package/lib/service/{worker/runtime/graphql → graphql}/schema/typeDefs/ioUpload.d.ts +0 -0
- /package/lib/service/{worker/runtime/graphql → graphql}/schema/typeDefs/ioUpload.js +0 -0
- /package/lib/service/{worker/runtime/graphql → graphql}/schema/typeDefs/sanitizedString.d.ts +0 -0
- /package/lib/service/{worker/runtime/graphql → graphql}/typings.js +0 -0
- /package/lib/service/{worker/runtime/utils/toArray.d.ts → graphql/utils/array.d.ts} +0 -0
- /package/lib/service/{worker/runtime/utils/toArray.js → graphql/utils/array.js} +0 -0
- /package/lib/service/{worker/runtime/graphql → graphql}/utils/pathname.d.ts +0 -0
- /package/lib/service/{worker/runtime/graphql → graphql}/utils/pathname.js +0 -0
- /package/lib/service/{worker/runtime/http → http}/middlewares/authTokens.js +0 -0
- /package/lib/service/{worker/runtime/http → http}/middlewares/clients.js +0 -0
- /package/lib/service/{worker/runtime/http → http}/middlewares/requestStats.js +0 -0
- /package/lib/service/{worker/runtime/http → http}/middlewares/setCookie.js +0 -0
- /package/lib/service/{worker/runtime/method.js → method.js} +0 -0
- /package/lib/service/{worker/runtime/typings.js → typings.js} +0 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ramda_1 = require("ramda");
|
|
4
|
+
const Logger_1 = require("../../../clients/Logger");
|
|
5
|
+
const constants_1 = require("../../../constants");
|
|
6
|
+
const RequestCancelledError_1 = require("../../../errors/RequestCancelledError");
|
|
7
|
+
const array_1 = require("../utils/array");
|
|
8
|
+
const pathname_1 = require("../utils/pathname");
|
|
9
|
+
const CACHE_CONTROL_HEADER = 'cache-control';
|
|
10
|
+
const META_HEADER = 'x-vtex-meta';
|
|
11
|
+
const ETAG_HEADER = 'etag';
|
|
12
|
+
const TWO_SECONDS_S = 2;
|
|
13
|
+
const arrayHasError = ramda_1.any(ramda_1.has('errors'));
|
|
14
|
+
const filterErrors = ramda_1.filter(ramda_1.has('errors'));
|
|
15
|
+
const chainErrors = ramda_1.chain(ramda_1.prop('errors'));
|
|
16
|
+
const hasError = ramda_1.compose(arrayHasError, array_1.toArray);
|
|
17
|
+
const parseError = ramda_1.compose(chainErrors, filterErrors, array_1.toArray);
|
|
18
|
+
const parseErrorResponse = (response) => {
|
|
19
|
+
if (hasError(response)) {
|
|
20
|
+
return parseError(response);
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
};
|
|
24
|
+
async function graphqlError(ctx, next) {
|
|
25
|
+
const { vtex: { production, route: { id, }, }, } = ctx;
|
|
26
|
+
let graphQLErrors = null;
|
|
27
|
+
try {
|
|
28
|
+
await next();
|
|
29
|
+
graphQLErrors = parseErrorResponse(ctx.graphql.graphqlResponse || {});
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
if (e.code === RequestCancelledError_1.cancelledErrorCode) {
|
|
33
|
+
ctx.status = RequestCancelledError_1.cancelledRequestStatus;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const formatError = ctx.graphql.formatters.formatError;
|
|
37
|
+
if (e.isGraphQLError) {
|
|
38
|
+
const response = JSON.parse(e.message);
|
|
39
|
+
graphQLErrors = parseError(response);
|
|
40
|
+
ctx.body = response;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
graphQLErrors = [formatError(e)];
|
|
44
|
+
ctx.body = { errors: graphQLErrors };
|
|
45
|
+
}
|
|
46
|
+
// Add response
|
|
47
|
+
ctx.status = e.statusCode || 500;
|
|
48
|
+
if (e.headers) {
|
|
49
|
+
ctx.set(e.headers);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
if (graphQLErrors) {
|
|
54
|
+
const uniqueErrors = ramda_1.uniqBy((e) => {
|
|
55
|
+
if (e.extensions.exception && e.extensions.exception.request) {
|
|
56
|
+
return e.extensions.exception.request.path;
|
|
57
|
+
}
|
|
58
|
+
return e;
|
|
59
|
+
}, graphQLErrors);
|
|
60
|
+
// Reduce size of `variables` prop in the errors.
|
|
61
|
+
ramda_1.map((e) => {
|
|
62
|
+
if (e.query && e.query.variables) {
|
|
63
|
+
const stringifiedVariables = JSON.stringify(e.query.variables);
|
|
64
|
+
e.query.variables = stringifiedVariables.length <= 1024 ? stringifiedVariables : '[variables too long]';
|
|
65
|
+
}
|
|
66
|
+
}, uniqueErrors);
|
|
67
|
+
console.error(`[node-vtex-api graphql errors] total=${graphQLErrors.length} unique=${uniqueErrors.length}`, uniqueErrors);
|
|
68
|
+
ctx.graphql.status = 'error';
|
|
69
|
+
// Do not generate etag for errors
|
|
70
|
+
ctx.remove(META_HEADER);
|
|
71
|
+
ctx.remove(ETAG_HEADER);
|
|
72
|
+
// In production errors, add two second cache
|
|
73
|
+
if (production) {
|
|
74
|
+
ctx.set(CACHE_CONTROL_HEADER, `public, max-age=${TWO_SECONDS_S}`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
ctx.set(CACHE_CONTROL_HEADER, `no-cache, no-store`);
|
|
78
|
+
}
|
|
79
|
+
// Log each error to splunk individually
|
|
80
|
+
ramda_1.forEach((err) => {
|
|
81
|
+
// Prevent logging cancellation error (it's not an error)
|
|
82
|
+
if (!err.extensions.exception || err.extensions.exception.code !== RequestCancelledError_1.cancelledErrorCode) {
|
|
83
|
+
// Add pathName to each error
|
|
84
|
+
if (err.path) {
|
|
85
|
+
err.pathName = pathname_1.generatePathName(err.path);
|
|
86
|
+
}
|
|
87
|
+
const log = Object.assign({}, err, { routeId: id });
|
|
88
|
+
// Grab level from originalError, default to "error" level.
|
|
89
|
+
let level = err.extensions.exception && err.extensions.exception.level;
|
|
90
|
+
if (!level || !(level === Logger_1.LogLevel.Error || level === Logger_1.LogLevel.Warn)) {
|
|
91
|
+
level = Logger_1.LogLevel.Error;
|
|
92
|
+
}
|
|
93
|
+
ctx.vtex.logger.log(log, level);
|
|
94
|
+
}
|
|
95
|
+
if (!constants_1.LINKED && err.extensions.exception && err.extensions.exception.sensitive) {
|
|
96
|
+
delete err.extensions.exception.sensitive;
|
|
97
|
+
}
|
|
98
|
+
}, uniqueErrors);
|
|
99
|
+
// Expose graphQLErrors with pathNames to timings middleware
|
|
100
|
+
ctx.graphql.graphQLErrors = uniqueErrors;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
ctx.graphql.status = 'success';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.graphqlError = graphqlError;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const apollo_server_errors_1 = require("apollo-server-errors");
|
|
4
|
+
const ramda_1 = require("ramda");
|
|
5
|
+
const error_1 = require("../../../utils/error");
|
|
6
|
+
const ERROR_FIELD_WHITELIST = ['message', 'path', 'stack', 'extensions', 'statusCode', 'name', 'headers', 'originalError', 'code'];
|
|
7
|
+
// formatError overrides the default option in runHttpQuery, which
|
|
8
|
+
// does not keep track of the error stack. All non-enumerable
|
|
9
|
+
// properties of Error (including stack) need to be returned
|
|
10
|
+
// explicitly, otherwise will not show up after a JSON.stringify call
|
|
11
|
+
const createFormatError = (details) => (error) => {
|
|
12
|
+
const formattedError = ramda_1.pick(ERROR_FIELD_WHITELIST, error);
|
|
13
|
+
if (!formattedError.extensions) {
|
|
14
|
+
formattedError.extensions = {
|
|
15
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (formattedError.originalError) {
|
|
19
|
+
formattedError.originalError = error_1.cleanError(formattedError.originalError);
|
|
20
|
+
if (formattedError.stack === formattedError.originalError.stack) {
|
|
21
|
+
delete formattedError.originalError.stack;
|
|
22
|
+
}
|
|
23
|
+
if (!formattedError.extensions.exception) {
|
|
24
|
+
formattedError.extensions.exception = Object.assign({ message: formattedError.originalError.message, name: formattedError.originalError.name }, ramda_1.omit(error_1.SENSITIVE_EXCEPTION_FIELDS, formattedError.originalError), { sensitive: ramda_1.pick(error_1.SENSITIVE_EXCEPTION_FIELDS, formattedError.originalError) });
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const mergedExceptions = Object.assign({}, formattedError.originalError, formattedError.extensions.exception);
|
|
28
|
+
const extendedException = Object.assign({ message: formattedError.originalError.message, name: formattedError.originalError.name }, ramda_1.omit(error_1.SENSITIVE_EXCEPTION_FIELDS, mergedExceptions), { sensitive: ramda_1.pick(error_1.SENSITIVE_EXCEPTION_FIELDS, mergedExceptions) });
|
|
29
|
+
formattedError.extensions.exception = error_1.cleanError(extendedException);
|
|
30
|
+
}
|
|
31
|
+
// Make originalError not enumerable to prevent duplicated log and response information
|
|
32
|
+
Object.defineProperty(formattedError, 'originalError', { enumerable: false });
|
|
33
|
+
}
|
|
34
|
+
Object.assign(formattedError, details);
|
|
35
|
+
return formattedError;
|
|
36
|
+
};
|
|
37
|
+
const createFormatResponse = (formatter) => (response) => {
|
|
38
|
+
const { errors = null } = response || {};
|
|
39
|
+
return Object.assign({}, response, { errors: Array.isArray(errors) ? apollo_server_errors_1.formatApolloErrors(errors, { formatter }) : undefined });
|
|
40
|
+
};
|
|
41
|
+
async function createFormatters(ctx, next) {
|
|
42
|
+
const { headers: { 'x-forwarded-host': forwardedHost, 'x-forwarded-proto': forwardedProto, 'x-vtex-platform': platform, }, vtex: { operationId, requestId, }, } = ctx;
|
|
43
|
+
// Do not log variables for file uploads
|
|
44
|
+
const variables = ctx.request.is('multipart/form-data')
|
|
45
|
+
? '[GraphQL Upload]'
|
|
46
|
+
: ctx.graphql.query && ctx.graphql.query.variables;
|
|
47
|
+
const query = Object.assign({}, ctx.graphql.query, { variables });
|
|
48
|
+
const details = {
|
|
49
|
+
forwardedHost,
|
|
50
|
+
forwardedProto,
|
|
51
|
+
operationId,
|
|
52
|
+
platform,
|
|
53
|
+
query,
|
|
54
|
+
requestId,
|
|
55
|
+
};
|
|
56
|
+
const formatError = createFormatError(details);
|
|
57
|
+
const formatResponse = createFormatResponse(formatError);
|
|
58
|
+
ctx.graphql.formatters = {
|
|
59
|
+
formatError,
|
|
60
|
+
formatResponse,
|
|
61
|
+
};
|
|
62
|
+
await next();
|
|
63
|
+
}
|
|
64
|
+
exports.createFormatters = createFormatters;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const co_body_1 = require("co-body");
|
|
4
|
+
const ramda_1 = require("ramda");
|
|
5
|
+
const url_1 = require("url");
|
|
6
|
+
const constants_1 = require("../../../constants");
|
|
7
|
+
const parseVariables = (query) => {
|
|
8
|
+
if (query && query[constants_1.BODY_HASH]) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
if (query && typeof query.variables === 'string') {
|
|
12
|
+
query.variables = JSON.parse(query.variables);
|
|
13
|
+
}
|
|
14
|
+
return query;
|
|
15
|
+
};
|
|
16
|
+
const queryFromUrl = ramda_1.compose(parseVariables, ramda_1.prop('query'), ramda_1.partialRight(url_1.parse, [true]));
|
|
17
|
+
async function parseQuery(ctx, next) {
|
|
18
|
+
const { request, req } = ctx;
|
|
19
|
+
let query;
|
|
20
|
+
if (request.is('multipart/form-data')) {
|
|
21
|
+
query = request.body;
|
|
22
|
+
}
|
|
23
|
+
else if (request.method.toUpperCase() === 'POST') {
|
|
24
|
+
query = await co_body_1.json(req);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
query = queryFromUrl(request.url) || await co_body_1.json(req);
|
|
28
|
+
}
|
|
29
|
+
ctx.graphql.query = query;
|
|
30
|
+
await next();
|
|
31
|
+
}
|
|
32
|
+
exports.parseQuery = parseQuery;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ramda_1 = require("ramda");
|
|
4
|
+
const constants_1 = require("../../../constants");
|
|
5
|
+
const cacheControl_1 = require("../utils/cacheControl");
|
|
6
|
+
const DEV_FIELDS = ['data', 'errors', 'extensions'];
|
|
7
|
+
const PROD_FIELDS = ['data', 'errors'];
|
|
8
|
+
function setVaryHeaders(ctx, scope, segment) {
|
|
9
|
+
ctx.vary(constants_1.FORWARDED_HOST_HEADER);
|
|
10
|
+
if (segment) {
|
|
11
|
+
ctx.vary(constants_1.SEGMENT_HEADER);
|
|
12
|
+
}
|
|
13
|
+
if (scope === 'private' || ctx.query.scope === 'private') {
|
|
14
|
+
ctx.vary(constants_1.SESSION_HEADER);
|
|
15
|
+
}
|
|
16
|
+
else if (ctx.vtex.sessionToken) {
|
|
17
|
+
ctx.vtex.logger.warn({
|
|
18
|
+
message: 'GraphQL resolver receiving session token without private scope',
|
|
19
|
+
userAgent: ctx.get('user-agent'),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function response(ctx, next) {
|
|
24
|
+
const { responseInit, graphqlResponse } = ctx.graphql;
|
|
25
|
+
const { production } = ctx.vtex;
|
|
26
|
+
const { maxAge = '', scope = '', segment = null, } = graphqlResponse ? cacheControl_1.cacheControl(graphqlResponse, ctx) : {};
|
|
27
|
+
const cacheControlHeader = ramda_1.reject(ramda_1.isEmpty, [maxAge, scope]).join(',');
|
|
28
|
+
ctx.set(Object.assign({}, responseInit && responseInit.headers, { 'Cache-Control': cacheControlHeader }));
|
|
29
|
+
if (ctx.method.toUpperCase() === 'GET') {
|
|
30
|
+
setVaryHeaders(ctx, scope, segment);
|
|
31
|
+
}
|
|
32
|
+
const fields = production ? PROD_FIELDS : DEV_FIELDS;
|
|
33
|
+
ctx.body = ramda_1.pick(fields, graphqlResponse);
|
|
34
|
+
await next();
|
|
35
|
+
}
|
|
36
|
+
exports.response = response;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { LRUCache } from '../../../caches';
|
|
2
|
+
import { GraphQLServiceContext } from '../typings';
|
|
3
|
+
export declare const graphqlRuntimeCacheStorage: LRUCache<string, string>;
|
|
4
|
+
export declare function run(ctx: GraphQLServiceContext, next: () => Promise<void>): Promise<void>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const apollo_server_core_1 = require("apollo-server-core");
|
|
4
|
+
const caches_1 = require("../../../caches");
|
|
5
|
+
const maxAgeEnum_1 = require("../utils/maxAgeEnum");
|
|
6
|
+
exports.graphqlRuntimeCacheStorage = new caches_1.LRUCache({
|
|
7
|
+
max: 100,
|
|
8
|
+
});
|
|
9
|
+
const persistedQueries = {
|
|
10
|
+
cache: exports.graphqlRuntimeCacheStorage,
|
|
11
|
+
};
|
|
12
|
+
const linked = !!process.env.VTEX_APP_LINK;
|
|
13
|
+
async function run(ctx, next) {
|
|
14
|
+
const { method, graphql, request, } = ctx;
|
|
15
|
+
const { dataSources, formatters, query, schema, } = graphql;
|
|
16
|
+
const { formatError, formatResponse, } = formatters;
|
|
17
|
+
// We don't want resolvers to have access to the GraphQL context,
|
|
18
|
+
// so we delete it here and restore it after execution.
|
|
19
|
+
delete ctx.graphql;
|
|
20
|
+
try {
|
|
21
|
+
const { graphqlResponse, responseInit } = await apollo_server_core_1.runHttpQuery([], {
|
|
22
|
+
method,
|
|
23
|
+
options: {
|
|
24
|
+
cacheControl: {
|
|
25
|
+
calculateHttpHeaders: true,
|
|
26
|
+
defaultMaxAge: maxAgeEnum_1.defaultMaxAgeFromCtx(ctx),
|
|
27
|
+
stripFormattedExtensions: false,
|
|
28
|
+
},
|
|
29
|
+
context: ctx,
|
|
30
|
+
dataSources,
|
|
31
|
+
debug: linked,
|
|
32
|
+
documentStore: exports.graphqlRuntimeCacheStorage,
|
|
33
|
+
formatError,
|
|
34
|
+
formatResponse,
|
|
35
|
+
parseOptions: {
|
|
36
|
+
noLocation: !linked,
|
|
37
|
+
},
|
|
38
|
+
persistedQueries,
|
|
39
|
+
schema,
|
|
40
|
+
tracing: linked,
|
|
41
|
+
},
|
|
42
|
+
query: query,
|
|
43
|
+
request,
|
|
44
|
+
});
|
|
45
|
+
ctx.graphql = graphql;
|
|
46
|
+
ctx.graphql.responseInit = responseInit;
|
|
47
|
+
ctx.graphql.graphqlResponse = JSON.parse(graphqlResponse);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
ctx.graphql = graphql;
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
await next();
|
|
54
|
+
}
|
|
55
|
+
exports.run = run;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const schema_1 = require("../schema");
|
|
4
|
+
async function injectSchema(ctx, next) {
|
|
5
|
+
ctx.graphql.schema = schema_1.makeSchema(ctx);
|
|
6
|
+
await next();
|
|
7
|
+
}
|
|
8
|
+
exports.injectSchema = injectSchema;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
async function graphqlTimings(ctx, next) {
|
|
4
|
+
const start = process.hrtime();
|
|
5
|
+
// Errors will be caught by the next middleware so we don't have to catch.
|
|
6
|
+
await next();
|
|
7
|
+
// Batch success or error metric for entire operation
|
|
8
|
+
metrics.batch(`graphql-operation-${ctx.graphql.status}`, process.hrtime(start));
|
|
9
|
+
}
|
|
10
|
+
exports.graphqlTimings = graphqlTimings;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GraphQLServiceContext } from '../typings';
|
|
2
|
+
declare module 'graphql-upload' {
|
|
3
|
+
function graphqlUploadKoa(options: ApolloUploadOptions): (ctx: GraphQLServiceContext, next: () => Promise<any>) => Promise<void>;
|
|
4
|
+
}
|
|
5
|
+
declare function graphqlUploadKoaMiddleware(ctx: GraphQLServiceContext, next: () => Promise<any>): Promise<void>;
|
|
6
|
+
export declare const upload: typeof graphqlUploadKoaMiddleware;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fs_extra_1 = require("fs-extra");
|
|
4
|
+
const graphql_tools_1 = require("graphql-tools");
|
|
5
|
+
const ramda_1 = require("ramda");
|
|
6
|
+
const messagesLoader_1 = require("./messagesLoader");
|
|
7
|
+
const schemaDirectives_1 = require("./schemaDirectives");
|
|
8
|
+
const typeDefs_1 = require("./typeDefs");
|
|
9
|
+
const cache = {
|
|
10
|
+
executableSchema: null,
|
|
11
|
+
schemaMetaData: null,
|
|
12
|
+
typeDefs: null,
|
|
13
|
+
};
|
|
14
|
+
let appTypeDefs;
|
|
15
|
+
try {
|
|
16
|
+
appTypeDefs = fs_extra_1.readFileSync('./service/schema.graphql', 'utf8');
|
|
17
|
+
// tslint:disable-next-line:no-empty
|
|
18
|
+
}
|
|
19
|
+
catch (err) { }
|
|
20
|
+
exports.makeSchema = (ctx) => {
|
|
21
|
+
const { graphql: { resolvers: appResolvers, schemaDirectives: appDirectives, }, clients: { segment }, vtex: { locale }, } = ctx;
|
|
22
|
+
if (cache.executableSchema) {
|
|
23
|
+
return cache.executableSchema;
|
|
24
|
+
}
|
|
25
|
+
const schemaMetaData = extractSchemaMetaData(appTypeDefs);
|
|
26
|
+
// The target translation locale is only necessary if this GraphQL app uses the `IOMessage` resolver.
|
|
27
|
+
const getLocaleTo = async () => {
|
|
28
|
+
if (locale) {
|
|
29
|
+
return locale;
|
|
30
|
+
}
|
|
31
|
+
const { cultureInfo } = await segment.getSegment();
|
|
32
|
+
return cultureInfo;
|
|
33
|
+
};
|
|
34
|
+
const resolverContext = {
|
|
35
|
+
getLocaleTo,
|
|
36
|
+
translationsLoader: messagesLoader_1.messagesLoader(ctx.clients),
|
|
37
|
+
};
|
|
38
|
+
const executableSchema = graphql_tools_1.makeExecutableSchema({
|
|
39
|
+
resolvers: Object.assign({}, appResolvers, typeDefs_1.nativeResolvers(resolverContext)),
|
|
40
|
+
schemaDirectives: Object.assign({}, appDirectives, schemaDirectives_1.nativeSchemaDirectives),
|
|
41
|
+
typeDefs: getOrSetTypeDefs(schemaMetaData),
|
|
42
|
+
});
|
|
43
|
+
if (isSchemaCacheable(schemaMetaData)) {
|
|
44
|
+
cache.executableSchema = executableSchema;
|
|
45
|
+
}
|
|
46
|
+
return executableSchema;
|
|
47
|
+
};
|
|
48
|
+
const getOrSetTypeDefs = (schemaMetaData) => {
|
|
49
|
+
if (!cache.typeDefs) {
|
|
50
|
+
cache.typeDefs = [
|
|
51
|
+
appTypeDefs,
|
|
52
|
+
typeDefs_1.nativeTypeDefs(schemaMetaData),
|
|
53
|
+
].join('\n\n');
|
|
54
|
+
}
|
|
55
|
+
return cache.typeDefs;
|
|
56
|
+
};
|
|
57
|
+
const hasScalar = (typeDefs) => (scalar) => new RegExp(`scalar(\\s)+${scalar}(\\s\\n)+`).test(typeDefs);
|
|
58
|
+
const extractSchemaMetaData = (typeDefs) => {
|
|
59
|
+
if (!cache.schemaMetaData) {
|
|
60
|
+
const scalars = ramda_1.keys(typeDefs_1.scalarResolversMap);
|
|
61
|
+
const scalarsPresentInSchema = ramda_1.map(hasScalar(typeDefs), scalars);
|
|
62
|
+
cache.schemaMetaData = ramda_1.zipObj(scalars, scalarsPresentInSchema);
|
|
63
|
+
}
|
|
64
|
+
return cache.schemaMetaData;
|
|
65
|
+
};
|
|
66
|
+
const isSchemaCacheable = (schemaMetaData) => !ramda_1.any(scalar => schemaMetaData[scalar], typeDefs_1.shouldNotCacheWhenSchemaHas);
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const dataloader_1 = __importDefault(require("dataloader"));
|
|
7
|
+
const ramda_1 = require("ramda");
|
|
8
|
+
const message_1 = require("../../../utils/message");
|
|
9
|
+
const sortByProvider = (indexedMessages) => ramda_1.sortBy(([_, message]) => message_1.providerFromMessage(message), indexedMessages);
|
|
10
|
+
const sortByIndex = (indexedTranslations) => ramda_1.sortBy(([index, _]) => Number(index), indexedTranslations);
|
|
11
|
+
exports.messagesLoader = (clients) => new dataloader_1.default(async (messages) => {
|
|
12
|
+
const to = messages[0].to;
|
|
13
|
+
const from = messages[0].from;
|
|
14
|
+
const indexedMessages = ramda_1.toPairs(messages);
|
|
15
|
+
const sortedIndexedMessages = sortByProvider(indexedMessages);
|
|
16
|
+
const originalIndexes = ramda_1.pluck(0, sortedIndexedMessages);
|
|
17
|
+
const sortedMessages = ramda_1.pluck(1, sortedIndexedMessages);
|
|
18
|
+
const messagesByProvider = {};
|
|
19
|
+
const indexByProvider = {};
|
|
20
|
+
sortedMessages.forEach((message, index) => {
|
|
21
|
+
const provider = message_1.providerFromMessage(message);
|
|
22
|
+
if (!messagesByProvider[provider]) {
|
|
23
|
+
messagesByProvider[provider] = [];
|
|
24
|
+
indexByProvider[provider] = [];
|
|
25
|
+
}
|
|
26
|
+
messagesByProvider[provider].push(ramda_1.pick(['id', 'content', 'description', 'behavior'], message));
|
|
27
|
+
indexByProvider[provider].push(index);
|
|
28
|
+
});
|
|
29
|
+
const messagesInput = ramda_1.compose(ramda_1.values, ramda_1.mapObjIndexed((messagesArray, provider) => ({
|
|
30
|
+
messages: ramda_1.map(message_1.removeProviderFromId, messagesArray),
|
|
31
|
+
provider,
|
|
32
|
+
})))(messagesByProvider);
|
|
33
|
+
const translations = await clients.messagesGraphQL.translate({
|
|
34
|
+
from,
|
|
35
|
+
messages: messagesInput,
|
|
36
|
+
to,
|
|
37
|
+
});
|
|
38
|
+
const indexedTranslations = ramda_1.zip(originalIndexes, translations);
|
|
39
|
+
const translationsInOriginalOrder = sortByIndex(indexedTranslations);
|
|
40
|
+
return ramda_1.pluck(1, translationsInOriginalOrder);
|
|
41
|
+
});
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import DataLoader from 'dataloader';
|
|
2
|
+
import { IOClients } from '../../../clients/IOClients';
|
|
3
|
+
import { IOMessageV2 } from './../../../clients/MessagesGraphQL';
|
|
4
|
+
export declare const messagesLoaderV2: (clients: IOClients) => DataLoader<IOMessageV2, string>;
|
|
5
|
+
export declare type MessagesLoaderV2 = ReturnType<typeof messagesLoaderV2>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const dataloader_1 = __importDefault(require("dataloader"));
|
|
7
|
+
const ramda_1 = require("ramda");
|
|
8
|
+
const sortByContentAndFrom = (indexedMessages) => ramda_1.sortBy(([_, { content, from }]) => `__from:${from}__content:${content}`, indexedMessages);
|
|
9
|
+
const sortByIndex = (indexedTranslations) => ramda_1.sortBy(([index, _]) => Number(index), indexedTranslations);
|
|
10
|
+
const indexMessagesByFrom = (messages) => messages.reduce((acc, { from, context, content, behavior }) => {
|
|
11
|
+
const lastIndexed = acc.length && acc[acc.length - 1];
|
|
12
|
+
const formatted = {
|
|
13
|
+
behavior,
|
|
14
|
+
content,
|
|
15
|
+
context,
|
|
16
|
+
};
|
|
17
|
+
if (lastIndexed && lastIndexed.from === from) {
|
|
18
|
+
lastIndexed.messages.push(formatted);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
acc.push({
|
|
22
|
+
from,
|
|
23
|
+
messages: [formatted],
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return acc;
|
|
27
|
+
}, []);
|
|
28
|
+
exports.messagesLoaderV2 = (clients) => new dataloader_1.default(async (messages) => {
|
|
29
|
+
const to = messages[0].to;
|
|
30
|
+
const indexedMessages = ramda_1.toPairs(messages);
|
|
31
|
+
const sortedIndexedMessages = sortByContentAndFrom(indexedMessages);
|
|
32
|
+
const originalIndexes = ramda_1.pluck(0, sortedIndexedMessages);
|
|
33
|
+
const sortedMessages = ramda_1.pluck(1, sortedIndexedMessages);
|
|
34
|
+
const indexedByFrom = indexMessagesByFrom(sortedMessages);
|
|
35
|
+
const depTree = ramda_1.any(ioMessage => !!ioMessage.withAppsMetaInfo, messages) ? JSON.stringify(await clients.apps.getAppsMetaInfos()) : '';
|
|
36
|
+
const translations = await clients.messagesGraphQL.translateV2({
|
|
37
|
+
depTree,
|
|
38
|
+
indexedByFrom,
|
|
39
|
+
to,
|
|
40
|
+
});
|
|
41
|
+
const indexedTranslations = ramda_1.zip(originalIndexes, translations);
|
|
42
|
+
const translationsInOriginalOrder = sortByIndex(indexedTranslations);
|
|
43
|
+
return ramda_1.pluck(1, translationsInOriginalOrder);
|
|
44
|
+
});
|
|
@@ -3,4 +3,3 @@ import { SchemaDirectiveVisitor } from 'graphql-tools';
|
|
|
3
3
|
export declare class Auth extends SchemaDirectiveVisitor {
|
|
4
4
|
visitFieldDefinition(field: GraphQLField<any, any>): void;
|
|
5
5
|
}
|
|
6
|
-
export declare const authDirectiveTypeDefs = "\ndirective @auth(\n productCode: String\n resourceCode: String\n) on FIELD_DEFINITION\n";
|
|
@@ -3,11 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
6
|
+
const apollo_server_core_1 = require("apollo-server-core");
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
8
|
const graphql_1 = require("graphql");
|
|
9
9
|
const graphql_tools_1 = require("graphql-tools");
|
|
10
|
-
async function
|
|
10
|
+
async function getUserEmail(authToken, vtexIdToken) {
|
|
11
11
|
const url = `vtexid.vtex.com.br/api/vtexid/pub/authenticated/user?authToken=${vtexIdToken}`;
|
|
12
12
|
const req = await axios_1.default.request({
|
|
13
13
|
headers: {
|
|
@@ -21,7 +21,7 @@ async function parseIdToken(authToken, vtexIdToken) {
|
|
|
21
21
|
if (!req.data) {
|
|
22
22
|
return undefined;
|
|
23
23
|
}
|
|
24
|
-
return
|
|
24
|
+
return req.data.user;
|
|
25
25
|
}
|
|
26
26
|
async function getUserCanAccessResource(authToken, account, userEmail, productCode, resourceCode) {
|
|
27
27
|
const url = `http://${account}.vtexcommercestable.com.br/api/license-manager/pvt/accounts/${account}/products/${productCode}/logins/${userEmail}/resources/${resourceCode}/granted`;
|
|
@@ -37,20 +37,20 @@ async function getUserCanAccessResource(authToken, account, userEmail, productCo
|
|
|
37
37
|
async function auth(ctx, authArgs) {
|
|
38
38
|
const vtexIdToken = ctx.cookies.get('VtexIdclientAutCookie') || ctx.get('VtexIdclientAutCookie');
|
|
39
39
|
if (!vtexIdToken) {
|
|
40
|
-
throw new
|
|
40
|
+
throw new apollo_server_core_1.ForbiddenError('VtexIdclientAutCookie not found.');
|
|
41
41
|
}
|
|
42
|
-
const
|
|
43
|
-
if (!
|
|
44
|
-
throw new
|
|
42
|
+
const userEmail = await getUserEmail(ctx.vtex.authToken, vtexIdToken);
|
|
43
|
+
if (!userEmail) {
|
|
44
|
+
throw new apollo_server_core_1.ForbiddenError('Could not find user specified by VtexIdclientAutCookie.');
|
|
45
45
|
}
|
|
46
|
-
const userCanAccessResource = await getUserCanAccessResource(ctx.vtex.authToken, ctx.vtex.account,
|
|
46
|
+
const userCanAccessResource = await getUserCanAccessResource(ctx.vtex.authToken, ctx.vtex.account, userEmail, authArgs.productCode, authArgs.resourceCode);
|
|
47
47
|
if (!userCanAccessResource) {
|
|
48
|
-
throw new
|
|
48
|
+
throw new apollo_server_core_1.ForbiddenError('User indicated by VtexIdclientAutCookie is not authorized to access the indicated resource.');
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
function parseArgs(authArgs) {
|
|
52
52
|
if (!authArgs.productCode || !authArgs.resourceCode) {
|
|
53
|
-
throw new
|
|
53
|
+
throw new apollo_server_core_1.UserInputError('Invalid auth schema directive args. Usage: @auth(productCode: String, resourceCode: String).');
|
|
54
54
|
}
|
|
55
55
|
return authArgs;
|
|
56
56
|
}
|
|
@@ -65,9 +65,3 @@ class Auth extends graphql_tools_1.SchemaDirectiveVisitor {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
exports.Auth = Auth;
|
|
68
|
-
exports.authDirectiveTypeDefs = `
|
|
69
|
-
directive @auth(
|
|
70
|
-
productCode: String
|
|
71
|
-
resourceCode: String
|
|
72
|
-
) on FIELD_DEFINITION
|
|
73
|
-
`;
|
package/lib/service/{worker/runtime/graphql → graphql}/schema/schemaDirectives/Sanitize.d.ts
RENAMED
|
@@ -6,4 +6,3 @@ export declare class SanitizeDirective extends SchemaDirectiveVisitor {
|
|
|
6
6
|
visitArgumentDefinition(argument: GraphQLArgument): void;
|
|
7
7
|
wrapType(field: any): void;
|
|
8
8
|
}
|
|
9
|
-
export declare const sanitizeDirectiveTypeDefs = "\ndirective @sanitize(\n allowHTMLTags: Boolean\n stripIgnoreTag: Boolean\n) on FIELD_DEFINITION | INPUT_FIELD_DEFINITION | ARGUMENT_DEFINITION\n";
|
|
@@ -27,9 +27,3 @@ class SanitizeDirective extends graphql_tools_1.SchemaDirectiveVisitor {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
exports.SanitizeDirective = SanitizeDirective;
|
|
30
|
-
exports.sanitizeDirectiveTypeDefs = `
|
|
31
|
-
directive @sanitize(
|
|
32
|
-
allowHTMLTags: Boolean
|
|
33
|
-
stripIgnoreTag: Boolean
|
|
34
|
-
) on FIELD_DEFINITION | INPUT_FIELD_DEFINITION | ARGUMENT_DEFINITION
|
|
35
|
-
`;
|
|
@@ -3,4 +3,3 @@ import { SchemaDirectiveVisitor } from 'graphql-tools';
|
|
|
3
3
|
export declare class SmartCacheDirective extends SchemaDirectiveVisitor {
|
|
4
4
|
visitFieldDefinition(field: GraphQLField<any, any>): void;
|
|
5
5
|
}
|
|
6
|
-
export declare const smartCacheDirectiveTypeDefs = "\ndirective @smartcache(\n maxAge: String\n) on FIELD_DEFINITION\n";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const graphql_1 = require("graphql");
|
|
4
4
|
const graphql_tools_1 = require("graphql-tools");
|
|
5
|
-
const
|
|
5
|
+
const maxAgeEnum_1 = require("../../utils/maxAgeEnum");
|
|
6
6
|
const ETAG_CONTROL_HEADER = 'x-vtex-etag-control';
|
|
7
7
|
const DEFAULT_ARGS = {
|
|
8
8
|
maxAge: undefined,
|
|
@@ -11,10 +11,10 @@ class SmartCacheDirective extends graphql_tools_1.SchemaDirectiveVisitor {
|
|
|
11
11
|
visitFieldDefinition(field) {
|
|
12
12
|
const { resolve = graphql_1.defaultFieldResolver } = field;
|
|
13
13
|
const { maxAge } = this.args || DEFAULT_ARGS;
|
|
14
|
-
const maxAgeS = maxAge &&
|
|
14
|
+
const maxAgeS = maxAge && maxAgeEnum_1.maxAgeEnums[maxAge];
|
|
15
15
|
field.resolve = (root, args, context, info) => {
|
|
16
16
|
if (maxAgeS) {
|
|
17
|
-
context.set(ETAG_CONTROL_HEADER,
|
|
17
|
+
context.set(ETAG_CONTROL_HEADER, maxAgeS);
|
|
18
18
|
}
|
|
19
19
|
context.vtex.recorder = context.state.recorder;
|
|
20
20
|
return resolve(root, args, context, info);
|
|
@@ -22,8 +22,3 @@ class SmartCacheDirective extends graphql_tools_1.SchemaDirectiveVisitor {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
exports.SmartCacheDirective = SmartCacheDirective;
|
|
25
|
-
exports.smartCacheDirectiveTypeDefs = `
|
|
26
|
-
directive @smartcache(
|
|
27
|
-
maxAge: String
|
|
28
|
-
) on FIELD_DEFINITION
|
|
29
|
-
`;
|