[ldapjs-client] Basic Typings (#36243)

* initialized ldapjs-client typings

* client is a Class, not a factory function

* removed JSDOC, fixed linting

* fix tsconfig and typescript version. lint should go green

* removing unnecessary generic

* unknown type is supported after TS 3.0

* enabling npm-naming and complying to it

* exporting interface in commonjs style, and minor cleanup
This commit is contained in:
Valerio Coltrè
2019-07-08 14:48:17 -07:00
committed by Daniel Rosenwasser
parent 9b1985e52f
commit eae899753b
4 changed files with 159 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
// Type definitions for ldapjs-client 0.1
// Project: https://github.com/zont/ldapjs-client#readme
// Definitions by: Valerio Coltrè <https://github.com/colthreepv>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 3.0
declare namespace LdapClient {
interface Change {
operation: 'add' | 'delete' | 'replace';
modification: {
[key: string]: any;
};
}
interface SearchOptions {
scope?: string;
filter?: string;
attributes?: string[];
sizeLimit?: number;
timeLimit?: number;
typesOnly?: boolean;
}
interface ClientOptions {
url: string;
tlsOptions?: object;
timeout?: number;
}
}
declare class LdapClient {
constructor(options: LdapClient.ClientOptions);
/**
* Adds an entry to the LDAP server.
*/
add(dn: string, entry: object): Promise<any>;
/**
* Performs a simple authentication against the server.
*/
bind(dn: string, password: string): Promise<any>;
/**
* Deletes an entry from the LDAP server.
*/
del(dn: string): Promise<any>;
/**
* Disconnect from the LDAP server and do not allow reconnection.
*
* If the client is instantiated with proper reconnection options, it's
* possible to initiate new requests after a call to unbind since the client
* will attempt to reconnect in order to fulfill the request.
*
* Calling destroy will prevent any further reconnection from occurring.
*/
destroy(): Promise<void>;
/**
* Performs an LDAP modify against the server.
*
* @param dn the DN of the entry to modify.
* @param change update to perform (can be [Change]).
*/
modify(dn: string, change: LdapClient.Change): Promise<any>;
/**
* Performs an LDAP modifyDN against the server.
*/
modifyDN(dn: string, newName: string): Promise<any>;
/**
* Performs an LDAP search against the server.
*
* Note that the defaults for options are a 'base' search.
*/
// tslint:disable-next-line: no-unnecessary-generics
search(base: string, options: LdapClient.SearchOptions): Promise<unknown[]>;
/**
* Unbinds this client from the LDAP server.
*
*/
unbind(): Promise<any>;
}
export = LdapClient;
@@ -0,0 +1,44 @@
import LdapJS = require('ldapjs-client');
const clientOptions: LdapJS.ClientOptions = {
url: 'ldap://anyserver:389',
};
const client = new LdapJS(clientOptions);
const dn = 'cn=foo, o=example';
interface LdapObject {
cn: string;
ou: string;
}
(async () => {
await client.add(dn, { cn: 'foo' });
await client.bind(dn, 'pazzvord');
await client.del(dn);
const change: LdapJS.Change = {
operation: 'add',
modification: {
pets: ['cat', 'dog'],
},
};
await client.modify(dn, change);
await client.modifyDN(dn, 'cn=baz, o=example');
const options: LdapJS.SearchOptions = {
filter: '(&(l=Seattle)(email=*@foo.com))',
scope: 'sub',
attributes: ['dn', 'sn', 'cn'],
};
const searchResult = await client.search(dn, options) as LdapObject[];
type resultType = typeof searchResult;
await client.unbind();
client.destroy();
})();
+24
View File
@@ -0,0 +1,24 @@
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictFunctionTypes": true,
"strictNullChecks": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"ldapjs-client-tests.ts"
]
}
+3
View File
@@ -0,0 +1,3 @@
{
"extends": "dtslint/dt.json"
}