{
	"id": "/CONFIG",
	"type": "object",
	"properties": {
		"public_port": {
			"type": "integer",
			"required": true
		},
		"private_host": {
			"type": "string",
			"required": true
		},
		"private_port": {
			"type": "integer",
			"required": true
		},
		"internal_port": {
			"type": "integer",
			"required": false
		},
		"accessToken": {
			"type": "object",
			"properties": {
				"cipherKey": {
					"type": "string",
					"required": true
				},
				"signKey": {
					"type": "string",
					"required": true
				},
				"expiration": {
					"type": "integer",
					"required": true
				}
			},
			"required": true
		},
		"refreshToken": {
			"type": "object",
			"properties": {
				"cipherKey": {
					"type": "string",
					"required": true
				},
				"signKey": {
					"type": "string",
					"required": true
				},
				"expiration": {
					"type": "integer",
					"required": true
				}
			},
			"required": true
		},
		"management": {
			"type": "object",
			"properties": {
				"clientId": {
					"type": "string",
					"required": true
				},
				"clientSecret": {
					"type": "string",
					"required": true
				}
			},
			"required": true
		},
		"db": {
			"conn": {
				"type": "string",
				"format": "uri",
				"required": true
			}
		},
		"passThroughEndpoint": {
			"type": "object",
			"properties": {
				"path": {
					"type": "string",
					"required": true
				},
				"username": {
					"type": "string",
					"required": true
				},
				"email": {
					"type": "string",
					"required": false
				},
				"password": {
					"type": "string",
					"required": true
				}
			},
			"required": true
		},
		"pinValidationEndpoints": {
			"type": "array",
			"items": {
				"type": "object",
				"properties": {
					"path": {
						"type": "string",
						"required": true
					},
					"method": {
						"type": "string",
						"enum": [
							"post",
							"get",
							"delete",
							"put"
						],
						"required": true
					},
					"fields": {
						"type": "object",
						"properties": {
							"countryISO": {
								"type": "string",
								"required": true
							},
							"phoneNumber": {
								"type": "string",
								"required": true
							}
						},
						"required": true
					}
				},
				"required": true
			}
		},
		"salesforce": {
			"type": "object",
			"properties": {
				"scope": {
					"type": "array",
					"items": {
						"type": "string"
					},
					"required": true
				},
				"clientId": {
					"type": "string",
					"required": true
				},
				"clientSecret": {
					"type": "string",
					"required": true
				},
				"callbackURL": {
					"type": "string",
					"format": "uri",
					"required": true
				},
				"authUrl": {
					"type": "string",
					"format": "uri",
					"required": true
				},
				"tokenUrl": {
					"type": "string",
					"format": "uri",
					"required": true
				},
				"renewWhenLessThan": {
					"type": "integer",
					"required": true
				},
				"expiration": {
					"type": "integer",
					"required": true
				},
				"replaceDefaultAvatar": {
					"type": "object",
					"properties": {
						"defaultAvatar": {
							"type": "string",
							"required": true
						},
						"replacementAvatar": {
							"type": "string",
							"required": true
						}
					}
				},
				"required": true
			},
			"required": true
		},
		"authHeaderKey": {
			"type": "string",
			"required": true
		},
		"aws": {
			"type": "object",
			"properties": {
				"accessKeyId": {
					"type": "string",
					"required": true
				},
				"secretAccessKey": {
					"type": "string",
					"required": true
				},
				"region": {
					"type": "string",
					"required": true
				},
				"buckets": {
					"type": "object",
					"properties": {
						"avatars": {
							"type": "string",
							"required": true
						}
					},
					"required": true
				}
			},
			"required": true
		},
		"redis": {
			"type": "object",
			"properties": {
				"host": {
					"type": "string",
					"format": "ip-address",
					"required": true
				}
			},
			"required": true
		},
		"redisKeys": {
			"type": "object",
			"properties": {
				"user_phone_verify": {
					"type": "object",
					"properties": {
						"key": {
							"type": "string",
							"required": true
						},
						"expireInSec": {
							"type": "integer",
							"required": true
						}
					},
					"required": true
				}
			},
			"required": true
		},
		"usePinVerification": {
			"type": "boolean",
			"required": true
		},
		"userPIN": {
			"type": "object",
			"properties": {
				"size": {
					"type": "integer",
					"required": true
				},
				"attempts": {
					"type": "integer",
					"required": true
				}
			},
			"required": true
		},
		"useEmailVerification": {
			"type": "boolean",
			"required": true
		},
		"emailVerification": {
			"type": "object",
			"properties": {
				"subject": {
					"type": "string",
					"required": true
				},
				"text": {
					"type": "string",
					"required": true
				}
			},
			"required": true
		},
		"services": {
			"type": "object",
			"properties": {
				"notifications": {
					"type": "string",
					"format": "uri",
					"required": true
				}
			},
			"required": true
		},
		"version": {
			"type": "object",
			"properties": {
				"header": {
					"type": "string",
					"required": true
				},
				"platforms": {
					"type": "object"
				}
			},
			"required": true
		},
		"allowedDomains": {
			"type": "array",
			"items": {
				"type": "object"
			}
		},
		"recoverMessage": {
			"type": "object",
			"properties": {
				"subject": {
					"type": "string",
					"required": true
				},
				"body": {
					"type": "string",
					"required": true
				}
			},
			"required": true
		}
	},
	"additionalProperties": false,
	"directProxyUrls": {
		"type": "array",
		"items": {
			"type": "string"
		}
	}
}
