{"version":3,"sources":["jsdelivr-header.js","/npm/onepiece-test-gateway@0.19.1/dist/index.js"],"names":[],"mappings":"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","file":"/npm/onepiece-test-gateway@0.19.1/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/onepiece-test-gateway@0.19.1/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.buildOperationContext = exports.serializeQueryPlan = exports.executeQueryPlan = exports.buildQueryPlan = exports.ApolloGateway = exports.SERVICE_DEFINITION_QUERY = exports.HEALTH_CHECK_QUERY = exports.getDefaultGcsFetcher = exports.GCS_RETRY_COUNT = void 0;\nconst apollo_server_caching_1 = require(\"apollo-server-caching\");\nconst graphql_1 = require(\"graphql\");\nconst apollo_graphql_1 = require(\"apollo-graphql\");\nconst federation_1 = require(\"onepiece-test-federation\");\nconst loglevel_1 = __importDefault(require(\"loglevel\"));\nconst buildQueryPlan_1 = require(\"./buildQueryPlan\");\nObject.defineProperty(exports, \"buildQueryPlan\", { enumerable: true, get: function () { return buildQueryPlan_1.buildQueryPlan; } });\nObject.defineProperty(exports, \"buildOperationContext\", { enumerable: true, get: function () { return buildQueryPlan_1.buildOperationContext; } });\nconst executeQueryPlan_1 = require(\"./executeQueryPlan\");\nObject.defineProperty(exports, \"executeQueryPlan\", { enumerable: true, get: function () { return executeQueryPlan_1.executeQueryPlan; } });\nconst loadServicesFromRemoteEndpoint_1 = require(\"./loadServicesFromRemoteEndpoint\");\nconst loadServicesFromStorage_1 = require(\"./loadServicesFromStorage\");\nconst QueryPlan_1 = require(\"./QueryPlan\");\nObject.defineProperty(exports, \"serializeQueryPlan\", { enumerable: true, get: function () { return QueryPlan_1.serializeQueryPlan; } });\nconst RemoteGraphQLDataSource_1 = require(\"./datasources/RemoteGraphQLDataSource\");\nconst values_1 = require(\"graphql/execution/values\");\nconst make_fetch_happen_1 = __importDefault(require(\"make-fetch-happen\"));\nconst cache_1 = require(\"./cache\");\nfunction isLocalConfig(config) {\n    return 'localServiceList' in config;\n}\nfunction isRemoteConfig(config) {\n    return 'serviceList' in config;\n}\nfunction isManagedConfig(config) {\n    return !isRemoteConfig(config) && !isLocalConfig(config);\n}\nexports.GCS_RETRY_COUNT = 5;\nfunction getDefaultGcsFetcher() {\n    return make_fetch_happen_1.default.defaults({\n        cacheManager: new cache_1.HttpRequestCache(),\n        headers: {\n            'user-agent': `apollo-gateway/${require('../package.json').version}`,\n        },\n        retry: {\n            retries: exports.GCS_RETRY_COUNT,\n            factor: 2,\n            minTimeout: 1000,\n            randomize: true,\n        },\n    });\n}\nexports.getDefaultGcsFetcher = getDefaultGcsFetcher;\nexports.HEALTH_CHECK_QUERY = 'query __ApolloServiceHealthCheck__ { __typename }';\nexports.SERVICE_DEFINITION_QUERY = 'query __ApolloGetServiceDefinition__ { _service { sdl } }';\nclass ApolloGateway {\n    constructor(config) {\n        this.serviceMap = Object.create(null);\n        this.onSchemaChangeListeners = new Set();\n        this.serviceDefinitions = [];\n        this.serviceSdlCache = new Map();\n        this.warnedStates = Object.create(null);\n        this.fetcher = getDefaultGcsFetcher();\n        this.executor = async (requestContext) => {\n            const { request, document, queryHash } = requestContext;\n            const queryPlanStoreKey = queryHash + (request.operationName || '');\n            const operationContext = buildQueryPlan_1.buildOperationContext(this.schema, document, request.operationName);\n            const validationErrors = this.validateIncomingRequest(requestContext, operationContext);\n            if (validationErrors.length > 0) {\n                return { errors: validationErrors };\n            }\n            let queryPlan;\n            if (this.queryPlanStore) {\n                queryPlan = await this.queryPlanStore.get(queryPlanStoreKey);\n            }\n            if (!queryPlan) {\n                queryPlan = buildQueryPlan_1.buildQueryPlan(operationContext, {\n                    autoFragmentization: Boolean(this.config.experimental_autoFragmentization),\n                });\n                if (this.queryPlanStore) {\n                    Promise.resolve(this.queryPlanStore.set(queryPlanStoreKey, queryPlan)).catch(err => this.logger.warn('Could not store queryPlan' + ((err && err.message) || err)));\n                }\n            }\n            const serviceMap = Object.entries(this.serviceMap).reduce((serviceDataSources, [serviceName, { dataSource }]) => {\n                serviceDataSources[serviceName] = dataSource;\n                return serviceDataSources;\n            }, Object.create(null));\n            if (this.experimental_didResolveQueryPlan) {\n                this.experimental_didResolveQueryPlan({\n                    queryPlan,\n                    serviceMap,\n                    requestContext,\n                    operationContext,\n                });\n            }\n            const response = await executeQueryPlan_1.executeQueryPlan(queryPlan, serviceMap, requestContext, operationContext);\n            const shouldShowQueryPlan = this.config.__exposeQueryPlanExperimental &&\n                request.http &&\n                request.http.headers &&\n                request.http.headers.get('Apollo-Query-Plan-Experimental');\n            const serializedQueryPlan = queryPlan.node && (this.config.debug || shouldShowQueryPlan)\n                ? QueryPlan_1.serializeQueryPlan(queryPlan)\n                : null;\n            if (this.config.debug && serializedQueryPlan) {\n                this.logger.debug(serializedQueryPlan);\n            }\n            if (shouldShowQueryPlan) {\n                response.extensions = {\n                    __queryPlanExperimental: serializedQueryPlan || true,\n                };\n            }\n            return response;\n        };\n        this.config = {\n            __exposeQueryPlanExperimental: process.env.NODE_ENV !== 'production',\n            ...config,\n        };\n        if (this.config.logger) {\n            this.logger = this.config.logger;\n        }\n        else {\n            const loglevelLogger = loglevel_1.default.getLogger(`apollo-gateway`);\n            if (this.config.debug === true) {\n                loglevelLogger.setLevel(loglevelLogger.levels.DEBUG);\n            }\n            else {\n                loglevelLogger.setLevel(loglevelLogger.levels.WARN);\n            }\n            this.logger = loglevelLogger;\n        }\n        if (isLocalConfig(this.config)) {\n            this.schema = this.createSchema(this.config.localServiceList);\n        }\n        this.initializeQueryPlanStore();\n        this.updateServiceDefinitions = this.loadServiceDefinitions;\n        if (config) {\n            this.updateServiceDefinitions =\n                config.experimental_updateServiceDefinitions ||\n                    this.updateServiceDefinitions;\n            this.experimental_didResolveQueryPlan =\n                config.experimental_didResolveQueryPlan;\n            this.experimental_didFailComposition =\n                config.experimental_didFailComposition;\n            this.experimental_didUpdateComposition =\n                config.experimental_didUpdateComposition;\n            this.experimental_approximateQueryPlanStoreMiB =\n                config.experimental_approximateQueryPlanStoreMiB;\n            if (isManagedConfig(config) &&\n                config.experimental_pollInterval &&\n                config.experimental_pollInterval < 10000) {\n                this.experimental_pollInterval = 10000;\n                this.logger.warn('Polling Apollo services at a frequency of less than once per 10 seconds (10000) is disallowed. Instead, the minimum allowed pollInterval of 10000 will be used. Please reconfigure your experimental_pollInterval accordingly. If this is problematic for your team, please contact support.');\n            }\n            else {\n                this.experimental_pollInterval = config.experimental_pollInterval;\n            }\n            if (config.experimental_pollInterval && isRemoteConfig(config)) {\n                this.logger.warn('Polling running services is dangerous and not recommended in production. ' +\n                    'Polling should only be used against a registry. ' +\n                    'If you are polling running services, use with caution.');\n            }\n            if (config.fetcher) {\n                this.fetcher = config.fetcher;\n            }\n        }\n    }\n    async load(options) {\n        if (options && options.engine) {\n            if (!options.engine.graphVariant)\n                this.logger.warn('No graph variant provided. Defaulting to `current`.');\n            this.engineConfig = options.engine;\n        }\n        await this.updateComposition();\n        if ((isManagedConfig(this.config) || this.experimental_pollInterval) &&\n            !this.pollingTimer) {\n            this.pollServices();\n        }\n        const { graphId, graphVariant } = (options && options.engine) || {};\n        const mode = isManagedConfig(this.config) ? 'managed' : 'unmanaged';\n        this.logger.info(`Gateway successfully loaded schema.\\n\\t* Mode: ${mode}${graphId ? `\\n\\t* Service: ${graphId}@${graphVariant || 'current'}` : ''}`);\n        return {\n            schema: this.schema,\n            executor: this.executor,\n        };\n    }\n    async updateComposition() {\n        let result;\n        this.logger.debug('Checking service definitions...');\n        try {\n            result = await this.updateServiceDefinitions(this.config);\n        }\n        catch (e) {\n            this.logger.error(\"Error checking for changes to service definitions: \" +\n                (e && e.message || e));\n            throw e;\n        }\n        if (!result.serviceDefinitions ||\n            JSON.stringify(this.serviceDefinitions) ===\n                JSON.stringify(result.serviceDefinitions)) {\n            this.logger.debug('No change in service definitions since last check.');\n            return;\n        }\n        const previousSchema = this.schema;\n        const previousServiceDefinitions = this.serviceDefinitions;\n        const previousCompositionMetadata = this.compositionMetadata;\n        if (previousSchema) {\n            this.logger.info(\"New service definitions were found.\");\n        }\n        if (this.config.serviceHealthCheck) {\n            const serviceMap = result.serviceDefinitions.reduce((serviceMap, serviceDef) => {\n                serviceMap[serviceDef.name] = {\n                    url: serviceDef.url,\n                    dataSource: this.createDataSource(serviceDef),\n                };\n                return serviceMap;\n            }, Object.create(null));\n            try {\n                await this.serviceHealthCheck(serviceMap);\n            }\n            catch (e) {\n                this.logger.error('The gateway did not update its schema due to failed service health checks.  ' +\n                    'The gateway will continue to operate with the previous schema and reattempt updates.' + e);\n                throw e;\n            }\n        }\n        this.compositionMetadata = result.compositionMetadata;\n        this.serviceDefinitions = result.serviceDefinitions;\n        if (this.queryPlanStore)\n            this.queryPlanStore.flush();\n        this.schema = this.createSchema(result.serviceDefinitions);\n        try {\n            this.onSchemaChangeListeners.forEach(listener => listener(this.schema));\n        }\n        catch (e) {\n            this.logger.error(\"An error was thrown from an 'onSchemaChange' listener. \" +\n                \"The schema will still update: \" + (e && e.message || e));\n        }\n        if (this.experimental_didUpdateComposition) {\n            this.experimental_didUpdateComposition({\n                serviceDefinitions: result.serviceDefinitions,\n                schema: this.schema,\n                ...(this.compositionMetadata && {\n                    compositionMetadata: this.compositionMetadata,\n                }),\n            }, previousServiceDefinitions &&\n                previousSchema && {\n                serviceDefinitions: previousServiceDefinitions,\n                schema: previousSchema,\n                ...(previousCompositionMetadata && {\n                    compositionMetadata: previousCompositionMetadata,\n                }),\n            });\n        }\n    }\n    serviceHealthCheck(serviceMap = this.serviceMap) {\n        return Promise.all(Object.entries(serviceMap).map(([name, { dataSource }]) => dataSource\n            .process({ request: { query: exports.HEALTH_CHECK_QUERY }, context: {} })\n            .then(response => ({ name, response }))));\n    }\n    createSchema(serviceList) {\n        this.logger.debug(`Composing schema from service list: \\n${serviceList\n            .map(({ name, url }) => `  ${url || 'local'}: ${name}`)\n            .join('\\n')}`);\n        const { schema, errors } = federation_1.composeAndValidate(serviceList);\n        if (errors && errors.length > 0) {\n            if (this.experimental_didFailComposition) {\n                this.experimental_didFailComposition({\n                    errors,\n                    serviceList,\n                    ...(this.compositionMetadata && {\n                        compositionMetadata: this.compositionMetadata,\n                    }),\n                });\n            }\n            throw new apollo_graphql_1.GraphQLSchemaValidationError(errors);\n        }\n        this.createServices(serviceList);\n        this.logger.debug('Schema loaded and ready for execution');\n        return wrapSchemaWithAliasResolver(schema);\n    }\n    onSchemaChange(callback) {\n        this.onSchemaChangeListeners.add(callback);\n        return () => {\n            this.onSchemaChangeListeners.delete(callback);\n        };\n    }\n    async pollServices() {\n        if (this.pollingTimer)\n            clearTimeout(this.pollingTimer);\n        await new Promise(res => {\n            var _a;\n            this.pollingTimer = setTimeout(() => res(), this.experimental_pollInterval || 10000);\n            (_a = this.pollingTimer) === null || _a === void 0 ? void 0 : _a.unref();\n        });\n        try {\n            await this.updateComposition();\n        }\n        catch (err) {\n            this.logger.error(err && err.message || err);\n        }\n        this.pollServices();\n    }\n    createAndCacheDataSource(serviceDef) {\n        if (this.serviceMap[serviceDef.name] &&\n            serviceDef.url === this.serviceMap[serviceDef.name].url)\n            return this.serviceMap[serviceDef.name].dataSource;\n        const dataSource = this.createDataSource(serviceDef);\n        this.serviceMap[serviceDef.name] = { url: serviceDef.url, dataSource };\n        return dataSource;\n    }\n    createDataSource(serviceDef) {\n        if (!serviceDef.url && !isLocalConfig(this.config)) {\n            this.logger.error(`Service definition for service ${serviceDef.name} is missing a url`);\n        }\n        return this.config.buildService\n            ? this.config.buildService(serviceDef)\n            : new RemoteGraphQLDataSource_1.RemoteGraphQLDataSource({\n                url: serviceDef.url,\n            });\n    }\n    createServices(services) {\n        for (const serviceDef of services) {\n            this.createAndCacheDataSource(serviceDef);\n        }\n    }\n    async loadServiceDefinitions(config) {\n        const getManagedConfig = (engineConfig) => {\n            return loadServicesFromStorage_1.getServiceDefinitionsFromStorage({\n                graphId: engineConfig.graphId,\n                apiKeyHash: engineConfig.apiKeyHash,\n                graphVariant: engineConfig.graphVariant,\n                federationVersion: config.federationVersion || 1,\n                fetcher: this.fetcher,\n            });\n        };\n        if (isLocalConfig(config) || isRemoteConfig(config)) {\n            if (this.engineConfig && !this.warnedStates.remoteWithLocalConfig) {\n                this.warnedStates.remoteWithLocalConfig = true;\n                getManagedConfig(this.engineConfig).then(() => {\n                    this.logger.warn(\"A local gateway service list is overriding an Apollo Graph \" +\n                        \"Manager managed configuration.  To use the managed \" +\n                        \"configuration, do not specify a service list locally.\");\n                }).catch(() => { });\n            }\n        }\n        if (isLocalConfig(config)) {\n            return { isNewSchema: false };\n        }\n        if (isRemoteConfig(config)) {\n            const serviceList = config.serviceList.map(serviceDefinition => ({\n                ...serviceDefinition,\n                dataSource: this.createAndCacheDataSource(serviceDefinition),\n            }));\n            return loadServicesFromRemoteEndpoint_1.getServiceDefinitionsFromRemoteEndpoint({\n                serviceList,\n                ...(config.introspectionHeaders\n                    ? { headers: config.introspectionHeaders }\n                    : {}),\n                serviceSdlCache: this.serviceSdlCache,\n            });\n        }\n        if (!this.engineConfig) {\n            throw new Error('When `serviceList` is not set, an Apollo Engine configuration must be provided. See https://www.apollographql.com/docs/apollo-server/federation/managed-federation/ for more information.');\n        }\n        return getManagedConfig(this.engineConfig);\n    }\n    validateIncomingRequest(requestContext, operationContext) {\n        const variableDefinitions = operationContext.operation\n            .variableDefinitions;\n        if (!variableDefinitions)\n            return [];\n        const { errors } = values_1.getVariableValues(operationContext.schema, variableDefinitions, requestContext.request.variables);\n        return errors || [];\n    }\n    initializeQueryPlanStore() {\n        this.queryPlanStore = new apollo_server_caching_1.InMemoryLRUCache({\n            maxSize: Math.pow(2, 20) *\n                (this.experimental_approximateQueryPlanStoreMiB || 30),\n            sizeCalculator: approximateObjectSize,\n        });\n    }\n    async stop() {\n        if (this.pollingTimer) {\n            clearTimeout(this.pollingTimer);\n            this.pollingTimer = undefined;\n        }\n    }\n}\nexports.ApolloGateway = ApolloGateway;\nfunction approximateObjectSize(obj) {\n    return Buffer.byteLength(JSON.stringify(obj), 'utf8');\n}\nfunction wrapSchemaWithAliasResolver(schema) {\n    const typeMap = schema.getTypeMap();\n    Object.keys(typeMap).forEach(typeName => {\n        const type = typeMap[typeName];\n        if (graphql_1.isObjectType(type) && !graphql_1.isIntrospectionType(type)) {\n            const fields = type.getFields();\n            Object.keys(fields).forEach(fieldName => {\n                const field = fields[fieldName];\n                field.resolve = executeQueryPlan_1.defaultFieldResolverWithAliasSupport;\n            });\n        }\n    });\n    return schema;\n}\n__exportStar(require(\"./datasources\"), exports);\n"]}