diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..f05d7a8 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,61 @@ +import { Model, Page, TransactionOrKnex } from 'objection-2'; +import { AccessControl as AC3 } from 'role-acl-3'; +import { AccessControl as AC4 } from 'role-acl-4'; + +declare module 'objection-authorize' { + class AuthQueryBuilder { + ArrayQueryBuilderType: AuthQueryBuilder; + SingleQueryBuilderType: AuthQueryBuilder; + NumberQueryBuilderType: AuthQueryBuilder; + PageQueryBuilderType: AuthQueryBuilder>; + + insert(body: T): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + + insertAndFetch(body: T): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + + patch(body: T): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + + patchAndFetch(body: T): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + + patchAndFetchById(id: number, body: T): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + + update(body: T): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + + updateAndFetch(body: T): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + + updateAndFetchById(id: number, body: T): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + + delete(body: T): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + + deleteById(id: number, body: T): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + + action(): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + + first(): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + + authorize(user: T, resource: object, optOverride: object): this['SingleQueryBuilderType'] & M['QueryBuilderType']['SingleQueryBuilderType']; + } + + interface AuthInstance { + QueryBuilderType: AuthQueryBuilder; + + $query(trx: TransactionOrKnex): AuthQueryBuilder['SingleQueryBuilderType'] & this['QueryBuilderType']['SingleQueryBuilderType']; + $relatedQuery(relation: string, trx: TransactionOrKnex): AuthQueryBuilder['SingleQueryBuilderType'] & this['QueryBuilderType']['SingleQueryBuilderType']; + } + + interface AuthStatic { + QueryBuilder: typeof AuthQueryBuilder; + + new(): AuthInstance & T['prototype']; + } + + export default function authorize(acl: typeof AC3 | typeof AC4, library: string, opts?: { + defaultRole?: string + unauthenticatedErrorCode?: number + unauthorizedErrorCode?: number + userFromResult?: boolean + contextKey?: string + roleFromUser?: (user: Model) => string + resourceAugments?: { true: boolean; false: boolean; undefined: undefined } + }): (model: T) => AuthStatic & Omit & T['prototype']; +} \ No newline at end of file diff --git a/package.json b/package.json index 26fb809..d07d5e3 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,8 @@ "prettier-standard": "^16.1.0", "role-acl-3": "npm:role-acl@<4.0.0", "role-acl-4": "npm:role-acl@>=4.3.2", - "sqlite3": "^4.1.1" + "sqlite3": "^4.1.1", + "typescript": "^3.8.3" }, "peerDependencies": { "objection": "^1 || ^2"