JavaScript middleware - NewProcessRequest spec is null

I need to access my spec/config_data in the JavaScript middleware. I’m using the following:
var authenticate = new TykJS.TykMiddleware.NewMiddleware({});
authenticate.NewProcessRequest(function(request, session, spec) {

}

This is according to documentation at

https://tyk.io/docs/customise-tyk/plugins/javascript-middleware/middleware-scripting-guide/

However, the spec object that is supposed to be sent is always undefined. I’ve verified its loaded in the API definition correctly and can view the data in the dashboard. What gives? The documentation says I should expect that data in the spec…

Hi, can you share your API definition?

{
“api_model”: {},
“api_definition”: {
“name”: “StatusService”,
“slug”: “StatusService”,
“use_keyless”: false,
“use_oauth2”: false,
“use_openid”: false,
“openid_options”: {
“providers”: [],
“segregate_by_client”: false
},
“oauth_meta”: {
“allowed_access_types”: [],
“allowed_authorize_types”: [],
“auth_login_redirect”: “”
},
“auth”: {
“use_param”: false,
“param_name”: “”,
“use_cookie”: false,
“cookie_name”: “”,
“auth_header_name”: “Authorization”,
“use_certificate”: false
},
“config_data”: {
“domain_mapping_url”: $domainMappingUrl,
“domain_mapping_key”: $domainMappingApiKey,
“authentication_url”: $authorizationUrl,
“authentication_key”: $authorizationApiKey
},
“use_basic_auth”: false,
“enable_jwt”: false,
“use_standard_auth”: true,
“enable_coprocess_auth”: false,
“jwt_signing_method”: “”,
“jwt_source”: “”,
“jwt_identity_base_field”: “”,
“jwt_client_base_field”: “”,
“jwt_policy_field_name”: “”,
“notifications”: {
“shared_secret”: “”,
“oauth_on_keychange_url”: “”
},
“enable_signature_checking”: false,
“hmac_allowed_clock_skew”: -1,
“base_identity_provided_by”: “”,
“definition”: {
“location”: “header”,
“key”: “x-api-version”
},
“version_data”: {
“not_versioned”: true,
“versions”: {
“Default”: {
“name”: “Default”,
“expires”: “”,
“paths”: {
“ignored”: [],
“white_list”: [],
“black_list”: []
},
“use_extended_paths”: true,
“extended_paths”: {},
“global_headers”: {
“Authorization”: $statusAuthHeader,
“nextiva-context-authenticatedByApiGateway”: “true”
},
“global_headers_remove”: [
“Authorization”
],
“global_size_limit”: 0,
“override_target”: “”
}
}
},
“uptime_tests”: {
“check_list”: [
$statusUptimeChecklist
],
“config”: {
“expire_utime_after”: 0,
“service_discovery”: {
“use_discovery_service”: false,
“query_endpoint”: “”,
“use_nested_query”: false,
“parent_data_path”: “”,
“data_path”: “”,
“port_data_path”: “”,
“target_path”: “”,
“use_target_list”: false,
“cache_timeout”: 60,
“endpoint_returns_list”: false
},
“recheck_wait”: 0
}
},
“proxy”: {
“preserve_host_header”: false,
“listen_path”: “/StatusService/”,
“target_url”: “”,
“strip_listen_path”: false,
“enable_load_balancing”: true,
“target_list”: [
$statusServers
],
“check_host_against_uptime_tests”: true,
“service_discovery”: {
“use_discovery_service”: false,
“query_endpoint”: “”,
“use_nested_query”: false,
“parent_data_path”: “”,
“data_path”: “hostname”,
“port_data_path”: “port”,
“target_path”: “/api-slug”,
“use_target_list”: false,
“cache_timeout”: 60,
“endpoint_returns_list”: false
}
},
“disable_rate_limit”: false,
“disable_quota”: false,
“custom_middleware”: {
“pre”: [],
“post”: [
{
“name”: “authenticate”,
“path”: “middleware/authenticate.js”,
“require_session”: false
}
],
“post_key_auth”: [],
“auth_check”: {
“name”: “”,
“path”: “”,
“require_session”: false
},
“response”: [],
“driver”: “”,
“id_extractor”: {
“extract_from”: “”,
“extract_with”: “”,
“extractor_config”: {}
}
},
“custom_middleware_bundle”: “”,
“cache_options”: {
“cache_timeout”: 60,
“enable_cache”: true,
“cache_all_safe_requests”: false,
“cache_response_codes”: [],
“enable_upstream_cache_control”: false
},
“session_lifetime”: 0,
“active”: true,
“auth_provider”: {
“name”: “”,
“storage_engine”: “”,
“meta”: {}
},
“session_provider”: {
“name”: “”,
“storage_engine”: “”,
“meta”: {}
},
“event_handlers”: {
“events”: {}
},
“enable_batch_request_support”: false,
“enable_ip_whitelisting”: false,
“allowed_ips”: [],
“dont_set_quota_on_create”: false,
“expire_analytics_after”: 0,
“response_processors”: [],
“CORS”: {
“enable”: false,
“allowed_origins”: [],
“allowed_methods”: [],
“allowed_headers”: [],
“exposed_headers”: [],
“allow_credentials”: false,
“max_age”: 24,
“options_passthrough”: false,
“debug”: false
},
“domain”: “”,
“do_not_track”: false,
“tags”: [],
“enable_context_vars”: false
},
“hook_references”: [],
“is_site”: false,
“sort_by”: 0
}

@matiasb - The API definition I correct I think. requires_session didn’t make a difference. I saw in the logs my middleware was indeed invoked, its just that the spec was undefined as mentioned.

Right, API definition looks ok, I’m trying to reproduce this