@foal/core
Advanced tools
Comparing version 0.6.0-beta.5 to 0.6.0-beta.6
@@ -12,7 +12,6 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
// 3p | ||
const Ajv = require("ajv"); | ||
// FoalTS | ||
const common_1 = require("../../common"); | ||
const core_1 = require("../../core"); | ||
const ajv = new Ajv({ removeAdditional: true }); | ||
const utils_1 = require("../utils"); | ||
function strategy(name, authenticatorClass, schema) { | ||
@@ -24,3 +23,3 @@ return { name, authenticatorClass, schema }; | ||
logout(ctx) { | ||
delete ctx.request.session.authentication; | ||
utils_1.logOut(ctx); | ||
if (this.redirect && this.redirect.logout) { | ||
@@ -37,2 +36,3 @@ return new core_1.HttpResponseRedirect(this.redirect.logout); | ||
} | ||
const ajv = common_1.getAjvInstance(); | ||
const isValid = ajv.validate(strategy.schema, ctx.request.body); | ||
@@ -48,3 +48,3 @@ if (!isValid) { | ||
} | ||
ctx.request.session.authentication = Object.assign({}, ctx.request.session.authentication, { userId: user.id }); | ||
utils_1.logIn(ctx, user); | ||
const redirectPath = this.redirect && this.redirect.success; | ||
@@ -51,0 +51,0 @@ return redirectPath ? new core_1.HttpResponseRedirect(redirectPath) : new core_1.HttpResponseNoContent(); |
@@ -1,3 +0,3 @@ | ||
export { EmailAuthenticator } from './email-authenticator.service'; | ||
export { EmailAuthenticator, EmailUser } from './email-authenticator.service'; | ||
export { emailSchema } from './email.schema'; | ||
export { parsePassword } from './parse-password.parser'; |
export * from './authentication'; | ||
export * from './authorization'; | ||
export * from './entities'; | ||
export * from './utils'; |
@@ -9,1 +9,2 @@ "use strict"; | ||
__export(require("./entities")); | ||
__export(require("./utils")); |
@@ -1,2 +0,2 @@ | ||
export { Log } from './log.hook'; | ||
export { Log, LogOptions } from './log.hook'; | ||
export { ValidateBody } from './validate-body.hook'; | ||
@@ -3,0 +3,0 @@ export { ValidateHeaders } from './validate-headers.hook'; |
import { HookDecorator } from '../../core'; | ||
export declare function Log(message: string, logFn?: { | ||
(message?: any, ...optionalParams: any[]): void; | ||
(message?: any, ...optionalParams: any[]): void; | ||
}): HookDecorator; | ||
export interface LogOptions { | ||
body?: boolean; | ||
params?: boolean; | ||
headers?: string[] | boolean; | ||
query?: boolean; | ||
logFn?: typeof console.log; | ||
} | ||
/** | ||
* Logs a message with optional information on the HTTP request. | ||
* | ||
* @param message The message to print. | ||
* @param options Options to specify which information on the HTTP request should be printed. | ||
*/ | ||
export declare function Log(message: string, options?: LogOptions): HookDecorator; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const core_1 = require("../../core"); | ||
function Log(message, logFn = console.log) { | ||
return core_1.Hook(() => logFn(message)); | ||
/** | ||
* Logs a message with optional information on the HTTP request. | ||
* | ||
* @param message The message to print. | ||
* @param options Options to specify which information on the HTTP request should be printed. | ||
*/ | ||
function Log(message, options = {}) { | ||
const logFn = options.logFn || console.log; | ||
return core_1.Hook((ctx) => { | ||
logFn(message); | ||
if (options.body) { | ||
logFn('Body: ', ctx.request.body); | ||
} | ||
if (options.params) { | ||
logFn('Params: ', ctx.request.params); | ||
} | ||
if (options.query) { | ||
logFn('Query: ', ctx.request.query); | ||
} | ||
if (options.headers === true) { | ||
logFn('Headers: ', ctx.request.headers); | ||
} | ||
else if (Array.isArray(options.headers)) { | ||
options.headers.forEach(header => logFn(`${header}: `, ctx.request.headers[header])); | ||
} | ||
}); | ||
} | ||
exports.Log = Log; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const core_1 = require("../../core"); | ||
const get_ajv_instance_1 = require("../utils/get-ajv-instance"); | ||
const utils_1 = require("../utils"); | ||
/** | ||
@@ -11,3 +11,3 @@ * Hook to validate the body of the request. | ||
function ValidateBody(schema) { | ||
const ajv = get_ajv_instance_1.getAjvInstance(); | ||
const ajv = utils_1.getAjvInstance(); | ||
const isValid = ajv.compile(schema); | ||
@@ -14,0 +14,0 @@ return core_1.Hook(ctx => { |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const core_1 = require("../../core"); | ||
const get_ajv_instance_1 = require("../utils/get-ajv-instance"); | ||
const utils_1 = require("../utils"); | ||
/** | ||
@@ -11,3 +11,3 @@ * Hook to validate the headers of the request. | ||
function ValidateHeaders(schema) { | ||
const ajv = get_ajv_instance_1.getAjvInstance(); | ||
const ajv = utils_1.getAjvInstance(); | ||
const isValid = ajv.compile(schema); | ||
@@ -14,0 +14,0 @@ return core_1.Hook(ctx => { |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const core_1 = require("../../core"); | ||
const get_ajv_instance_1 = require("../utils/get-ajv-instance"); | ||
const utils_1 = require("../utils"); | ||
/** | ||
@@ -11,3 +11,3 @@ * Hook to validate the params of the request. | ||
function ValidateParams(schema) { | ||
const ajv = get_ajv_instance_1.getAjvInstance(); | ||
const ajv = utils_1.getAjvInstance(); | ||
const isValid = ajv.compile(schema); | ||
@@ -14,0 +14,0 @@ return core_1.Hook(ctx => { |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const core_1 = require("../../core"); | ||
const get_ajv_instance_1 = require("../utils/get-ajv-instance"); | ||
const utils_1 = require("../utils"); | ||
/** | ||
@@ -11,3 +11,3 @@ * Hook to validate the query of the request. | ||
function ValidateQuery(schema) { | ||
const ajv = get_ajv_instance_1.getAjvInstance(); | ||
const ajv = utils_1.getAjvInstance(); | ||
const isValid = ajv.compile(schema); | ||
@@ -14,0 +14,0 @@ return core_1.Hook(ctx => { |
export { IResourceCollection, CollectionParams } from './resource-collection.interface'; | ||
export { EntityResourceCollection, middleware, Middleware } from './entity-resource-collection.service'; | ||
export { EntityResourceCollection, middleware, Middleware, RelationLoader } from './entity-resource-collection.service'; |
export { controller } from './controller.util'; | ||
export { escapeProp } from './escape-prop'; | ||
export { escape } from './escape'; | ||
export { getAjvInstance } from './get-ajv-instance'; | ||
export { render } from './render.util'; | ||
export { validate } from './validate.util'; |
@@ -9,2 +9,4 @@ "use strict"; | ||
exports.escape = escape_1.escape; | ||
var get_ajv_instance_1 = require("./get-ajv-instance"); | ||
exports.getAjvInstance = get_ajv_instance_1.getAjvInstance; | ||
var render_util_1 = require("./render.util"); | ||
@@ -11,0 +13,0 @@ exports.render = render_util_1.render; |
@@ -0,10 +1,34 @@ | ||
export interface CookieOptions { | ||
domain?: string; | ||
expires?: Date; | ||
httpOnly?: boolean; | ||
maxAge?: number; | ||
path?: string; | ||
secure?: boolean; | ||
sameSite?: 'strict' | 'lax'; | ||
} | ||
export declare abstract class HttpResponse { | ||
content?: any; | ||
body?: any; | ||
readonly isHttpResponse: boolean; | ||
headers: { | ||
abstract statusCode: number; | ||
abstract statusMessage: string; | ||
private cookies; | ||
private headers; | ||
constructor(body?: any); | ||
setHeader(name: string, value: string): void; | ||
getHeader(name: string): string | undefined; | ||
getHeaders(): { | ||
[key: string]: string; | ||
}; | ||
abstract statusCode: number; | ||
abstract statusMessage: string; | ||
constructor(content?: any); | ||
setCookie(name: string, value: string, options?: CookieOptions): void; | ||
getCookie(name: string): { | ||
value: string | undefined; | ||
options: CookieOptions; | ||
}; | ||
getCookies(): { | ||
[key: string]: { | ||
value: string | undefined; | ||
options: CookieOptions; | ||
}; | ||
}; | ||
} | ||
@@ -14,3 +38,3 @@ export declare function isHttpResponse(obj: any): obj is HttpResponse; | ||
readonly isHttpResponseSuccess: boolean; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -22,3 +46,3 @@ export declare function isHttpResponseSuccess(obj: any): obj is HttpResponseSuccess; | ||
statusMessage: string; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -30,3 +54,3 @@ export declare function isHttpResponseOK(obj: any): obj is HttpResponseOK; | ||
statusMessage: string; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -43,3 +67,3 @@ export declare function isHttpResponseCreated(obj: any): obj is HttpResponseCreated; | ||
readonly isHttpResponseRedirection: boolean; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -52,3 +76,3 @@ export declare function isHttpResponseRedirection(obj: any): obj is HttpResponseRedirection; | ||
statusMessage: string; | ||
constructor(path: string, content?: any); | ||
constructor(path: string, body?: any); | ||
} | ||
@@ -58,3 +82,3 @@ export declare function isHttpResponseRedirect(obj: any): obj is HttpResponseRedirect; | ||
readonly isHttpResponseClientError: boolean; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -66,3 +90,3 @@ export declare function isHttpResponseClientError(obj: any): obj is HttpResponseClientError; | ||
statusMessage: string; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -74,6 +98,3 @@ export declare function isHttpResponseBadRequest(obj: any): obj is HttpResponseBadRequest; | ||
statusMessage: string; | ||
headers: { | ||
'WWW-Authenticate': string; | ||
}; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -85,3 +106,3 @@ export declare function isHttpResponseUnauthorized(obj: any): obj is HttpResponseUnauthorized; | ||
statusMessage: string; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -93,3 +114,3 @@ export declare function isHttpResponseForbidden(obj: any): obj is HttpResponseForbidden; | ||
statusMessage: string; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -101,3 +122,3 @@ export declare function isHttpResponseNotFound(obj: any): obj is HttpResponseNotFound; | ||
statusMessage: string; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -109,3 +130,3 @@ export declare function isHttpResponseMethodNotAllowed(obj: any): obj is HttpResponseMethodNotAllowed; | ||
statusMessage: string; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -115,3 +136,3 @@ export declare function isHttpResponseConflict(obj: any): obj is HttpResponseConflict; | ||
readonly isHttpResponseServerError: boolean; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -123,3 +144,3 @@ export declare function isHttpResponseServerError(obj: any): obj is HttpResponseServerError; | ||
statusMessage: string; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
@@ -131,4 +152,4 @@ export declare function isHttpResponseInternalServerError(obj: any): obj is HttpResponseInternalServerError; | ||
statusMessage: string; | ||
constructor(content?: any); | ||
constructor(body?: any); | ||
} | ||
export declare function isHttpResponseNotImplemented(obj: any): obj is HttpResponseNotImplemented; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
class HttpResponse { | ||
constructor(content) { | ||
this.content = content; | ||
constructor(body) { | ||
this.body = body; | ||
this.isHttpResponse = true; | ||
this.cookies = {}; | ||
this.headers = {}; | ||
} | ||
setHeader(name, value) { | ||
this.headers[name] = value; | ||
} | ||
getHeader(name) { | ||
return this.headers[name]; | ||
} | ||
getHeaders() { | ||
return Object.assign({}, this.headers); | ||
} | ||
setCookie(name, value, options = {}) { | ||
this.cookies[name] = { value, options }; | ||
} | ||
getCookie(name) { | ||
if (!this.cookies[name]) { | ||
return { value: undefined, options: {} }; | ||
} | ||
const { value, options } = this.cookies[name]; | ||
return { value, options: Object.assign({}, options) }; | ||
} | ||
getCookies() { | ||
const cookies = {}; | ||
// tslint:disable-next-line:forin | ||
for (const cookieName in this.cookies) { | ||
const { value, options } = this.cookies[cookieName]; | ||
cookies[cookieName] = { value, options: Object.assign({}, options) }; | ||
} | ||
return cookies; | ||
} | ||
} | ||
@@ -18,4 +47,4 @@ exports.HttpResponse = HttpResponse; | ||
class HttpResponseSuccess extends HttpResponse { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseSuccess = true; | ||
@@ -31,4 +60,4 @@ } | ||
class HttpResponseOK extends HttpResponseSuccess { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseOK = true; | ||
@@ -46,4 +75,4 @@ this.statusCode = 200; | ||
class HttpResponseCreated extends HttpResponseSuccess { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseCreated = true; | ||
@@ -76,4 +105,4 @@ this.statusCode = 201; | ||
class HttpResponseRedirection extends HttpResponse { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseRedirection = true; | ||
@@ -89,4 +118,4 @@ } | ||
class HttpResponseRedirect extends HttpResponseRedirection { | ||
constructor(path, content) { | ||
super(content); | ||
constructor(path, body) { | ||
super(body); | ||
this.path = path; | ||
@@ -106,4 +135,4 @@ this.isHttpResponseRedirect = true; | ||
class HttpResponseClientError extends HttpResponse { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseClientError = true; | ||
@@ -119,4 +148,4 @@ } | ||
class HttpResponseBadRequest extends HttpResponseClientError { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseBadRequest = true; | ||
@@ -134,10 +163,8 @@ this.statusCode = 400; | ||
class HttpResponseUnauthorized extends HttpResponseClientError { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseUnauthorized = true; | ||
this.statusCode = 401; | ||
this.statusMessage = 'UNAUTHORIZED'; | ||
this.headers = { | ||
'WWW-Authenticate': '' | ||
}; | ||
this.setHeader('WWW-Authenticate', ''); | ||
} | ||
@@ -152,4 +179,4 @@ } | ||
class HttpResponseForbidden extends HttpResponseClientError { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseForbidden = true; | ||
@@ -167,4 +194,4 @@ this.statusCode = 403; | ||
class HttpResponseNotFound extends HttpResponseClientError { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseNotFound = true; | ||
@@ -182,4 +209,4 @@ this.statusCode = 404; | ||
class HttpResponseMethodNotAllowed extends HttpResponseClientError { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseMethodNotAllowed = true; | ||
@@ -197,4 +224,4 @@ this.statusCode = 405; | ||
class HttpResponseConflict extends HttpResponseClientError { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseConflict = true; | ||
@@ -213,4 +240,4 @@ this.statusCode = 409; | ||
class HttpResponseServerError extends HttpResponse { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseServerError = true; | ||
@@ -226,4 +253,4 @@ } | ||
class HttpResponseInternalServerError extends HttpResponseServerError { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseInternalServerError = true; | ||
@@ -241,4 +268,4 @@ this.statusCode = 500; | ||
class HttpResponseNotImplemented extends HttpResponseServerError { | ||
constructor(content) { | ||
super(content); | ||
constructor(body) { | ||
super(body); | ||
this.isHttpResponseNotImplemented = true; | ||
@@ -245,0 +272,0 @@ this.statusCode = 501; |
@@ -21,4 +21,9 @@ "use strict"; | ||
} | ||
res.set(response.headers); | ||
res.status(response.statusCode); | ||
res.set(response.getHeaders()); | ||
const cookies = response.getCookies(); | ||
// tslint:disable-next-line:forin | ||
for (const cookieName in cookies) { | ||
res.cookie(cookieName, cookies[cookieName].value, cookies[cookieName].options); | ||
} | ||
if (core_1.isHttpResponseRedirect(response)) { | ||
@@ -28,6 +33,6 @@ res.redirect(response.path); | ||
} | ||
if (typeof response.content === 'number') { | ||
response.content = response.content.toString(); | ||
if (typeof response.body === 'number') { | ||
response.body = response.body.toString(); | ||
} | ||
res.send(response.content); | ||
res.send(response.body); | ||
} | ||
@@ -34,0 +39,0 @@ catch (err) { |
{ | ||
"name": "@foal/core", | ||
"version": "0.6.0-beta.5", | ||
"version": "0.6.0-beta.6", | ||
"description": "High level web framework to create enterprise-grade Node.JS applications.", | ||
@@ -5,0 +5,0 @@ "main": "./lib/index.js", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
100731
129
2394